Merge branch 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/scottwood/linux into next
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."
This commit is contained in:
Коммит
a604c96eb0
|
@ -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>;
|
||||
};
|
||||
};
|
||||
|
|
|
@ -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>;
|
||||
};
|
||||
|
||||
|
|
|
@ -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>;
|
||||
};
|
||||
|
|
|
@ -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>;
|
||||
|
|
|
@ -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>;
|
||||
|
|
|
@ -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>;
|
||||
|
|
|
@ -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.
|
||||
*
|
||||
|
@ -32,10 +32,10 @@
|
|||
* 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;
|
||||
};
|
||||
|
|
|
@ -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>;
|
||||
};
|
||||
};
|
|
@ -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>;
|
||||
};
|
|
@ -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>;
|
||||
};
|
||||
};
|
|
@ -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>;
|
||||
};
|
|
@ -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>;
|
||||
};
|
|
@ -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;
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
};
|
|
@ -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>;
|
||||
};
|
||||
};
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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; }
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -34,6 +34,12 @@
|
|||
#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
|
||||
|
@ -42,10 +48,10 @@
|
|||
#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
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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 */
|
||||
/* 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 the MI_TWC with the attributes
|
||||
* for this "segment."
|
||||
*/
|
||||
/* 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
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -52,12 +52,15 @@
|
|||
#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
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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,
|
||||
};
|
|
@ -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;
|
||||
|
|
|
@ -20,31 +20,31 @@
|
|||
#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)
|
||||
{
|
||||
|
|
|
@ -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))) {
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче