Merge tag 'devicetree-for-4.5' of git://git.kernel.org/pub/scm/linux/kernel/git/robh...
authorLinus Torvalds <torvalds@linux-foundation.org>
Thu, 14 Jan 2016 19:13:28 +0000 (11:13 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Thu, 14 Jan 2016 19:13:28 +0000 (11:13 -0800)
Pull DeviceTree updates from Rob Herring:

 - Rework and export the changeset API to make it available to users
   other than DT overlays

 - ARM secure devices binding

 - OCTEON USB binding

 - Clean-up of various SRAM binding docs

 - Various other binding doc updates

* tag 'devicetree-for-4.5' of git://git.kernel.org/pub/scm/linux/kernel/git/robh/linux: (21 commits)
  drivers/of: Export OF changeset functions
  Fix documentation for adp1653 DT
  ARM: psci: Fix indentation in DT bindings
  of/platform: export of_default_bus_match_table
  of/unittest: Show broken behaviour in the platform bus
  of: fix declaration of of_io_request_and_map
  of/address: replace printk(KERN_ERR ...) with pr_err(...)
  of/irq: optimize device node matching loop in of_irq_init()
  dt-bindings: tda998x: Document the required 'port' node.
  net/macb: bindings doc: Merge cdns-emac to macb
  dt-bindings: Misc fix for the ATH79 DDR controllers
  dt-bindings: Misc fix for the ATH79 MISC interrupt controllers
  Documentation: dt: Add bindings for Secure-only devices
  dt-bindings: ARM: add arm,cortex-a72 compatible string
  ASoC: Atmel: ClassD: add GCK's parent clock in DT binding
  DT: add Olimex to vendor prefixes
  Documentation: fsl-quadspi: Add fsl,ls1021-qspi compatible string
  Documentation/devicetree: document OCTEON USB bindings
  usb: misc: usb3503: Describe better how to bind clock to the hub
  dt-bindings: Consolidate SRAM bindings from all vendors
  ...

33 files changed:
Documentation/devicetree/bindings/arm/arm,scpi.txt
Documentation/devicetree/bindings/arm/cpus.txt
Documentation/devicetree/bindings/arm/exynos/smp-sysram.txt [deleted file]
Documentation/devicetree/bindings/arm/psci.txt
Documentation/devicetree/bindings/arm/rockchip/pmu-sram.txt [deleted file]
Documentation/devicetree/bindings/arm/rockchip/smp-sram.txt [deleted file]
Documentation/devicetree/bindings/arm/secure.txt [new file with mode: 0644]
Documentation/devicetree/bindings/display/bridge/tda998x.txt
Documentation/devicetree/bindings/interrupt-controller/qca,ath79-misc-intc.txt
Documentation/devicetree/bindings/media/i2c/adp1653.txt
Documentation/devicetree/bindings/memory-controllers/ath79-ddr-controller.txt
Documentation/devicetree/bindings/misc/sram.txt [deleted file]
Documentation/devicetree/bindings/mtd/fsl-quadspi.txt
Documentation/devicetree/bindings/net/cdns-emac.txt [deleted file]
Documentation/devicetree/bindings/net/macb.txt
Documentation/devicetree/bindings/soc/sunxi/sram.txt [deleted file]
Documentation/devicetree/bindings/sound/atmel-classd.txt
Documentation/devicetree/bindings/sram/rockchip-pmu-sram.txt [new file with mode: 0644]
Documentation/devicetree/bindings/sram/rockchip-smp-sram.txt [new file with mode: 0644]
Documentation/devicetree/bindings/sram/samsung-sram.txt [new file with mode: 0644]
Documentation/devicetree/bindings/sram/sram.txt [new file with mode: 0644]
Documentation/devicetree/bindings/sram/sunxi-sram.txt [new file with mode: 0644]
Documentation/devicetree/bindings/usb/octeon-usb.txt [new file with mode: 0644]
Documentation/devicetree/bindings/usb/usb3503.txt
Documentation/devicetree/bindings/vendor-prefixes.txt
drivers/of/address.c
drivers/of/dynamic.c
drivers/of/irq.c
drivers/of/of_private.h
drivers/of/overlay.c
drivers/of/platform.c
drivers/of/unittest.c
include/linux/of_address.h

index 86302de..313dabd 100644 (file)
@@ -63,7 +63,7 @@ Required properties:
 - compatible : should be "arm,juno-sram-ns" for Non-secure SRAM on Juno
 
 The rest of the properties should follow the generic mmio-sram description
-found in ../../misc/sysram.txt
+found in ../../sram/sram.txt
 
 Each sub-node represents the reserved area for SCPI.
 
index 6aca64f..c352c11 100644 (file)
@@ -157,6 +157,7 @@ nodes to be present and contain the properties described below.
                            "arm,cortex-a17"
                            "arm,cortex-a53"
                            "arm,cortex-a57"
+                           "arm,cortex-a72"
                            "arm,cortex-m0"
                            "arm,cortex-m0+"
                            "arm,cortex-m1"
diff --git a/Documentation/devicetree/bindings/arm/exynos/smp-sysram.txt b/Documentation/devicetree/bindings/arm/exynos/smp-sysram.txt
deleted file mode 100644 (file)
index 4a0a4f7..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-Samsung Exynos SYSRAM for SMP bringup:
-------------------------------------
-
-Samsung SMP-capable Exynos SoCs use part of the SYSRAM for the bringup
-of the secondary cores. Once the core gets powered up it executes the
-code that is residing at some specific location of the SYSRAM.
-
-Therefore reserved section sub-nodes have to be added to the mmio-sram
-declaration. These nodes are of two types depending upon secure or
-non-secure execution environment.
-
-Required sub-node properties:
-- compatible : depending upon boot mode, should be
-               "samsung,exynos4210-sysram" : for Secure SYSRAM
-               "samsung,exynos4210-sysram-ns" : for Non-secure SYSRAM
-
-The rest of the properties should follow the generic mmio-sram discription
-found in ../../misc/sysram.txt
-
-Example:
-
-       sysram@02020000 {
-               compatible = "mmio-sram";
-               reg = <0x02020000 0x54000>;
-               #address-cells = <1>;
-               #size-cells = <1>;
-               ranges = <0 0x02020000 0x54000>;
-
-               smp-sysram@0 {
-                       compatible = "samsung,exynos4210-sysram";
-                       reg = <0x0 0x1000>;
-               };
-
-               smp-sysram@53000 {
-                       compatible = "samsung,exynos4210-sysram-ns";
-                       reg = <0x53000 0x1000>;
-               };
-       };
index a9adab8..a2c4f1d 100644 (file)
@@ -23,17 +23,20 @@ Main node required properties:
 
  - compatible    : should contain at least one of:
 
-                                * "arm,psci" : for implementations complying to PSCI versions prior to
-                                       0.2. For these cases function IDs must be provided.
-
-                                * "arm,psci-0.2" : for implementations complying to PSCI 0.2. Function
-                                       IDs are not required and should be ignored by an OS with PSCI 0.2
-                                       support, but are permitted to be present for compatibility with
-                                       existing software when "arm,psci" is later in the compatible list.
-
-                               * "arm,psci-1.0" : for implementations complying to PSCI 1.0. PSCI 1.0 is
-                                       backward compatible with PSCI 0.2 with minor specification updates,
-                                       as defined in the PSCI specification[2].
+     * "arm,psci"     : For implementations complying to PSCI versions prior
+                       to 0.2.
+                       For these cases function IDs must be provided.
+
+     * "arm,psci-0.2" : For implementations complying to PSCI 0.2.
+                       Function IDs are not required and should be ignored by
+                       an OS with PSCI 0.2 support, but are permitted to be
+                       present for compatibility with existing software when
+                       "arm,psci" is later in the compatible list.
+
+     * "arm,psci-1.0" : For implementations complying to PSCI 1.0.
+                       PSCI 1.0 is backward compatible with PSCI 0.2 with
+                       minor specification updates, as defined in the PSCI
+                       specification[2].
 
  - method        : The method of calling the PSCI firmware. Permitted
                    values are:
diff --git a/Documentation/devicetree/bindings/arm/rockchip/pmu-sram.txt b/Documentation/devicetree/bindings/arm/rockchip/pmu-sram.txt
deleted file mode 100644 (file)
index 6b42fda..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-Rockchip SRAM for pmu:
-------------------------------
-
-The sram of pmu is used to store the function of resume from maskrom(the 1st
-level loader). This is a common use of the "pmu-sram" because it keeps power
-even in low power states in the system.
-
-Required node properties:
-- compatible : should be "rockchip,rk3288-pmu-sram"
-- reg : physical base address and the size of the registers window
-
-Example:
-       sram@ff720000 {
-               compatible = "rockchip,rk3288-pmu-sram", "mmio-sram";
-               reg = <0xff720000 0x1000>;
-       };
diff --git a/Documentation/devicetree/bindings/arm/rockchip/smp-sram.txt b/Documentation/devicetree/bindings/arm/rockchip/smp-sram.txt
deleted file mode 100644 (file)
index d9416fb..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-Rockchip SRAM for smp bringup:
-------------------------------
-
-Rockchip's smp-capable SoCs use the first part of the sram for the bringup
-of the cores. Once the core gets powered up it executes the code that is
-residing at the very beginning of the sram.
-
-Therefore a reserved section sub-node has to be added to the mmio-sram
-declaration.
-
-Required sub-node properties:
-- compatible : should be "rockchip,rk3066-smp-sram"
-
-The rest of the properties should follow the generic mmio-sram discription
-found in ../../misc/sram.txt
-
-Example:
-
-       sram: sram@10080000 {
-               compatible = "mmio-sram";
-               reg = <0x10080000 0x10000>;
-               #address-cells = <1>;
-               #size-cells = <1>;
-               ranges;
-
-               smp-sram@10080000 {
-                       compatible = "rockchip,rk3066-smp-sram";
-                       reg = <0x10080000 0x50>;
-               };
-       };
diff --git a/Documentation/devicetree/bindings/arm/secure.txt b/Documentation/devicetree/bindings/arm/secure.txt
new file mode 100644 (file)
index 0000000..e31303f
--- /dev/null
@@ -0,0 +1,53 @@
+* ARM Secure world bindings
+
+ARM CPUs with TrustZone support have two distinct address spaces,
+"Normal" and "Secure". Most devicetree consumers (including the Linux
+kernel) are not TrustZone aware and run entirely in either the Normal
+world or the Secure world. However some devicetree consumers are
+TrustZone aware and need to be able to determine whether devices are
+visible only in the Secure address space, only in the Normal address
+space, or visible in both. (One example of that situation would be a
+virtual machine which boots Secure firmware and wants to tell the
+firmware about the layout of the machine via devicetree.)
+
+The general principle of the naming scheme for Secure world bindings
+is that any property that needs a different value in the Secure world
+can be supported by prefixing the property name with "secure-". So for
+instance "secure-foo" would override "foo". For property names with
+a vendor prefix, the Secure variant of "vendor,foo" would be
+"vendor,secure-foo". If there is no "secure-" property then the Secure
+world value is the same as specified for the Normal world by the
+non-prefixed property. However, only the properties listed below may
+validly have "secure-" versions; this list will be enlarged on a
+case-by-case basis.
+
+Defining the bindings in this way means that a device tree which has
+been annotated to indicate the presence of Secure-only devices can
+still be processed unmodified by existing Non-secure software (and in
+particular by the kernel).
+
+Note that it is still valid for bindings intended for purely Secure
+world consumers (like kernels that run entirely in Secure) to simply
+describe the view of Secure world using the standard bindings. These
+secure- bindings only need to be used where both the Secure and Normal
+world views need to be described in a single device tree.
+
+Valid Secure world properties:
+
+- secure-status : specifies whether the device is present and usable
+  in the secure world. The combination of this with "status" allows
+  the various possible combinations of device visibility to be
+  specified. If "secure-status" is not specified it defaults to the
+  same value as "status"; if "status" is not specified either then
+  both default to "okay". This means the following combinations are
+  possible:
+
+   /* Neither specified: default to visible in both S and NS */
+   secure-status = "okay";                          /* visible in both */
+   status = "okay";                                 /* visible in both */
+   status = "okay"; secure-status = "okay";         /* visible in both */
+   secure-status = "disabled";                      /* NS-only */
+   status = "okay"; secure-status = "disabled";     /* NS-only */
+   status = "disabled"; secure-status = "okay";     /* S-only */
+   status = "disabled";                             /* disabled in both */
+   status = "disabled"; secure-status = "disabled"; /* disabled in both */
index e9e4bce..e178e6b 100644 (file)
@@ -5,6 +5,10 @@ Required properties;
 
   - reg: I2C address
 
+Required node:
+  - port: Input port node with endpoint definition, as described
+        in Documentation/devicetree/bindings/graph.txt
+
 Optional properties:
   - interrupts: interrupt number and trigger type
        default: polling
index ec96b1f..475ae9b 100644 (file)
@@ -22,7 +22,7 @@ Interrupt Controllers bindings used by client devices.
 Example:
 
        interrupt-controller@18060010 {
-               compatible = "qca,ar9132-misc-intc", qca,ar7100-misc-intc";
+               compatible = "qca,ar9132-misc-intc", "qca,ar7100-misc-intc";
                reg = <0x18060010 0x4>;
 
                interrupt-parent = <&cpuintc>;
index 5ce66f2..4cce0de 100644 (file)
@@ -12,12 +12,13 @@ There are two LED outputs available - flash and indicator. One LED is
 represented by one child node, nodes need to be named "flash" and "indicator".
 
 Required properties of the LED child node:
-- max-microamp : see Documentation/devicetree/bindings/leds/common.txt
+- led-max-microamp : see Documentation/devicetree/bindings/leds/common.txt
 
 Required properties of the flash LED child node:
 
 - flash-max-microamp : see Documentation/devicetree/bindings/leds/common.txt
 - flash-timeout-us : see Documentation/devicetree/bindings/leds/common.txt
+- led-max-microamp : see Documentation/devicetree/bindings/leds/common.txt
 
 Example:
 
@@ -29,9 +30,9 @@ Example:
                flash {
                        flash-timeout-us = <500000>;
                        flash-max-microamp = <320000>;
-                       max-microamp = <50000>;
+                       led-max-microamp = <50000>;
                };
                indicator {
-                       max-microamp = <17500>;
+                       led-max-microamp = <17500>;
                };
        };
index efe35a0..c81af75 100644 (file)
@@ -1,6 +1,6 @@
 Binding for Qualcomm  Atheros AR7xxx/AR9xxx DDR controller
 
-The DDR controller of the ARxxx and AR9xxx families provides an interface
+The DDR controller of the AR7xxx and AR9xxx families provides an interface
 to flush the FIFO between various devices and the DDR. This is mainly used
 by the IRQ controller to flush the FIFO before running the interrupt handler
 of such devices.
@@ -11,9 +11,9 @@ Required properties:
   "qca,[ar7100|ar7240]-ddr-controller" as fallback.
   On SoC with PCI support "qca,ar7100-ddr-controller" should be used as
   fallback, otherwise "qca,ar7240-ddr-controller" should be used.
-- reg: Base address and size of the controllers memory area
-- #qca,ddr-wb-channel-cells: has to be 1, the index of the write buffer
-  channel
+- reg: Base address and size of the controller's memory area
+- #qca,ddr-wb-channel-cells: Specifies the number of cells needed to encode
+                            the write buffer channel index, should be 1.
 
 Example:
 
diff --git a/Documentation/devicetree/bindings/misc/sram.txt b/Documentation/devicetree/bindings/misc/sram.txt
deleted file mode 100644 (file)
index 42ee943..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-Generic on-chip SRAM
-
-Simple IO memory regions to be managed by the genalloc API.
-
-Required properties:
-
-- compatible : mmio-sram
-
-- reg : SRAM iomem address range
-
-Reserving sram areas:
----------------------
-
-Each child of the sram node specifies a region of reserved memory. Each
-child node should use a 'reg' property to specify a specific range of
-reserved memory.
-
-Following the generic-names recommended practice, node names should
-reflect the purpose of the node. Unit address (@<address>) should be
-appended to the name.
-
-Required properties in the sram node:
-
-- #address-cells, #size-cells : should use the same values as the root node
-- ranges : standard definition, should translate from local addresses
-           within the sram to bus addresses
-
-Required properties in the area nodes:
-
-- reg : iomem address range, relative to the SRAM range
-
-Optional properties in the area nodes:
-
-- compatible : standard definition, should contain a vendor specific string
-               in the form <vendor>,[<device>-]<usage>
-- pool : indicates that the particular reserved SRAM area is addressable
-         and in use by another device or devices
-- export : indicates that the reserved SRAM area may be accessed outside
-           of the kernel, e.g. by bootloader or userspace
-- label : the name for the reserved partition, if omitted, the label
-          is taken from the node name excluding the unit address.
-
-Example:
-
-sram: sram@5c000000 {
-       compatible = "mmio-sram";
-       reg = <0x5c000000 0x40000>; /* 256 KiB SRAM at address 0x5c000000 */
-
-       #adress-cells = <1>;
-       #size-cells = <1>;
-       ranges = <0 0x5c000000 0x40000>;
-
-       smp-sram@100 {
-               compatible = "socvendor,smp-sram";
-               reg = <0x100 0x50>;
-       };
-
-       device-sram@1000 {
-               reg = <0x1000 0x1000>;
-               pool;
-       };
-
-       exported@20000 {
-               reg = <0x20000 0x20000>;
-               export;
-       };
-};
index 862aa2f..00c587b 100644 (file)
@@ -2,7 +2,8 @@
 
 Required properties:
   - compatible : Should be "fsl,vf610-qspi", "fsl,imx6sx-qspi",
-                "fsl,imx7d-qspi", "fsl,imx6ul-qspi"
+                "fsl,imx7d-qspi", "fsl,imx6ul-qspi",
+                "fsl,ls1021-qspi"
   - reg : the first contains the register location and length,
           the second contains the memory mapping address and length
   - reg-names: Should contain the reg names "QuadSPI" and "QuadSPI-memory"
diff --git a/Documentation/devicetree/bindings/net/cdns-emac.txt b/Documentation/devicetree/bindings/net/cdns-emac.txt
deleted file mode 100644 (file)
index 4451ee9..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-* Cadence EMAC Ethernet controller
-
-Required properties:
-- compatible: Should be "cdns,[<chip>-]{emac}"
-  Use "cdns,at91rm9200-emac" Atmel at91rm9200 SoC.
-  Use "cdns,zynq-gem" Xilinx Zynq-7xxx SoC.
-  Or the generic form: "cdns,emac".
-- reg: Address and length of the register set for the device
-- interrupts: Should contain macb interrupt
-- phy-mode: see ethernet.txt file in the same directory.
-
-Examples:
-
-       macb0: ethernet@fffc4000 {
-               compatible = "cdns,at91rm9200-emac";
-               reg = <0xfffc4000 0x4000>;
-               interrupts = <21>;
-               phy-mode = "rmii";
-               local-mac-address = [3a 0e 03 04 05 06];
-       };
index 5c397ca..d2e243b 100644 (file)
@@ -2,6 +2,7 @@
 
 Required properties:
 - compatible: Should be "cdns,[<chip>-]{macb|gem}"
+  Use "cdns,at91rm9200-emac" Atmel at91rm9200 SoC.
   Use "cdns,at91sam9260-macb" for Atmel at91sam9 SoCs or the 10/100Mbit IP
   available on sama5d3 SoCs.
   Use "cdns,np4-macb" for NP4 SoC devices.
@@ -11,7 +12,9 @@ Required properties:
   Use "atmel,sama5d2-gem" for the GEM IP (10/100) available on Atmel sama5d2 SoCs.
   Use "atmel,sama5d3-gem" for the Gigabit IP available on Atmel sama5d3 SoCs.
   Use "atmel,sama5d4-gem" for the GEM IP (10/100) available on Atmel sama5d4 SoCs.
+  Use "cdns,zynq-gem" Xilinx Zynq-7xxx SoC.
   Use "cdns,zynqmp-gem" for Zynq Ultrascale+ MPSoC.
+  Or the generic form: "cdns,emac".
 - reg: Address and length of the register set for the device
 - interrupts: Should contain macb interrupt
 - phy-mode: See ethernet.txt file in the same directory.
diff --git a/Documentation/devicetree/bindings/soc/sunxi/sram.txt b/Documentation/devicetree/bindings/soc/sunxi/sram.txt
deleted file mode 100644 (file)
index 0676981..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
-Allwinnner SoC SRAM controllers
------------------------------------------------------
-
-The SRAM controller found on most Allwinner devices is represented by
-a regular node for the SRAM controller itself, with sub-nodes
-reprensenting the SRAM handled by the SRAM controller.
-
-Controller Node
----------------
-
-Required properties:
-- compatible : "allwinner,sun4i-a10-sram-controller"
-- reg : sram controller register offset + length
-
-SRAM nodes
-----------
-
-Each SRAM is described using the mmio-sram bindings documented in
-Documentation/devicetree/bindings/misc/sram.txt
-
-Each SRAM will have SRAM sections that are going to be handled by the
-SRAM controller as subnodes. These sections are represented following
-once again the representation described in the mmio-sram binding.
-
-The valid sections compatible are:
-    - allwinner,sun4i-a10-sram-a3-a4
-    - allwinner,sun4i-a10-sram-d
-
-Devices using SRAM sections
----------------------------
-
-Some devices need to request to the SRAM controller to map an SRAM for
-their exclusive use.
-
-The relationship between such a device and an SRAM section is
-expressed through the allwinner,sram property, that will take a
-phandle and an argument.
-
-This valid values for this argument are:
-  - 0: CPU
-  - 1: Device
-
-Example
--------
-sram-controller@01c00000 {
-       compatible = "allwinner,sun4i-a10-sram-controller";
-       reg = <0x01c00000 0x30>;
-       #address-cells = <1>;
-       #size-cells = <1>;
-       ranges;
-
-       sram_a: sram@00000000 {
-               compatible = "mmio-sram";
-               reg = <0x00000000 0xc000>;
-               #address-cells = <1>;
-               #size-cells = <1>;
-               ranges = <0 0x00000000 0xc000>;
-
-               emac_sram: sram-section@8000 {
-                       compatible = "allwinner,sun4i-a10-sram-a3-a4";
-                       reg = <0x8000 0x4000>;
-                       status = "disabled";
-               };
-       };
-};
-
-emac: ethernet@01c0b000 {
-       compatible = "allwinner,sun4i-a10-emac";
-       ...
-
-       allwinner,sram = <&emac_sram 1>;
-};
index 0018451..549e701 100644 (file)
@@ -16,6 +16,10 @@ Required properties:
        Required elements: "pclk", "gclk" and "aclk".
 - clocks
        Please refer to clock-bindings.txt.
+- assigned-clocks
+       Should be <&classd_gclk>.
+- assigned-clock-parents
+       Should be <&audio_pll_pmc>.
 
 Optional properties:
 - pinctrl-names, pinctrl-0
@@ -43,6 +47,8 @@ classd: classd@fc048000 {
                dma-names = "tx";
                clocks = <&classd_clk>, <&classd_gclk>, <&audio_pll_pmc>;
                clock-names = "pclk", "gclk", "aclk";
+               assigned-clocks = <&classd_gclk>;
+               assigned-clock-parents = <&audio_pll_pmc>;
 
                pinctrl-names = "default";
                pinctrl-0 = <&pinctrl_classd_default>;
diff --git a/Documentation/devicetree/bindings/sram/rockchip-pmu-sram.txt b/Documentation/devicetree/bindings/sram/rockchip-pmu-sram.txt
new file mode 100644 (file)
index 0000000..6b42fda
--- /dev/null
@@ -0,0 +1,16 @@
+Rockchip SRAM for pmu:
+------------------------------
+
+The sram of pmu is used to store the function of resume from maskrom(the 1st
+level loader). This is a common use of the "pmu-sram" because it keeps power
+even in low power states in the system.
+
+Required node properties:
+- compatible : should be "rockchip,rk3288-pmu-sram"
+- reg : physical base address and the size of the registers window
+
+Example:
+       sram@ff720000 {
+               compatible = "rockchip,rk3288-pmu-sram", "mmio-sram";
+               reg = <0xff720000 0x1000>;
+       };
diff --git a/Documentation/devicetree/bindings/sram/rockchip-smp-sram.txt b/Documentation/devicetree/bindings/sram/rockchip-smp-sram.txt
new file mode 100644 (file)
index 0000000..800701e
--- /dev/null
@@ -0,0 +1,30 @@
+Rockchip SRAM for smp bringup:
+------------------------------
+
+Rockchip's smp-capable SoCs use the first part of the sram for the bringup
+of the cores. Once the core gets powered up it executes the code that is
+residing at the very beginning of the sram.
+
+Therefore a reserved section sub-node has to be added to the mmio-sram
+declaration.
+
+Required sub-node properties:
+- compatible : should be "rockchip,rk3066-smp-sram"
+
+The rest of the properties should follow the generic mmio-sram discription
+found in Documentation/devicetree/bindings/sram/sram.txt
+
+Example:
+
+       sram: sram@10080000 {
+               compatible = "mmio-sram";
+               reg = <0x10080000 0x10000>;
+               #address-cells = <1>;
+               #size-cells = <1>;
+               ranges;
+
+               smp-sram@10080000 {
+                       compatible = "rockchip,rk3066-smp-sram";
+                       reg = <0x10080000 0x50>;
+               };
+       };
diff --git a/Documentation/devicetree/bindings/sram/samsung-sram.txt b/Documentation/devicetree/bindings/sram/samsung-sram.txt
new file mode 100644 (file)
index 0000000..6bc474b
--- /dev/null
@@ -0,0 +1,38 @@
+Samsung Exynos SYSRAM for SMP bringup:
+------------------------------------
+
+Samsung SMP-capable Exynos SoCs use part of the SYSRAM for the bringup
+of the secondary cores. Once the core gets powered up it executes the
+code that is residing at some specific location of the SYSRAM.
+
+Therefore reserved section sub-nodes have to be added to the mmio-sram
+declaration. These nodes are of two types depending upon secure or
+non-secure execution environment.
+
+Required sub-node properties:
+- compatible : depending upon boot mode, should be
+               "samsung,exynos4210-sysram" : for Secure SYSRAM
+               "samsung,exynos4210-sysram-ns" : for Non-secure SYSRAM
+
+The rest of the properties should follow the generic mmio-sram discription
+found in Documentation/devicetree/bindings/sram/sram.txt
+
+Example:
+
+       sysram@02020000 {
+               compatible = "mmio-sram";
+               reg = <0x02020000 0x54000>;
+               #address-cells = <1>;
+               #size-cells = <1>;
+               ranges = <0 0x02020000 0x54000>;
+
+               smp-sysram@0 {
+                       compatible = "samsung,exynos4210-sysram";
+                       reg = <0x0 0x1000>;
+               };
+
+               smp-sysram@53000 {
+                       compatible = "samsung,exynos4210-sysram-ns";
+                       reg = <0x53000 0x1000>;
+               };
+       };
diff --git a/Documentation/devicetree/bindings/sram/sram.txt b/Documentation/devicetree/bindings/sram/sram.txt
new file mode 100644 (file)
index 0000000..42ee943
--- /dev/null
@@ -0,0 +1,67 @@
+Generic on-chip SRAM
+
+Simple IO memory regions to be managed by the genalloc API.
+
+Required properties:
+
+- compatible : mmio-sram
+
+- reg : SRAM iomem address range
+
+Reserving sram areas:
+---------------------
+
+Each child of the sram node specifies a region of reserved memory. Each
+child node should use a 'reg' property to specify a specific range of
+reserved memory.
+
+Following the generic-names recommended practice, node names should
+reflect the purpose of the node. Unit address (@<address>) should be
+appended to the name.
+
+Required properties in the sram node:
+
+- #address-cells, #size-cells : should use the same values as the root node
+- ranges : standard definition, should translate from local addresses
+           within the sram to bus addresses
+
+Required properties in the area nodes:
+
+- reg : iomem address range, relative to the SRAM range
+
+Optional properties in the area nodes:
+
+- compatible : standard definition, should contain a vendor specific string
+               in the form <vendor>,[<device>-]<usage>
+- pool : indicates that the particular reserved SRAM area is addressable
+         and in use by another device or devices
+- export : indicates that the reserved SRAM area may be accessed outside
+           of the kernel, e.g. by bootloader or userspace
+- label : the name for the reserved partition, if omitted, the label
+          is taken from the node name excluding the unit address.
+
+Example:
+
+sram: sram@5c000000 {
+       compatible = "mmio-sram";
+       reg = <0x5c000000 0x40000>; /* 256 KiB SRAM at address 0x5c000000 */
+
+       #adress-cells = <1>;
+       #size-cells = <1>;
+       ranges = <0 0x5c000000 0x40000>;
+
+       smp-sram@100 {
+               compatible = "socvendor,smp-sram";
+               reg = <0x100 0x50>;
+       };
+
+       device-sram@1000 {
+               reg = <0x1000 0x1000>;
+               pool;
+       };
+
+       exported@20000 {
+               reg = <0x20000 0x20000>;
+               export;
+       };
+};
diff --git a/Documentation/devicetree/bindings/sram/sunxi-sram.txt b/Documentation/devicetree/bindings/sram/sunxi-sram.txt
new file mode 100644 (file)
index 0000000..8d56654
--- /dev/null
@@ -0,0 +1,72 @@
+Allwinnner SoC SRAM controllers
+-----------------------------------------------------
+
+The SRAM controller found on most Allwinner devices is represented by
+a regular node for the SRAM controller itself, with sub-nodes
+reprensenting the SRAM handled by the SRAM controller.
+
+Controller Node
+---------------
+
+Required properties:
+- compatible : "allwinner,sun4i-a10-sram-controller"
+- reg : sram controller register offset + length
+
+SRAM nodes
+----------
+
+Each SRAM is described using the mmio-sram bindings documented in
+Documentation/devicetree/bindings/sram/sram.txt
+
+Each SRAM will have SRAM sections that are going to be handled by the
+SRAM controller as subnodes. These sections are represented following
+once again the representation described in the mmio-sram binding.
+
+The valid sections compatible are:
+    - allwinner,sun4i-a10-sram-a3-a4
+    - allwinner,sun4i-a10-sram-d
+
+Devices using SRAM sections
+---------------------------
+
+Some devices need to request to the SRAM controller to map an SRAM for
+their exclusive use.
+
+The relationship between such a device and an SRAM section is
+expressed through the allwinner,sram property, that will take a
+phandle and an argument.
+
+This valid values for this argument are:
+  - 0: CPU
+  - 1: Device
+
+Example
+-------
+sram-controller@01c00000 {
+       compatible = "allwinner,sun4i-a10-sram-controller";
+       reg = <0x01c00000 0x30>;
+       #address-cells = <1>;
+       #size-cells = <1>;
+       ranges;
+
+       sram_a: sram@00000000 {
+               compatible = "mmio-sram";
+               reg = <0x00000000 0xc000>;
+               #address-cells = <1>;
+               #size-cells = <1>;
+               ranges = <0 0x00000000 0xc000>;
+
+               emac_sram: sram-section@8000 {
+                       compatible = "allwinner,sun4i-a10-sram-a3-a4";
+                       reg = <0x8000 0x4000>;
+                       status = "disabled";
+               };
+       };
+};
+
+emac: ethernet@01c0b000 {
+       compatible = "allwinner,sun4i-a10-emac";
+       ...
+
+       allwinner,sram = <&emac_sram 1>;
+};
diff --git a/Documentation/devicetree/bindings/usb/octeon-usb.txt b/Documentation/devicetree/bindings/usb/octeon-usb.txt
new file mode 100644 (file)
index 0000000..205c8d2
--- /dev/null
@@ -0,0 +1,62 @@
+OCTEON/OCTEON+ USB BLOCK
+
+1) Main node
+
+   Required properties:
+
+   - compatible: must be "cavium,octeon-5750-usbn"
+
+   - reg: specifies the physical base address of the USBN block and
+     the length of the memory mapped region.
+
+   - #address-cells: specifies the number of cells needed to encode an
+     address. The value must be 2.
+
+   - #size-cells: specifies the number of cells used to represent the size
+     of an address. The value must be 2.
+
+   - ranges: specifies the translation between child address space and parent
+     address space.
+
+   - clock-frequency: speed of the USB reference clock. Allowed values are
+     12000000, 24000000 or 48000000.
+
+   - cavium,refclk-type: type of the USB reference clock. Allowed values are
+     "crystal" or "external".
+
+   - refclk-frequency: deprecated, use "clock-frequency".
+
+   - refclk-type: deprecated, use "cavium,refclk-type".
+
+2) Child node
+
+   The main node must have one child node which describes the built-in
+   USB controller.
+
+   Required properties:
+
+   - compatible: must be "cavium,octeon-5750-usbc"
+
+   - reg: specifies the physical base address of the USBC block and
+     the length of the memory mapped region.
+
+   - interrupts: specifies the interrupt number for the USB controller.
+
+3) Example:
+
+       usbn: usbn@1180068000000 {
+               compatible = "cavium,octeon-5750-usbn";
+               reg = <0x11800 0x68000000 0x0 0x1000>;
+               ranges; /* Direct mapping */
+               #address-cells = <2>;
+               #size-cells = <2>;
+               clock-frequency = <12000000>;
+               cavium,refclk-type = "crystal";
+
+               usbc@16f0010000000 {
+                       compatible = "cavium,octeon-5750-usbc";
+                       reg = <0x16f00 0x10000000 0x0 0x80000>;
+                       interrupts = <0 56>;
+               };
+       };
+
index 52493b1..c1a0a91 100644 (file)
@@ -18,7 +18,8 @@ Optional properties:
 - refclk: Clock used for driving REFCLK signal (optional, if not provided
        the driver assumes that clock signal is always available, its
        rate is specified by REF_SEL pins and a value from the primary
-       reference clock frequencies table is used)
+       reference clock frequencies table is used). Use clocks and
+       clock-names in order to assign it
 - refclk-frequency: Frequency of the REFCLK signal as defined by REF_SEL
        pins (optional, if not provided, driver will not set rate of the
        REFCLK signal and assume that a value from the primary reference
@@ -33,4 +34,6 @@ Examples:
                intn-gpios = <&gpx3 4 1>;
                reset-gpios = <&gpx3 5 1>;
                initial-mode = <1>;
+               clocks = <&clks 80>;
+               clock-names = "refclk";
        };
