]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
Merge remote-tracking branch 'mvebu/for-next'
authorThierry Reding <treding@nvidia.com>
Thu, 24 Oct 2013 13:01:46 +0000 (15:01 +0200)
committerThierry Reding <treding@nvidia.com>
Thu, 24 Oct 2013 13:01:46 +0000 (15:01 +0200)
Conflicts:
arch/arm/mach-kirkwood/board-dt.c

20 files changed:
arch/arm/boot/dts/armada-370-mirabox.dts
arch/arm/boot/dts/armada-370-netgear-rn102.dts
arch/arm/boot/dts/armada-xp-openblocks-ax3-4.dts
arch/arm/boot/dts/dove-cubox.dts
arch/arm/boot/dts/kirkwood-dns320.dts
arch/arm/boot/dts/kirkwood-dns325.dts
arch/arm/boot/dts/kirkwood-dockstar.dts
arch/arm/boot/dts/kirkwood-goflexnet.dts
arch/arm/boot/dts/kirkwood-ib62x0.dts
arch/arm/boot/dts/kirkwood-iconnect.dts
arch/arm/boot/dts/kirkwood-iomega_ix2_200.dts
arch/arm/boot/dts/kirkwood-lsxl.dtsi
arch/arm/boot/dts/kirkwood-netgear_readynas_duo_v2.dts
arch/arm/boot/dts/kirkwood-ns2lite.dts
arch/arm/boot/dts/kirkwood-sheevaplug-esata.dts
arch/arm/boot/dts/kirkwood-sheevaplug.dts
arch/arm/configs/mvebu_defconfig
arch/arm/mach-kirkwood/board-dt.c
arch/arm/plat-orion/time.c
drivers/pci/host/pci-mvebu.c

index 2471d9da767bfad77a4419c20d17407473e704fb..41457e5ff1a90936b08ef7eeec475e7d6cb3755c 100644 (file)
                                green_pwr_led {
                                        label = "mirabox:green:pwr";
                                        gpios = <&gpio1 31 1>;
-                                       linux,default-trigger = "heartbeat";
+                                       default-state = "keep";
                                };
 
                                blue_stat_led {
                                        label = "mirabox:blue:stat";
                                        gpios = <&gpio2 0 1>;
-                                       linux,default-trigger = "cpu0";
+                                       default-state = "off";
                                };
 
                                green_stat_led {
index 8ac2ac1f69cc0d6f50101c815fada7c9183ce9d8..df1a1e0e9236dc54e9b96b88b93aa86f85af8dac 100644 (file)
                blue_power_led {
                        label = "rn102:blue:pwr";
                        gpios = <&gpio1 25 1>;  /* GPIO 57 Active Low */
-                       linux,default-trigger = "heartbeat";
+                       default-state = "keep";
                };
 
                green_sata1_led {
index 5695afcc04bf1a7fa7fa13024acd8bb794464ed5..99bcf76e6953d3e0af3e72fe6372cdecdfbecb1f 100644 (file)
                                green_led {
                                        label = "green_led";
                                        gpios = <&gpio1 21 1>;
-                                       default-state = "off";
-                                       linux,default-trigger = "heartbeat";
+                                       default-state = "keep";
                                };
                        };
 
index 8349a248eceaf242f8a079e6c565af109ee69708..7a70f4ca502a1665fa21cb31360d2869cbd3617c 100644 (file)
@@ -23,7 +23,7 @@
                power {
                        label = "Power";
                        gpios = <&gpio0 18 1>;
-                       linux,default-trigger = "default-on";
+                       default-state = "keep";
                };
        };
 
