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:
commit
a604c96eb0
@ -7,6 +7,7 @@ CONTENTS
|
|||||||
- FMan MURAM Node
|
- FMan MURAM Node
|
||||||
- FMan dTSEC/XGEC/mEMAC Node
|
- FMan dTSEC/XGEC/mEMAC Node
|
||||||
- FMan IEEE 1588 Node
|
- FMan IEEE 1588 Node
|
||||||
|
- FMan MDIO Node
|
||||||
- Example
|
- Example
|
||||||
|
|
||||||
=============================================================================
|
=============================================================================
|
||||||
@ -356,6 +357,69 @@ ptp-timer@fe000 {
|
|||||||
reg = <0xfe000 0x1000>;
|
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
|
Example
|
||||||
|
|
||||||
@ -531,4 +595,10 @@ fman@400000 {
|
|||||||
compatible = "fsl,fman-ptp-timer";
|
compatible = "fsl,fman-ptp-timer";
|
||||||
reg = <0xfe000 0x1000>;
|
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>
|
Value type: <prop-encoded-array>
|
||||||
Definition: Standard property. The error interrupt
|
Definition: Standard property. The error interrupt
|
||||||
|
|
||||||
|
- fsl,bman-portals
|
||||||
|
Usage: Required
|
||||||
|
Value type: <phandle>
|
||||||
|
Definition: Phandle to this BMan instance's portals
|
||||||
|
|
||||||
- fsl,liodn
|
- fsl,liodn
|
||||||
Usage: See pamu.txt
|
Usage: See pamu.txt
|
||||||
Value type: <prop-encoded-array>
|
Value type: <prop-encoded-array>
|
||||||
@ -96,7 +101,7 @@ The example below shows a BMan FBPR dynamic allocation memory node
|
|||||||
|
|
||||||
bman_fbpr: bman-fbpr {
|
bman_fbpr: bman-fbpr {
|
||||||
compatible = "fsl,bman-fbpr";
|
compatible = "fsl,bman-fbpr";
|
||||||
alloc-ranges = <0 0 0xf 0xffffffff>;
|
alloc-ranges = <0 0 0x10 0>;
|
||||||
size = <0 0x1000000>;
|
size = <0 0x1000000>;
|
||||||
alignment = <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
|
The example below shows a (P4080) BMan CCSR-space node
|
||||||
|
|
||||||
|
bportals: bman-portals@ff4000000 {
|
||||||
|
...
|
||||||
|
};
|
||||||
|
|
||||||
crypto@300000 {
|
crypto@300000 {
|
||||||
...
|
...
|
||||||
fsl,bman = <&bman, 2>;
|
fsl,bman = <&bman, 2>;
|
||||||
@ -115,6 +124,7 @@ The example below shows a (P4080) BMan CCSR-space node
|
|||||||
reg = <0x31a000 0x1000>;
|
reg = <0x31a000 0x1000>;
|
||||||
interrupts = <16 2 1 2>;
|
interrupts = <16 2 1 2>;
|
||||||
fsl,liodn = <0x17>;
|
fsl,liodn = <0x17>;
|
||||||
|
fsl,bman-portals = <&bportals>;
|
||||||
memory-region = <&bman_fbpr>;
|
memory-region = <&bman_fbpr>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -38,6 +38,11 @@ are located at offsets 0xbf8 and 0xbfc
|
|||||||
Value type: <prop-encoded-array>
|
Value type: <prop-encoded-array>
|
||||||
Definition: Standard property. The error interrupt
|
Definition: Standard property. The error interrupt
|
||||||
|
|
||||||
|
- fsl,qman-portals
|
||||||
|
Usage: Required
|
||||||
|
Value type: <phandle>
|
||||||
|
Definition: Phandle to this QMan instance's portals
|
||||||
|
|
||||||
- fsl,liodn
|
- fsl,liodn
|
||||||
Usage: See pamu.txt
|
Usage: See pamu.txt
|
||||||
Value type: <prop-encoded-array>
|
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 {
|
qman_fqd: qman-fqd {
|
||||||
compatible = "fsl,qman-fqd";
|
compatible = "fsl,qman-fqd";
|
||||||
alloc-ranges = <0 0 0xf 0xffffffff>;
|
alloc-ranges = <0 0 0x10 0>;
|
||||||
size = <0 0x400000>;
|
size = <0 0x400000>;
|
||||||
alignment = <0 0x400000>;
|
alignment = <0 0x400000>;
|
||||||
};
|
};
|
||||||
qman_pfdr: qman-pfdr {
|
qman_pfdr: qman-pfdr {
|
||||||
compatible = "fsl,qman-pfdr";
|
compatible = "fsl,qman-pfdr";
|
||||||
alloc-ranges = <0 0 0xf 0xffffffff>;
|
alloc-ranges = <0 0 0x10 0>;
|
||||||
size = <0 0x2000000>;
|
size = <0 0x2000000>;
|
||||||
alignment = <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
|
The example below shows a (P4080) QMan CCSR-space node
|
||||||
|
|
||||||
|
qportals: qman-portals@ff4200000 {
|
||||||
|
...
|
||||||
|
};
|
||||||
|
|
||||||
clockgen: global-utilities@e1000 {
|
clockgen: global-utilities@e1000 {
|
||||||
...
|
...
|
||||||
sysclk: sysclk {
|
sysclk: sysclk {
|
||||||
@ -154,6 +163,7 @@ The example below shows a (P4080) QMan CCSR-space node
|
|||||||
reg = <0x318000 0x1000>;
|
reg = <0x318000 0x1000>;
|
||||||
interrupts = <16 2 1 3>
|
interrupts = <16 2 1 3>
|
||||||
fsl,liodn = <0x16>;
|
fsl,liodn = <0x16>;
|
||||||
|
fsl,qman-portals = <&qportals>;
|
||||||
memory-region = <&qman_fqd &qman_pfdr>;
|
memory-region = <&qman_fqd &qman_pfdr>;
|
||||||
clocks = <&platform_pll 1>;
|
clocks = <&platform_pll 1>;
|
||||||
};
|
};
|
||||||
|
@ -50,6 +50,7 @@ ethernet@b0000 {
|
|||||||
fsl,num_tx_queues = <0x8>;
|
fsl,num_tx_queues = <0x8>;
|
||||||
fsl,magic-packet;
|
fsl,magic-packet;
|
||||||
local-mac-address = [ 00 00 00 00 00 00 ];
|
local-mac-address = [ 00 00 00 00 00 00 ];
|
||||||
|
ranges;
|
||||||
|
|
||||||
queue-group@b0000 {
|
queue-group@b0000 {
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
|
@ -50,6 +50,7 @@ ethernet@b1000 {
|
|||||||
fsl,num_tx_queues = <0x8>;
|
fsl,num_tx_queues = <0x8>;
|
||||||
fsl,magic-packet;
|
fsl,magic-packet;
|
||||||
local-mac-address = [ 00 00 00 00 00 00 ];
|
local-mac-address = [ 00 00 00 00 00 00 ];
|
||||||
|
ranges;
|
||||||
|
|
||||||
queue-group@b1000 {
|
queue-group@b1000 {
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
|
@ -49,6 +49,7 @@ ethernet@b2000 {
|
|||||||
fsl,num_tx_queues = <0x8>;
|
fsl,num_tx_queues = <0x8>;
|
||||||
fsl,magic-packet;
|
fsl,magic-packet;
|
||||||
local-mac-address = [ 00 00 00 00 00 00 ];
|
local-mac-address = [ 00 00 00 00 00 00 ];
|
||||||
|
ranges;
|
||||||
|
|
||||||
queue-group@b2000 {
|
queue-group@b2000 {
|
||||||
#address-cells = <1>;
|
#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.
|
* Copyright 2011 Freescale Semiconductor Inc.
|
||||||
*
|
*
|
||||||
@ -32,10 +32,10 @@
|
|||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
gpio-controller@f000 {
|
gpio-controller@fc00 {
|
||||||
#gpio-cells = <2>;
|
#gpio-cells = <2>;
|
||||||
compatible = "fsl,pq3-gpio";
|
compatible = "fsl,pq3-gpio";
|
||||||
reg = <0xf000 0x100>;
|
reg = <0xfc00 0x100>;
|
||||||
interrupts = <47 0x2 0 0>;
|
interrupts = <47 0x2 0 0>;
|
||||||
gpio-controller;
|
gpio-controller;
|
||||||
};
|
};
|
||||||
|
90
arch/powerpc/boot/dts/fsl/qoriq-bman1-portals.dtsi
Normal file
90
arch/powerpc/boot/dts/fsl/qoriq-bman1-portals.dtsi
Normal file
@ -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>;
|
||||||
|
};
|
||||||
|
};
|
41
arch/powerpc/boot/dts/fsl/qoriq-bman1.dtsi
Normal file
41
arch/powerpc/boot/dts/fsl/qoriq-bman1.dtsi
Normal file
@ -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>;
|
||||||
|
};
|
101
arch/powerpc/boot/dts/fsl/qoriq-qman1-portals.dtsi
Normal file
101
arch/powerpc/boot/dts/fsl/qoriq-qman1-portals.dtsi
Normal file
@ -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>;
|
||||||
|
};
|
||||||
|
};
|
41
arch/powerpc/boot/dts/fsl/qoriq-qman1.dtsi
Normal file
41
arch/powerpc/boot/dts/fsl/qoriq-qman1.dtsi
Normal file
@ -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>;
|
||||||
|
};
|
41
arch/powerpc/boot/dts/fsl/qoriq-qman3.dtsi
Normal file
41
arch/powerpc/boot/dts/fsl/qoriq-qman3.dtsi
Normal file
@ -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>;
|
||||||
|
};
|
280
arch/powerpc/boot/dts/mvme2500.dts
Normal file
280
arch/powerpc/boot/dts/mvme2500.dts
Normal file
@ -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=y
|
||||||
CONFIG_MTD_NAND_FSL_ELBC=y
|
CONFIG_MTD_NAND_FSL_ELBC=y
|
||||||
CONFIG_MTD_NAND_FSL_IFC=y
|
CONFIG_MTD_NAND_FSL_IFC=y
|
||||||
|
CONFIG_MTD_SPI_NOR=y
|
||||||
CONFIG_BLK_DEV_LOOP=y
|
CONFIG_BLK_DEV_LOOP=y
|
||||||
CONFIG_BLK_DEV_RAM=y
|
CONFIG_BLK_DEV_RAM=y
|
||||||
CONFIG_BLK_DEV_RAM_SIZE=131072
|
CONFIG_BLK_DEV_RAM_SIZE=131072
|
||||||
@ -92,6 +93,7 @@ CONFIG_SATA_SIL=y
|
|||||||
CONFIG_PATA_SIL680=y
|
CONFIG_PATA_SIL680=y
|
||||||
CONFIG_NETDEVICES=y
|
CONFIG_NETDEVICES=y
|
||||||
CONFIG_FSL_PQ_MDIO=y
|
CONFIG_FSL_PQ_MDIO=y
|
||||||
|
CONFIG_FSL_XGMAC_MDIO=y
|
||||||
CONFIG_E1000=y
|
CONFIG_E1000=y
|
||||||
CONFIG_E1000E=y
|
CONFIG_E1000E=y
|
||||||
CONFIG_AT803X_PHY=y
|
CONFIG_AT803X_PHY=y
|
||||||
|
@ -69,6 +69,7 @@ CONFIG_MTD_PHYSMAP_OF=y
|
|||||||
CONFIG_MTD_NAND=y
|
CONFIG_MTD_NAND=y
|
||||||
CONFIG_MTD_NAND_FSL_ELBC=y
|
CONFIG_MTD_NAND_FSL_ELBC=y
|
||||||
CONFIG_MTD_NAND_FSL_IFC=y
|
CONFIG_MTD_NAND_FSL_IFC=y
|
||||||
|
CONFIG_MTD_SPI_NOR=y
|
||||||
CONFIG_MTD_UBI=y
|
CONFIG_MTD_UBI=y
|
||||||
CONFIG_BLK_DEV_LOOP=y
|
CONFIG_BLK_DEV_LOOP=y
|
||||||
CONFIG_BLK_DEV_RAM=y
|
CONFIG_BLK_DEV_RAM=y
|
||||||
@ -79,7 +80,11 @@ CONFIG_SATA_FSL=y
|
|||||||
CONFIG_SATA_SIL24=y
|
CONFIG_SATA_SIL24=y
|
||||||
CONFIG_NETDEVICES=y
|
CONFIG_NETDEVICES=y
|
||||||
CONFIG_DUMMY=y
|
CONFIG_DUMMY=y
|
||||||
|
CONFIG_FSL_PQ_MDIO=y
|
||||||
|
CONFIG_FSL_XGMAC_MDIO=y
|
||||||
CONFIG_E1000E=y
|
CONFIG_E1000E=y
|
||||||
|
CONFIG_VITESSE_PHY=y
|
||||||
|
CONFIG_FIXED_PHY=y
|
||||||
CONFIG_INPUT_FF_MEMLESS=m
|
CONFIG_INPUT_FF_MEMLESS=m
|
||||||
# CONFIG_INPUT_MOUSEDEV is not set
|
# CONFIG_INPUT_MOUSEDEV is not set
|
||||||
# CONFIG_INPUT_KEYBOARD is not set
|
# CONFIG_INPUT_KEYBOARD is not set
|
||||||
|
@ -42,6 +42,7 @@ CONFIG_TQM8548=y
|
|||||||
CONFIG_TQM8555=y
|
CONFIG_TQM8555=y
|
||||||
CONFIG_TQM8560=y
|
CONFIG_TQM8560=y
|
||||||
CONFIG_SBC8548=y
|
CONFIG_SBC8548=y
|
||||||
|
CONFIG_MVME2500=y
|
||||||
CONFIG_QUICC_ENGINE=y
|
CONFIG_QUICC_ENGINE=y
|
||||||
CONFIG_QE_GPIO=y
|
CONFIG_QE_GPIO=y
|
||||||
CONFIG_HIGHMEM=y
|
CONFIG_HIGHMEM=y
|
||||||
@ -49,6 +50,8 @@ CONFIG_BINFMT_MISC=m
|
|||||||
CONFIG_MATH_EMULATION=y
|
CONFIG_MATH_EMULATION=y
|
||||||
CONFIG_FORCE_MAX_ZONEORDER=12
|
CONFIG_FORCE_MAX_ZONEORDER=12
|
||||||
CONFIG_PCI=y
|
CONFIG_PCI=y
|
||||||
|
CONFIG_PCIEPORTBUS=y
|
||||||
|
# CONFIG_PCIEASPM is not set
|
||||||
CONFIG_PCI_MSI=y
|
CONFIG_PCI_MSI=y
|
||||||
CONFIG_RAPIDIO=y
|
CONFIG_RAPIDIO=y
|
||||||
CONFIG_NET=y
|
CONFIG_NET=y
|
||||||
@ -85,10 +88,14 @@ CONFIG_FTL=y
|
|||||||
CONFIG_MTD_CFI=y
|
CONFIG_MTD_CFI=y
|
||||||
CONFIG_MTD_CFI_INTELEXT=y
|
CONFIG_MTD_CFI_INTELEXT=y
|
||||||
CONFIG_MTD_CFI_AMDSTD=y
|
CONFIG_MTD_CFI_AMDSTD=y
|
||||||
|
CONFIG_MTD_PHYSMAP=y
|
||||||
CONFIG_MTD_PHYSMAP_OF=y
|
CONFIG_MTD_PHYSMAP_OF=y
|
||||||
|
CONFIG_MTD_PLATRAM=y
|
||||||
|
CONFIG_MTD_M25P80=y
|
||||||
CONFIG_MTD_NAND=y
|
CONFIG_MTD_NAND=y
|
||||||
CONFIG_MTD_NAND_FSL_ELBC=y
|
CONFIG_MTD_NAND_FSL_ELBC=y
|
||||||
CONFIG_MTD_NAND_FSL_IFC=y
|
CONFIG_MTD_NAND_FSL_IFC=y
|
||||||
|
CONFIG_MTD_SPI_NOR=y
|
||||||
CONFIG_MTD_UBI=y
|
CONFIG_MTD_UBI=y
|
||||||
CONFIG_BLK_DEV_LOOP=y
|
CONFIG_BLK_DEV_LOOP=y
|
||||||
CONFIG_BLK_DEV_NBD=y
|
CONFIG_BLK_DEV_NBD=y
|
||||||
@ -120,6 +127,7 @@ CONFIG_MARVELL_PHY=y
|
|||||||
CONFIG_DAVICOM_PHY=y
|
CONFIG_DAVICOM_PHY=y
|
||||||
CONFIG_CICADA_PHY=y
|
CONFIG_CICADA_PHY=y
|
||||||
CONFIG_VITESSE_PHY=y
|
CONFIG_VITESSE_PHY=y
|
||||||
|
CONFIG_BROADCOM_PHY=y
|
||||||
CONFIG_FIXED_PHY=y
|
CONFIG_FIXED_PHY=y
|
||||||
CONFIG_INPUT_FF_MEMLESS=m
|
CONFIG_INPUT_FF_MEMLESS=m
|
||||||
# CONFIG_INPUT_MOUSEDEV is not set
|
# CONFIG_INPUT_MOUSEDEV is not set
|
||||||
@ -128,8 +136,8 @@ CONFIG_INPUT_FF_MEMLESS=m
|
|||||||
CONFIG_SERIO_LIBPS2=y
|
CONFIG_SERIO_LIBPS2=y
|
||||||
CONFIG_SERIAL_8250=y
|
CONFIG_SERIAL_8250=y
|
||||||
CONFIG_SERIAL_8250_CONSOLE=y
|
CONFIG_SERIAL_8250_CONSOLE=y
|
||||||
CONFIG_SERIAL_8250_NR_UARTS=2
|
CONFIG_SERIAL_8250_NR_UARTS=6
|
||||||
CONFIG_SERIAL_8250_RUNTIME_UARTS=2
|
CONFIG_SERIAL_8250_RUNTIME_UARTS=6
|
||||||
CONFIG_SERIAL_8250_MANY_PORTS=y
|
CONFIG_SERIAL_8250_MANY_PORTS=y
|
||||||
CONFIG_SERIAL_8250_DETECT_IRQ=y
|
CONFIG_SERIAL_8250_DETECT_IRQ=y
|
||||||
CONFIG_SERIAL_8250_RSA=y
|
CONFIG_SERIAL_8250_RSA=y
|
||||||
@ -142,7 +150,8 @@ CONFIG_SPI=y
|
|||||||
CONFIG_SPI_FSL_SPI=y
|
CONFIG_SPI_FSL_SPI=y
|
||||||
CONFIG_SPI_FSL_ESPI=y
|
CONFIG_SPI_FSL_ESPI=y
|
||||||
CONFIG_GPIO_MPC8XXX=y
|
CONFIG_GPIO_MPC8XXX=y
|
||||||
# CONFIG_HWMON is not set
|
CONFIG_HWMON=m
|
||||||
|
CONFIG_SENSORS_LM90=m
|
||||||
CONFIG_FB=y
|
CONFIG_FB=y
|
||||||
CONFIG_FB_FSL_DIU=y
|
CONFIG_FB_FSL_DIU=y
|
||||||
# CONFIG_VGA_CONSOLE is not set
|
# CONFIG_VGA_CONSOLE is not set
|
||||||
@ -185,6 +194,7 @@ CONFIG_MMC_SDHCI_PLTFM=y
|
|||||||
CONFIG_MMC_SDHCI_OF_ESDHC=y
|
CONFIG_MMC_SDHCI_OF_ESDHC=y
|
||||||
CONFIG_EDAC=y
|
CONFIG_EDAC=y
|
||||||
CONFIG_EDAC_MM_EDAC=y
|
CONFIG_EDAC_MM_EDAC=y
|
||||||
|
CONFIG_EDAC_MPC85XX=y
|
||||||
CONFIG_RTC_CLASS=y
|
CONFIG_RTC_CLASS=y
|
||||||
CONFIG_RTC_DRV_DS1307=y
|
CONFIG_RTC_DRV_DS1307=y
|
||||||
CONFIG_RTC_DRV_DS1374=y
|
CONFIG_RTC_DRV_DS1374=y
|
||||||
|
@ -91,6 +91,7 @@ CONFIG_MTD_PHYSMAP_OF=y
|
|||||||
CONFIG_MTD_NAND=y
|
CONFIG_MTD_NAND=y
|
||||||
CONFIG_MTD_NAND_FSL_ELBC=y
|
CONFIG_MTD_NAND_FSL_ELBC=y
|
||||||
CONFIG_MTD_NAND_FSL_IFC=y
|
CONFIG_MTD_NAND_FSL_IFC=y
|
||||||
|
CONFIG_MTD_SPI_NOR=y
|
||||||
CONFIG_MTD_UBI=y
|
CONFIG_MTD_UBI=y
|
||||||
CONFIG_BLK_DEV_LOOP=y
|
CONFIG_BLK_DEV_LOOP=y
|
||||||
CONFIG_BLK_DEV_NBD=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,
|
extern int indirect_read_config(struct pci_bus *bus, unsigned int devfn,
|
||||||
int offset, int len, u32 *val);
|
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,
|
extern int indirect_write_config(struct pci_bus *bus, unsigned int devfn,
|
||||||
int offset, int len, u32 val);
|
int offset, int len, u32 val);
|
||||||
|
|
||||||
|
@ -178,12 +178,11 @@ static inline unsigned long pte_update(pte_t *p,
|
|||||||
andc %1,%0,%5\n\
|
andc %1,%0,%5\n\
|
||||||
or %1,%1,%6\n\
|
or %1,%1,%6\n\
|
||||||
/* 0x200 == Extended encoding, bit 22 */ \
|
/* 0x200 == Extended encoding, bit 22 */ \
|
||||||
/* Bit 22 has to be 1 if neither _PAGE_USER nor _PAGE_RW are set */ \
|
/* Bit 22 has to be 1 when _PAGE_USER is unset and _PAGE_RO is set */ \
|
||||||
rlwimi %1,%1,32-2,0x200\n /* get _PAGE_USER */ \
|
rlwimi %1,%1,32-1,0x200\n /* get _PAGE_RO */ \
|
||||||
rlwinm %3,%1,32-1,0x200\n /* get _PAGE_RW */ \
|
rlwinm %3,%1,32-2,0x200\n /* get _PAGE_USER */ \
|
||||||
or %1,%3,%1\n\
|
andc %1,%1,%3\n\
|
||||||
xori %1,%1,0x200\n"
|
stwcx. %1,0,%4\n\
|
||||||
" stwcx. %1,0,%4\n\
|
|
||||||
bne- 1b"
|
bne- 1b"
|
||||||
: "=&r" (old), "=&r" (tmp), "=m" (*p), "=&r" (tmp2)
|
: "=&r" (old), "=&r" (tmp), "=m" (*p), "=&r" (tmp2)
|
||||||
: "r" (p), "r" (clr), "r" (set), "m" (*p)
|
: "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,
|
static inline void ptep_set_wrprotect(struct mm_struct *mm, unsigned long addr,
|
||||||
pte_t *ptep)
|
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,
|
static inline void huge_ptep_set_wrprotect(struct mm_struct *mm,
|
||||||
unsigned long addr, pte_t *ptep)
|
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)
|
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);
|
(_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
|
#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 pte_to_pgoff(pte) (pte_val(pte) >> 3)
|
||||||
#define pgoff_to_pte(off) ((pte_t) { ((off) << 3) | _PAGE_FILE })
|
#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
|
* No page table caches to initialise
|
||||||
*/
|
*/
|
||||||
#define pgtable_cache_init() do { } while (0)
|
#define pgtable_cache_init() do { } while (0)
|
||||||
|
#endif
|
||||||
|
|
||||||
extern int get_pteptr(struct mm_struct *mm, unsigned long addr, pte_t **ptep,
|
extern int get_pteptr(struct mm_struct *mm, unsigned long addr, pte_t **ptep,
|
||||||
pmd_t **pmdp);
|
pmd_t **pmdp);
|
||||||
|
@ -30,7 +30,8 @@ struct mm_struct;
|
|||||||
#include <asm/tlbflush.h>
|
#include <asm/tlbflush.h>
|
||||||
|
|
||||||
/* Generic accessors to PTE bits */
|
/* 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_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_young(pte_t pte) { return pte_val(pte) & _PAGE_ACCESSED; }
|
||||||
static inline int pte_file(pte_t pte) { return pte_val(pte) & _PAGE_FILE; }
|
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 */
|
/* Generic modifiers for PTE bits */
|
||||||
static inline pte_t pte_wrprotect(pte_t pte) {
|
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) {
|
static inline pte_t pte_mkclean(pte_t pte) {
|
||||||
pte_val(pte) &= ~(_PAGE_DIRTY | _PAGE_HWWRITE); return pte; }
|
pte_val(pte) &= ~(_PAGE_DIRTY | _PAGE_HWWRITE); return pte; }
|
||||||
static inline pte_t pte_mkold(pte_t pte) {
|
static inline pte_t pte_mkold(pte_t pte) {
|
||||||
pte_val(pte) &= ~_PAGE_ACCESSED; return pte; }
|
pte_val(pte) &= ~_PAGE_ACCESSED; return pte; }
|
||||||
static inline pte_t pte_mkwrite(pte_t pte) {
|
static inline pte_t pte_mkwrite(pte_t pte) {
|
||||||
|
pte_val(pte) &= ~_PAGE_RO;
|
||||||
pte_val(pte) |= _PAGE_RW; return pte; }
|
pte_val(pte) |= _PAGE_RW; return pte; }
|
||||||
static inline pte_t pte_mkdirty(pte_t pte) {
|
static inline pte_t pte_mkdirty(pte_t pte) {
|
||||||
pte_val(pte) |= _PAGE_DIRTY; return pte; }
|
pte_val(pte) |= _PAGE_DIRTY; return pte; }
|
||||||
|
@ -46,9 +46,9 @@
|
|||||||
* require a TLB exception handler change. It is assumed unused bits
|
* require a TLB exception handler change. It is assumed unused bits
|
||||||
* are always zero.
|
* 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 */
|
#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 _PAGE_KNLRO 0x0200
|
||||||
|
|
||||||
#define _PMD_PRESENT 0x0001
|
#define _PMD_PRESENT 0x0001
|
||||||
@ -62,9 +62,8 @@
|
|||||||
#define PTE_ATOMIC_UPDATES 1
|
#define PTE_ATOMIC_UPDATES 1
|
||||||
|
|
||||||
/* We need to add _PAGE_SHARED to kernel pages */
|
/* We need to add _PAGE_SHARED to kernel pages */
|
||||||
#define _PAGE_KERNEL_RO (_PAGE_SHARED | _PAGE_KNLRO)
|
#define _PAGE_KERNEL_RO (_PAGE_SHARED | _PAGE_RO | _PAGE_KNLRO)
|
||||||
#define _PAGE_KERNEL_ROX (_PAGE_EXEC | _PAGE_KNLRO)
|
#define _PAGE_KERNEL_ROX (_PAGE_EXEC | _PAGE_RO | _PAGE_KNLRO)
|
||||||
#define _PAGE_KERNEL_RW (_PAGE_DIRTY | _PAGE_RW | _PAGE_HWWRITE)
|
|
||||||
|
|
||||||
#endif /* __KERNEL__ */
|
#endif /* __KERNEL__ */
|
||||||
#endif /* _ASM_POWERPC_PTE_8xx_H */
|
#endif /* _ASM_POWERPC_PTE_8xx_H */
|
||||||
|
@ -34,6 +34,12 @@
|
|||||||
#ifndef _PAGE_PSIZE
|
#ifndef _PAGE_PSIZE
|
||||||
#define _PAGE_PSIZE 0
|
#define _PAGE_PSIZE 0
|
||||||
#endif
|
#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
|
#ifndef _PMD_PRESENT_MASK
|
||||||
#define _PMD_PRESENT_MASK _PMD_PRESENT
|
#define _PMD_PRESENT_MASK _PMD_PRESENT
|
||||||
#endif
|
#endif
|
||||||
@ -42,10 +48,10 @@
|
|||||||
#define PMD_PAGE_SIZE(pmd) bad_call_to_PMD_PAGE_SIZE()
|
#define PMD_PAGE_SIZE(pmd) bad_call_to_PMD_PAGE_SIZE()
|
||||||
#endif
|
#endif
|
||||||
#ifndef _PAGE_KERNEL_RO
|
#ifndef _PAGE_KERNEL_RO
|
||||||
#define _PAGE_KERNEL_RO 0
|
#define _PAGE_KERNEL_RO (_PAGE_RO)
|
||||||
#endif
|
#endif
|
||||||
#ifndef _PAGE_KERNEL_ROX
|
#ifndef _PAGE_KERNEL_ROX
|
||||||
#define _PAGE_KERNEL_ROX (_PAGE_EXEC)
|
#define _PAGE_KERNEL_ROX (_PAGE_EXEC | _PAGE_RO)
|
||||||
#endif
|
#endif
|
||||||
#ifndef _PAGE_KERNEL_RW
|
#ifndef _PAGE_KERNEL_RW
|
||||||
#define _PAGE_KERNEL_RW (_PAGE_DIRTY | _PAGE_RW | _PAGE_HWWRITE)
|
#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() */
|
/* Mask of bits returned by pte_pgprot() */
|
||||||
#define PAGE_PROT_BITS (_PAGE_GUARDED | _PAGE_COHERENT | _PAGE_NO_CACHE | \
|
#define PAGE_PROT_BITS (_PAGE_GUARDED | _PAGE_COHERENT | _PAGE_NO_CACHE | \
|
||||||
_PAGE_WRITETHRU | _PAGE_ENDIAN | _PAGE_4K_PFN | \
|
_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)
|
_PAGE_RW | _PAGE_HWWRITE | _PAGE_DIRTY | _PAGE_EXEC)
|
||||||
|
|
||||||
#ifdef CONFIG_NUMA_BALANCING
|
#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_NONE __pgprot(_PAGE_BASE)
|
||||||
#define PAGE_SHARED __pgprot(_PAGE_BASE | _PAGE_USER | _PAGE_RW)
|
#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_SHARED_X __pgprot(_PAGE_BASE | _PAGE_USER | _PAGE_RW | \
|
||||||
#define PAGE_COPY __pgprot(_PAGE_BASE | _PAGE_USER)
|
_PAGE_EXEC)
|
||||||
#define PAGE_COPY_X __pgprot(_PAGE_BASE | _PAGE_USER | _PAGE_EXEC)
|
#define PAGE_COPY __pgprot(_PAGE_BASE | _PAGE_USER | _PAGE_RO)
|
||||||
#define PAGE_READONLY __pgprot(_PAGE_BASE | _PAGE_USER)
|
#define PAGE_COPY_X __pgprot(_PAGE_BASE | _PAGE_USER | _PAGE_RO | \
|
||||||
#define PAGE_READONLY_X __pgprot(_PAGE_BASE | _PAGE_USER | _PAGE_EXEC)
|
_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 __P000 PAGE_NONE
|
||||||
#define __P001 PAGE_READONLY
|
#define __P001 PAGE_READONLY
|
||||||
|
@ -1133,6 +1133,7 @@ static struct cpu_spec __initdata cpu_specs[] = {
|
|||||||
.icache_bsize = 32,
|
.icache_bsize = 32,
|
||||||
.dcache_bsize = 32,
|
.dcache_bsize = 32,
|
||||||
.cpu_setup = __setup_cpu_603,
|
.cpu_setup = __setup_cpu_603,
|
||||||
|
.machine_check = machine_check_generic,
|
||||||
.num_pmcs = 4,
|
.num_pmcs = 4,
|
||||||
.oprofile_cpu_type = "ppc/e300",
|
.oprofile_cpu_type = "ppc/e300",
|
||||||
.oprofile_type = PPC_OPROFILE_FSL_EMB,
|
.oprofile_type = PPC_OPROFILE_FSL_EMB,
|
||||||
|
@ -319,36 +319,29 @@ InstructionTLBMiss:
|
|||||||
* pin the first 8MB of kernel memory */
|
* pin the first 8MB of kernel memory */
|
||||||
andis. r11, r10, 0x8000 /* Address >= 0x80000000 */
|
andis. r11, r10, 0x8000 /* Address >= 0x80000000 */
|
||||||
#endif
|
#endif
|
||||||
mfspr r11, SPRN_M_TW /* Get level 1 table base address */
|
mfspr r11, SPRN_M_TW /* Get level 1 table */
|
||||||
#ifdef CONFIG_MODULES
|
#ifdef CONFIG_MODULES
|
||||||
beq 3f
|
beq 3f
|
||||||
lis r11, (swapper_pg_dir-PAGE_OFFSET)@h
|
lis r11, (swapper_pg_dir-PAGE_OFFSET)@ha
|
||||||
ori r11, r11, (swapper_pg_dir-PAGE_OFFSET)@l
|
|
||||||
3:
|
3:
|
||||||
#endif
|
#endif
|
||||||
/* Extract level 1 index */
|
/* Insert level 1 index */
|
||||||
rlwinm r10, r10, 32 - ((PAGE_SHIFT - 2) << 1), (PAGE_SHIFT - 2) << 1, 29
|
rlwimi r11, r10, 32 - ((PAGE_SHIFT - 2) << 1), (PAGE_SHIFT - 2) << 1, 29
|
||||||
lwzx r11, r10, r11 /* Get the level 1 entry */
|
lwz r11, (swapper_pg_dir-PAGE_OFFSET)@l(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
|
/* Load the MI_TWC with the attributes for this "segment." */
|
||||||
* for this "segment."
|
|
||||||
*/
|
|
||||||
MTSPR_CPU6(SPRN_MI_TWC, r11, r3) /* Set segment attributes */
|
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 */
|
/* 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 */
|
lwzx r10, r10, r11 /* Get the pte */
|
||||||
|
|
||||||
#ifdef CONFIG_SWAP
|
#ifdef CONFIG_SWAP
|
||||||
andi. r11, r10, _PAGE_ACCESSED | _PAGE_PRESENT
|
rlwinm r11, r10, 32-5, _PAGE_PRESENT
|
||||||
cmpwi cr0, r11, _PAGE_ACCESSED | _PAGE_PRESENT
|
and r11, r11, r10
|
||||||
li r11, RPN_PATTERN
|
rlwimi r10, r11, 0, _PAGE_PRESENT
|
||||||
bne- cr0, 2f
|
|
||||||
#else
|
|
||||||
li r11, RPN_PATTERN
|
|
||||||
#endif
|
#endif
|
||||||
|
li r11, RPN_PATTERN
|
||||||
/* The Linux PTE won't go exactly into the MMU TLB.
|
/* The Linux PTE won't go exactly into the MMU TLB.
|
||||||
* Software indicator bits 21 and 28 must be clear.
|
* Software indicator bits 21 and 28 must be clear.
|
||||||
* Software indicator bits 24, 25, 26, and 27 must be
|
* Software indicator bits 24, 25, 26, and 27 must be
|
||||||
@ -366,21 +359,6 @@ InstructionTLBMiss:
|
|||||||
mfspr r10, SPRN_SPRG_SCRATCH2
|
mfspr r10, SPRN_SPRG_SCRATCH2
|
||||||
EXCEPTION_EPILOG_0
|
EXCEPTION_EPILOG_0
|
||||||
rfi
|
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
|
. = 0x1200
|
||||||
DataStoreTLBMiss:
|
DataStoreTLBMiss:
|
||||||
@ -395,20 +373,16 @@ DataStoreTLBMiss:
|
|||||||
* kernel page tables.
|
* kernel page tables.
|
||||||
*/
|
*/
|
||||||
andis. r11, r10, 0x8000
|
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
|
beq 3f
|
||||||
lis r11, (swapper_pg_dir-PAGE_OFFSET)@h
|
lis r11, (swapper_pg_dir-PAGE_OFFSET)@ha
|
||||||
ori r11, r11, (swapper_pg_dir-PAGE_OFFSET)@l
|
|
||||||
3:
|
3:
|
||||||
/* Extract level 1 index */
|
/* Insert level 1 index */
|
||||||
rlwinm r10, r10, 32 - ((PAGE_SHIFT - 2) << 1), (PAGE_SHIFT - 2) << 1, 29
|
rlwimi r11, r10, 32 - ((PAGE_SHIFT - 2) << 1), (PAGE_SHIFT - 2) << 1, 29
|
||||||
lwzx r11, r10, r11 /* Get the level 1 entry */
|
lwz r11, (swapper_pg_dir-PAGE_OFFSET)@l(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 fetch the pte from the table.
|
/* 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 */
|
/* Extract level 2 index */
|
||||||
rlwinm r10, r10, 32 - (PAGE_SHIFT - 2), 32 - PAGE_SHIFT, 29
|
rlwinm r10, r10, 32 - (PAGE_SHIFT - 2), 32 - PAGE_SHIFT, 29
|
||||||
rlwimi r10, r11, 0, 0, 32 - PAGE_SHIFT - 1 /* Add level 2 base */
|
rlwimi r10, r11, 0, 0, 32 - PAGE_SHIFT - 1 /* Add level 2 base */
|
||||||
@ -441,16 +415,13 @@ DataStoreTLBMiss:
|
|||||||
and r11, r11, r10
|
and r11, r11, r10
|
||||||
rlwimi r10, r11, 0, _PAGE_PRESENT
|
rlwimi r10, r11, 0, _PAGE_PRESENT
|
||||||
#endif
|
#endif
|
||||||
/* invert RW */
|
|
||||||
xori r10, r10, _PAGE_RW
|
|
||||||
|
|
||||||
/* The Linux PTE won't go exactly into the MMU TLB.
|
/* The Linux PTE won't go exactly into the MMU TLB.
|
||||||
* Software indicator bits 22 and 28 must be clear.
|
* Software indicator bits 22 and 28 must be clear.
|
||||||
* Software indicator bits 24, 25, 26, and 27 must be
|
* Software indicator bits 24, 25, 26, and 27 must be
|
||||||
* set. All other Linux PTE bits control the behavior
|
* set. All other Linux PTE bits control the behavior
|
||||||
* of the MMU.
|
* of the MMU.
|
||||||
*/
|
*/
|
||||||
2: li r11, RPN_PATTERN
|
li r11, RPN_PATTERN
|
||||||
rlwimi r10, r11, 0, 24, 28 /* Set 24-27, clear 28 */
|
rlwimi r10, r11, 0, 24, 28 /* Set 24-27, clear 28 */
|
||||||
MTSPR_CPU6(SPRN_MD_RPN, r10, r3) /* Update TLB entry */
|
MTSPR_CPU6(SPRN_MD_RPN, r10, r3) /* Update TLB entry */
|
||||||
|
|
||||||
@ -469,10 +440,7 @@ DataStoreTLBMiss:
|
|||||||
*/
|
*/
|
||||||
. = 0x1300
|
. = 0x1300
|
||||||
InstructionTLBError:
|
InstructionTLBError:
|
||||||
EXCEPTION_PROLOG_0
|
EXCEPTION_PROLOG
|
||||||
InstructionTLBError1:
|
|
||||||
EXCEPTION_PROLOG_1
|
|
||||||
EXCEPTION_PROLOG_2
|
|
||||||
mr r4,r12
|
mr r4,r12
|
||||||
mr r5,r9
|
mr r5,r9
|
||||||
andis. r10,r5,0x4000
|
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 if you don't want to use self modifying code */
|
||||||
#define NO_SELF_MODIFYING_CODE
|
#define NO_SELF_MODIFYING_CODE
|
||||||
FixupDAR:/* Entry point for dcbx workaround. */
|
FixupDAR:/* Entry point for dcbx workaround. */
|
||||||
#ifdef CONFIG_8xx_CPU6
|
|
||||||
mtspr SPRN_DAR, r3
|
|
||||||
#endif
|
|
||||||
mtspr SPRN_SPRG_SCRATCH2, r10
|
mtspr SPRN_SPRG_SCRATCH2, r10
|
||||||
/* fetch instruction from memory. */
|
/* fetch instruction from memory. */
|
||||||
mfspr r10, SPRN_SRR0
|
mfspr r10, SPRN_SRR0
|
||||||
andis. r11, r10, 0x8000 /* Address >= 0x80000000 */
|
andis. r11, r10, 0x8000 /* Address >= 0x80000000 */
|
||||||
mfspr r11, SPRN_M_TW /* Get level 1 table base address */
|
mfspr r11, SPRN_M_TW /* Get level 1 table */
|
||||||
beq- 3f /* Branch if user space */
|
beq 3f
|
||||||
lis r11, (swapper_pg_dir-PAGE_OFFSET)@h
|
lis r11, (swapper_pg_dir-PAGE_OFFSET)@ha
|
||||||
ori r11, r11, (swapper_pg_dir-PAGE_OFFSET)@l
|
/* Insert level 1 index */
|
||||||
/* Extract level 1 index */
|
3: rlwimi r11, r10, 32 - ((PAGE_SHIFT - 2) << 1), (PAGE_SHIFT - 2) << 1, 29
|
||||||
3: rlwinm r10, 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 */
|
||||||
lwzx r11, r10, r11 /* Get the level 1 entry */
|
rlwinm r11, r11,0,0,19 /* Extract page descriptor page address */
|
||||||
rlwinm r10, r11,0,0,19 /* Extract page descriptor page address */
|
/* Insert level 2 index */
|
||||||
mfspr r11, SPRN_SRR0 /* Get effective address of fault */
|
rlwimi r11, r10, 32 - (PAGE_SHIFT - 2), 32 - PAGE_SHIFT, 29
|
||||||
/* Extract level 2 index */
|
lwz r11, 0(r11) /* Get the pte */
|
||||||
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
|
|
||||||
/* concat physical page address(r11) and page offset(r10) */
|
/* concat physical page address(r11) and page offset(r10) */
|
||||||
mfspr r10, SPRN_SRR0
|
|
||||||
rlwimi r11, r10, 0, 32 - PAGE_SHIFT, 31
|
rlwimi r11, r10, 0, 32 - PAGE_SHIFT, 31
|
||||||
lwz r11,0(r11)
|
lwz r11,0(r11)
|
||||||
/* Check if it really is a dcbx instruction. */
|
/* 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
|
* init's THREAD like the context switch code does, but this is
|
||||||
* easier......until someone changes init's static structures.
|
* easier......until someone changes init's static structures.
|
||||||
*/
|
*/
|
||||||
lis r6, swapper_pg_dir@h
|
lis r6, swapper_pg_dir@ha
|
||||||
ori r6, r6, swapper_pg_dir@l
|
|
||||||
tophys(r6,r6)
|
tophys(r6,r6)
|
||||||
#ifdef CONFIG_8xx_CPU6
|
#ifdef CONFIG_8xx_CPU6
|
||||||
lis r4, cpu6_errata_word@h
|
lis r4, cpu6_errata_word@h
|
||||||
@ -885,23 +843,28 @@ _GLOBAL(set_context)
|
|||||||
stw r4, 0x4(r5)
|
stw r4, 0x4(r5)
|
||||||
#endif
|
#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
|
#ifdef CONFIG_8xx_CPU6
|
||||||
lis r6, cpu6_errata_word@h
|
lis r6, cpu6_errata_word@h
|
||||||
ori r6, r6, cpu6_errata_word@l
|
ori r6, r6, cpu6_errata_word@l
|
||||||
tophys (r4, r4)
|
|
||||||
li r7, 0x3f80
|
li r7, 0x3f80
|
||||||
stw r7, 12(r6)
|
stw r7, 12(r6)
|
||||||
lwz 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
|
li r7, 0x3380
|
||||||
stw r7, 12(r6)
|
stw r7, 12(r6)
|
||||||
lwz 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
|
#endif
|
||||||
|
mtspr SPRN_M_CASID, r3 /* Update context */
|
||||||
SYNC
|
SYNC
|
||||||
blr
|
blr
|
||||||
|
|
||||||
|
@ -67,8 +67,6 @@ struct tlbcamrange {
|
|||||||
phys_addr_t phys;
|
phys_addr_t phys;
|
||||||
} tlbcam_addrs[NUM_TLBCAMS];
|
} tlbcam_addrs[NUM_TLBCAMS];
|
||||||
|
|
||||||
extern unsigned int tlbcam_index;
|
|
||||||
|
|
||||||
unsigned long tlbcam_sz(int idx)
|
unsigned long tlbcam_sz(int idx)
|
||||||
{
|
{
|
||||||
return tlbcam_addrs[idx].limit - tlbcam_addrs[idx].start + 1;
|
return tlbcam_addrs[idx].limit - tlbcam_addrs[idx].start + 1;
|
||||||
|
@ -52,12 +52,15 @@
|
|||||||
#include <asm/mmu_context.h>
|
#include <asm/mmu_context.h>
|
||||||
#include <asm/tlbflush.h>
|
#include <asm/tlbflush.h>
|
||||||
|
|
||||||
|
#include "mmu_decl.h"
|
||||||
|
|
||||||
static unsigned int first_context, last_context;
|
static unsigned int first_context, last_context;
|
||||||
static unsigned int next_context, nr_free_contexts;
|
static unsigned int next_context, nr_free_contexts;
|
||||||
static unsigned long *context_map;
|
static unsigned long *context_map;
|
||||||
static unsigned long *stale_map[NR_CPUS];
|
static unsigned long *stale_map[NR_CPUS];
|
||||||
static struct mm_struct **context_mm;
|
static struct mm_struct **context_mm;
|
||||||
static DEFINE_RAW_SPINLOCK(context_lock);
|
static DEFINE_RAW_SPINLOCK(context_lock);
|
||||||
|
static bool no_selective_tlbil;
|
||||||
|
|
||||||
#define CTX_MAP_SIZE \
|
#define CTX_MAP_SIZE \
|
||||||
(sizeof(unsigned long) * (last_context / BITS_PER_LONG + 1))
|
(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 */
|
#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
|
/* 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
|
* offlined, which means that it may be called for cpu != 0. For
|
||||||
* this to work, we somewhat assume that CPUs that are onlined
|
* 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;
|
goto stolen;
|
||||||
}
|
}
|
||||||
#endif /* CONFIG_SMP */
|
#endif /* CONFIG_SMP */
|
||||||
id = steal_context_up(id);
|
if (no_selective_tlbil)
|
||||||
|
id = steal_all_contexts();
|
||||||
|
else
|
||||||
|
id = steal_context_up(id);
|
||||||
goto stolen;
|
goto stolen;
|
||||||
}
|
}
|
||||||
nr_free_contexts--;
|
nr_free_contexts--;
|
||||||
@ -407,12 +445,15 @@ void __init mmu_context_init(void)
|
|||||||
if (mmu_has_feature(MMU_FTR_TYPE_8xx)) {
|
if (mmu_has_feature(MMU_FTR_TYPE_8xx)) {
|
||||||
first_context = 0;
|
first_context = 0;
|
||||||
last_context = 15;
|
last_context = 15;
|
||||||
|
no_selective_tlbil = true;
|
||||||
} else if (mmu_has_feature(MMU_FTR_TYPE_47x)) {
|
} else if (mmu_has_feature(MMU_FTR_TYPE_47x)) {
|
||||||
first_context = 1;
|
first_context = 1;
|
||||||
last_context = 65535;
|
last_context = 65535;
|
||||||
|
no_selective_tlbil = false;
|
||||||
} else {
|
} else {
|
||||||
first_context = 1;
|
first_context = 1;
|
||||||
last_context = 255;
|
last_context = 255;
|
||||||
|
no_selective_tlbil = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef DEBUG_CLAMP_LAST_CONTEXT
|
#ifdef DEBUG_CLAMP_LAST_CONTEXT
|
||||||
|
@ -63,7 +63,6 @@ void setbat(int index, unsigned long virt, phys_addr_t phys,
|
|||||||
#endif /* HAVE_BATS */
|
#endif /* HAVE_BATS */
|
||||||
|
|
||||||
#ifdef HAVE_TLBCAM
|
#ifdef HAVE_TLBCAM
|
||||||
extern unsigned int tlbcam_index;
|
|
||||||
extern phys_addr_t v_mapped_by_tlbcam(unsigned long va);
|
extern phys_addr_t v_mapped_by_tlbcam(unsigned long va);
|
||||||
extern unsigned long p_mapped_by_tlbcam(phys_addr_t pa);
|
extern unsigned long p_mapped_by_tlbcam(phys_addr_t pa);
|
||||||
#else /* !HAVE_TLBCAM */
|
#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)
|
#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 *pgd_alloc(struct mm_struct *mm)
|
||||||
{
|
{
|
||||||
pgd_t *ret;
|
pgd_t *ret;
|
||||||
|
|
||||||
/* pgdir take page or two with 4K pages and a page fraction otherwise */
|
/* pgdir take page or two with 4K pages and a page fraction otherwise */
|
||||||
#ifndef CONFIG_PPC_4K_PAGES
|
#ifndef CONFIG_PPC_4K_PAGES
|
||||||
ret = kzalloc(1 << PGDIR_ORDER, GFP_KERNEL);
|
ret = kmem_cache_alloc(pgtable_cache, GFP_KERNEL | __GFP_ZERO);
|
||||||
#else
|
#else
|
||||||
ret = (pgd_t *)__get_free_pages(GFP_KERNEL|__GFP_ZERO,
|
ret = (pgd_t *)__get_free_pages(GFP_KERNEL|__GFP_ZERO,
|
||||||
PGDIR_ORDER - PAGE_SHIFT);
|
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)
|
void pgd_free(struct mm_struct *mm, pgd_t *pgd)
|
||||||
{
|
{
|
||||||
#ifndef CONFIG_PPC_4K_PAGES
|
#ifndef CONFIG_PPC_4K_PAGES
|
||||||
kfree((void *)pgd);
|
kmem_cache_free(pgtable_cache, (void *)pgd);
|
||||||
#else
|
#else
|
||||||
free_pages((unsigned long)pgd, PGDIR_ORDER - PAGE_SHIFT);
|
free_pages((unsigned long)pgd, PGDIR_ORDER - PAGE_SHIFT);
|
||||||
#endif
|
#endif
|
||||||
@ -147,7 +158,7 @@ void __iomem *
|
|||||||
ioremap_prot(phys_addr_t addr, unsigned long size, unsigned long flags)
|
ioremap_prot(phys_addr_t addr, unsigned long size, unsigned long flags)
|
||||||
{
|
{
|
||||||
/* writeable implies dirty for kernel addresses */
|
/* writeable implies dirty for kernel addresses */
|
||||||
if (flags & _PAGE_RW)
|
if ((flags & (_PAGE_RW | _PAGE_RO)) != _PAGE_RO)
|
||||||
flags |= _PAGE_DIRTY | _PAGE_HWWRITE;
|
flags |= _PAGE_DIRTY | _PAGE_HWWRITE;
|
||||||
|
|
||||||
/* we don't want to let _PAGE_USER and _PAGE_EXEC leak out */
|
/* 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;
|
struct cpumask *cpu_mask;
|
||||||
unsigned int pid;
|
unsigned int pid;
|
||||||
|
|
||||||
|
if (unlikely(!mm))
|
||||||
|
return;
|
||||||
|
|
||||||
preempt_disable();
|
preempt_disable();
|
||||||
pid = mm ? mm->context.id : 0;
|
pid = mm->context.id;
|
||||||
if (unlikely(pid == MMU_NO_CONTEXT))
|
if (unlikely(pid == MMU_NO_CONTEXT))
|
||||||
goto bail;
|
goto bail;
|
||||||
cpu_mask = mm_cpumask(mm);
|
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);
|
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;
|
event->hw.state = PERF_HES_STOPPED | PERF_HES_UPTODATE;
|
||||||
val = 0;
|
val = 0;
|
||||||
|
} else {
|
||||||
|
event->hw.state &= ~(PERF_HES_STOPPED | PERF_HES_UPTODATE);
|
||||||
}
|
}
|
||||||
|
|
||||||
write_pmc(i, val);
|
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)
|
static void fsl_emb_pmu_start(struct perf_event *event, int ef_flags)
|
||||||
{
|
{
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
|
unsigned long val;
|
||||||
s64 left;
|
s64 left;
|
||||||
|
|
||||||
if (event->hw.idx < 0 || !event->hw.sample_period)
|
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;
|
event->hw.state = 0;
|
||||||
left = local64_read(&event->hw.period_left);
|
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_event_update_userpage(event);
|
||||||
perf_pmu_enable(event->pmu);
|
perf_pmu_enable(event->pmu);
|
||||||
|
@ -162,8 +162,7 @@ int mpc831x_usb_cfg(void)
|
|||||||
|
|
||||||
iounmap(immap);
|
iounmap(immap);
|
||||||
|
|
||||||
if (immr_node)
|
of_node_put(immr_node);
|
||||||
of_node_put(immr_node);
|
|
||||||
|
|
||||||
/* Map USB SOC space */
|
/* Map USB SOC space */
|
||||||
ret = of_address_to_resource(np, 0, &res);
|
ret = of_address_to_resource(np, 0, &res);
|
||||||
|
@ -241,6 +241,12 @@ config SGY_CTS1000
|
|||||||
help
|
help
|
||||||
Enable this to support functionality in Servergy's CTS-1000 systems.
|
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
|
endif # PPC32
|
||||||
|
|
||||||
config PPC_QEMU_E500
|
config PPC_QEMU_E500
|
||||||
|
@ -31,3 +31,4 @@ obj-$(CONFIG_XES_MPC85xx) += xes_mpc85xx.o
|
|||||||
obj-$(CONFIG_GE_IMP3A) += ge_imp3a.o
|
obj-$(CONFIG_GE_IMP3A) += ge_imp3a.o
|
||||||
obj-$(CONFIG_PPC_QEMU_E500) += qemu_e500.o
|
obj-$(CONFIG_PPC_QEMU_E500) += qemu_e500.o
|
||||||
obj-$(CONFIG_SGY_CTS1000) += sgy_cts1000.o
|
obj-$(CONFIG_SGY_CTS1000) += sgy_cts1000.o
|
||||||
|
obj-$(CONFIG_MVME2500) += mvme2500.o
|
||||||
|
74
arch/powerpc/platforms/85xx/mvme2500.c
Normal file
74
arch/powerpc/platforms/85xx/mvme2500.c
Normal file
@ -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;
|
u32 val = 0;
|
||||||
|
|
||||||
if (hose->indirect_type & PPC_INDIRECT_TYPE_FSL_CFG_REG_LINK) {
|
if (hose->indirect_type & PPC_INDIRECT_TYPE_FSL_CFG_REG_LINK) {
|
||||||
if (hose->ops->read == fsl_indirect_read_config) {
|
if (hose->ops->read == fsl_indirect_read_config)
|
||||||
struct pci_bus bus;
|
__indirect_read_config(hose, hose->first_busno, 0,
|
||||||
bus.number = hose->first_busno;
|
PCIE_LTSSM, 4, &val);
|
||||||
bus.sysdata = hose;
|
else
|
||||||
bus.ops = hose->ops;
|
|
||||||
indirect_read_config(&bus, 0, PCIE_LTSSM, 4, &val);
|
|
||||||
} else
|
|
||||||
early_read_config_dword(hose, 0, 0, PCIE_LTSSM, &val);
|
early_read_config_dword(hose, 0, 0, PCIE_LTSSM, &val);
|
||||||
if (val < PCIE_LTSSM_L0)
|
if (val < PCIE_LTSSM_L0)
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -20,31 +20,31 @@
|
|||||||
#include <asm/pci-bridge.h>
|
#include <asm/pci-bridge.h>
|
||||||
#include <asm/machdep.h>
|
#include <asm/machdep.h>
|
||||||
|
|
||||||
int indirect_read_config(struct pci_bus *bus, unsigned int devfn,
|
int __indirect_read_config(struct pci_controller *hose,
|
||||||
int offset, int len, u32 *val)
|
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;
|
volatile void __iomem *cfg_data;
|
||||||
u8 cfg_type = 0;
|
u8 cfg_type = 0;
|
||||||
u32 bus_no, reg;
|
u32 bus_no, reg;
|
||||||
|
|
||||||
if (hose->indirect_type & PPC_INDIRECT_TYPE_NO_PCIE_LINK) {
|
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;
|
return PCIBIOS_DEVICE_NOT_FOUND;
|
||||||
if (devfn != 0)
|
if (devfn != 0)
|
||||||
return PCIBIOS_DEVICE_NOT_FOUND;
|
return PCIBIOS_DEVICE_NOT_FOUND;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ppc_md.pci_exclude_device)
|
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;
|
return PCIBIOS_DEVICE_NOT_FOUND;
|
||||||
|
|
||||||
if (hose->indirect_type & PPC_INDIRECT_TYPE_SET_CFG_TYPE)
|
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;
|
cfg_type = 1;
|
||||||
|
|
||||||
bus_no = (bus->number == hose->first_busno) ?
|
bus_no = (bus_number == hose->first_busno) ?
|
||||||
hose->self_busno : bus->number;
|
hose->self_busno : bus_number;
|
||||||
|
|
||||||
if (hose->indirect_type & PPC_INDIRECT_TYPE_EXT_REG)
|
if (hose->indirect_type & PPC_INDIRECT_TYPE_EXT_REG)
|
||||||
reg = ((offset & 0xf00) << 16) | (offset & 0xfc);
|
reg = ((offset & 0xf00) << 16) | (offset & 0xfc);
|
||||||
@ -77,6 +77,15 @@ int indirect_read_config(struct pci_bus *bus, unsigned int devfn,
|
|||||||
return PCIBIOS_SUCCESSFUL;
|
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 indirect_write_config(struct pci_bus *bus, unsigned int devfn,
|
||||||
int offset, int len, u32 val)
|
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.
|
* saved microcode information and put in the new.
|
||||||
*/
|
*/
|
||||||
memset(&qe_firmware_info, 0, sizeof(qe_firmware_info));
|
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;
|
qe_firmware_info.extended_modes = firmware->extended_modes;
|
||||||
memcpy(qe_firmware_info.vtraps, firmware->vtraps,
|
memcpy(qe_firmware_info.vtraps, firmware->vtraps,
|
||||||
sizeof(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*/
|
/* Copy the data into qe_firmware_info*/
|
||||||
sprop = of_get_property(fw, "id", NULL);
|
sprop = of_get_property(fw, "id", NULL);
|
||||||
if (sprop)
|
if (sprop)
|
||||||
strncpy(qe_firmware_info.id, sprop,
|
strlcpy(qe_firmware_info.id, sprop,
|
||||||
sizeof(qe_firmware_info.id) - 1);
|
sizeof(qe_firmware_info.id));
|
||||||
|
|
||||||
prop = of_find_property(fw, "extended-modes", NULL);
|
prop = of_find_property(fw, "extended-modes", NULL);
|
||||||
if (prop && (prop->length == sizeof(u64))) {
|
if (prop && (prop->length == sizeof(u64))) {
|
||||||
|
@ -27,18 +27,29 @@ enum ccf_version {
|
|||||||
struct ccf_info {
|
struct ccf_info {
|
||||||
enum ccf_version version;
|
enum ccf_version version;
|
||||||
int err_reg_offs;
|
int err_reg_offs;
|
||||||
|
bool has_brr;
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct ccf_info ccf1_info = {
|
static const struct ccf_info ccf1_info = {
|
||||||
.version = CCF1,
|
.version = CCF1,
|
||||||
.err_reg_offs = 0xa00,
|
.err_reg_offs = 0xa00,
|
||||||
|
.has_brr = false,
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct ccf_info ccf2_info = {
|
static const struct ccf_info ccf2_info = {
|
||||||
.version = CCF2,
|
.version = CCF2,
|
||||||
.err_reg_offs = 0xe40,
|
.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[] = {
|
static const struct of_device_id ccf_matches[] = {
|
||||||
{
|
{
|
||||||
.compatible = "fsl,corenet1-cf",
|
.compatible = "fsl,corenet1-cf",
|
||||||
@ -66,6 +77,8 @@ struct ccf_err_regs {
|
|||||||
/* LAE/CV also valid for errdis and errinten */
|
/* LAE/CV also valid for errdis and errinten */
|
||||||
#define ERRDET_LAE (1 << 0) /* Local Access Error */
|
#define ERRDET_LAE (1 << 0) /* Local Access Error */
|
||||||
#define ERRDET_CV (1 << 1) /* Coherency Violation */
|
#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_SHIFT 26 /* Capture Type (ccf2 only) */
|
||||||
#define ERRDET_CTYPE_MASK (0x1f << ERRDET_CTYPE_SHIFT)
|
#define ERRDET_CTYPE_MASK (0x1f << ERRDET_CTYPE_SHIFT)
|
||||||
#define ERRDET_CAP (1 << 31) /* Capture Valid (ccf2 only) */
|
#define ERRDET_CAP (1 << 31) /* Capture Valid (ccf2 only) */
|
||||||
@ -84,6 +97,7 @@ struct ccf_private {
|
|||||||
struct device *dev;
|
struct device *dev;
|
||||||
void __iomem *regs;
|
void __iomem *regs;
|
||||||
struct ccf_err_regs __iomem *err_regs;
|
struct ccf_err_regs __iomem *err_regs;
|
||||||
|
bool t1040;
|
||||||
};
|
};
|
||||||
|
|
||||||
static irqreturn_t ccf_irq(int irq, void *dev_id)
|
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)
|
if (errdet & ERRDET_CV)
|
||||||
dev_crit(ccf->dev, "Coherency Violation\n");
|
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) {
|
if (cap_valid) {
|
||||||
dev_crit(ccf->dev, "address 0x%09llx, src id 0x%x\n",
|
dev_crit(ccf->dev, "address 0x%09llx, src id 0x%x\n",
|
||||||
addr, src_id);
|
addr, src_id);
|
||||||
@ -157,6 +177,7 @@ static int ccf_probe(struct platform_device *pdev)
|
|||||||
struct ccf_private *ccf;
|
struct ccf_private *ccf;
|
||||||
struct resource *r;
|
struct resource *r;
|
||||||
const struct of_device_id *match;
|
const struct of_device_id *match;
|
||||||
|
u32 errinten;
|
||||||
int ret, irq;
|
int ret, irq;
|
||||||
|
|
||||||
match = of_match_device(ccf_matches, &pdev->dev);
|
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->info = match->data;
|
||||||
ccf->err_regs = ccf->regs + ccf->info->err_reg_offs;
|
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);
|
dev_set_drvdata(&pdev->dev, ccf);
|
||||||
|
|
||||||
irq = platform_get_irq(pdev, 0);
|
irq = platform_get_irq(pdev, 0);
|
||||||
@ -197,15 +225,19 @@ static int ccf_probe(struct platform_device *pdev)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
errinten = ERRDET_LAE | ERRDET_CV;
|
||||||
|
if (ccf->t1040)
|
||||||
|
errinten |= ERRDET_UTID | ERRDET_MCST;
|
||||||
|
|
||||||
switch (ccf->info->version) {
|
switch (ccf->info->version) {
|
||||||
case CCF1:
|
case CCF1:
|
||||||
/* On CCF1 this register enables rather than disables. */
|
/* On CCF1 this register enables rather than disables. */
|
||||||
iowrite32be(ERRDET_LAE | ERRDET_CV, &ccf->err_regs->errdis);
|
iowrite32be(errinten, &ccf->err_regs->errdis);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CCF2:
|
case CCF2:
|
||||||
iowrite32be(0, &ccf->err_regs->errdis);
|
iowrite32be(0, &ccf->err_regs->errdis);
|
||||||
iowrite32be(ERRDET_LAE | ERRDET_CV, &ccf->err_regs->errinten);
|
iowrite32be(errinten, &ccf->err_regs->errinten);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user