Merge branch 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/scottwood/linux...
authorMichael Ellerman <mpe@ellerman.id.au>
Wed, 4 Feb 2015 01:03:21 +0000 (12:03 +1100)
committerMichael Ellerman <mpe@ellerman.id.au>
Wed, 4 Feb 2015 01:03:21 +0000 (12:03 +1100)
Freescale updates from Scott:

"Highlights include 8xx optimizations, some more work on datapath device
tree content, e300 machine check support, t1040 corenet error reporting,
and various cleanups and fixes."

38 files changed:
Documentation/devicetree/bindings/powerpc/fsl/fman.txt
Documentation/devicetree/bindings/soc/fsl/bman.txt
Documentation/devicetree/bindings/soc/fsl/qman.txt
arch/powerpc/boot/dts/fsl/pq3-etsec2-0.dtsi
arch/powerpc/boot/dts/fsl/pq3-etsec2-1.dtsi
arch/powerpc/boot/dts/fsl/pq3-etsec2-2.dtsi
arch/powerpc/boot/dts/fsl/pq3-gpio-0.dtsi
arch/powerpc/boot/dts/fsl/qoriq-bman1-portals.dtsi [new file with mode: 0644]
arch/powerpc/boot/dts/fsl/qoriq-bman1.dtsi [new file with mode: 0644]
arch/powerpc/boot/dts/fsl/qoriq-qman1-portals.dtsi [new file with mode: 0644]
arch/powerpc/boot/dts/fsl/qoriq-qman1.dtsi [new file with mode: 0644]
arch/powerpc/boot/dts/fsl/qoriq-qman3.dtsi [new file with mode: 0644]
arch/powerpc/boot/dts/mvme2500.dts [new file with mode: 0644]
arch/powerpc/boot/dts/t4240emu.dts [deleted file]
arch/powerpc/configs/corenet32_smp_defconfig
arch/powerpc/configs/corenet64_smp_defconfig
arch/powerpc/configs/mpc85xx_defconfig
arch/powerpc/configs/mpc85xx_smp_defconfig
arch/powerpc/include/asm/pci-bridge.h
arch/powerpc/include/asm/pgtable-ppc32.h
arch/powerpc/include/asm/pgtable.h
arch/powerpc/include/asm/pte-8xx.h
arch/powerpc/include/asm/pte-common.h
arch/powerpc/kernel/cputable.c
arch/powerpc/kernel/head_8xx.S
arch/powerpc/mm/fsl_booke_mmu.c
arch/powerpc/mm/mmu_context_nohash.c
arch/powerpc/mm/pgtable_32.c
arch/powerpc/mm/tlb_nohash.c
arch/powerpc/perf/core-fsl-emb.c
arch/powerpc/platforms/83xx/usb.c
arch/powerpc/platforms/85xx/Kconfig
arch/powerpc/platforms/85xx/Makefile
arch/powerpc/platforms/85xx/mvme2500.c [new file with mode: 0644]
arch/powerpc/sysdev/fsl_pci.c
arch/powerpc/sysdev/indirect_pci.c
arch/powerpc/sysdev/qe_lib/qe.c
drivers/memory/fsl-corenet-cf.c

index edeea160ca396b62dc15ff9c739190c82b1aa713..edda55f7400415a41d70efc9ecc9245d0cc60996 100644 (file)
@@ -7,6 +7,7 @@ CONTENTS
   - FMan MURAM Node
   - FMan dTSEC/XGEC/mEMAC Node
   - FMan IEEE 1588 Node
+  - FMan MDIO Node
   - Example
 
 =============================================================================
@@ -356,6 +357,69 @@ ptp-timer@fe000 {
        reg = <0xfe000 0x1000>;
 };
 
+=============================================================================
+FMan MDIO Node
+
+DESCRIPTION
+
+The MDIO is a bus to which the PHY devices are connected.
+
+PROPERTIES
+
+- compatible
+               Usage: required
+               Value type: <stringlist>
+               Definition: A standard property.
+               Must include "fsl,fman-mdio" for 1 Gb/s MDIO from FMan v2.
+               Must include "fsl,fman-xmdio" for 10 Gb/s MDIO from FMan v2.
+               Must include "fsl,fman-memac-mdio" for 1/10 Gb/s MDIO from
+               FMan v3.
+
+- reg
+               Usage: required
+               Value type: <prop-encoded-array>
+               Definition: A standard property.
+
+- bus-frequency
+               Usage: optional
+               Value type: <u32>
+               Definition: Specifies the external MDIO bus clock speed to
+               be used, if different from the standard 2.5 MHz.
+               This may be due to the standard speed being unsupported (e.g.
+               due to a hardware problem), or to advertise that all relevant
+               components in the system support a faster speed.
+
+- interrupts
+               Usage: required for external MDIO
+               Value type: <prop-encoded-array>
+               Definition: Event interrupt of external MDIO controller.
+
+- fsl,fman-internal-mdio
+               Usage: required for internal MDIO
+               Value type: boolean
+               Definition: Fman has internal MDIO for internal PCS(Physical
+               Coding Sublayer) PHYs and external MDIO for external PHYs.
+               The settings and programming routines for internal/external
+               MDIO are different. Must be included for internal MDIO.
+
+EXAMPLE
+
+Example for FMan v2 external MDIO:
+
+mdio@f1000 {
+       compatible = "fsl,fman-xmdio";
+       reg = <0xf1000 0x1000>;
+       interrupts = <101 2 0 0>;
+};
+
+Example for FMan v3 internal MDIO:
+
+mdio@f1000 {
+       compatible = "fsl,fman-memac-mdio";
+       reg = <0xf1000 0x1000>;
+       fsl,fman-internal-mdio;
+};
+
 =============================================================================
 Example
 
@@ -531,4 +595,10 @@ fman@400000 {
                compatible = "fsl,fman-ptp-timer";
                reg = <0xfe000 0x1000>;
        };
+
+       mdio@f1000 {
+               compatible = "fsl,fman-xmdio";
+               reg = <0xf1000 0x1000>;
+               interrupts = <101 2 0 0>;
+       };
 };
index 9f80bf8709acecc3ef62ec3b72ca4178c730e45b..47ac834414d8488e29c20bf3b91f369b994b8746 100644 (file)
@@ -36,6 +36,11 @@ are located at offsets 0xbf8 and 0xbfc
        Value type:     <prop-encoded-array>
        Definition:     Standard property. The error interrupt
 
+- fsl,bman-portals
+       Usage:          Required
+       Value type:     <phandle>
+       Definition:     Phandle to this BMan instance's portals
+
 - fsl,liodn
        Usage:          See pamu.txt
        Value type:     <prop-encoded-array>
@@ -96,7 +101,7 @@ The example below shows a BMan FBPR dynamic allocation memory node
 
                bman_fbpr: bman-fbpr {
                        compatible = "fsl,bman-fbpr";
-                       alloc-ranges = <0 0 0xf 0xffffffff>;
+                       alloc-ranges = <0 0 0x10 0>;
                        size = <0 0x1000000>;
                        alignment = <0 0x1000000>;
                };
@@ -104,6 +109,10 @@ The example below shows a BMan FBPR dynamic allocation memory node
 
 The example below shows a (P4080) BMan CCSR-space node
 
+       bportals: bman-portals@ff4000000 {
+               ...
+       };
+
        crypto@300000 {
                ...
                fsl,bman = <&bman, 2>;
@@ -115,6 +124,7 @@ The example below shows a (P4080) BMan CCSR-space node
                reg = <0x31a000 0x1000>;
                interrupts = <16 2 1 2>;
                fsl,liodn = <0x17>;
+               fsl,bman-portals = <&bportals>;
                memory-region = <&bman_fbpr>;
        };
 
index 063e3a0b9d045e988083f65359153337841a0f01..556ebb8be75d9cfa5b16aca5ac56316ee1f00d29 100644 (file)
@@ -38,6 +38,11 @@ are located at offsets 0xbf8 and 0xbfc
        Value type:     <prop-encoded-array>
        Definition:     Standard property. The error interrupt
 
+- fsl,qman-portals
+       Usage:          Required
+       Value type:     <phandle>
+       Definition:     Phandle to this QMan instance's portals
+
 - fsl,liodn
        Usage:          See pamu.txt
        Value type:     <prop-encoded-array>
@@ -113,13 +118,13 @@ The example below shows a QMan FQD and a PFDR dynamic allocation memory nodes
 
                qman_fqd: qman-fqd {
                        compatible = "fsl,qman-fqd";
-                       alloc-ranges = <0 0 0xf 0xffffffff>;
+                       alloc-ranges = <0 0 0x10 0>;
                        size = <0 0x400000>;
                        alignment = <0 0x400000>;
                };
                qman_pfdr: qman-pfdr {
                        compatible = "fsl,qman-pfdr";
-                       alloc-ranges = <0 0 0xf 0xffffffff>;
+                       alloc-ranges = <0 0 0x10 0>;
                        size = <0 0x2000000>;
                        alignment = <0 0x2000000>;
                };
@@ -127,6 +132,10 @@ The example below shows a QMan FQD and a PFDR dynamic allocation memory nodes
 
 The example below shows a (P4080) QMan CCSR-space node
 