index e112ca62d978e9ccdedfb37d06bec0b8fe036de8..ff13b9397c8a72b17fd772db76d06450aa62b754 100644 (file)
@@ -25,7 +25,7 @@
                blue-power {
                        label = "dns320:blue:power";
                        gpios = <&gpio0 26 1>; /* GPIO 26 Active Low */
-                       linux,default-trigger = "default-on";
+                       default-state = "keep";
                };
                blue-usb {
                        label = "dns320:blue:usb";
index 5119fb8a8eb6203c5743294246bdd62731da7523..f4330434b6fff84726ce4200e06d11c44ae005f9 100644 (file)
@@ -25,7 +25,7 @@
                white-power {
                        label = "dns325:white:power";
                        gpios = <&gpio0 26 1>; /* GPIO 26 Active Low */
-                       linux,default-trigger = "default-on";
+                       default-state = "keep";
                };
                white-usb {
                        label = "dns325:white:usb";
index 33ff368fbfa5696353353fc5151b4fefd7cc6198..a5f1e3942f57f5a047be1f6b98abdcdca3c886e0 100644 (file)
@@ -43,7 +43,7 @@
                health {
                        label = "status:green:health";
                        gpios = <&gpio1 14 1>;
-                       linux,default-trigger = "default-on";
+                       default-state = "keep";
                };
                fault {
                        label = "status:orange:fault";
index a43bebb251102fbbfcde84e58f1955ce52f5de5b..a9e98c9796545728628f0a22dd346510819a692b 100644 (file)
@@ -86,7 +86,7 @@
                health {
                        label = "status:green:health";
                        gpios = <&gpio1 14 1>;
-                       linux,default-trigger = "default-on";
+                       default-state = "keep";
                };
                fault {
                        label = "status:orange:fault";
index c5fb02f7ebc3e33107ac067d46a6394d6c21b27d..dbc90330c8736eb4a346db16d6196cbe35548334 100644 (file)
@@ -82,7 +82,7 @@
                green-os {
                        label = "ib62x0:green:os";
                        gpios = <&gpio0 25 0>;
-                       linux,default-trigger = "default-on";
+                       default-state = "keep";
                };
                red-os {
                        label = "ib62x0:red:os";
index 4a62b206f680b4c1261a404ce16ce26fb498f6c0..399fb0caf5ab3c7e61cac7b0a4e5e8e3810f2de7 100644 (file)
                led-level {
                        label = "led_level";
                        gpios = <&gpio1 9 0>;
-                       linux,default-trigger = "default-on";
+                       default-state = "on";
                };
                power-blue {
                        label = "power:blue";
                        gpios = <&gpio1 10 0>;
-                       linux,default-trigger = "timer";
+                       default-state = "keep";
                };
                power-red {
                        label = "power:red";
index d15395d671ededf4caf501518bb1e33ffba0cba8..b9de441919e29d785c38e6e7ae10e9695dcc89d8 100644 (file)
                power_led {
                        label = "status:white:power_led";
                        gpios = <&gpio0 16 0>;
-                       linux,default-trigger = "default-on";
+                       default-state = "keep";
                };
                rebuild_led {
                        label = "status:white:rebuild_led";
index 4e8f9e42c5929135e05109142bcec7100ed83d02..bc34a609a1952c46adc3e1f3c6ca39f53b48a6fa 100644 (file)
                led@4 {
                        label = "lsxl:blue:power";
                        gpios = <&gpio1 7 1>;
-                       linux,default-trigger = "default-on";
+                       default-state = "keep";
                };
 
                led@5 {
index e6a102cf424cd646d9e121acd2b821ea46bb81be..6b96e85e617e9854f85c393608eb98ec2a45faf3 100644 (file)
                power_led {
                        label = "status:blue:power_led";
                        gpios = <&gpio0 31 1>;   /* GPIO 31 Active Low */
-                       linux,default-trigger = "default-on";
+                       default-state = "keep";
                };
                activity_led {
                        label = "status:blue:activity_led";
index 279607093cdbdbda0c0c80207256ab156272e334..7cea2a44719c56e6bcf09ef22bc83959c5f6a3a3 100644 (file)
@@ -26,7 +26,7 @@
                blue-sata {
                        label = "ns2:blue:sata";
                        gpios = <&gpio0 30 1>;
-                       linux,default-trigger = "default-on";
+                       linux,default-trigger = "ide-disk";
                };
        };
 };
index eac6a21f3b1f0b2402bf58c341b96f25945e455a..ce9b3be237f981511db3bb11e7ca42b4ed48bde1 100644 (file)
@@ -37,7 +37,7 @@
                health {
                        label = "sheevaplug:blue:health";
                        gpios = <&gpio1 17 1>;
-                       linux,default-trigger = "default-on";
+                       default-state = "keep";
                };
        };
 };
index bb61918313dbf8c495b546273b34b6401c3ba8be..1eff4f6d8d032e02987f1796171d2256c177bad4 100644 (file)
@@ -32,7 +32,7 @@
                health {
                        label = "sheevaplug:blue:health";
                        gpios = <&gpio1 17 1>;
-                       linux,default-trigger = "default-on";
+                       default-state = "keep";
                };
 
                misc {
index 594d706b641f8df1de256c875d638795acaa054f..6fcb5c88a6435f2ccb57174db713fbe5382f0a62 100644 (file)
@@ -69,6 +69,7 @@ CONFIG_USB_XHCI_HCD=y
 CONFIG_MMC=y
 CONFIG_MMC_MVSDIO=y
 CONFIG_NEW_LEDS=y
+CONFIG_LEDS_GPIO=y
 CONFIG_LEDS_CLASS=m
 CONFIG_LEDS_TRIGGERS=y
 CONFIG_LEDS_TRIGGER_TIMER=y
index 9caa4fe95913c672a6b874c5b8b8d573294ae857..ab2e586e04c7bbf880310304be99d26f4dbaf77f 100644 (file)
  * warranty of any kind, whether express or implied.
  */
 
+#include <linux/clk.h>
 #include <linux/kernel.h>
 #include <linux/init.h>
+#include <linux/io.h>
 #include <linux/of.h>
 #include <linux/of_address.h>
 #include <linux/of_net.h>
 #include <linux/of_platform.h>
 #include <linux/clk-provider.h>
-#include <linux/dma-mapping.h>
-#include <linux/irqchip.h>
-#include <linux/kexec.h>
+#include <linux/slab.h>
 #include <asm/mach/arch.h>
-#include <asm/mach/map.h>
 #include <mach/bridge-regs.h>
-#include <linux/platform_data/usb-ehci-orion.h>
-#include <plat/irq.h>
 #include <plat/common.h>
 #include "common.h"
 
-/*
- * There are still devices that doesn't know about DT yet.  Get clock
- * gates here and add a clock lookup alias, so that old platform
- * devices still work.
-*/
-
-static void __init kirkwood_legacy_clk_init(void)
-{
-
-       struct device_node *np = of_find_compatible_node(
-               NULL, NULL, "marvell,kirkwood-gating-clock");
-       struct of_phandle_args clkspec;
-       struct clk *clk;
-
-       clkspec.np = np;
-       clkspec.args_count = 1;
-
-       /*
-        * The ethernet interfaces forget the MAC address assigned by
-        * u-boot if the clocks are turned off. Until proper DT support
-        * is available we always enable them for now.
-        */
-       clkspec.args[0] = CGC_BIT_GE0;
-       clk = of_clk_get_from_provider(&clkspec);
-       clk_prepare_enable(clk);
-
-       clkspec.args[0] = CGC_BIT_GE1;
-       clk = of_clk_get_from_provider(&clkspec);
-       clk_prepare_enable(clk);
-}
-
 #define MV643XX_ETH_MAC_ADDR_LOW       0x0414
 #define MV643XX_ETH_MAC_ADDR_HIGH      0x0418
 
@@ -156,8 +122,6 @@ static void __init kirkwood_dt_init(void)
 
        kirkwood_cpufreq_init();
        kirkwood_cpuidle_init();
-       /* Setup clocks for legacy devices */
-       kirkwood_legacy_clk_init();
 
        kirkwood_pm_init();
        kirkwood_dt_eth_fixup();
index 9d2b2ac74938da9b52f2ee1f629fdb6ca3b602b7..df671d04c34daba85228d1d2889ab61cb0d253e7 100644 (file)
@@ -174,7 +174,7 @@ static irqreturn_t orion_timer_interrupt(int irq, void *dev_id)
 
 static struct irqaction orion_timer_irq = {
        .name           = "orion_tick",
-       .flags          = IRQF_DISABLED | IRQF_TIMER,
+       .flags          = IRQF_TIMER,
        .handler        = orion_timer_interrupt
 };
 
index 80b2250ea19a6f892e3645e8736216c7dd96aafd..20c470cb77be2ba02204abdc162c5a0b477b7cf1 100644 (file)
@@ -150,6 +150,11 @@ static inline u32 mvebu_readl(struct mvebu_pcie_port *port, u32 reg)
        return readl(port->base + reg);
 }
 
+static inline bool mvebu_has_ioport(struct mvebu_pcie_port *port)
+{
+       return port->io_target != -1 && port->io_attr != -1;
+}
+
 static bool mvebu_pcie_link_up(struct mvebu_pcie_port *port)
 {
        return !(mvebu_readl(port, PCIE_STAT_OFF) & PCIE_STAT_LINK_DOWN);
@@ -299,7 +304,7 @@ static void mvebu_pcie_handle_iobase_change(struct mvebu_pcie_port *port)
        phys_addr_t iobase;
 
        /* Are the new iobase/iolimit values invalid? */
-       if (port->bridge.iolimit < port->bridge.iobase ||
+       if (port->bridge.iolimit <= port->bridge.iobase ||
            port->bridge.iolimitupper < port->bridge.iobaseupper) {
 
                /* If a window was configured, remove it */
@@ -313,6 +318,12 @@ static void mvebu_pcie_handle_iobase_change(struct mvebu_pcie_port *port)
                return;
        }
 
+       if (!mvebu_has_ioport(port)) {
+               dev_WARN(&port->pcie->pdev->dev,
+                        "Attempt to set IO when IO is disabled\n");
+               return;
+       }
+
        /*
         * We read the PCI-to-PCI bridge emulated registers, and
         * calculate the base address and size of the address decoding
@@ -426,9 +437,12 @@ static int mvebu_sw_pci_bridge_read(struct mvebu_pcie_port *port,
                break;
 
        case PCI_IO_BASE:
-               *value = (bridge->secondary_status << 16 |
-                         bridge->iolimit          <<  8 |
-                         bridge->iobase);
+               if (!mvebu_has_ioport(port))
+                       *value = bridge->secondary_status << 16;
+               else
+                       *value = (bridge->secondary_status << 16 |
+                                 bridge->iolimit          <<  8 |
+                                 bridge->iobase);
                break;
 
        case PCI_MEMORY_BASE:
@@ -486,6 +500,8 @@ static int mvebu_sw_pci_bridge_write(struct mvebu_pcie_port *port,
        switch (where & ~3) {
        case PCI_COMMAND:
                bridge->command = value & 0xffff;
+               if (!mvebu_has_ioport(port))
+                       bridge->command &= ~PCI_COMMAND_IO;
                break;
 
        case PCI_BASE_ADDRESS_0 ... PCI_BASE_ADDRESS_1:
@@ -500,7 +516,6 @@ static int mvebu_sw_pci_bridge_write(struct mvebu_pcie_port *port,
                 */
                bridge->iobase = (value & 0xff) | PCI_IO_RANGE_TYPE_32;
                bridge->iolimit = ((value >> 8) & 0xff) | PCI_IO_RANGE_TYPE_32;
-               bridge->secondary_status = value >> 16;
                mvebu_pcie_handle_iobase_change(port);
                break;
 
@@ -651,7 +666,9 @@ static int mvebu_pcie_setup(int nr, struct pci_sys_data *sys)
        struct mvebu_pcie *pcie = sys_to_pcie(sys);
        int i;
 
-       pci_add_resource_offset(&sys->resources, &pcie->realio, sys->io_offset);
+       if (resource_size(&pcie->realio) != 0)
+               pci_add_resource_offset(&sys->resources, &pcie->realio,
+                                       sys->io_offset);
        pci_add_resource_offset(&sys->resources, &pcie->mem, sys->mem_offset);
        pci_add_resource(&sys->resources, &pcie->busn);
 
@@ -753,7 +770,7 @@ static void __iomem *mvebu_pcie_map_registers(struct platform_device *pdev,
 
        ret = of_address_to_resource(np, 0, &regs);
        if (ret)
-               return ERR_PTR(ret);
+               return NULL;
 
        return devm_ioremap_resource(&pdev->dev, &regs);
 }
@@ -765,12 +782,17 @@ static void __iomem *mvebu_pcie_map_registers(struct platform_device *pdev,
 #define DT_CPUADDR_TO_ATTR(cpuaddr)   (((cpuaddr) >> 48) & 0xFF)
 
 static int mvebu_get_tgt_attr(struct device_node *np, int devfn,
-                             unsigned long type, int *tgt, int *attr)
+                             unsigned long type,
+                             unsigned int *tgt,
+                             unsigned int *attr)
 {
        const int na = 3, ns = 2;
        const __be32 *range;
        int rlen, nranges, rangesz, pna, i;
 
+       *tgt = -1;
+       *attr = -1;
+
        range = of_get_property(np, "ranges", &rlen);
        if (!range)
                return -EINVAL;
@@ -840,16 +862,15 @@ static int mvebu_pcie_probe(struct platform_device *pdev)
        }
 
        mvebu_mbus_get_pcie_io_aperture(&pcie->io);
-       if (resource_size(&pcie->io) == 0) {
-               dev_err(&pdev->dev, "invalid I/O aperture size\n");
-               return -EINVAL;
-       }
 
-       pcie->realio.flags = pcie->io.flags;
-       pcie->realio.start = PCIBIOS_MIN_IO;
-       pcie->realio.end = min_t(resource_size_t,
-                                 IO_SPACE_LIMIT,
-                                 resource_size(&pcie->io));
+       if (resource_size(&pcie->io) != 0) {
+               pcie->realio.flags = pcie->io.flags;
+               pcie->realio.start = PCIBIOS_MIN_IO;
+               pcie->realio.end = min_t(resource_size_t,
+                                        IO_SPACE_LIMIT,
+                                        resource_size(&pcie->io));
+       } else
+               pcie->realio = pcie->io;
 
        /* Get the bus range */
        ret = of_pci_parse_bus_range(np, &pcie->busn);
@@ -908,12 +929,12 @@ static int mvebu_pcie_probe(struct platform_device *pdev)
                        continue;
                }
 
-               ret = mvebu_get_tgt_attr(np, port->devfn, IORESOURCE_IO,
-                                        &port->io_target, &port->io_attr);
-               if (ret < 0) {
-                       dev_err(&pdev->dev, "PCIe%d.%d: cannot get tgt/attr for io window\n",
-                               port->port, port->lane);
-                       continue;
+               if (resource_size(&pcie->io) != 0)
+                       mvebu_get_tgt_attr(np, port->devfn, IORESOURCE_IO,
+                                          &port->io_target, &port->io_attr);
+               else {
+                       port->io_target = -1;
+                       port->io_attr = -1;
                }
 
                port->reset_gpio = of_get_named_gpio_flags(child,
@@ -952,10 +973,9 @@ static int mvebu_pcie_probe(struct platform_device *pdev)
                        continue;
 
                port->base = mvebu_pcie_map_registers(pdev, child, port);
-               if (IS_ERR(port->base)) {
+               if (!port->base) {
                        dev_err(&pdev->dev, "PCIe%d.%d: cannot map registers\n",
                                port->port, port->lane);
-                       port->base = NULL;
                        clk_disable_unprepare(port->clk);
                        continue;
                }