index 55df1d4..a4f2035 100644 (file)
@@ -161,6 +161,7 @@ nuvoton     Nuvoton Technology Corporation
 nvidia NVIDIA
 nxp    NXP Semiconductors
 okaya  Okaya Electric America, Inc.
+olimex OLIMEX Ltd.
 onnn   ON Semiconductor Corp.
 opencores      OpenCores.org
 option Option NV
index 9582c57..91a469d 100644 (file)
@@ -597,7 +597,7 @@ static u64 __of_translate_address(struct device_node *dev,
                pbus = of_match_bus(parent);
                pbus->count_cells(dev, &pna, &pns);
                if (!OF_CHECK_COUNTS(pna, pns)) {
-                       printk(KERN_ERR "prom_parse: Bad cell count for %s\n",
+                       pr_err("prom_parse: Bad cell count for %s\n",
                               of_node_full_name(dev));
                        break;
                }
index 53826b8..c647bd1 100644 (file)
@@ -646,6 +646,7 @@ void of_changeset_init(struct of_changeset *ocs)
        memset(ocs, 0, sizeof(*ocs));
        INIT_LIST_HEAD(&ocs->entries);
 }
+EXPORT_SYMBOL_GPL(of_changeset_init);
 
 /**
  * of_changeset_destroy - Destroy a changeset
@@ -662,20 +663,9 @@ void of_changeset_destroy(struct of_changeset *ocs)
        list_for_each_entry_safe_reverse(ce, cen, &ocs->entries, node)
                __of_changeset_entry_destroy(ce);
 }
+EXPORT_SYMBOL_GPL(of_changeset_destroy);
 
-/**
- * of_changeset_apply - Applies a changeset
- *
- * @ocs:       changeset pointer
- *
- * Applies a changeset to the live tree.
- * Any side-effects of live tree state changes are applied here on
- * sucess, like creation/destruction of devices and side-effects
- * like creation of sysfs properties and directories.
- * Returns 0 on success, a negative error value in case of an error.
- * On error the partially applied effects are reverted.
- */
-int of_changeset_apply(struct of_changeset *ocs)
+int __of_changeset_apply(struct of_changeset *ocs)
 {
        struct of_changeset_entry *ce;
        int ret;
@@ -704,17 +694,30 @@ int of_changeset_apply(struct of_changeset *ocs)
 }
 
 /**
- * of_changeset_revert - Reverts an applied changeset
+ * of_changeset_apply - Applies a changeset
  *
  * @ocs:       changeset pointer
  *
- * Reverts a changeset returning the state of the tree to what it
- * was before the application.
- * Any side-effects like creation/destruction of devices and
- * removal of sysfs properties and directories are applied.
+ * Applies a changeset to the live tree.
+ * Any side-effects of live tree state changes are applied here on
+ * success, like creation/destruction of devices and side-effects
+ * like creation of sysfs properties and directories.
  * Returns 0 on success, a negative error value in case of an error.
+ * On error the partially applied effects are reverted.
  */
-int of_changeset_revert(struct of_changeset *ocs)
+int of_changeset_apply(struct of_changeset *ocs)
+{
+       int ret;
+
+       mutex_lock(&of_mutex);
+       ret = __of_changeset_apply(ocs);
+       mutex_unlock(&of_mutex);
+
+       return ret;
+}
+EXPORT_SYMBOL_GPL(of_changeset_apply);
+
+int __of_changeset_revert(struct of_changeset *ocs)
 {
        struct of_changeset_entry *ce;
        int ret;
@@ -741,6 +744,29 @@ int of_changeset_revert(struct of_changeset *ocs)
        return 0;
 }
 
+/**
+ * of_changeset_revert - Reverts an applied changeset
+ *
+ * @ocs:       changeset pointer
+ *
+ * Reverts a changeset returning the state of the tree to what it
+ * was before the application.
+ * Any side-effects like creation/destruction of devices and
+ * removal of sysfs properties and directories are applied.
+ * Returns 0 on success, a negative error value in case of an error.
+ */
+int of_changeset_revert(struct of_changeset *ocs)
+{
+       int ret;
+
+       mutex_lock(&of_mutex);
+       ret = __of_changeset_revert(ocs);
+       mutex_unlock(&of_mutex);
+
+       return ret;
+}
+EXPORT_SYMBOL_GPL(of_changeset_revert);
+
 /**
  * of_changeset_action - Perform a changeset action
  *
@@ -779,3 +805,4 @@ int of_changeset_action(struct of_changeset *ocs, unsigned long action,
        list_add_tail(&ce->node, &ocs->entries);
        return 0;
 }
+EXPORT_SYMBOL_GPL(of_changeset_action);
index 4fa916d..706e3ff 100644 (file)
@@ -473,6 +473,7 @@ EXPORT_SYMBOL_GPL(of_irq_to_resource_table);
 
 struct of_intc_desc {
        struct list_head        list;
+       of_irq_init_cb_t        irq_init_cb;
        struct device_node      *dev;
        struct device_node      *interrupt_parent;
 };
@@ -486,6 +487,7 @@ struct of_intc_desc {
  */
 void __init of_irq_init(const struct of_device_id *matches)
 {
+       const struct of_device_id *match;
        struct device_node *np, *parent = NULL;
        struct of_intc_desc *desc, *temp_desc;
        struct list_head intc_desc_list, intc_parent_list;
@@ -493,10 +495,15 @@ void __init of_irq_init(const struct of_device_id *matches)
        INIT_LIST_HEAD(&intc_desc_list);
        INIT_LIST_HEAD(&intc_parent_list);
 
-       for_each_matching_node(np, matches) {
+       for_each_matching_node_and_match(np, matches, &match) {
                if (!of_find_property(np, "interrupt-controller", NULL) ||
                                !of_device_is_available(np))
                        continue;
+
+               if (WARN(!match->data, "of_irq_init: no init function for %s\n",
+                        match->compatible))
+                       continue;
+
                /*
                 * Here, we allocate and populate an of_intc_desc with the node
                 * pointer, interrupt-parent device_node etc.
@@ -507,6 +514,7 @@ void __init of_irq_init(const struct of_device_id *matches)
                        goto err;
                }
 
+               desc->irq_init_cb = match->data;
                desc->dev = of_node_get(np);
                desc->interrupt_parent = of_irq_find_parent(np);
                if (desc->interrupt_parent == np)
@@ -526,27 +534,18 @@ void __init of_irq_init(const struct of_device_id *matches)
                 * The assumption is that NULL parent means a root controller.
                 */
                list_for_each_entry_safe(desc, temp_desc, &intc_desc_list, list) {
-                       const struct of_device_id *match;
                        int ret;
-                       of_irq_init_cb_t irq_init_cb;
 
                        if (desc->interrupt_parent != parent)
                                continue;
 
                        list_del(&desc->list);
-                       match = of_match_node(matches, desc->dev);
-                       if (WARN(!match->data,
-                           "of_irq_init: no init function for %s\n",
-                           match->compatible)) {
-                               kfree(desc);
-                               continue;
-                       }
 
-                       pr_debug("of_irq_init: init %s @ %p, parent %p\n",
-                                match->compatible,
+                       pr_debug("of_irq_init: init %s (%p), parent %p\n",
+                                desc->dev->full_name,
                                 desc->dev, desc->interrupt_parent);
-                       irq_init_cb = (of_irq_init_cb_t)match->data;
-                       ret = irq_init_cb(desc->dev, desc->interrupt_parent);
+                       ret = desc->irq_init_cb(desc->dev,
+                                               desc->interrupt_parent);
                        if (ret) {
                                kfree(desc);
                                continue;
index 8e882e7..829469f 100644 (file)
@@ -45,6 +45,8 @@ static inline struct device_node *kobj_to_device_node(struct kobject *kobj)
 extern int of_property_notify(int action, struct device_node *np,
                              struct property *prop, struct property *old_prop);
 extern void of_node_release(struct kobject *kobj);
+extern int __of_changeset_apply(struct of_changeset *ocs);
+extern int __of_changeset_revert(struct of_changeset *ocs);
 #else /* CONFIG_OF_DYNAMIC */
 static inline int of_property_notify(int action, struct device_node *np,
                                     struct property *prop, struct property *old_prop)
index 54e5af9..8225081 100644 (file)
@@ -379,9 +379,9 @@ int of_overlay_create(struct device_node *tree)
        }
 
        /* apply the changeset */
-       err = of_changeset_apply(&ov->cset);
+       err = __of_changeset_apply(&ov->cset);
        if (err) {
-               pr_err("%s: of_changeset_apply() failed for tree@%s\n",
+               pr_err("%s: __of_changeset_apply() failed for tree@%s\n",
                                __func__, tree->full_name);
                goto err_revert_overlay;
        }
@@ -511,7 +511,7 @@ int of_overlay_destroy(int id)
 
 
        list_del(&ov->node);
-       of_changeset_revert(&ov->cset);
+       __of_changeset_revert(&ov->cset);
        of_free_overlay_info(ov);
        idr_remove(&ov_idr, id);
        of_changeset_destroy(&ov->cset);
@@ -542,7 +542,7 @@ int of_overlay_destroy_all(void)
        /* the tail of list is guaranteed to be safe to remove */
        list_for_each_entry_safe_reverse(ov, ovn, &ov_list, node) {
                list_del(&ov->node);
-               of_changeset_revert(&ov->cset);
+               __of_changeset_revert(&ov->cset);
                of_free_overlay_info(ov);
                idr_remove(&ov_idr, ov->id);
                kfree(ov);
index af98343..8d103e4 100644 (file)
@@ -31,6 +31,7 @@ const struct of_device_id of_default_bus_match_table[] = {
 #endif /* CONFIG_ARM_AMBA */
        {} /* Empty terminated list */
 };
+EXPORT_SYMBOL(of_default_bus_match_table);
 
 static int of_dev_node_match(struct device *dev, void *data)
 {
index e16ea57..979b6e4 100644 (file)
@@ -530,18 +530,14 @@ static void __init of_unittest_changeset(void)
        unittest(!of_changeset_add_property(&chgset, parent, ppadd), "fail add prop\n");
        unittest(!of_changeset_update_property(&chgset, parent, ppupdate), "fail update prop\n");
        unittest(!of_changeset_remove_property(&chgset, parent, ppremove), "fail remove prop\n");
-       mutex_lock(&of_mutex);
        unittest(!of_changeset_apply(&chgset), "apply failed\n");
-       mutex_unlock(&of_mutex);
 
        /* Make sure node names are constructed correctly */
        unittest((np = of_find_node_by_path("/testcase-data/changeset/n2/n21")),
                 "'%s' not added\n", n21->full_name);
        of_node_put(np);
 
-       mutex_lock(&of_mutex);
        unittest(!of_changeset_revert(&chgset), "revert failed\n");
-       mutex_unlock(&of_mutex);
 
        of_changeset_destroy(&chgset);
 #endif
@@ -757,6 +753,11 @@ static void __init of_unittest_match_node(void)
        }
 }
 
+static struct resource test_bus_res = {
+       .start = 0xfffffff8,
+       .end = 0xfffffff9,
+       .flags = IORESOURCE_MEM,
+};
 static const struct platform_device_info test_bus_info = {
        .name = "unittest-bus",
 };
@@ -800,6 +801,15 @@ static void __init of_unittest_platform_populate(void)
                return;
        test_bus->dev.of_node = np;
 
+       /*
+        * Add a dummy resource to the test bus node after it is
+        * registered to catch problems with un-inserted resources. The
+        * DT code doesn't insert the resources, and it has caused the
+        * kernel to oops in the past. This makes sure the same bug
+        * doesn't crop up again.
+        */
+       platform_device_add_resources(test_bus, &test_bus_res, 1);
+
        of_platform_populate(np, match, NULL, &test_bus->dev);
        for_each_child_of_node(np, child) {
                for_each_child_of_node(child, grandchild)
index 507daad..01c0a55 100644 (file)
@@ -3,6 +3,7 @@
 #include <linux/ioport.h>
 #include <linux/errno.h>
 #include <linux/of.h>
+#include <linux/io.h>
 
 struct of_pci_range_parser {
        struct device_node *node;
@@ -36,6 +37,8 @@ extern struct device_node *of_find_matching_node_by_address(
                                        const struct of_device_id *matches,
                                        u64 base_address);
 extern void __iomem *of_iomap(struct device_node *device, int index);
+void __iomem *of_io_request_and_map(struct device_node *device,
+                                   int index, const char *name);
 
 /* Extract an address from a device, returns the region size and
  * the address space flags too. The PCI version uses a BAR number
@@ -57,6 +60,11 @@ extern int of_dma_get_range(struct device_node *np, u64 *dma_addr,
                                u64 *paddr, u64 *size);
 extern bool of_dma_is_coherent(struct device_node *np);
 #else /* CONFIG_OF_ADDRESS */
+static inline void __iomem *of_io_request_and_map(struct device_node *device,
+                                                 int index, const char *name)
+{
+       return IOMEM_ERR_PTR(-EINVAL);
+}
 
 static inline u64 of_translate_address(struct device_node *np,
                                       const __be32 *addr)
@@ -112,12 +120,7 @@ static inline bool of_dma_is_coherent(struct device_node *np)
 extern int of_address_to_resource(struct device_node *dev, int index,
                                  struct resource *r);
 void __iomem *of_iomap(struct device_node *node, int index);
-void __iomem *of_io_request_and_map(struct device_node *device,
-                                       int index, const char *name);
 #else
-
-#include <linux/io.h>
-
 static inline int of_address_to_resource(struct device_node *dev, int index,
                                         struct resource *r)
 {
@@ -128,12 +131,6 @@ static inline void __iomem *of_iomap(struct device_node *device, int index)
 {
        return NULL;
 }
-
-static inline void __iomem *of_io_request_and_map(struct device_node *device,
-                                       int index, const char *name)
-{
-       return IOMEM_ERR_PTR(-EINVAL);
-}
 #endif
 
 #if defined(CONFIG_OF_ADDRESS) && defined(CONFIG_PCI)