+       qportals: qman-portals@ff4200000 {
+               ...
+       };
+
        clockgen: global-utilities@e1000 {
                ...
                sysclk: sysclk {
@@ -154,6 +163,7 @@ The example below shows a (P4080) QMan CCSR-space node
                reg = <0x318000 0x1000>;
                interrupts = <16 2 1 3>
                fsl,liodn = <0x16>;
+               fsl,qman-portals = <&qportals>;
                memory-region = <&qman_fqd &qman_pfdr>;
                clocks = <&platform_pll 1>;
        };
index 1382fec9e8c5f82f4c5bff8bcf22184d28cc7c5b..7fcb1ac0f2325fd73903066953430fb1fa5af64f 100644 (file)
@@ -50,6 +50,7 @@ ethernet@b0000 {
        fsl,num_tx_queues = <0x8>;
        fsl,magic-packet;
        local-mac-address = [ 00 00 00 00 00 00 ];
+       ranges;
 
        queue-group@b0000 {
                #address-cells = <1>;
index 221cd2ea5b3124260e411f697b861da19a9c9920..9f25427c152785c36ed83fee53a5c846820b3f2c 100644 (file)
@@ -50,6 +50,7 @@ ethernet@b1000 {
        fsl,num_tx_queues = <0x8>;
        fsl,magic-packet;
        local-mac-address = [ 00 00 00 00 00 00 ];
+       ranges;
 
        queue-group@b1000 {
                #address-cells = <1>;
index 61456c317609ce751b0551a45e26e0b117a29f4e..cd7c318ab131afac65198ab9556067ca59be04bf 100644 (file)
@@ -49,6 +49,7 @@ ethernet@b2000 {
        fsl,num_tx_queues = <0x8>;
        fsl,magic-packet;
        local-mac-address = [ 00 00 00 00 00 00 ];
+       ranges;
 
        queue-group@b2000 {
                #address-cells = <1>;
index 72a3ef5945c1c25615f6d18f82cb7d9b8a8cc206..a1b48546b02d124ef0548e154ce1cf7ce4bf4b87 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * PQ3 GPIO device tree stub [ controller @ offset 0xf000 ]
+ * PQ3 GPIO device tree stub [ controller @ offset 0xfc00 ]
  *
  * Copyright 2011 Freescale Semiconductor Inc.
  *
  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-gpio-controller@f000 {
+gpio-controller@fc00 {
        #gpio-cells = <2>;
        compatible = "fsl,pq3-gpio";
-       reg = <0xf000 0x100>;
+       reg = <0xfc00 0x100>;
        interrupts = <47 0x2 0 0>;
        gpio-controller;
 };
diff --git a/arch/powerpc/boot/dts/fsl/qoriq-bman1-portals.dtsi b/arch/powerpc/boot/dts/fsl/qoriq-bman1-portals.dtsi
new file mode 100644 (file)
index 0000000..5022432
--- /dev/null
@@ -0,0 +1,90 @@
+/*
+ * QorIQ BMan Portal device tree stub for 10 portals
+ *
+ * Copyright 2011 - 2014 Freescale Semiconductor Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *     * Redistributions of source code must retain the above copyright
+ *      notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above copyright
+ *      notice, this list of conditions and the following disclaimer in the
+ *      documentation and/or other materials provided with the distribution.
+ *     * Neither the name of Freescale Semiconductor nor the
+ *      names of its contributors may be used to endorse or promote products
+ *      derived from this software without specific prior written permission.
+ *
+ *
+ * ALTERNATIVELY, this software may be distributed under the terms of the
+ * GNU General Public License ("GPL") as published by the Free Software
+ * Foundation, either version 2 of that License or (at your option) any
+ * later version.
+ *
+ * THIS SOFTWARE IS PROVIDED BY Freescale Semiconductor ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL Freescale Semiconductor BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+&bportals {
+       #address-cells = <1>;
+       #size-cells = <1>;
+       compatible = "simple-bus";
+
+       bman-portal@0 {
+               compatible = "fsl,bman-portal";
+               reg = <0x0 0x4000>, <0x100000 0x1000>;
+               interrupts = <105 2 0 0>;
+       };
+       bman-portal@4000 {
+               compatible = "fsl,bman-portal";
+               reg = <0x4000 0x4000>, <0x101000 0x1000>;
+               interrupts = <107 2 0 0>;
+       };
+       bman-portal@8000 {
+               compatible = "fsl,bman-portal";
+               reg = <0x8000 0x4000>, <0x102000 0x1000>;
+               interrupts = <109 2 0 0>;
+       };
+       bman-portal@c000 {
+               compatible = "fsl,bman-portal";
+               reg = <0xc000 0x4000>, <0x103000 0x1000>;
+               interrupts = <111 2 0 0>;
+       };
+       bman-portal@10000 {
+               compatible = "fsl,bman-portal";
+               reg = <0x10000 0x4000>, <0x104000 0x1000>;
+               interrupts = <113 2 0 0>;
+       };
+       bman-portal@14000 {
+               compatible = "fsl,bman-portal";
+               reg = <0x14000 0x4000>, <0x105000 0x1000>;
+               interrupts = <115 2 0 0>;
+       };
+       bman-portal@18000 {
+               compatible = "fsl,bman-portal";
+               reg = <0x18000 0x4000>, <0x106000 0x1000>;
+               interrupts = <117 2 0 0>;
+       };
+       bman-portal@1c000 {
+               compatible = "fsl,bman-portal";
+               reg = <0x1c000 0x4000>, <0x107000 0x1000>;
+               interrupts = <119 2 0 0>;
+       };
+       bman-portal@20000 {
+               compatible = "fsl,bman-portal";
+               reg = <0x20000 0x4000>, <0x108000 0x1000>;
+               interrupts = <121 2 0 0>;
+       };
+       bman-portal@24000 {
+               compatible = "fsl,bman-portal";
+               reg = <0x24000 0x4000>, <0x109000 0x1000>;
+               interrupts = <123 2 0 0>;
+       };
+};
diff --git a/arch/powerpc/boot/dts/fsl/qoriq-bman1.dtsi b/arch/powerpc/boot/dts/fsl/qoriq-bman1.dtsi
new file mode 100644 (file)
index 0000000..3b5e350
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+ * QorIQ BMan device tree stub [ controller @ offset 0x31a000 ]
+ *
+ * Copyright 2011 - 2014 Freescale Semiconductor Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *     * Redistributions of source code must retain the above copyright
+ *      notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above copyright
+ *      notice, this list of conditions and the following disclaimer in the
+ *      documentation and/or other materials provided with the distribution.
+ *     * Neither the name of Freescale Semiconductor nor the
+ *      names of its contributors may be used to endorse or promote products
+ *      derived from this software without specific prior written permission.
+ *
+ *
+ * ALTERNATIVELY, this software may be distributed under the terms of the
+ * GNU General Public License ("GPL") as published by the Free Software
+ * Foundation, either version 2 of that License or (at your option) any
+ * later version.
+ *
+ * THIS SOFTWARE IS PROVIDED BY Freescale Semiconductor ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL Freescale Semiconductor BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+bman: bman@31a000 {
+       compatible = "fsl,bman";
+       reg = <0x31a000 0x1000>;
+       interrupts = <16 2 1 2>;
+       fsl,bman-portals = <&bportals>;
+       memory-region = <&bman_fbpr>;
+};
diff --git a/arch/powerpc/boot/dts/fsl/qoriq-qman1-portals.dtsi b/arch/powerpc/boot/dts/fsl/qoriq-qman1-portals.dtsi
new file mode 100644 (file)
index 0000000..05d51ac
--- /dev/null
@@ -0,0 +1,101 @@
+/*
+ * QorIQ QMan Portal device tree stub for 10 portals & 15 pool channels
+ *
+ * Copyright 2011 - 2014 Freescale Semiconductor Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *     * Redistributions of source code must retain the above copyright
+ *      notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above copyright
+ *      notice, this list of conditions and the following disclaimer in the
+ *      documentation and/or other materials provided with the distribution.
+ *     * Neither the name of Freescale Semiconductor nor the
+ *      names of its contributors may be used to endorse or promote products
+ *      derived from this software without specific prior written permission.
+ *
+ *
+ * ALTERNATIVELY, this software may be distributed under the terms of the
+ * GNU General Public License ("GPL") as published by the Free Software
+ * Foundation, either version 2 of that License or (at your option) any
+ * later version.
+ *
+ * THIS SOFTWARE IS PROVIDED BY Freescale Semiconductor ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL Freescale Semiconductor BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+&qportals {
+       #address-cells = <1>;
+       #size-cells = <1>;
+       compatible = "simple-bus";
+
+       qportal0: qman-portal@0 {
+               compatible = "fsl,qman-portal";
+               reg = <0x0 0x4000>, <0x100000 0x1000>;
+               interrupts = <104 2 0 0>;
+               fsl,qman-channel-id = <0x0>;
+       };
+       qportal1: qman-portal@4000 {
+               compatible = "fsl,qman-portal";
+               reg = <0x4000 0x4000>, <0x101000 0x1000>;
+               interrupts = <106 2 0 0>;
+               fsl,qman-channel-id = <1>;
+       };
+       qportal2: qman-portal@8000 {
+               compatible = "fsl,qman-portal";
+               reg = <0x8000 0x4000>, <0x102000 0x1000>;
+               interrupts = <108 2 0 0>;
+               fsl,qman-channel-id = <2>;
+       };
+       qportal3: qman-portal@c000 {
+               compatible = "fsl,qman-portal";
+               reg = <0xc000 0x4000>, <0x103000 0x1000>;
+               interrupts = <110 2 0 0>;
+               fsl,qman-channel-id = <3>;
+       };
+       qportal4: qman-portal@10000 {
+               compatible = "fsl,qman-portal";
+               reg = <0x10000 0x4000>, <0x104000 0x1000>;
+               interrupts = <112 2 0 0>;
+               fsl,qman-channel-id = <4>;
+       };
+       qportal5: qman-portal@14000 {
+               compatible = "fsl,qman-portal";
+               reg = <0x14000 0x4000>, <0x105000 0x1000>;
+               interrupts = <114 2 0 0>;
+               fsl,qman-channel-id = <5>;
+       };
+       qportal6: qman-portal@18000 {
+               compatible = "fsl,qman-portal";
+               reg = <0x18000 0x4000>, <0x106000 0x1000>;
+               interrupts = <116 2 0 0>;
+               fsl,qman-channel-id = <6>;
+       };
+
+       qportal7: qman-portal@1c000 {
+               compatible = "fsl,qman-portal";
+               reg = <0x1c000 0x4000>, <0x107000 0x1000>;
+               interrupts = <118 2 0 0>;
+               fsl,qman-channel-id = <7>;
+       };
+       qportal8: qman-portal@20000 {
+               compatible = "fsl,qman-portal";
+               reg = <0x20000 0x4000>, <0x108000 0x1000>;
+               interrupts = <120 2 0 0>;
+               fsl,qman-channel-id = <8>;
+       };
+       qportal9: qman-portal@24000 {
+               compatible = "fsl,qman-portal";
+               reg = <0x24000 0x4000>, <0x109000 0x1000>;
+               interrupts = <122 2 0 0>;
+               fsl,qman-channel-id = <9>;
+       };
+};
diff --git a/arch/powerpc/boot/dts/fsl/qoriq-qman1.dtsi b/arch/powerpc/boot/dts/fsl/qoriq-qman1.dtsi
new file mode 100644 (file)
index 0000000..0695778
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+ * QorIQ QMan device tree stub [ controller @ offset 0x318000 ]
+ *
+ * Copyright 2011 - 2014 Freescale Semiconductor Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *     * Redistributions of source code must retain the above copyright
+ *      notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above copyright
+ *      notice, this list of conditions and the following disclaimer in the
+ *      documentation and/or other materials provided with the distribution.
+ *     * Neither the name of Freescale Semiconductor nor the
+ *      names of its contributors may be used to endorse or promote products
+ *      derived from this software without specific prior written permission.
+ *
+ *
+ * ALTERNATIVELY, this software may be distributed under the terms of the
+ * GNU General Public License ("GPL") as published by the Free Software
+ * Foundation, either version 2 of that License or (at your option) any
+ * later version.
+ *
+ * THIS SOFTWARE IS PROVIDED BY Freescale Semiconductor ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL Freescale Semiconductor BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+qman: qman@318000 {
+       compatible = "fsl,qman";
+       reg = <0x318000 0x1000>;
+       interrupts = <16 2 1 3>;
+       fsl,qman-portals = <&qportals>;
+       memory-region = <&qman_fqd &qman_pfdr>;
+};
diff --git a/arch/powerpc/boot/dts/fsl/qoriq-qman3.dtsi b/arch/powerpc/boot/dts/fsl/qoriq-qman3.dtsi
new file mode 100644 (file)
index 0000000..b379abd
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+ * QorIQ QMan rev3 device tree stub [ controller @ offset 0x318000 ]
+ *
+ * Copyright 2014 Freescale Semiconductor Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *     * Redistributions of source code must retain the above copyright
+ *      notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above copyright
+ *      notice, this list of conditions and the following disclaimer in the
+ *      documentation and/or other materials provided with the distribution.
+ *     * Neither the name of Freescale Semiconductor nor the
+ *      names of its contributors may be used to endorse or promote products
+ *      derived from this software without specific prior written permission.
+ *
+ *
+ * ALTERNATIVELY, this software may be distributed under the terms of the
+ * GNU General Public License ("GPL") as published by the Free Software
+ * Foundation, either version 2 of that License or (at your option) any
+ * later version.
+ *
+ * THIS SOFTWARE IS PROVIDED BY Freescale Semiconductor ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL Freescale Semiconductor BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+qman: qman@318000 {
+       compatible = "fsl,qman";
+       reg = <0x318000 0x2000>;
+       interrupts = <16 2 1 3>;
+       fsl,qman-portals = <&qportals>;
+       memory-region = <&qman_fqd &qman_pfdr>;
+};
diff --git a/arch/powerpc/boot/dts/mvme2500.dts b/arch/powerpc/boot/dts/mvme2500.dts
new file mode 100644 (file)
index 0000000..67714cf
--- /dev/null
@@ -0,0 +1,280 @@
+/*
+ * Device tree source for the Emerson/Artesyn MVME2500
+ *
+ * Copyright 2014 Elettra-Sincrotrone Trieste S.C.p.A.
+ *
+ * This program is free software; you can redistribute  it and/or modify it
+ * under  the terms of  the GNU General  Public License as published by the
+ * Free Software Foundation;  either version 2 of the  License, or (at your
+ * option) any later version.
+ *
+ * Based on: P2020 DS Device Tree Source
+ * Copyright 2009 Freescale Semiconductor Inc.
+ */
+
+/include/ "fsl/p2020si-pre.dtsi"
+
+/ {
+       model = "MVME2500";
+       compatible = "artesyn,MVME2500";
+
+       aliases {
+               serial2 = &serial2;
+               serial3 = &serial3;
+               serial4 = &serial4;
+               serial5 = &serial5;
+       };
+
+       memory {
+               device_type = "memory";
+       };
+
+       soc: soc@ffe00000 {
+               ranges = <0x0 0 0xffe00000 0x100000>;
+
+               i2c@3000 {
+                       hwmon@4c {
+                               compatible = "adi,adt7461";
+                               reg = <0x4c>;
+                       };
+
+                       rtc@68 {
+                               compatible = "dallas,ds1337";
+                               reg = <0x68>;
+                               interrupts = <8 1 0 0>;
+                       };
+
+                       eeprom@54 {
+                               compatible = "atmel,24c64";
+                               reg = <0x54>;
+                       };
+
+                       eeprom@52 {
+                               compatible = "atmel,24c512";
+                               reg = <0x52>;
+                       };
+
+                       eeprom@53 {
+                               compatible = "atmel,24c512";
+                               reg = <0x53>;
+                       };
+
+                       eeprom@50 {
+                               compatible = "atmel,24c02";
+                               reg = <0x50>;
+                       };
+
+               };
+
+               spi0: spi@7000 {
+                       fsl,espi-num-chipselects = <2>;
+
+                       flash@0 {
+                               compatible = "atmel,at25df641";
+                               reg = <0>;
+                               spi-max-frequency = <10000000>;
+                       };
+                       flash@1 {
+                               compatible = "atmel,at25df641";
+                               reg = <1>;
+                               spi-max-frequency = <10000000>;
+                       };
+               };
+
+               usb@22000 {
+                       dr_mode = "host";
+                       phy_type = "ulpi";
+               };
+
+               enet0: ethernet@24000 {
+                       tbi-handle = <&tbi0>;
+                       phy-handle = <&phy1>;
+                       phy-connection-type = "rgmii-id";
+               };
+
+               mdio@24520 {
+                       phy1: ethernet-phy@1 {
+                               compatible = "brcm,bcm54616S";
+                               interrupts = <6 1 0 0>;
+                               reg = <0x1>;
+                       };
+
+                       phy2: ethernet-phy@2 {
+                               compatible = "brcm,bcm54616S";
+                               interrupts = <6 1 0 0>;
+                               reg = <0x2>;
+                       };
+
+                       phy3: ethernet-phy@3 {
+                               compatible = "brcm,bcm54616S";
+                               interrupts = <5 1 0 0>;
+                               reg = <0x3>;
+                       };
+
+                       phy7: ethernet-phy@7 {
+                               compatible = "brcm,bcm54616S";
+                               interrupts = <7 1 0 0>;
+                               reg = <0x7>;
+                       };
+
+                       tbi0: tbi-phy@11 {
+                               reg = <0x11>;
+                               device_type = "tbi-phy";
+                       };
+               };
+
+               enet1: ethernet@25000 {
+                       tbi-handle = <&tbi1>;
+                       phy-handle = <&phy7>;
+                       phy-connection-type = "rgmii-id";
+               };
+
+               mdio@25520 {
+                       tbi1: tbi-phy@11 {
+                               reg = <0x11>;
+                               device_type = "tbi-phy";
+                       };
+               };
+
+               enet2: ethernet@26000 {
+                       tbi-handle = <&tbi2>;
+                       phy-handle = <&phy3>;
+                       phy-connection-type = "rgmii-id";
+               };
+
+               mdio@26520 {
+                       tbi2: tbi-phy@11 {
+                               reg = <0x11>;
+                               device_type = "tbi-phy";
+                       };
+               };
+       };
+
+       lbc: localbus@ffe05000 {
+               reg = <0 0xffe05000 0 0x1000>;
+
+               ranges = <0x0 0x0 0x0 0xfff00000 0x00080000
+                         0x1 0x0 0x0 0xffc40000 0x00010000
+                         0x2 0x0 0x0 0xffc50000 0x00010000
+                         0x3 0x0 0x0 0xffc60000 0x00010000
+                         0x4 0x0 0x0 0xffc70000 0x00010000
+                         0x6 0x0 0x0 0xffc80000 0x00010000
+                         0x5 0x0 0x0 0xffdf0000 0x00008000>;
+
+               serial2: serial@1,0 {
+                       device_type = "serial";
+                       compatible = "ns16550";
+                       reg = <0x1 0x0 0x100>;
+                       clock-frequency = <1843200>;
+                       interrupts = <11 2 0 0>;
+               };
+
+               serial3: serial@2,0 {
+                       device_type = "serial";
+                       compatible = "ns16550";
+                       reg = <0x2 0x0 0x100>;
+                       clock-frequency = <1843200>;
+                       interrupts = <1 2 0 0>;
+               };
+
+               serial4: serial@3,0 {
+                       device_type = "serial";
+                       compatible = "ns16550";
+                       reg = <0x3 0x0 0x100>;
+                       clock-frequency = <1843200>;
+                       interrupts = <2 2 0 0>;
+               };
+
+               serial5: serial@4,0 {
+                       device_type = "serial";
+                       compatible = "ns16550";
+                       reg = <0x4 0x0 0x100>;
+                       clock-frequency = <1843200>;
+                       interrupts = <3 2 0 0>;
+               };
+
+               mram@0,0 {
+                       compatible = "everspin,mram", "mtd-ram";
+                       reg = <0x0 0x0 0x80000>;
+                       bank-width = <2>;
+               };
+
+               board-control@5,0 {
+                       compatible = "artesyn,mvme2500-fpga";
+                       reg = <0x5 0x0 0x01000>;
+               };
+
+               cpld@6,0 {
+                       compatible = "artesyn,mvme2500-cpld";
+                       reg = <0x6 0x0 0x10000>;
+                       interrupts = <9 1 0 0>;
+               };
+       };
+
+       pci0: pcie@ffe08000 {
+               reg = <0 0xffe08000 0 0x1000>;
+               ranges = <0x2000000 0x0 0x80000000 0 0x80000000 0x0 0x20000000
+                         0x1000000 0x0 0x00000000 0 0xffc00000 0x0 0x10000>;
+               pcie@0 {
+                       ranges = <0x2000000 0x0 0x80000000
+                                 0x2000000 0x0 0x80000000
+                                 0x0 0x20000000
+
+                                 0x1000000 0x0 0x0
+                                 0x1000000 0x0 0x0
+                                 0x0 0x10000>;
+               };
+       };
+
+       pci1: pcie@ffe09000 {
+               reg = <0 0xffe09000 0 0x1000>;
+               ranges = <0x2000000 0x0 0xa0000000 0 0xa0000000 0x0 0x20000000
+                         0x1000000 0x0 0x00000000 0 0xffc10000 0x0 0x10000>;
+               pcie@0 {
+                       ranges = <0x2000000 0x0 0xa0000000
+                                 0x2000000 0x0 0xa0000000
+                                 0x0 0x20000000
+
+                                 0x1000000 0x0 0x0
+                                 0x1000000 0x0 0x0
+                                 0x0 0x10000>;
+               };
+
+       };
+
+       pci2: pcie@ffe0a000 {
+               reg = <0 0xffe0a000 0 0x1000>;
+               ranges = <0x2000000 0x0 0xc0000000 0 0xc0000000 0x0 0x20000000
+                         0x1000000 0x0 0x00000000 0 0xffc20000 0x0 0x10000>;
+               pcie@0 {
+                       ranges = <0x2000000 0x0 0xc0000000
+                                 0x2000000 0x0 0xc0000000
+                                 0x0 0x20000000
+
+                                 0x1000000 0x0 0x0
+                                 0x1000000 0x0 0x0
+                                 0x0 0x10000>;
+               };
+       };
+};
+
+/include/ "fsl/p2020si-post.dtsi"
+
+/ {
+       soc@ffe00000 {
+               serial@4600 {
+                       status = "disabled";
+               };
+
+               i2c@3100 {
+                       status = "disabled";
+               };
+
+               sdhc@2e000 {
+                       compatible = "fsl,p2020-esdhc", "fsl,esdhc";
+                       non-removable;
+               };
+
+       };
+
+};
diff --git a/arch/powerpc/boot/dts/t4240emu.dts b/arch/powerpc/boot/dts/t4240emu.dts
deleted file mode 100644 (file)
index decaf35..0000000
+++ /dev/null
@@ -1,281 +0,0 @@
-/*
- * T4240 emulator Device Tree Source
- *
- * Copyright 2013 Freescale Semiconductor Inc.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *     * Redistributions of source code must retain the above copyright
- *       notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above copyright
- *       notice, this list of conditions and the following disclaimer in the
- *       documentation and/or other materials provided with the distribution.
- *     * Neither the name of Freescale Semiconductor nor the
- *       names of its contributors may be used to endorse or promote products
- *       derived from this software without specific prior written permission.
- *
- *
- * ALTERNATIVELY, this software may be distributed under the terms of the
- * GNU General Public License ("GPL") as published by the Free Software
- * Foundation, either version 2 of that License or (at your option) any
- * later version.
- *
- * THIS SOFTWARE IS PROVIDED BY Freescale Semiconductor "AS IS" AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL Freescale Semiconductor BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/dts-v1/;
-
-/include/ "fsl/e6500_power_isa.dtsi"
-/ {
-       compatible = "fsl,T4240";
-       #address-cells = <2>;
-       #size-cells = <2>;
-       interrupt-parent = <&mpic>;
-
-       aliases {
-               ccsr = &soc;
-
-               serial0 = &serial0;
-               serial1 = &serial1;
-               serial2 = &serial2;
-               serial3 = &serial3;
-               dma0 = &dma0;
-               dma1 = &dma1;
-       };
-
-       cpus {
-               #address-cells = <1>;
-               #size-cells = <0>;
-
-               cpu0: PowerPC,e6500@0 {
-                       device_type = "cpu";
-                       reg = <0 1>;
-                       next-level-cache = <&L2_1>;
-                       fsl,portid-mapping = <0x80000000>;
-               };
-               cpu1: PowerPC,e6500@2 {
-                       device_type = "cpu";
-                       reg = <2 3>;
-                       next-level-cache = <&L2_1>;
-                       fsl,portid-mapping = <0x80000000>;
-               };
-               cpu2: PowerPC,e6500@4 {
-                       device_type = "cpu";
-                       reg = <4 5>;
-                       next-level-cache = <&L2_1>;
-                       fsl,portid-mapping = <0x80000000>;
-               };
-               cpu3: PowerPC,e6500@6 {
-                       device_type = "cpu";
-                       reg = <6 7>;
-                       next-level-cache = <&L2_1>;
-                       fsl,portid-mapping = <0x80000000>;
-               };
-
-               cpu4: PowerPC,e6500@8 {
-                       device_type = "cpu";
-                       reg = <8 9>;
-                       next-level-cache = <&L2_2>;
-                       fsl,portid-mapping = <0x40000000>;
-               };
-               cpu5: PowerPC,e6500@10 {
-                       device_type = "cpu";
-                       reg = <10 11>;
-                       next-level-cache = <&L2_2>;
-                       fsl,portid-mapping = <0x40000000>;
-               };
-               cpu6: PowerPC,e6500@12 {
-                       device_type = "cpu";
-                       reg = <12 13>;
-                       next-level-cache = <&L2_2>;
-                       fsl,portid-mapping = <0x40000000>;
-               };
-               cpu7: PowerPC,e6500@14 {
-                       device_type = "cpu";
-                       reg = <14 15>;
-                       next-level-cache = <&L2_2>;
-                       fsl,portid-mapping = <0x40000000>;
-               };
-
-               cpu8: PowerPC,e6500@16 {
-                       device_type = "cpu";
-                       reg = <16 17>;
-                       next-level-cache = <&L2_3>;
-                       fsl,portid-mapping = <0x20000000>;
-               };
-               cpu9: PowerPC,e6500@18 {
-                       device_type = "cpu";
-                       reg = <18 19>;
-                       next-level-cache = <&L2_3>;
-                       fsl,portid-mapping = <0x20000000>;
-               };
-               cpu10: PowerPC,e6500@20 {
-                       device_type = "cpu";
-                       reg = <20 21>;
-                       next-level-cache = <&L2_3>;
-                       fsl,portid-mapping = <0x20000000>;
-               };
-               cpu11: PowerPC,e6500@22 {
-                       device_type = "cpu";
-                       reg = <22 23>;
-                       next-level-cache = <&L2_3>;
-                       fsl,portid-mapping = <0x20000000>;
-               };
-       };
-};
-
-/ {
-       model = "fsl,T4240QDS";
-       compatible = "fsl,T4240EMU", "fsl,T4240QDS";
-       #address-cells = <2>;
-       #size-cells = <2>;
-       interrupt-parent = <&mpic>;
-
-       ifc: localbus@ffe124000 {
-               reg = <0xf 0xfe124000 0 0x2000>;
-               ranges = <0 0 0xf 0xe8000000 0x08000000
-                         2 0 0xf 0xff800000 0x00010000
-                         3 0 0xf 0xffdf0000 0x00008000>;
-
-               nor@0,0 {
-                       #address-cells = <1>;
-                       #size-cells = <1>;
-                       compatible = "cfi-flash";
-                       reg = <0x0 0x0 0x8000000>;
-
-                       bank-width = <2>;
-                       device-width = <1>;
-               };
-
-       };
-
-       memory {
-               device_type = "memory";
-       };
-
-       soc: soc@ffe000000 {
-               ranges = <0x00000000 0xf 0xfe000000 0x1000000>;
-               reg = <0xf 0xfe000000 0 0x00001000>;
-
-       };
-};
-
-&ifc {
-       #address-cells = <2>;
-       #size-cells = <1>;
-       compatible = "fsl,ifc", "simple-bus";
-       interrupts = <25 2 0 0>;
-};
-
-&soc {
-       #address-cells = <1>;
-       #size-cells = <1>;
-       device_type = "soc";
-       compatible = "simple-bus";
-
-       soc-sram-error {
-               compatible = "fsl,soc-sram-error";
-               interrupts = <16 2 1 29>;
-       };
-
-       corenet-law@0 {
-               compatible = "fsl,corenet-law";
-               reg = <0x0 0x1000>;
-               fsl,num-laws = <32>;
-       };
-
-       ddr1: memory-controller@8000 {
-               compatible = "fsl,qoriq-memory-controller-v4.7",
-                               "fsl,qoriq-memory-controller";
-               reg = <0x8000 0x1000>;
-               interrupts = <16 2 1 23>;
-       };
-
-       ddr2: memory-controller@9000 {
-               compatible = "fsl,qoriq-memory-controller-v4.7",
-                               "fsl,qoriq-memory-controller";
-               reg = <0x9000 0x1000>;
-               interrupts = <16 2 1 22>;
-       };
-
-       ddr3: memory-controller@a000 {
-               compatible = "fsl,qoriq-memory-controller-v4.7",
-                               "fsl,qoriq-memory-controller";
-               reg = <0xa000 0x1000>;
-               interrupts = <16 2 1 21>;
-       };
-
-       cpc: l3-cache-controller@10000 {
-               compatible = "fsl,t4240-l3-cache-controller", "cache";
-               reg = <0x10000 0x1000
-                      0x11000 0x1000
-                      0x12000 0x1000>;
-               interrupts = <16 2 1 27
-                             16 2 1 26
-                             16 2 1 25>;
-       };
-
-       corenet-cf@18000 {
-               compatible = "fsl,corenet2-cf", "fsl,corenet-cf";
-               reg = <0x18000 0x1000>;
-               interrupts = <16 2 1 31>;
-               fsl,ccf-num-csdids = <32>;
-               fsl,ccf-num-snoopids = <32>;
-       };
-
-       iommu@20000 {
-               compatible = "fsl,pamu-v1.0", "fsl,pamu";
-               reg = <0x20000 0x6000>;
-               fsl,portid-mapping = <0x8000>;
-               interrupts = <
-                       24 2 0 0
-                       16 2 1 30>;
-       };
-
-/include/ "fsl/qoriq-mpic.dtsi"
-
-       guts: global-utilities@e0000 {
-               compatible = "fsl,t4240-device-config", "fsl,qoriq-device-config-2.0";
-               reg = <0xe0000 0xe00>;
-               fsl,has-rstcr;
-               fsl,liodn-bits = <12>;
-       };
-
-/include/ "fsl/qoriq-clockgen2.dtsi"
-       global-utilities@e1000 {
-               compatible = "fsl,t4240-clockgen", "fsl,qoriq-clockgen-2.0";
-       };
-
-/include/ "fsl/qoriq-dma-0.dtsi"
-/include/ "fsl/qoriq-dma-1.dtsi"
-
-/include/ "fsl/qoriq-i2c-0.dtsi"
-/include/ "fsl/qoriq-i2c-1.dtsi"
-/include/ "fsl/qoriq-duart-0.dtsi"
-/include/ "fsl/qoriq-duart-1.dtsi"
-
-       L2_1: l2-cache-controller@c20000 {
-               compatible = "fsl,t4240-l2-cache-controller";
-               reg = <0xc20000 0x40000>;
-               next-level-cache = <&cpc>;
-       };
-       L2_2: l2-cache-controller@c60000 {
-               compatible = "fsl,t4240-l2-cache-controller";
-               reg = <0xc60000 0x40000>;
-               next-level-cache = <&cpc>;
-       };
-       L2_3: l2-cache-controller@ca0000 {
-               compatible = "fsl,t4240-l2-cache-controller";
-               reg = <0xca0000 0x40000>;
-               next-level-cache = <&cpc>;
-       };
-};
index 2826bb4ff560586e2a983c0655762bd045ba67cc..51866f17068457038503ff14520ef9a67e3a0d7d 100644 (file)
@@ -75,6 +75,7 @@ CONFIG_MTD_PHYSMAP_OF=y
 CONFIG_MTD_NAND=y
 CONFIG_MTD_NAND_FSL_ELBC=y
 CONFIG_MTD_NAND_FSL_IFC=y
+CONFIG_MTD_SPI_NOR=y
 CONFIG_BLK_DEV_LOOP=y
 CONFIG_BLK_DEV_RAM=y
 CONFIG_BLK_DEV_RAM_SIZE=131072
@@ -92,6 +93,7 @@ CONFIG_SATA_SIL=y
 CONFIG_PATA_SIL680=y
 CONFIG_NETDEVICES=y
 CONFIG_FSL_PQ_MDIO=y
+CONFIG_FSL_XGMAC_MDIO=y
 CONFIG_E1000=y
 CONFIG_E1000E=y
 CONFIG_AT803X_PHY=y
index 6db97e4414b2eabaa92b82af533f7facd646e675..d6c0c819895288c39bd826085e7fadb6793b360a 100644 (file)
@@ -69,6 +69,7 @@ CONFIG_MTD_PHYSMAP_OF=y
 CONFIG_MTD_NAND=y
 CONFIG_MTD_NAND_FSL_ELBC=y
 CONFIG_MTD_NAND_FSL_IFC=y
+CONFIG_MTD_SPI_NOR=y
 CONFIG_MTD_UBI=y
 CONFIG_BLK_DEV_LOOP=y
 CONFIG_BLK_DEV_RAM=y
@@ -79,7 +80,11 @@ CONFIG_SATA_FSL=y
 CONFIG_SATA_SIL24=y
 CONFIG_NETDEVICES=y
 CONFIG_DUMMY=y
+CONFIG_FSL_PQ_MDIO=y
+CONFIG_FSL_XGMAC_MDIO=y
 CONFIG_E1000E=y
+CONFIG_VITESSE_PHY=y
+CONFIG_FIXED_PHY=y
 CONFIG_INPUT_FF_MEMLESS=m
 # CONFIG_INPUT_MOUSEDEV is not set
 # CONFIG_INPUT_KEYBOARD is not set
index cfae862d634742917de18b9dbe7d70e81843f8e8..8535c343dd577e1c56fff8be45cc15a73a806ed6 100644 (file)
@@ -42,6 +42,7 @@ CONFIG_TQM8548=y
 CONFIG_TQM8555=y
 CONFIG_TQM8560=y
 CONFIG_SBC8548=y
+CONFIG_MVME2500=y
 CONFIG_QUICC_ENGINE=y
 CONFIG_QE_GPIO=y
 CONFIG_HIGHMEM=y
@@ -49,6 +50,8 @@ CONFIG_BINFMT_MISC=m
 CONFIG_MATH_EMULATION=y
 CONFIG_FORCE_MAX_ZONEORDER=12
 CONFIG_PCI=y
+CONFIG_PCIEPORTBUS=y
+# CONFIG_PCIEASPM is not set
 CONFIG_PCI_MSI=y
 CONFIG_RAPIDIO=y
 CONFIG_NET=y
@@ -85,10 +88,14 @@ CONFIG_FTL=y
 CONFIG_MTD_CFI=y
 CONFIG_MTD_CFI_INTELEXT=y
 CONFIG_MTD_CFI_AMDSTD=y
+CONFIG_MTD_PHYSMAP=y
 CONFIG_MTD_PHYSMAP_OF=y
+CONFIG_MTD_PLATRAM=y
+CONFIG_MTD_M25P80=y
 CONFIG_MTD_NAND=y
 CONFIG_MTD_NAND_FSL_ELBC=y
 CONFIG_MTD_NAND_FSL_IFC=y
+CONFIG_MTD_SPI_NOR=y
 CONFIG_MTD_UBI=y
 CONFIG_BLK_DEV_LOOP=y
 CONFIG_BLK_DEV_NBD=y
@@ -120,6 +127,7 @@ CONFIG_MARVELL_PHY=y
 CONFIG_DAVICOM_PHY=y
 CONFIG_CICADA_PHY=y
 CONFIG_VITESSE_PHY=y
+CONFIG_BROADCOM_PHY=y
 CONFIG_FIXED_PHY=y
 CONFIG_INPUT_FF_MEMLESS=m
 # CONFIG_INPUT_MOUSEDEV is not set
@@ -128,8 +136,8 @@ CONFIG_INPUT_FF_MEMLESS=m
 CONFIG_SERIO_LIBPS2=y
 CONFIG_SERIAL_8250=y
 CONFIG_SERIAL_8250_CONSOLE=y
-CONFIG_SERIAL_8250_NR_UARTS=2
-CONFIG_SERIAL_8250_RUNTIME_UARTS=2
+CONFIG_SERIAL_8250_NR_UARTS=6
+CONFIG_SERIAL_8250_RUNTIME_UARTS=6
 CONFIG_SERIAL_8250_MANY_PORTS=y
 CONFIG_SERIAL_8250_DETECT_IRQ=y
 CONFIG_SERIAL_8250_RSA=y
@@ -142,7 +150,8 @@ CONFIG_SPI=y
 CONFIG_SPI_FSL_SPI=y
 CONFIG_SPI_FSL_ESPI=y
 CONFIG_GPIO_MPC8XXX=y
-# CONFIG_HWMON is not set
+CONFIG_HWMON=m
+CONFIG_SENSORS_LM90=m
 CONFIG_FB=y
 CONFIG_FB_FSL_DIU=y
 # CONFIG_VGA_CONSOLE is not set
@@ -185,6 +194,7 @@ CONFIG_MMC_SDHCI_PLTFM=y
 CONFIG_MMC_SDHCI_OF_ESDHC=y
 CONFIG_EDAC=y
 CONFIG_EDAC_MM_EDAC=y
+CONFIG_EDAC_MPC85XX=y
 CONFIG_RTC_CLASS=y
 CONFIG_RTC_DRV_DS1307=y
 CONFIG_RTC_DRV_DS1374=y
index 5b79adb64ce2e538b2c01e2b6261d77395f648f3..c45ad2e01b0ce1d05b04f629117be4b9a60ef1ab 100644 (file)
@@ -91,6 +91,7 @@ CONFIG_MTD_PHYSMAP_OF=y
 CONFIG_MTD_NAND=y
 CONFIG_MTD_NAND_FSL_ELBC=y
 CONFIG_MTD_NAND_FSL_IFC=y
+CONFIG_MTD_SPI_NOR=y
 CONFIG_MTD_UBI=y
 CONFIG_BLK_DEV_LOOP=y
 CONFIG_BLK_DEV_NBD=y
index 725247beebecda3493e9e477f7fd4ec29911b558..546d036fe925f408f1ff11296ff07d879916df84 100644 (file)
@@ -119,6 +119,10 @@ extern void setup_indirect_pci(struct pci_controller* hose,
 extern int indirect_read_config(struct pci_bus *bus, unsigned int devfn,
                                int offset, int len, u32 *val);
 
+extern int __indirect_read_config(struct pci_controller *hose,
+                                 unsigned char bus_number, unsigned int devfn,
+                                 int offset, int len, u32 *val);
+
 extern int indirect_write_config(struct pci_bus *bus, unsigned int devfn,
                                 int offset, int len, u32 val);
 
index 234e07c478032728861bb918664e48592cf0f712..26ce0ab0a9e45f4a3d06a3a8a9ea4dae8a833390 100644 (file)
@@ -178,12 +178,11 @@ static inline unsigned long pte_update(pte_t *p,
        andc    %1,%0,%5\n\
        or      %1,%1,%6\n\
        /* 0x200 == Extended encoding, bit 22 */ \
-       /* Bit 22 has to be 1 if neither _PAGE_USER nor _PAGE_RW are set */ \
-       rlwimi  %1,%1,32-2,0x200\n /* get _PAGE_USER */ \
-       rlwinm  %3,%1,32-1,0x200\n /* get _PAGE_RW */ \
-       or      %1,%3,%1\n\
-       xori    %1,%1,0x200\n"
-"      stwcx.  %1,0,%4\n\
+       /* Bit 22 has to be 1 when _PAGE_USER is unset and _PAGE_RO is set */ \
+       rlwimi  %1,%1,32-1,0x200\n /* get _PAGE_RO */ \
+       rlwinm  %3,%1,32-2,0x200\n /* get _PAGE_USER */ \
+       andc    %1,%1,%3\n\
+       stwcx.  %1,0,%4\n\
        bne-    1b"
        : "=&r" (old), "=&r" (tmp), "=m" (*p), "=&r" (tmp2)
        : "r" (p), "r" (clr), "r" (set), "m" (*p)
@@ -275,7 +274,7 @@ static inline pte_t ptep_get_and_clear(struct mm_struct *mm, unsigned long addr,
 static inline void ptep_set_wrprotect(struct mm_struct *mm, unsigned long addr,
                                      pte_t *ptep)
 {
-       pte_update(ptep, (_PAGE_RW | _PAGE_HWWRITE), 0);
+       pte_update(ptep, (_PAGE_RW | _PAGE_HWWRITE), _PAGE_RO);
 }
 static inline void huge_ptep_set_wrprotect(struct mm_struct *mm,
                                           unsigned long addr, pte_t *ptep)
@@ -286,9 +285,11 @@ static inline void huge_ptep_set_wrprotect(struct mm_struct *mm,
 
 static inline void __ptep_set_access_flags(pte_t *ptep, pte_t entry)
 {
-       unsigned long bits = pte_val(entry) &
+       unsigned long set = pte_val(entry) &
                (_PAGE_DIRTY | _PAGE_ACCESSED | _PAGE_RW | _PAGE_EXEC);
-       pte_update(ptep, 0, bits);
+       unsigned long clr = ~pte_val(entry) & _PAGE_RO;
+
+       pte_update(ptep, clr, set);
 }
 
 #define __HAVE_ARCH_PTE_SAME
@@ -346,10 +347,14 @@ static inline void __ptep_set_access_flags(pte_t *ptep, pte_t entry)
 #define pte_to_pgoff(pte)      (pte_val(pte) >> 3)
 #define pgoff_to_pte(off)      ((pte_t) { ((off) << 3) | _PAGE_FILE })
 
+#ifndef CONFIG_PPC_4K_PAGES
+void pgtable_cache_init(void);
+#else
 /*
  * No page table caches to initialise
  */
 #define pgtable_cache_init()   do { } while (0)
+#endif
 
 extern int get_pteptr(struct mm_struct *mm, unsigned long addr, pte_t **ptep,
                      pmd_t **pmdp);
index a8805fee0df91bffdcdc4560e0b259985df2f930..7e77f2ca51325a7c36782b8507ceb6fcbb5a7b2e 100644 (file)
@@ -30,7 +30,8 @@ struct mm_struct;
 #include <asm/tlbflush.h>
 
 /* Generic accessors to PTE bits */
-static inline int pte_write(pte_t pte)         { return pte_val(pte) & _PAGE_RW; }
+static inline int pte_write(pte_t pte)
+{      return (pte_val(pte) & (_PAGE_RW | _PAGE_RO)) != _PAGE_RO; }
 static inline int pte_dirty(pte_t pte)         { return pte_val(pte) & _PAGE_DIRTY; }
 static inline int pte_young(pte_t pte)         { return pte_val(pte) & _PAGE_ACCESSED; }
 static inline int pte_file(pte_t pte)          { return pte_val(pte) & _PAGE_FILE; }
@@ -115,12 +116,14 @@ static inline unsigned long pte_pfn(pte_t pte)    {
 
 /* Generic modifiers for PTE bits */
 static inline pte_t pte_wrprotect(pte_t pte) {
-       pte_val(pte) &= ~(_PAGE_RW | _PAGE_HWWRITE); return pte; }
+       pte_val(pte) &= ~(_PAGE_RW | _PAGE_HWWRITE);
+       pte_val(pte) |= _PAGE_RO; return pte; }
 static inline pte_t pte_mkclean(pte_t pte) {
        pte_val(pte) &= ~(_PAGE_DIRTY | _PAGE_HWWRITE); return pte; }
 static inline pte_t pte_mkold(pte_t pte) {
        pte_val(pte) &= ~_PAGE_ACCESSED; return pte; }
 static inline pte_t pte_mkwrite(pte_t pte) {
+       pte_val(pte) &= ~_PAGE_RO;
        pte_val(pte) |= _PAGE_RW; return pte; }
 static inline pte_t pte_mkdirty(pte_t pte) {
        pte_val(pte) |= _PAGE_DIRTY; return pte; }
index daa4616e61c4a2c4d8d29e17eb01b30b5ed50d39..eb6edb44f14042a62ba9c4b718441615537761b9 100644 (file)
@@ -46,9 +46,9 @@
  * require a TLB exception handler change.  It is assumed unused bits
  * are always zero.
  */
-#define _PAGE_RW       0x0400  /* lsb PP bits, inverted in HW */
+#define _PAGE_RO       0x0400  /* lsb PP bits */
 #define _PAGE_USER     0x0800  /* msb PP bits */
-/* set when neither _PAGE_USER nor _PAGE_RW are set */
+/* set when _PAGE_USER is unset and _PAGE_RO is set */
 #define _PAGE_KNLRO    0x0200
 
 #define _PMD_PRESENT   0x0001
@@ -62,9 +62,8 @@
 #define PTE_ATOMIC_UPDATES     1
 
 /* We need to add _PAGE_SHARED to kernel pages */
-#define _PAGE_KERNEL_RO        (_PAGE_SHARED | _PAGE_KNLRO)
-#define _PAGE_KERNEL_ROX       (_PAGE_EXEC | _PAGE_KNLRO)
-#define _PAGE_KERNEL_RW        (_PAGE_DIRTY | _PAGE_RW | _PAGE_HWWRITE)
+#define _PAGE_KERNEL_RO        (_PAGE_SHARED | _PAGE_RO | _PAGE_KNLRO)
+#define _PAGE_KERNEL_ROX       (_PAGE_EXEC | _PAGE_RO | _PAGE_KNLRO)
 
 #endif /* __KERNEL__ */
 #endif /*  _ASM_POWERPC_PTE_8xx_H */
index e040c3595129e41f502ba873502a1571b0076b9e..2aef9b7a0eb2afc8635c4d658ae0bd32ae8c463a 100644 (file)
 #ifndef _PAGE_PSIZE
 #define _PAGE_PSIZE            0
 #endif
+/* _PAGE_RO and _PAGE_RW shall not be defined at the same time */
+#ifndef _PAGE_RO
+#define _PAGE_RO 0
+#else
+#define _PAGE_RW 0
+#endif
 #ifndef _PMD_PRESENT_MASK
 #define _PMD_PRESENT_MASK      _PMD_PRESENT
 #endif
 #define PMD_PAGE_SIZE(pmd)     bad_call_to_PMD_PAGE_SIZE()
 #endif
 #ifndef _PAGE_KERNEL_RO
-#define _PAGE_KERNEL_RO                0
+#define _PAGE_KERNEL_RO                (_PAGE_RO)
 #endif
 #ifndef _PAGE_KERNEL_ROX
-#define _PAGE_KERNEL_ROX       (_PAGE_EXEC)
+#define _PAGE_KERNEL_ROX       (_PAGE_EXEC | _PAGE_RO)
 #endif
 #ifndef _PAGE_KERNEL_RW
 #define _PAGE_KERNEL_RW                (_PAGE_DIRTY | _PAGE_RW | _PAGE_HWWRITE)
@@ -95,7 +101,7 @@ extern unsigned long bad_call_to_PMD_PAGE_SIZE(void);
 /* Mask of bits returned by pte_pgprot() */
 #define PAGE_PROT_BITS (_PAGE_GUARDED | _PAGE_COHERENT | _PAGE_NO_CACHE | \
                         _PAGE_WRITETHRU | _PAGE_ENDIAN | _PAGE_4K_PFN | \
-                        _PAGE_USER | _PAGE_ACCESSED | \
+                        _PAGE_USER | _PAGE_ACCESSED | _PAGE_RO | \
                         _PAGE_RW | _PAGE_HWWRITE | _PAGE_DIRTY | _PAGE_EXEC)
 
 #ifdef CONFIG_NUMA_BALANCING
@@ -128,11 +134,14 @@ extern unsigned long bad_call_to_PMD_PAGE_SIZE(void);
  */
 #define PAGE_NONE      __pgprot(_PAGE_BASE)
 #define PAGE_SHARED    __pgprot(_PAGE_BASE | _PAGE_USER | _PAGE_RW)
-#define PAGE_SHARED_X  __pgprot(_PAGE_BASE | _PAGE_USER | _PAGE_RW | _PAGE_EXEC)
-#define PAGE_COPY      __pgprot(_PAGE_BASE | _PAGE_USER)
-#define PAGE_COPY_X    __pgprot(_PAGE_BASE | _PAGE_USER | _PAGE_EXEC)
-#define PAGE_READONLY  __pgprot(_PAGE_BASE | _PAGE_USER)
-#define PAGE_READONLY_X        __pgprot(_PAGE_BASE | _PAGE_USER | _PAGE_EXEC)
+#define PAGE_SHARED_X  __pgprot(_PAGE_BASE | _PAGE_USER | _PAGE_RW | \
+                                _PAGE_EXEC)
+#define PAGE_COPY      __pgprot(_PAGE_BASE | _PAGE_USER | _PAGE_RO)
+#define PAGE_COPY_X    __pgprot(_PAGE_BASE | _PAGE_USER | _PAGE_RO | \
+                                _PAGE_EXEC)
+#define PAGE_READONLY  __pgprot(_PAGE_BASE | _PAGE_USER | _PAGE_RO)
+#define PAGE_READONLY_X        __pgprot(_PAGE_BASE | _PAGE_USER | _PAGE_RO | \
+                                _PAGE_EXEC)
 
 #define __P000 PAGE_NONE
 #define __P001 PAGE_READONLY
index 8084059063365c95ae1f096c6bb2a92f2d50f78d..f337666768a76594b41b59f283efa3b891988193 100644 (file)
@@ -1133,6 +1133,7 @@ static struct cpu_spec __initdata cpu_specs[] = {
                .icache_bsize           = 32,
                .dcache_bsize           = 32,
                .cpu_setup              = __setup_cpu_603,
+               .machine_check          = machine_check_generic,
                .num_pmcs               = 4,
                .oprofile_cpu_type      = "ppc/e300",
                .oprofile_type          = PPC_OPROFILE_FSL_EMB,
index d99aac0d69f1b673332f31f0df3546d12543b370..9b53fe139bf6f53c4227d713d1f969f3f0c718b8 100644 (file)
@@ -319,36 +319,29 @@ InstructionTLBMiss:
         * pin the first 8MB of kernel memory */
        andis.  r11, r10, 0x8000        /* Address >= 0x80000000 */
 #endif
-       mfspr   r11, SPRN_M_TW  /* Get level 1 table base address */
+       mfspr   r11, SPRN_M_TW  /* Get level 1 table */
 #ifdef CONFIG_MODULES
        beq     3f
-       lis     r11, (swapper_pg_dir-PAGE_OFFSET)@h
-       ori     r11, r11, (swapper_pg_dir-PAGE_OFFSET)@l
+       lis     r11, (swapper_pg_dir-PAGE_OFFSET)@ha
 3:
 #endif
-       /* Extract level 1 index */
-       rlwinm  r10, r10, 32 - ((PAGE_SHIFT - 2) << 1), (PAGE_SHIFT - 2) << 1, 29
-       lwzx    r11, r10, r11   /* Get the level 1 entry */
-       rlwinm. r10, r11,0,0,19 /* Extract page descriptor page address */
-       beq     2f              /* If zero, don't try to find a pte */
-
-       /* We have a pte table, so load the MI_TWC with the attributes
-        * for this "segment."
-        */
+       /* Insert level 1 index */
+       rlwimi  r11, r10, 32 - ((PAGE_SHIFT - 2) << 1), (PAGE_SHIFT - 2) << 1, 29
+       lwz     r11, (swapper_pg_dir-PAGE_OFFSET)@l(r11)        /* Get the level 1 entry */
+
+       /* Load the MI_TWC with the attributes for this "segment." */
        MTSPR_CPU6(SPRN_MI_TWC, r11, r3)        /* Set segment attributes */
-       mfspr   r11, SPRN_SRR0  /* Get effective address of fault */
+       rlwinm  r11, r11,0,0,19 /* Extract page descriptor page address */
        /* Extract level 2 index */
-       rlwinm  r11, r11, 32 - (PAGE_SHIFT - 2), 32 - PAGE_SHIFT, 29
+       rlwinm  r10, r10, 32 - (PAGE_SHIFT - 2), 32 - PAGE_SHIFT, 29
        lwzx    r10, r10, r11   /* Get the pte */
 
 #ifdef CONFIG_SWAP
-       andi.   r11, r10, _PAGE_ACCESSED | _PAGE_PRESENT
-       cmpwi   cr0, r11, _PAGE_ACCESSED | _PAGE_PRESENT
-       li      r11, RPN_PATTERN
-       bne-    cr0, 2f
-#else
-       li      r11, RPN_PATTERN
+       rlwinm  r11, r10, 32-5, _PAGE_PRESENT
+       and     r11, r11, r10
+       rlwimi  r10, r11, 0, _PAGE_PRESENT
 #endif
+       li      r11, RPN_PATTERN
        /* The Linux PTE won't go exactly into the MMU TLB.
         * Software indicator bits 21 and 28 must be clear.
         * Software indicator bits 24, 25, 26, and 27 must be
@@ -366,21 +359,6 @@ InstructionTLBMiss:
        mfspr   r10, SPRN_SPRG_SCRATCH2
        EXCEPTION_EPILOG_0
        rfi
-2:
-       mfspr   r10, SPRN_SRR1
-       /* clear all error bits as TLB Miss
-        * sets a few unconditionally
-       */
-       rlwinm  r10, r10, 0, 0xffff
-       mtspr   SPRN_SRR1, r10
-
-       /* Restore registers */
-#ifdef CONFIG_8xx_CPU6
-       mfspr   r3, SPRN_DAR
-       mtspr   SPRN_DAR, r11   /* Tag DAR */
-#endif
-       mfspr   r10, SPRN_SPRG_SCRATCH2
-       b       InstructionTLBError1
 
        . = 0x1200
 DataStoreTLBMiss:
@@ -395,20 +373,16 @@ DataStoreTLBMiss:
         * kernel page tables.
         */
        andis.  r11, r10, 0x8000
-       mfspr   r11, SPRN_M_TW  /* Get level 1 table base address */
+       mfspr   r11, SPRN_M_TW  /* Get level 1 table */
        beq     3f
-       lis     r11, (swapper_pg_dir-PAGE_OFFSET)@h
-       ori     r11, r11, (swapper_pg_dir-PAGE_OFFSET)@l
+       lis     r11, (swapper_pg_dir-PAGE_OFFSET)@ha
 3:
-       /* Extract level 1 index */
-       rlwinm  r10, r10, 32 - ((PAGE_SHIFT - 2) << 1), (PAGE_SHIFT - 2) << 1, 29
-       lwzx    r11, r10, r11   /* Get the level 1 entry */
-       rlwinm. r10, r11,0,0,19 /* Extract page descriptor page address */
-       beq     2f              /* If zero, don't try to find a pte */
+       /* Insert level 1 index */
+       rlwimi  r11, r10, 32 - ((PAGE_SHIFT - 2) << 1), (PAGE_SHIFT - 2) << 1, 29
+       lwz     r11, (swapper_pg_dir-PAGE_OFFSET)@l(r11)        /* Get the level 1 entry */
 
        /* We have a pte table, so load fetch the pte from the table.
         */
-       mfspr   r10, SPRN_MD_EPN        /* Get address of fault */
        /* Extract level 2 index */
        rlwinm  r10, r10, 32 - (PAGE_SHIFT - 2), 32 - PAGE_SHIFT, 29
        rlwimi  r10, r11, 0, 0, 32 - PAGE_SHIFT - 1     /* Add level 2 base */
@@ -441,16 +415,13 @@ DataStoreTLBMiss:
        and     r11, r11, r10
        rlwimi  r10, r11, 0, _PAGE_PRESENT
 #endif
-       /* invert RW */
-       xori    r10, r10, _PAGE_RW
-
        /* The Linux PTE won't go exactly into the MMU TLB.
         * Software indicator bits 22 and 28 must be clear.
         * Software indicator bits 24, 25, 26, and 27 must be
         * set.  All other Linux PTE bits control the behavior
         * of the MMU.
         */
-2:     li      r11, RPN_PATTERN
+       li      r11, RPN_PATTERN
        rlwimi  r10, r11, 0, 24, 28     /* Set 24-27, clear 28 */
        MTSPR_CPU6(SPRN_MD_RPN, r10, r3)        /* Update TLB entry */
 
@@ -469,10 +440,7 @@ DataStoreTLBMiss:
  */
        . = 0x1300
 InstructionTLBError:
-       EXCEPTION_PROLOG_0
-InstructionTLBError1:
-       EXCEPTION_PROLOG_1
-       EXCEPTION_PROLOG_2
+       EXCEPTION_PROLOG
        mr      r4,r12
        mr      r5,r9
        andis.  r10,r5,0x4000
@@ -532,30 +500,21 @@ DARFixed:/* Return from dcbx instruction bug workaround */
  /* define if you don't want to use self modifying code */
 #define NO_SELF_MODIFYING_CODE
 FixupDAR:/* Entry point for dcbx workaround. */
-#ifdef CONFIG_8xx_CPU6
-       mtspr   SPRN_DAR, r3
-#endif
        mtspr   SPRN_SPRG_SCRATCH2, r10
        /* fetch instruction from memory. */
        mfspr   r10, SPRN_SRR0
        andis.  r11, r10, 0x8000        /* Address >= 0x80000000 */
-       mfspr   r11, SPRN_M_TW  /* Get level 1 table base address */
-       beq-    3f              /* Branch if user space */
-       lis     r11, (swapper_pg_dir-PAGE_OFFSET)@h
-       ori     r11, r11, (swapper_pg_dir-PAGE_OFFSET)@l
-       /* Extract level 1 index */
-3:     rlwinm  r10, r10, 32 - ((PAGE_SHIFT - 2) << 1), (PAGE_SHIFT - 2) << 1, 29
-       lwzx    r11, r10, r11   /* Get the level 1 entry */
-       rlwinm  r10, r11,0,0,19 /* Extract page descriptor page address */
-       mfspr   r11, SPRN_SRR0  /* Get effective address of fault */
-       /* Extract level 2 index */
-       rlwinm  r11, r11, 32 - (PAGE_SHIFT - 2), 32 - PAGE_SHIFT, 29
-       lwzx    r11, r10, r11   /* Get the pte */
-#ifdef CONFIG_8xx_CPU6
-       mfspr   r3, SPRN_DAR
-#endif
+       mfspr   r11, SPRN_M_TW  /* Get level 1 table */
+       beq     3f
+       lis     r11, (swapper_pg_dir-PAGE_OFFSET)@ha
+       /* Insert level 1 index */
+3:     rlwimi  r11, r10, 32 - ((PAGE_SHIFT - 2) << 1), (PAGE_SHIFT - 2) << 1, 29
+       lwz     r11, (swapper_pg_dir-PAGE_OFFSET)@l(r11)        /* Get the level 1 entry */
+       rlwinm  r11, r11,0,0,19 /* Extract page descriptor page address */
+       /* Insert level 2 index */
+       rlwimi  r11, r10, 32 - (PAGE_SHIFT - 2), 32 - PAGE_SHIFT, 29
+       lwz     r11, 0(r11)     /* Get the pte */
        /* concat physical page address(r11) and page offset(r10) */
-       mfspr   r10, SPRN_SRR0
        rlwimi  r11, r10, 0, 32 - PAGE_SHIFT, 31
        lwz     r11,0(r11)
 /* Check if it really is a dcbx instruction. */
@@ -705,8 +664,7 @@ start_here:
         * init's THREAD like the context switch code does, but this is
         * easier......until someone changes init's static structures.
         */
-       lis     r6, swapper_pg_dir@h
-       ori     r6, r6, swapper_pg_dir@l
+       lis     r6, swapper_pg_dir@ha
        tophys(r6,r6)
 #ifdef CONFIG_8xx_CPU6
        lis     r4, cpu6_errata_word@h
@@ -885,23 +843,28 @@ _GLOBAL(set_context)
        stw     r4, 0x4(r5)
 #endif
 
+       /* Register M_TW will contain base address of level 1 table minus the
+        * lower part of the kernel PGDIR base address, so that all accesses to
+        * level 1 table are done relative to lower part of kernel PGDIR base
+        * address.
+        */
+       li      r5, (swapper_pg_dir-PAGE_OFFSET)@l
+       sub     r4, r4, r5
+       tophys  (r4, r4)
 #ifdef CONFIG_8xx_CPU6
        lis     r6, cpu6_errata_word@h
        ori     r6, r6, cpu6_errata_word@l
-       tophys  (r4, r4)
        li      r7, 0x3f80
        stw     r7, 12(r6)
        lwz     r7, 12(r6)
-        mtspr   SPRN_M_TW, r4               /* Update MMU base address */
+#endif
+       mtspr   SPRN_M_TW, r4           /* Update pointeur to level 1 table */
+#ifdef CONFIG_8xx_CPU6
        li      r7, 0x3380
        stw     r7, 12(r6)
        lwz     r7, 12(r6)
-        mtspr   SPRN_M_CASID, r3             /* Update context */
-#else
-        mtspr   SPRN_M_CASID,r3                /* Update context */
-       tophys  (r4, r4)
-       mtspr   SPRN_M_TW, r4           /* and pgd */
 #endif
+       mtspr   SPRN_M_CASID, r3        /* Update context */
        SYNC
        blr
 
index 94cd728166d37a1be14a8867ec1ea2f059249d96..b46912fee7cd6dfee85e5068d9eef717080861b0 100644 (file)
@@ -67,8 +67,6 @@ struct tlbcamrange {
        phys_addr_t phys;
 } tlbcam_addrs[NUM_TLBCAMS];
 
-extern unsigned int tlbcam_index;
-
 unsigned long tlbcam_sz(int idx)
 {
        return tlbcam_addrs[idx].limit - tlbcam_addrs[idx].start + 1;
index 9cba6cba2e50a94b290b2a13544727adab15d9c2..986afbc22c76b2188f8104030e7197bd7eae57ba 100644 (file)
 #include <asm/mmu_context.h>
 #include <asm/tlbflush.h>
 
+#include "mmu_decl.h"
+
 static unsigned int first_context, last_context;
 static unsigned int next_context, nr_free_contexts;
 static unsigned long *context_map;
 static unsigned long *stale_map[NR_CPUS];
 static struct mm_struct **context_mm;
 static DEFINE_RAW_SPINLOCK(context_lock);
+static bool no_selective_tlbil;
 
 #define CTX_MAP_SIZE   \
        (sizeof(unsigned long) * (last_context / BITS_PER_LONG + 1))
@@ -133,6 +136,38 @@ static unsigned int steal_context_smp(unsigned int id)
 }
 #endif  /* CONFIG_SMP */
 
+static unsigned int steal_all_contexts(void)
+{
+       struct mm_struct *mm;
+       int cpu = smp_processor_id();
+       unsigned int id;
+
+       for (id = first_context; id <= last_context; id++) {
+               /* Pick up the victim mm */
+               mm = context_mm[id];
+
+               pr_hardcont(" | steal %d from 0x%p", id, mm);
+
+               /* Mark this mm as having no context anymore */
+               mm->context.id = MMU_NO_CONTEXT;
+               if (id != first_context) {
+                       context_mm[id] = NULL;
+                       __clear_bit(id, context_map);
+#ifdef DEBUG_MAP_CONSISTENCY
+                       mm->context.active = 0;
+#endif
+               }
+               __clear_bit(id, stale_map[cpu]);
+       }
+
+       /* Flush the TLB for all contexts (not to be used on SMP) */
+       _tlbil_all();
+
+       nr_free_contexts = last_context - first_context;
+
+       return first_context;
+}
+
 /* Note that this will also be called on SMP if all other CPUs are
  * offlined, which means that it may be called for cpu != 0. For
  * this to work, we somewhat assume that CPUs that are onlined
@@ -241,7 +276,10 @@ void switch_mmu_context(struct mm_struct *prev, struct mm_struct *next)
                        goto stolen;
                }
 #endif /* CONFIG_SMP */
-               id = steal_context_up(id);
+               if (no_selective_tlbil)
+                       id = steal_all_contexts();
+               else
+                       id = steal_context_up(id);
                goto stolen;
        }
        nr_free_contexts--;
@@ -407,12 +445,15 @@ void __init mmu_context_init(void)
        if (mmu_has_feature(MMU_FTR_TYPE_8xx)) {
                first_context = 0;
                last_context = 15;
+               no_selective_tlbil = true;
        } else if (mmu_has_feature(MMU_FTR_TYPE_47x)) {
                first_context = 1;
                last_context = 65535;
+               no_selective_tlbil = false;
        } else {
                first_context = 1;
                last_context = 255;
+               no_selective_tlbil = false;
        }
 
 #ifdef DEBUG_CLAMP_LAST_CONTEXT
index 50fad3801f3040d1ee479e3af963576dbaeb0ce9..03b1a3b0fbd539cb3cbc6232bb72f9a8a1cc94b6 100644 (file)
@@ -63,7 +63,6 @@ void setbat(int index, unsigned long virt, phys_addr_t phys,
 #endif /* HAVE_BATS */
 
 #ifdef HAVE_TLBCAM
-extern unsigned int tlbcam_index;
 extern phys_addr_t v_mapped_by_tlbcam(unsigned long va);
 extern unsigned long p_mapped_by_tlbcam(phys_addr_t pa);
 #else /* !HAVE_TLBCAM */
@@ -73,13 +72,25 @@ extern unsigned long p_mapped_by_tlbcam(phys_addr_t pa);
 
 #define PGDIR_ORDER    (32 + PGD_T_LOG2 - PGDIR_SHIFT)
 
+#ifndef CONFIG_PPC_4K_PAGES
+static struct kmem_cache *pgtable_cache;
+
+void pgtable_cache_init(void)
+{
+       pgtable_cache = kmem_cache_create("PGDIR cache", 1 << PGDIR_ORDER,
+                                         1 << PGDIR_ORDER, 0, NULL);
+       if (pgtable_cache == NULL)
+               panic("Couldn't allocate pgtable caches");
+}
+#endif
+
 pgd_t *pgd_alloc(struct mm_struct *mm)
 {
        pgd_t *ret;
 
        /* pgdir take page or two with 4K pages and a page fraction otherwise */
 #ifndef CONFIG_PPC_4K_PAGES
-       ret = kzalloc(1 << PGDIR_ORDER, GFP_KERNEL);
+       ret = kmem_cache_alloc(pgtable_cache, GFP_KERNEL | __GFP_ZERO);
 #else
        ret = (pgd_t *)__get_free_pages(GFP_KERNEL|__GFP_ZERO,
                        PGDIR_ORDER - PAGE_SHIFT);
@@ -90,7 +101,7 @@ pgd_t *pgd_alloc(struct mm_struct *mm)
 void pgd_free(struct mm_struct *mm, pgd_t *pgd)
 {
 #ifndef CONFIG_PPC_4K_PAGES
-       kfree((void *)pgd);
+       kmem_cache_free(pgtable_cache, (void *)pgd);
 #else
        free_pages((unsigned long)pgd, PGDIR_ORDER - PAGE_SHIFT);
 #endif
@@ -147,7 +158,7 @@ void __iomem *
 ioremap_prot(phys_addr_t addr, unsigned long size, unsigned long flags)
 {
        /* writeable implies dirty for kernel addresses */
-       if (flags & _PAGE_RW)
+       if ((flags & (_PAGE_RW | _PAGE_RO)) != _PAGE_RO)
                flags |= _PAGE_DIRTY | _PAGE_HWWRITE;
 
        /* we don't want to let _PAGE_USER and _PAGE_EXEC leak out */
index f38ea4df6a8556f5f84f50ab1a37798624036b4f..ab0616b0e6c24eb83732e94ba0b4b23823038031 100644 (file)
@@ -284,8 +284,11 @@ void __flush_tlb_page(struct mm_struct *mm, unsigned long vmaddr,
        struct cpumask *cpu_mask;
        unsigned int pid;
 
+       if (unlikely(!mm))
+               return;
+
        preempt_disable();
-       pid = mm ? mm->context.id : 0;
+       pid = mm->context.id;
        if (unlikely(pid == MMU_NO_CONTEXT))
                goto bail;
        cpu_mask = mm_cpumask(mm);
index 4acaea01fe0313f99a69efa1331a2fbf158f001d..5d747b4cb8ee1803c93b2b72fa17450e102c7fda 100644 (file)
@@ -330,9 +330,11 @@ static int fsl_emb_pmu_add(struct perf_event *event, int flags)
        }
        local64_set(&event->hw.prev_count, val);
 
-       if (!(flags & PERF_EF_START)) {
+       if (unlikely(!(flags & PERF_EF_START))) {
                event->hw.state = PERF_HES_STOPPED | PERF_HES_UPTODATE;
                val = 0;
+       } else {
+               event->hw.state &= ~(PERF_HES_STOPPED | PERF_HES_UPTODATE);
        }
 
        write_pmc(i, val);
@@ -389,6 +391,7 @@ static void fsl_emb_pmu_del(struct perf_event *event, int flags)
 static void fsl_emb_pmu_start(struct perf_event *event, int ef_flags)
 {
        unsigned long flags;
+       unsigned long val;
        s64 left;
 
        if (event->hw.idx < 0 || !event->hw.sample_period)
@@ -405,7 +408,10 @@ static void fsl_emb_pmu_start(struct perf_event *event, int ef_flags)
 
        event->hw.state = 0;
        left = local64_read(&event->hw.period_left);
-       write_pmc(event->hw.idx, left);
+       val = 0;
+       if (left < 0x80000000L)
+               val = 0x80000000L - left;
+       write_pmc(event->hw.idx, val);
 
        perf_event_update_userpage(event);
        perf_pmu_enable(event->pmu);
index 1ad748bb39b4b506c8596d658d612048946ea46d..5c31d8292d3bb8c0d65d566c57992ca1064af684 100644 (file)
@@ -162,8 +162,7 @@ int mpc831x_usb_cfg(void)
 
        iounmap(immap);
 
-       if (immr_node)
-               of_node_put(immr_node);
+       of_node_put(immr_node);
 
        /* Map USB SOC space */
        ret = of_address_to_resource(np, 0, &res);
index f22635a71d0117f1a62e441b5a666026376c30b1..2fb4b24368a6e6ae7851ade3bcae379d2245229b 100644 (file)
@@ -241,6 +241,12 @@ config SGY_CTS1000
        help
          Enable this to support functionality in Servergy's CTS-1000 systems.
 
+config MVME2500
+       bool "Artesyn MVME2500"
+       select DEFAULT_UIMAGE
+       help
+         This option enables support for the Emerson/Artesyn MVME2500 board.
+
 endif # PPC32
 
 config PPC_QEMU_E500
index 7303260466255605ec7bc6f4e1ebcad9ba8f29ec..1fe7fb95175a50ebec0576fac897ae077f7b5a8e 100644 (file)
@@ -31,3 +31,4 @@ obj-$(CONFIG_XES_MPC85xx) += xes_mpc85xx.o
 obj-$(CONFIG_GE_IMP3A)   += ge_imp3a.o
 obj-$(CONFIG_PPC_QEMU_E500) += qemu_e500.o
 obj-$(CONFIG_SGY_CTS1000) += sgy_cts1000.o
+obj-$(CONFIG_MVME2500)   += mvme2500.o
diff --git a/arch/powerpc/platforms/85xx/mvme2500.c b/arch/powerpc/platforms/85xx/mvme2500.c
new file mode 100644 (file)
index 0000000..1233050
--- /dev/null
@@ -0,0 +1,74 @@
+/*
+ * Board setup routines for the Emerson/Artesyn MVME2500
+ *
+ * Copyright 2014 Elettra-Sincrotrone Trieste S.C.p.A.
+ *
+ * Based on earlier code by:
+ *
+ *     Xianghua Xiao (x.xiao@freescale.com)
+ *     Tom Armistead (tom.armistead@emerson.com)
+ *     Copyright 2012 Emerson
+ *
+ * This program is free software; you can redistribute  it and/or modify it
+ * under  the terms of  the GNU General  Public License as published by the
+ * Free Software Foundation;  either version 2 of the  License, or (at your
+ * option) any later version.
+ *
+ * Author Alessio Igor Bogani <alessio.bogani@elettra.eu>
+ *
+ */
+
+#include <linux/pci.h>
+#include <asm/udbg.h>
+#include <asm/mpic.h>
+#include <sysdev/fsl_soc.h>
+#include <sysdev/fsl_pci.h>
+
+#include "mpc85xx.h"
+
+void __init mvme2500_pic_init(void)
+{
+       struct mpic *mpic = mpic_alloc(NULL, 0,
+                 MPIC_BIG_ENDIAN | MPIC_SINGLE_DEST_CPU,
+               0, 256, " OpenPIC  ");
+       BUG_ON(mpic == NULL);
+       mpic_init(mpic);
+}
+
+/*
+ * Setup the architecture
+ */
+static void __init mvme2500_setup_arch(void)
+{
+       if (ppc_md.progress)
+               ppc_md.progress("mvme2500_setup_arch()", 0);
+       fsl_pci_assign_primary();
+       pr_info("MVME2500 board from Artesyn\n");
+}
+
+machine_arch_initcall(mvme2500, mpc85xx_common_publish_devices);
+
+/*
+ * Called very early, device-tree isn't unflattened
+ */
+static int __init mvme2500_probe(void)
+{
+       unsigned long root = of_get_flat_dt_root();
+
+       return of_flat_dt_is_compatible(root, "artesyn,MVME2500");
+}
+
+define_machine(mvme2500) {
+       .name                   = "MVME2500",
+       .probe                  = mvme2500_probe,
+       .setup_arch             = mvme2500_setup_arch,
+       .init_IRQ               = mvme2500_pic_init,
+#ifdef CONFIG_PCI
+       .pcibios_fixup_bus      = fsl_pcibios_fixup_bus,
+       .pcibios_fixup_phb      = fsl_pcibios_fixup_phb,
+#endif
+       .get_irq                = mpic_get_irq,
+       .restart                = fsl_rstcr_restart,
+       .calibrate_decr         = generic_calibrate_decr,
+       .progress               = udbg_progress,
+};
index 6455c1eada1a16830056ba2b373d4a26586a93af..7cc215e86d8297c0bb5e2c3dcd600bd3bee094f0 100644 (file)
@@ -68,13 +68,10 @@ static int fsl_pcie_check_link(struct pci_controller *hose)
        u32 val = 0;
 
        if (hose->indirect_type & PPC_INDIRECT_TYPE_FSL_CFG_REG_LINK) {
-               if (hose->ops->read == fsl_indirect_read_config) {
-                       struct pci_bus bus;
-                       bus.number = hose->first_busno;
-                       bus.sysdata = hose;
-                       bus.ops = hose->ops;
-                       indirect_read_config(&bus, 0, PCIE_LTSSM, 4, &val);
-               } else
+               if (hose->ops->read == fsl_indirect_read_config)
+                       __indirect_read_config(hose, hose->first_busno, 0,
+                                              PCIE_LTSSM, 4, &val);
+               else
                        early_read_config_dword(hose, 0, 0, PCIE_LTSSM, &val);
                if (val < PCIE_LTSSM_L0)
                        return 1;
index 1f6c570d66d45ee88e1114b790d600f06c0bc4ec..692de9dbc680d37599823f71156061662b61743b 100644 (file)
 #include <asm/pci-bridge.h>
 #include <asm/machdep.h>
 
-int indirect_read_config(struct pci_bus *bus, unsigned int devfn,
-                        int offset, int len, u32 *val)
+int __indirect_read_config(struct pci_controller *hose,
+                          unsigned char bus_number, unsigned int devfn,
+                          int offset, int len, u32 *val)
 {
-       struct pci_controller *hose = pci_bus_to_host(bus);
        volatile void __iomem *cfg_data;
        u8 cfg_type = 0;
        u32 bus_no, reg;
 
        if (hose->indirect_type & PPC_INDIRECT_TYPE_NO_PCIE_LINK) {
-               if (bus->number != hose->first_busno)
+               if (bus_number != hose->first_busno)
                        return PCIBIOS_DEVICE_NOT_FOUND;
                if (devfn != 0)
                        return PCIBIOS_DEVICE_NOT_FOUND;
        }
 
        if (ppc_md.pci_exclude_device)
-               if (ppc_md.pci_exclude_device(hose, bus->number, devfn))
+               if (ppc_md.pci_exclude_device(hose, bus_number, devfn))
                        return PCIBIOS_DEVICE_NOT_FOUND;
 
        if (hose->indirect_type & PPC_INDIRECT_TYPE_SET_CFG_TYPE)
-               if (bus->number != hose->first_busno)
+               if (bus_number != hose->first_busno)
                        cfg_type = 1;
 
-       bus_no = (bus->number == hose->first_busno) ?
-                       hose->self_busno : bus->number;
+       bus_no = (bus_number == hose->first_busno) ?
+                       hose->self_busno : bus_number;
 
        if (hose->indirect_type & PPC_INDIRECT_TYPE_EXT_REG)
                reg = ((offset & 0xf00) << 16) | (offset & 0xfc);
@@ -77,6 +77,15 @@ int indirect_read_config(struct pci_bus *bus, unsigned int devfn,
        return PCIBIOS_SUCCESSFUL;
 }
 
+int indirect_read_config(struct pci_bus *bus, unsigned int devfn,
+                        int offset, int len, u32 *val)
+{
+       struct pci_controller *hose = pci_bus_to_host(bus);
+
+       return __indirect_read_config(hose, bus->number, devfn, offset, len,
+                                     val);
+}
+
 int indirect_write_config(struct pci_bus *bus, unsigned int devfn,
                          int offset, int len, u32 val)
 {
index 1f29cee8da7b0ab88c612d165d2ec5693b9e3f55..c2518cdb7ddb6e94822138e7c702d9242b444f86 100644 (file)
@@ -497,7 +497,7 @@ int qe_upload_firmware(const struct qe_firmware *firmware)
         * saved microcode information and put in the new.
         */
        memset(&qe_firmware_info, 0, sizeof(qe_firmware_info));
-       strcpy(qe_firmware_info.id, firmware->id);
+       strlcpy(qe_firmware_info.id, firmware->id, sizeof(qe_firmware_info.id));
        qe_firmware_info.extended_modes = firmware->extended_modes;
        memcpy(qe_firmware_info.vtraps, firmware->vtraps,
                sizeof(firmware->vtraps));
@@ -583,8 +583,8 @@ struct qe_firmware_info *qe_get_firmware_info(void)
        /* Copy the data into qe_firmware_info*/
        sprop = of_get_property(fw, "id", NULL);
        if (sprop)
-               strncpy(qe_firmware_info.id, sprop,
-                       sizeof(qe_firmware_info.id) - 1);
+               strlcpy(qe_firmware_info.id, sprop,
+                       sizeof(qe_firmware_info.id));
 
        prop = of_find_property(fw, "extended-modes", NULL);
        if (prop && (prop->length == sizeof(u64))) {
index fc7ab5a3561e708f24d448209df8d8b980ed6f53..d708ded5457bb8d6b6c5ad04650bc29273fc9c9e 100644 (file)
@@ -27,18 +27,29 @@ enum ccf_version {
 struct ccf_info {
        enum ccf_version version;
        int err_reg_offs;
+       bool has_brr;
 };
 
 static const struct ccf_info ccf1_info = {
        .version = CCF1,
        .err_reg_offs = 0xa00,
+       .has_brr = false,
 };
 
 static const struct ccf_info ccf2_info = {
        .version = CCF2,
        .err_reg_offs = 0xe40,
+       .has_brr = true,
 };
 
+/*
+ * This register is present but not documented, with different values for
+ * IP_ID, on other chips with fsl,corenet2-cf such as t4240 and b4860.
+ */
+#define CCF_BRR                        0xbf8
+#define CCF_BRR_IPID           0xffff0000
+#define CCF_BRR_IPID_T1040     0x09310000
+
 static const struct of_device_id ccf_matches[] = {
        {
                .compatible = "fsl,corenet1-cf",
@@ -66,6 +77,8 @@ struct ccf_err_regs {
 /* LAE/CV also valid for errdis and errinten */
 #define ERRDET_LAE             (1 << 0)  /* Local Access Error */
 #define ERRDET_CV              (1 << 1)  /* Coherency Violation */
+#define ERRDET_UTID            (1 << 2)  /* Unavailable Target ID (t1040) */
+#define ERRDET_MCST            (1 << 3)  /* Multicast Stash (t1040) */
 #define ERRDET_CTYPE_SHIFT     26        /* Capture Type (ccf2 only) */
 #define ERRDET_CTYPE_MASK      (0x1f << ERRDET_CTYPE_SHIFT)
 #define ERRDET_CAP             (1 << 31) /* Capture Valid (ccf2 only) */
@@ -84,6 +97,7 @@ struct ccf_private {
        struct device *dev;
        void __iomem *regs;
        struct ccf_err_regs __iomem *err_regs;
+       bool t1040;
 };
 
 static irqreturn_t ccf_irq(int irq, void *dev_id)
@@ -142,6 +156,12 @@ static irqreturn_t ccf_irq(int irq, void *dev_id)
        if (errdet & ERRDET_CV)
                dev_crit(ccf->dev, "Coherency Violation\n");
 
+       if (errdet & ERRDET_UTID)
+               dev_crit(ccf->dev, "Unavailable Target ID\n");
+
+       if (errdet & ERRDET_MCST)
+               dev_crit(ccf->dev, "Multicast Stash\n");
+
        if (cap_valid) {
                dev_crit(ccf->dev, "address 0x%09llx, src id 0x%x\n",
                         addr, src_id);
@@ -157,6 +177,7 @@ static int ccf_probe(struct platform_device *pdev)
        struct ccf_private *ccf;
        struct resource *r;
        const struct of_device_id *match;
+       u32 errinten;
        int ret, irq;
 
        match = of_match_device(ccf_matches, &pdev->dev);
@@ -183,6 +204,13 @@ static int ccf_probe(struct platform_device *pdev)
        ccf->info = match->data;
        ccf->err_regs = ccf->regs + ccf->info->err_reg_offs;
 
+       if (ccf->info->has_brr) {
+               u32 brr = ioread32be(ccf->regs + CCF_BRR);
+
+               if ((brr & CCF_BRR_IPID) == CCF_BRR_IPID_T1040)
+                       ccf->t1040 = true;
+       }
+
        dev_set_drvdata(&pdev->dev, ccf);
 
        irq = platform_get_irq(pdev, 0);
@@ -197,15 +225,19 @@ static int ccf_probe(struct platform_device *pdev)
                return ret;
        }
 
+       errinten = ERRDET_LAE | ERRDET_CV;
+       if (ccf->t1040)
+               errinten |= ERRDET_UTID | ERRDET_MCST;
+
        switch (ccf->info->version) {
        case CCF1:
                /* On CCF1 this register enables rather than disables. */
-               iowrite32be(ERRDET_LAE | ERRDET_CV, &ccf->err_regs->errdis);
+               iowrite32be(errinten, &ccf->err_regs->errdis);
                break;
 
        case CCF2:
                iowrite32be(0, &ccf->err_regs->errdis);
-               iowrite32be(ERRDET_LAE | ERRDET_CV, &ccf->err_regs->errinten);
+               iowrite32be(errinten, &ccf->err_regs->errinten);
                break;
        }