Merge branch 'for-2.6.25' of git://git.secretlab.ca/git/linux-2.6-mpc52xx
This commit is contained in:
Коммит
4eece4ccf9
|
@ -45,17 +45,16 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
soc5200@f0000000 {
|
soc5200@f0000000 {
|
||||||
model = "fsl,mpc5200b";
|
#address-cells = <1>;
|
||||||
compatible = "fsl,mpc5200b";
|
#size-cells = <1>;
|
||||||
revision = ""; // from bootloader
|
compatible = "fsl,mpc5200b-immr";
|
||||||
device_type = "soc";
|
|
||||||
ranges = <0 f0000000 0000c000>;
|
ranges = <0 f0000000 0000c000>;
|
||||||
reg = <f0000000 00000100>;
|
reg = <f0000000 00000100>;
|
||||||
bus-frequency = <0>; // from bootloader
|
bus-frequency = <0>; // from bootloader
|
||||||
system-frequency = <0>; // from bootloader
|
system-frequency = <0>; // from bootloader
|
||||||
|
|
||||||
cdm@200 {
|
cdm@200 {
|
||||||
compatible = "mpc5200b-cdm","mpc5200-cdm";
|
compatible = "fsl,mpc5200b-cdm","fsl,mpc5200-cdm";
|
||||||
reg = <200 38>;
|
reg = <200 38>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -63,11 +62,11 @@
|
||||||
// 5200 interrupts are encoded into two levels;
|
// 5200 interrupts are encoded into two levels;
|
||||||
interrupt-controller;
|
interrupt-controller;
|
||||||
#interrupt-cells = <3>;
|
#interrupt-cells = <3>;
|
||||||
compatible = "mpc5200b-pic","mpc5200-pic";
|
compatible = "fsl,mpc5200b-pic","fsl,mpc5200-pic";
|
||||||
reg = <500 80>;
|
reg = <500 80>;
|
||||||
};
|
};
|
||||||
|
|
||||||
gpt@600 { // General Purpose Timer
|
timer@600 { // General Purpose Timer
|
||||||
compatible = "fsl,mpc5200b-gpt","fsl,mpc5200-gpt";
|
compatible = "fsl,mpc5200b-gpt","fsl,mpc5200-gpt";
|
||||||
reg = <600 10>;
|
reg = <600 10>;
|
||||||
interrupts = <1 9 0>;
|
interrupts = <1 9 0>;
|
||||||
|
@ -75,49 +74,49 @@
|
||||||
fsl,has-wdt;
|
fsl,has-wdt;
|
||||||
};
|
};
|
||||||
|
|
||||||
gpt@610 { // General Purpose Timer
|
timer@610 { // General Purpose Timer
|
||||||
compatible = "fsl,mpc5200b-gpt","fsl,mpc5200-gpt";
|
compatible = "fsl,mpc5200b-gpt","fsl,mpc5200-gpt";
|
||||||
reg = <610 10>;
|
reg = <610 10>;
|
||||||
interrupts = <1 a 0>;
|
interrupts = <1 a 0>;
|
||||||
interrupt-parent = <&mpc5200_pic>;
|
interrupt-parent = <&mpc5200_pic>;
|
||||||
};
|
};
|
||||||
|
|
||||||
gpt@620 { // General Purpose Timer
|
timer@620 { // General Purpose Timer
|
||||||
compatible = "fsl,mpc5200b-gpt","fsl,mpc5200-gpt";
|
compatible = "fsl,mpc5200b-gpt","fsl,mpc5200-gpt";
|
||||||
reg = <620 10>;
|
reg = <620 10>;
|
||||||
interrupts = <1 b 0>;
|
interrupts = <1 b 0>;
|
||||||
interrupt-parent = <&mpc5200_pic>;
|
interrupt-parent = <&mpc5200_pic>;
|
||||||
};
|
};
|
||||||
|
|
||||||
gpt@630 { // General Purpose Timer
|
timer@630 { // General Purpose Timer
|
||||||
compatible = "fsl,mpc5200b-gpt","fsl,mpc5200-gpt";
|
compatible = "fsl,mpc5200b-gpt","fsl,mpc5200-gpt";
|
||||||
reg = <630 10>;
|
reg = <630 10>;
|
||||||
interrupts = <1 c 0>;
|
interrupts = <1 c 0>;
|
||||||
interrupt-parent = <&mpc5200_pic>;
|
interrupt-parent = <&mpc5200_pic>;
|
||||||
};
|
};
|
||||||
|
|
||||||
gpt@640 { // General Purpose Timer
|
timer@640 { // General Purpose Timer
|
||||||
compatible = "fsl,mpc5200b-gpt","fsl,mpc5200-gpt";
|
compatible = "fsl,mpc5200b-gpt","fsl,mpc5200-gpt";
|
||||||
reg = <640 10>;
|
reg = <640 10>;
|
||||||
interrupts = <1 d 0>;
|
interrupts = <1 d 0>;
|
||||||
interrupt-parent = <&mpc5200_pic>;
|
interrupt-parent = <&mpc5200_pic>;
|
||||||
};
|
};
|
||||||
|
|
||||||
gpt@650 { // General Purpose Timer
|
timer@650 { // General Purpose Timer
|
||||||
compatible = "fsl,mpc5200b-gpt","fsl,mpc5200-gpt";
|
compatible = "fsl,mpc5200b-gpt","fsl,mpc5200-gpt";
|
||||||
reg = <650 10>;
|
reg = <650 10>;
|
||||||
interrupts = <1 e 0>;
|
interrupts = <1 e 0>;
|
||||||
interrupt-parent = <&mpc5200_pic>;
|
interrupt-parent = <&mpc5200_pic>;
|
||||||
};
|
};
|
||||||
|
|
||||||
gpt@660 { // General Purpose Timer
|
timer@660 { // General Purpose Timer
|
||||||
compatible = "fsl,mpc5200b-gpt","fsl,mpc5200-gpt";
|
compatible = "fsl,mpc5200b-gpt","fsl,mpc5200-gpt";
|
||||||
reg = <660 10>;
|
reg = <660 10>;
|
||||||
interrupts = <1 f 0>;
|
interrupts = <1 f 0>;
|
||||||
interrupt-parent = <&mpc5200_pic>;
|
interrupt-parent = <&mpc5200_pic>;
|
||||||
};
|
};
|
||||||
|
|
||||||
gpt@670 { // General Purpose Timer
|
timer@670 { // General Purpose Timer
|
||||||
compatible = "fsl,mpc5200b-gpt","fsl,mpc5200-gpt";
|
compatible = "fsl,mpc5200b-gpt","fsl,mpc5200-gpt";
|
||||||
reg = <670 10>;
|
reg = <670 10>;
|
||||||
interrupts = <1 10 0>;
|
interrupts = <1 10 0>;
|
||||||
|
@ -125,43 +124,42 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
rtc@800 { // Real time clock
|
rtc@800 { // Real time clock
|
||||||
compatible = "mpc5200b-rtc","mpc5200-rtc";
|
compatible = "fsl,mpc5200b-rtc","fsl,mpc5200-rtc";
|
||||||
reg = <800 100>;
|
reg = <800 100>;
|
||||||
interrupts = <1 5 0 1 6 0>;
|
interrupts = <1 5 0 1 6 0>;
|
||||||
interrupt-parent = <&mpc5200_pic>;
|
interrupt-parent = <&mpc5200_pic>;
|
||||||
};
|
};
|
||||||
|
|
||||||
gpio@b00 {
|
gpio@b00 {
|
||||||
compatible = "mpc5200b-gpio","mpc5200-gpio";
|
compatible = "fsl,mpc5200b-gpio","fsl,mpc5200-gpio";
|
||||||
reg = <b00 40>;
|
reg = <b00 40>;
|
||||||
interrupts = <1 7 0>;
|
interrupts = <1 7 0>;
|
||||||
interrupt-parent = <&mpc5200_pic>;
|
interrupt-parent = <&mpc5200_pic>;
|
||||||
};
|
};
|
||||||
|
|
||||||
gpio-wkup@c00 {
|
gpio@c00 {
|
||||||
compatible = "mpc5200b-gpio-wkup","mpc5200-gpio-wkup";
|
compatible = "fsl,mpc5200b-gpio-wkup","fsl,mpc5200-gpio-wkup";
|
||||||
reg = <c00 40>;
|
reg = <c00 40>;
|
||||||
interrupts = <1 8 0 0 3 0>;
|
interrupts = <1 8 0 0 3 0>;
|
||||||
interrupt-parent = <&mpc5200_pic>;
|
interrupt-parent = <&mpc5200_pic>;
|
||||||
};
|
};
|
||||||
|
|
||||||
spi@f00 {
|
spi@f00 {
|
||||||
compatible = "mpc5200b-spi","mpc5200-spi";
|
compatible = "fsl,mpc5200b-spi","fsl,mpc5200-spi";
|
||||||
reg = <f00 20>;
|
reg = <f00 20>;
|
||||||
interrupts = <2 d 0 2 e 0>;
|
interrupts = <2 d 0 2 e 0>;
|
||||||
interrupt-parent = <&mpc5200_pic>;
|
interrupt-parent = <&mpc5200_pic>;
|
||||||
};
|
};
|
||||||
|
|
||||||
usb@1000 {
|
usb@1000 {
|
||||||
device_type = "usb-ohci-be";
|
compatible = "fsl,mpc5200b-ohci","fsl,mpc5200-ohci","ohci-be";
|
||||||
compatible = "mpc5200b-ohci","mpc5200-ohci","ohci-be";
|
|
||||||
reg = <1000 ff>;
|
reg = <1000 ff>;
|
||||||
interrupts = <2 6 0>;
|
interrupts = <2 6 0>;
|
||||||
interrupt-parent = <&mpc5200_pic>;
|
interrupt-parent = <&mpc5200_pic>;
|
||||||
};
|
};
|
||||||
|
|
||||||
dma-controller@1200 {
|
dma-controller@1200 {
|
||||||
compatible = "mpc5200b-bestcomm","mpc5200-bestcomm";
|
compatible = "fsl,mpc5200b-bestcomm","fsl,mpc5200-bestcomm";
|
||||||
reg = <1200 80>;
|
reg = <1200 80>;
|
||||||
interrupts = <3 0 0 3 1 0 3 2 0 3 3 0
|
interrupts = <3 0 0 3 1 0 3 2 0 3 3 0
|
||||||
3 4 0 3 5 0 3 6 0 3 7 0
|
3 4 0 3 5 0 3 6 0 3 7 0
|
||||||
|
@ -171,13 +169,13 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
xlb@1f00 {
|
xlb@1f00 {
|
||||||
compatible = "mpc5200b-xlb","mpc5200-xlb";
|
compatible = "fsl,mpc5200b-xlb","fsl,mpc5200-xlb";
|
||||||
reg = <1f00 100>;
|
reg = <1f00 100>;
|
||||||
};
|
};
|
||||||
|
|
||||||
serial@2000 { // PSC1
|
serial@2000 { // PSC1
|
||||||
device_type = "serial";
|
device_type = "serial";
|
||||||
compatible = "mpc5200b-psc-uart","mpc5200-psc-uart";
|
compatible = "fsl,mpc5200b-psc-uart","fsl,mpc5200-psc-uart";
|
||||||
port-number = <0>; // Logical port assignment
|
port-number = <0>; // Logical port assignment
|
||||||
reg = <2000 100>;
|
reg = <2000 100>;
|
||||||
interrupts = <2 1 0>;
|
interrupts = <2 1 0>;
|
||||||
|
@ -186,7 +184,7 @@
|
||||||
|
|
||||||
serial@2200 { // PSC2
|
serial@2200 { // PSC2
|
||||||
device_type = "serial";
|
device_type = "serial";
|
||||||
compatible = "mpc5200-psc-uart";
|
compatible = "fsl,mpc5200-psc-uart";
|
||||||
port-number = <1>; // Logical port assignment
|
port-number = <1>; // Logical port assignment
|
||||||
reg = <2200 100>;
|
reg = <2200 100>;
|
||||||
interrupts = <2 2 0>;
|
interrupts = <2 2 0>;
|
||||||
|
@ -195,7 +193,7 @@
|
||||||
|
|
||||||
serial@2400 { // PSC3
|
serial@2400 { // PSC3
|
||||||
device_type = "serial";
|
device_type = "serial";
|
||||||
compatible = "mpc5200-psc-uart";
|
compatible = "fsl,mpc5200-psc-uart";
|
||||||
port-number = <2>; // Logical port assignment
|
port-number = <2>; // Logical port assignment
|
||||||
reg = <2400 100>;
|
reg = <2400 100>;
|
||||||
interrupts = <2 3 0>;
|
interrupts = <2 3 0>;
|
||||||
|
@ -204,7 +202,7 @@
|
||||||
|
|
||||||
serial@2c00 { // PSC6
|
serial@2c00 { // PSC6
|
||||||
device_type = "serial";
|
device_type = "serial";
|
||||||
compatible = "mpc5200b-psc-uart","mpc5200-psc-uart";
|
compatible = "fsl,mpc5200b-psc-uart","fsl,mpc5200-psc-uart";
|
||||||
port-number = <5>; // Logical port assignment
|
port-number = <5>; // Logical port assignment
|
||||||
reg = <2c00 100>;
|
reg = <2c00 100>;
|
||||||
interrupts = <2 4 0>;
|
interrupts = <2 4 0>;
|
||||||
|
@ -213,15 +211,15 @@
|
||||||
|
|
||||||
ethernet@3000 {
|
ethernet@3000 {
|
||||||
device_type = "network";
|
device_type = "network";
|
||||||
compatible = "mpc5200b-fec","mpc5200-fec";
|
compatible = "fsl,mpc5200b-fec","fsl,mpc5200-fec";
|
||||||
reg = <3000 800>;
|
reg = <3000 800>;
|
||||||
local-mac-address = [ 00 00 00 00 00 00 ]; /* Filled in by U-Boot */
|
local-mac-address = [ 00 00 00 00 00 00 ];
|
||||||
interrupts = <2 5 0>;
|
interrupts = <2 5 0>;
|
||||||
interrupt-parent = <&mpc5200_pic>;
|
interrupt-parent = <&mpc5200_pic>;
|
||||||
};
|
};
|
||||||
|
|
||||||
i2c@3d40 {
|
i2c@3d40 {
|
||||||
compatible = "mpc5200b-i2c","mpc5200-i2c","fsl-i2c";
|
compatible = "fsl,mpc5200b-i2c","fsl,mpc5200-i2c","fsl-i2c";
|
||||||
reg = <3d40 40>;
|
reg = <3d40 40>;
|
||||||
interrupts = <2 10 0>;
|
interrupts = <2 10 0>;
|
||||||
interrupt-parent = <&mpc5200_pic>;
|
interrupt-parent = <&mpc5200_pic>;
|
||||||
|
@ -229,7 +227,7 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
sram@8000 {
|
sram@8000 {
|
||||||
compatible = "mpc5200b-sram","mpc5200-sram";
|
compatible = "fsl,mpc5200b-sram","fsl,mpc5200-sram";
|
||||||
reg = <8000 4000>;
|
reg = <8000 4000>;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
@ -10,15 +10,8 @@
|
||||||
* option) any later version.
|
* option) any later version.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
|
||||||
* WARNING: Do not depend on this tree layout remaining static just yet.
|
|
||||||
* The MPC5200 device tree conventions are still in flux
|
|
||||||
* Keep an eye on the linuxppc-dev mailing list for more details
|
|
||||||
*/
|
|
||||||
|
|
||||||
/ {
|
/ {
|
||||||
model = "fsl,lite5200";
|
model = "fsl,lite5200";
|
||||||
// revision = "1.0";
|
|
||||||
compatible = "fsl,lite5200";
|
compatible = "fsl,lite5200";
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <1>;
|
#size-cells = <1>;
|
||||||
|
@ -46,30 +39,29 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
soc5200@f0000000 {
|
soc5200@f0000000 {
|
||||||
model = "fsl,mpc5200";
|
#address-cells = <1>;
|
||||||
compatible = "mpc5200";
|
#size-cells = <1>;
|
||||||
revision = ""; // from bootloader
|
compatible = "fsl,mpc5200-immr";
|
||||||
device_type = "soc";
|
|
||||||
ranges = <0 f0000000 0000c000>;
|
ranges = <0 f0000000 0000c000>;
|
||||||
reg = <f0000000 00000100>;
|
reg = <f0000000 00000100>;
|
||||||
bus-frequency = <0>; // from bootloader
|
bus-frequency = <0>; // from bootloader
|
||||||
system-frequency = <0>; // from bootloader
|
system-frequency = <0>; // from bootloader
|
||||||
|
|
||||||
cdm@200 {
|
cdm@200 {
|
||||||
compatible = "mpc5200-cdm";
|
compatible = "fsl,mpc5200-cdm";
|
||||||
reg = <200 38>;
|
reg = <200 38>;
|
||||||
};
|
};
|
||||||
|
|
||||||
mpc5200_pic: pic@500 {
|
mpc5200_pic: interrupt-controller@500 {
|
||||||
// 5200 interrupts are encoded into two levels;
|
// 5200 interrupts are encoded into two levels;
|
||||||
interrupt-controller;
|
interrupt-controller;
|
||||||
#interrupt-cells = <3>;
|
#interrupt-cells = <3>;
|
||||||
device_type = "interrupt-controller";
|
device_type = "interrupt-controller";
|
||||||
compatible = "mpc5200-pic";
|
compatible = "fsl,mpc5200-pic";
|
||||||
reg = <500 80>;
|
reg = <500 80>;
|
||||||
};
|
};
|
||||||
|
|
||||||
gpt@600 { // General Purpose Timer
|
timer@600 { // General Purpose Timer
|
||||||
compatible = "fsl,mpc5200-gpt";
|
compatible = "fsl,mpc5200-gpt";
|
||||||
cell-index = <0>;
|
cell-index = <0>;
|
||||||
reg = <600 10>;
|
reg = <600 10>;
|
||||||
|
@ -78,7 +70,7 @@
|
||||||
fsl,has-wdt;
|
fsl,has-wdt;
|
||||||
};
|
};
|
||||||
|
|
||||||
gpt@610 { // General Purpose Timer
|
timer@610 { // General Purpose Timer
|
||||||
compatible = "fsl,mpc5200-gpt";
|
compatible = "fsl,mpc5200-gpt";
|
||||||
cell-index = <1>;
|
cell-index = <1>;
|
||||||
reg = <610 10>;
|
reg = <610 10>;
|
||||||
|
@ -86,7 +78,7 @@
|
||||||
interrupt-parent = <&mpc5200_pic>;
|
interrupt-parent = <&mpc5200_pic>;
|
||||||
};
|
};
|
||||||
|
|
||||||
gpt@620 { // General Purpose Timer
|
timer@620 { // General Purpose Timer
|
||||||
compatible = "fsl,mpc5200-gpt";
|
compatible = "fsl,mpc5200-gpt";
|
||||||
cell-index = <2>;
|
cell-index = <2>;
|
||||||
reg = <620 10>;
|
reg = <620 10>;
|
||||||
|
@ -94,7 +86,7 @@
|
||||||
interrupt-parent = <&mpc5200_pic>;
|
interrupt-parent = <&mpc5200_pic>;
|
||||||
};
|
};
|
||||||
|
|
||||||
gpt@630 { // General Purpose Timer
|
timer@630 { // General Purpose Timer
|
||||||
compatible = "fsl,mpc5200-gpt";
|
compatible = "fsl,mpc5200-gpt";
|
||||||
cell-index = <3>;
|
cell-index = <3>;
|
||||||
reg = <630 10>;
|
reg = <630 10>;
|
||||||
|
@ -102,7 +94,7 @@
|
||||||
interrupt-parent = <&mpc5200_pic>;
|
interrupt-parent = <&mpc5200_pic>;
|
||||||
};
|
};
|
||||||
|
|
||||||
gpt@640 { // General Purpose Timer
|
timer@640 { // General Purpose Timer
|
||||||
compatible = "fsl,mpc5200-gpt";
|
compatible = "fsl,mpc5200-gpt";
|
||||||
cell-index = <4>;
|
cell-index = <4>;
|
||||||
reg = <640 10>;
|
reg = <640 10>;
|
||||||
|
@ -110,7 +102,7 @@
|
||||||
interrupt-parent = <&mpc5200_pic>;
|
interrupt-parent = <&mpc5200_pic>;
|
||||||
};
|
};
|
||||||
|
|
||||||
gpt@650 { // General Purpose Timer
|
timer@650 { // General Purpose Timer
|
||||||
compatible = "fsl,mpc5200-gpt";
|
compatible = "fsl,mpc5200-gpt";
|
||||||
cell-index = <5>;
|
cell-index = <5>;
|
||||||
reg = <650 10>;
|
reg = <650 10>;
|
||||||
|
@ -118,7 +110,7 @@
|
||||||
interrupt-parent = <&mpc5200_pic>;
|
interrupt-parent = <&mpc5200_pic>;
|
||||||
};
|
};
|
||||||
|
|
||||||
gpt@660 { // General Purpose Timer
|
timer@660 { // General Purpose Timer
|
||||||
compatible = "fsl,mpc5200-gpt";
|
compatible = "fsl,mpc5200-gpt";
|
||||||
cell-index = <6>;
|
cell-index = <6>;
|
||||||
reg = <660 10>;
|
reg = <660 10>;
|
||||||
|
@ -126,7 +118,7 @@
|
||||||
interrupt-parent = <&mpc5200_pic>;
|
interrupt-parent = <&mpc5200_pic>;
|
||||||
};
|
};
|
||||||
|
|
||||||
gpt@670 { // General Purpose Timer
|
timer@670 { // General Purpose Timer
|
||||||
compatible = "fsl,mpc5200-gpt";
|
compatible = "fsl,mpc5200-gpt";
|
||||||
cell-index = <7>;
|
cell-index = <7>;
|
||||||
reg = <670 10>;
|
reg = <670 10>;
|
||||||
|
@ -135,25 +127,23 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
rtc@800 { // Real time clock
|
rtc@800 { // Real time clock
|
||||||
compatible = "mpc5200-rtc";
|
compatible = "fsl,mpc5200-rtc";
|
||||||
device_type = "rtc";
|
device_type = "rtc";
|
||||||
reg = <800 100>;
|
reg = <800 100>;
|
||||||
interrupts = <1 5 0 1 6 0>;
|
interrupts = <1 5 0 1 6 0>;
|
||||||
interrupt-parent = <&mpc5200_pic>;
|
interrupt-parent = <&mpc5200_pic>;
|
||||||
};
|
};
|
||||||
|
|
||||||
mscan@900 {
|
can@900 {
|
||||||
device_type = "mscan";
|
compatible = "fsl,mpc5200-mscan";
|
||||||
compatible = "mpc5200-mscan";
|
|
||||||
cell-index = <0>;
|
cell-index = <0>;
|
||||||
interrupts = <2 11 0>;
|
interrupts = <2 11 0>;
|
||||||
interrupt-parent = <&mpc5200_pic>;
|
interrupt-parent = <&mpc5200_pic>;
|
||||||
reg = <900 80>;
|
reg = <900 80>;
|
||||||
};
|
};
|
||||||
|
|
||||||
mscan@980 {
|
can@980 {
|
||||||
device_type = "mscan";
|
compatible = "fsl,mpc5200-mscan";
|
||||||
compatible = "mpc5200-mscan";
|
|
||||||
cell-index = <1>;
|
cell-index = <1>;
|
||||||
interrupts = <2 12 0>;
|
interrupts = <2 12 0>;
|
||||||
interrupt-parent = <&mpc5200_pic>;
|
interrupt-parent = <&mpc5200_pic>;
|
||||||
|
@ -161,38 +151,36 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
gpio@b00 {
|
gpio@b00 {
|
||||||
compatible = "mpc5200-gpio";
|
compatible = "fsl,mpc5200-gpio";
|
||||||
reg = <b00 40>;
|
reg = <b00 40>;
|
||||||
interrupts = <1 7 0>;
|
interrupts = <1 7 0>;
|
||||||
interrupt-parent = <&mpc5200_pic>;
|
interrupt-parent = <&mpc5200_pic>;
|
||||||
};
|
};
|
||||||
|
|
||||||
gpio-wkup@c00 {
|
gpio@c00 {
|
||||||
compatible = "mpc5200-gpio-wkup";
|
compatible = "fsl,mpc5200-gpio-wkup";
|
||||||
reg = <c00 40>;
|
reg = <c00 40>;
|
||||||
interrupts = <1 8 0 0 3 0>;
|
interrupts = <1 8 0 0 3 0>;
|
||||||
interrupt-parent = <&mpc5200_pic>;
|
interrupt-parent = <&mpc5200_pic>;
|
||||||
};
|
};
|
||||||
|
|
||||||
spi@f00 {
|
spi@f00 {
|
||||||
device_type = "spi";
|
compatible = "fsl,mpc5200-spi";
|
||||||
compatible = "mpc5200-spi";
|
|
||||||
reg = <f00 20>;
|
reg = <f00 20>;
|
||||||
interrupts = <2 d 0 2 e 0>;
|
interrupts = <2 d 0 2 e 0>;
|
||||||
interrupt-parent = <&mpc5200_pic>;
|
interrupt-parent = <&mpc5200_pic>;
|
||||||
};
|
};
|
||||||
|
|
||||||
usb@1000 {
|
usb@1000 {
|
||||||
device_type = "usb-ohci-be";
|
compatible = "fsl,mpc5200-ohci","ohci-be";
|
||||||
compatible = "mpc5200-ohci","ohci-be";
|
|
||||||
reg = <1000 ff>;
|
reg = <1000 ff>;
|
||||||
interrupts = <2 6 0>;
|
interrupts = <2 6 0>;
|
||||||
interrupt-parent = <&mpc5200_pic>;
|
interrupt-parent = <&mpc5200_pic>;
|
||||||
};
|
};
|
||||||
|
|
||||||
bestcomm@1200 {
|
dma-controller@1200 {
|
||||||
device_type = "dma-controller";
|
device_type = "dma-controller";
|
||||||
compatible = "mpc5200-bestcomm";
|
compatible = "fsl,mpc5200-bestcomm";
|
||||||
reg = <1200 80>;
|
reg = <1200 80>;
|
||||||
interrupts = <3 0 0 3 1 0 3 2 0 3 3 0
|
interrupts = <3 0 0 3 1 0 3 2 0 3 3 0
|
||||||
3 4 0 3 5 0 3 6 0 3 7 0
|
3 4 0 3 5 0 3 6 0 3 7 0
|
||||||
|
@ -202,13 +190,13 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
xlb@1f00 {
|
xlb@1f00 {
|
||||||
compatible = "mpc5200-xlb";
|
compatible = "fsl,mpc5200-xlb";
|
||||||
reg = <1f00 100>;
|
reg = <1f00 100>;
|
||||||
};
|
};
|
||||||
|
|
||||||
serial@2000 { // PSC1
|
serial@2000 { // PSC1
|
||||||
device_type = "serial";
|
device_type = "serial";
|
||||||
compatible = "mpc5200-psc-uart";
|
compatible = "fsl,mpc5200-psc-uart";
|
||||||
port-number = <0>; // Logical port assignment
|
port-number = <0>; // Logical port assignment
|
||||||
cell-index = <0>;
|
cell-index = <0>;
|
||||||
reg = <2000 100>;
|
reg = <2000 100>;
|
||||||
|
@ -218,8 +206,7 @@
|
||||||
|
|
||||||
// PSC2 in ac97 mode example
|
// PSC2 in ac97 mode example
|
||||||
//ac97@2200 { // PSC2
|
//ac97@2200 { // PSC2
|
||||||
// device_type = "sound";
|
// compatible = "fsl,mpc5200-psc-ac97";
|
||||||
// compatible = "mpc5200-psc-ac97";
|
|
||||||
// cell-index = <1>;
|
// cell-index = <1>;
|
||||||
// reg = <2200 100>;
|
// reg = <2200 100>;
|
||||||
// interrupts = <2 2 0>;
|
// interrupts = <2 2 0>;
|
||||||
|
@ -228,8 +215,7 @@
|
||||||
|
|
||||||
// PSC3 in CODEC mode example
|
// PSC3 in CODEC mode example
|
||||||
//i2s@2400 { // PSC3
|
//i2s@2400 { // PSC3
|
||||||
// device_type = "sound";
|
// compatible = "fsl,mpc5200-psc-i2s";
|
||||||
// compatible = "mpc5200-psc-i2s";
|
|
||||||
// cell-index = <2>;
|
// cell-index = <2>;
|
||||||
// reg = <2400 100>;
|
// reg = <2400 100>;
|
||||||
// interrupts = <2 3 0>;
|
// interrupts = <2 3 0>;
|
||||||
|
@ -239,7 +225,7 @@
|
||||||
// PSC4 in uart mode example
|
// PSC4 in uart mode example
|
||||||
//serial@2600 { // PSC4
|
//serial@2600 { // PSC4
|
||||||
// device_type = "serial";
|
// device_type = "serial";
|
||||||
// compatible = "mpc5200-psc-uart";
|
// compatible = "fsl,mpc5200-psc-uart";
|
||||||
// cell-index = <3>;
|
// cell-index = <3>;
|
||||||
// reg = <2600 100>;
|
// reg = <2600 100>;
|
||||||
// interrupts = <2 b 0>;
|
// interrupts = <2 b 0>;
|
||||||
|
@ -249,7 +235,7 @@
|
||||||
// PSC5 in uart mode example
|
// PSC5 in uart mode example
|
||||||
//serial@2800 { // PSC5
|
//serial@2800 { // PSC5
|
||||||
// device_type = "serial";
|
// device_type = "serial";
|
||||||
// compatible = "mpc5200-psc-uart";
|
// compatible = "fsl,mpc5200-psc-uart";
|
||||||
// cell-index = <4>;
|
// cell-index = <4>;
|
||||||
// reg = <2800 100>;
|
// reg = <2800 100>;
|
||||||
// interrupts = <2 c 0>;
|
// interrupts = <2 c 0>;
|
||||||
|
@ -258,8 +244,7 @@
|
||||||
|
|
||||||
// PSC6 in spi mode example
|
// PSC6 in spi mode example
|
||||||
//spi@2c00 { // PSC6
|
//spi@2c00 { // PSC6
|
||||||
// device_type = "spi";
|
// compatible = "fsl,mpc5200-psc-spi";
|
||||||
// compatible = "mpc5200-psc-spi";
|
|
||||||
// cell-index = <5>;
|
// cell-index = <5>;
|
||||||
// reg = <2c00 100>;
|
// reg = <2c00 100>;
|
||||||
// interrupts = <2 4 0>;
|
// interrupts = <2 4 0>;
|
||||||
|
@ -268,16 +253,16 @@
|
||||||
|
|
||||||
ethernet@3000 {
|
ethernet@3000 {
|
||||||
device_type = "network";
|
device_type = "network";
|
||||||
compatible = "mpc5200-fec";
|
compatible = "fsl,mpc5200-fec";
|
||||||
reg = <3000 800>;
|
reg = <3000 800>;
|
||||||
mac-address = [ 02 03 04 05 06 07 ]; // Bad!
|
local-mac-address = [ 00 00 00 00 00 00 ];
|
||||||
interrupts = <2 5 0>;
|
interrupts = <2 5 0>;
|
||||||
interrupt-parent = <&mpc5200_pic>;
|
interrupt-parent = <&mpc5200_pic>;
|
||||||
};
|
};
|
||||||
|
|
||||||
ata@3a00 {
|
ata@3a00 {
|
||||||
device_type = "ata";
|
device_type = "ata";
|
||||||
compatible = "mpc5200-ata";
|
compatible = "fsl,mpc5200-ata";
|
||||||
reg = <3a00 100>;
|
reg = <3a00 100>;
|
||||||
interrupts = <2 7 0>;
|
interrupts = <2 7 0>;
|
||||||
interrupt-parent = <&mpc5200_pic>;
|
interrupt-parent = <&mpc5200_pic>;
|
||||||
|
@ -286,7 +271,7 @@
|
||||||
i2c@3d00 {
|
i2c@3d00 {
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <0>;
|
#size-cells = <0>;
|
||||||
compatible = "mpc5200-i2c","fsl-i2c";
|
compatible = "fsl,mpc5200-i2c","fsl-i2c";
|
||||||
cell-index = <0>;
|
cell-index = <0>;
|
||||||
reg = <3d00 40>;
|
reg = <3d00 40>;
|
||||||
interrupts = <2 f 0>;
|
interrupts = <2 f 0>;
|
||||||
|
@ -297,7 +282,7 @@
|
||||||
i2c@3d40 {
|
i2c@3d40 {
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <0>;
|
#size-cells = <0>;
|
||||||
compatible = "mpc5200-i2c","fsl-i2c";
|
compatible = "fsl,mpc5200-i2c","fsl-i2c";
|
||||||
cell-index = <1>;
|
cell-index = <1>;
|
||||||
reg = <3d40 40>;
|
reg = <3d40 40>;
|
||||||
interrupts = <2 10 0>;
|
interrupts = <2 10 0>;
|
||||||
|
@ -305,8 +290,7 @@
|
||||||
fsl5200-clocking;
|
fsl5200-clocking;
|
||||||
};
|
};
|
||||||
sram@8000 {
|
sram@8000 {
|
||||||
device_type = "sram";
|
compatible = "fsl,mpc5200-sram","sram";
|
||||||
compatible = "mpc5200-sram","sram";
|
|
||||||
reg = <8000 4000>;
|
reg = <8000 4000>;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
@ -316,7 +300,7 @@
|
||||||
#size-cells = <2>;
|
#size-cells = <2>;
|
||||||
#address-cells = <3>;
|
#address-cells = <3>;
|
||||||
device_type = "pci";
|
device_type = "pci";
|
||||||
compatible = "mpc5200-pci";
|
compatible = "fsl,mpc5200-pci";
|
||||||
reg = <f0000d00 100>;
|
reg = <f0000d00 100>;
|
||||||
interrupt-map-mask = <f800 0 0 7>;
|
interrupt-map-mask = <f800 0 0 7>;
|
||||||
interrupt-map = <c000 0 0 1 &mpc5200_pic 0 0 3
|
interrupt-map = <c000 0 0 1 &mpc5200_pic 0 0 3
|
||||||
|
|
|
@ -18,7 +18,6 @@
|
||||||
|
|
||||||
/ {
|
/ {
|
||||||
model = "fsl,lite5200b";
|
model = "fsl,lite5200b";
|
||||||
// revision = "1.0";
|
|
||||||
compatible = "fsl,lite5200b";
|
compatible = "fsl,lite5200b";
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <1>;
|
#size-cells = <1>;
|
||||||
|
@ -46,30 +45,29 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
soc5200@f0000000 {
|
soc5200@f0000000 {
|
||||||
model = "fsl,mpc5200b";
|
#address-cells = <1>;
|
||||||
compatible = "mpc5200";
|
#size-cells = <1>;
|
||||||
revision = ""; // from bootloader
|
compatible = "fsl,mpc5200b-immr";
|
||||||
device_type = "soc";
|
|
||||||
ranges = <0 f0000000 0000c000>;
|
ranges = <0 f0000000 0000c000>;
|
||||||
reg = <f0000000 00000100>;
|
reg = <f0000000 00000100>;
|
||||||
bus-frequency = <0>; // from bootloader
|
bus-frequency = <0>; // from bootloader
|
||||||
system-frequency = <0>; // from bootloader
|
system-frequency = <0>; // from bootloader
|
||||||
|
|
||||||
cdm@200 {
|
cdm@200 {
|
||||||
compatible = "mpc5200b-cdm","mpc5200-cdm";
|
compatible = "fsl,mpc5200b-cdm","fsl,mpc5200-cdm";
|
||||||
reg = <200 38>;
|
reg = <200 38>;
|
||||||
};
|
};
|
||||||
|
|
||||||
mpc5200_pic: pic@500 {
|
mpc5200_pic: interrupt-controller@500 {
|
||||||
// 5200 interrupts are encoded into two levels;
|
// 5200 interrupts are encoded into two levels;
|
||||||
interrupt-controller;
|
interrupt-controller;
|
||||||
#interrupt-cells = <3>;
|
#interrupt-cells = <3>;
|
||||||
device_type = "interrupt-controller";
|
device_type = "interrupt-controller";
|
||||||
compatible = "mpc5200b-pic","mpc5200-pic";
|
compatible = "fsl,mpc5200b-pic","fsl,mpc5200-pic";
|
||||||
reg = <500 80>;
|
reg = <500 80>;
|
||||||
};
|
};
|
||||||
|
|
||||||
gpt@600 { // General Purpose Timer
|
timer@600 { // General Purpose Timer
|
||||||
compatible = "fsl,mpc5200b-gpt","fsl,mpc5200-gpt";
|
compatible = "fsl,mpc5200b-gpt","fsl,mpc5200-gpt";
|
||||||
cell-index = <0>;
|
cell-index = <0>;
|
||||||
reg = <600 10>;
|
reg = <600 10>;
|
||||||
|
@ -78,7 +76,7 @@
|
||||||
fsl,has-wdt;
|
fsl,has-wdt;
|
||||||
};
|
};
|
||||||
|
|
||||||
gpt@610 { // General Purpose Timer
|
timer@610 { // General Purpose Timer
|
||||||
compatible = "fsl,mpc5200b-gpt","fsl,mpc5200-gpt";
|
compatible = "fsl,mpc5200b-gpt","fsl,mpc5200-gpt";
|
||||||
cell-index = <1>;
|
cell-index = <1>;
|
||||||
reg = <610 10>;
|
reg = <610 10>;
|
||||||
|
@ -86,7 +84,7 @@
|
||||||
interrupt-parent = <&mpc5200_pic>;
|
interrupt-parent = <&mpc5200_pic>;
|
||||||
};
|
};
|
||||||
|
|
||||||
gpt@620 { // General Purpose Timer
|
timer@620 { // General Purpose Timer
|
||||||
compatible = "fsl,mpc5200b-gpt","fsl,mpc5200-gpt";
|
compatible = "fsl,mpc5200b-gpt","fsl,mpc5200-gpt";
|
||||||
cell-index = <2>;
|
cell-index = <2>;
|
||||||
reg = <620 10>;
|
reg = <620 10>;
|
||||||
|
@ -94,7 +92,7 @@
|
||||||
interrupt-parent = <&mpc5200_pic>;
|
interrupt-parent = <&mpc5200_pic>;
|
||||||
};
|
};
|
||||||
|
|
||||||
gpt@630 { // General Purpose Timer
|
timer@630 { // General Purpose Timer
|
||||||
compatible = "fsl,mpc5200b-gpt","fsl,mpc5200-gpt";
|
compatible = "fsl,mpc5200b-gpt","fsl,mpc5200-gpt";
|
||||||
cell-index = <3>;
|
cell-index = <3>;
|
||||||
reg = <630 10>;
|
reg = <630 10>;
|
||||||
|
@ -102,7 +100,7 @@
|
||||||
interrupt-parent = <&mpc5200_pic>;
|
interrupt-parent = <&mpc5200_pic>;
|
||||||
};
|
};
|
||||||
|
|
||||||
gpt@640 { // General Purpose Timer
|
timer@640 { // General Purpose Timer
|
||||||
compatible = "fsl,mpc5200b-gpt","fsl,mpc5200-gpt";
|
compatible = "fsl,mpc5200b-gpt","fsl,mpc5200-gpt";
|
||||||
cell-index = <4>;
|
cell-index = <4>;
|
||||||
reg = <640 10>;
|
reg = <640 10>;
|
||||||
|
@ -110,7 +108,7 @@
|
||||||
interrupt-parent = <&mpc5200_pic>;
|
interrupt-parent = <&mpc5200_pic>;
|
||||||
};
|
};
|
||||||
|
|
||||||
gpt@650 { // General Purpose Timer
|
timer@650 { // General Purpose Timer
|
||||||
compatible = "fsl,mpc5200b-gpt","fsl,mpc5200-gpt";
|
compatible = "fsl,mpc5200b-gpt","fsl,mpc5200-gpt";
|
||||||
cell-index = <5>;
|
cell-index = <5>;
|
||||||
reg = <650 10>;
|
reg = <650 10>;
|
||||||
|
@ -118,7 +116,7 @@
|
||||||
interrupt-parent = <&mpc5200_pic>;
|
interrupt-parent = <&mpc5200_pic>;
|
||||||
};
|
};
|
||||||
|
|
||||||
gpt@660 { // General Purpose Timer
|
timer@660 { // General Purpose Timer
|
||||||
compatible = "fsl,mpc5200b-gpt","fsl,mpc5200-gpt";
|
compatible = "fsl,mpc5200b-gpt","fsl,mpc5200-gpt";
|
||||||
cell-index = <6>;
|
cell-index = <6>;
|
||||||
reg = <660 10>;
|
reg = <660 10>;
|
||||||
|
@ -126,7 +124,7 @@
|
||||||
interrupt-parent = <&mpc5200_pic>;
|
interrupt-parent = <&mpc5200_pic>;
|
||||||
};
|
};
|
||||||
|
|
||||||
gpt@670 { // General Purpose Timer
|
timer@670 { // General Purpose Timer
|
||||||
compatible = "fsl,mpc5200b-gpt","fsl,mpc5200-gpt";
|
compatible = "fsl,mpc5200b-gpt","fsl,mpc5200-gpt";
|
||||||
cell-index = <7>;
|
cell-index = <7>;
|
||||||
reg = <670 10>;
|
reg = <670 10>;
|
||||||
|
@ -135,25 +133,23 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
rtc@800 { // Real time clock
|
rtc@800 { // Real time clock
|
||||||
compatible = "mpc5200b-rtc","mpc5200-rtc";
|
compatible = "fsl,mpc5200b-rtc","fsl,mpc5200-rtc";
|
||||||
device_type = "rtc";
|
device_type = "rtc";
|
||||||
reg = <800 100>;
|
reg = <800 100>;
|
||||||
interrupts = <1 5 0 1 6 0>;
|
interrupts = <1 5 0 1 6 0>;
|
||||||
interrupt-parent = <&mpc5200_pic>;
|
interrupt-parent = <&mpc5200_pic>;
|
||||||
};
|
};
|
||||||
|
|
||||||
mscan@900 {
|
can@900 {
|
||||||
device_type = "mscan";
|
compatible = "fsl,mpc5200b-mscan","fsl,mpc5200-mscan";
|
||||||
compatible = "mpc5200b-mscan","mpc5200-mscan";
|
|
||||||
cell-index = <0>;
|
cell-index = <0>;
|
||||||
interrupts = <2 11 0>;
|
interrupts = <2 11 0>;
|
||||||
interrupt-parent = <&mpc5200_pic>;
|
interrupt-parent = <&mpc5200_pic>;
|
||||||
reg = <900 80>;
|
reg = <900 80>;
|
||||||
};
|
};
|
||||||
|
|
||||||
mscan@980 {
|
can@980 {
|
||||||
device_type = "mscan";
|
compatible = "fsl,mpc5200b-mscan","fsl,mpc5200-mscan";
|
||||||
compatible = "mpc5200b-mscan","mpc5200-mscan";
|
|
||||||
cell-index = <1>;
|
cell-index = <1>;
|
||||||
interrupts = <2 12 0>;
|
interrupts = <2 12 0>;
|
||||||
interrupt-parent = <&mpc5200_pic>;
|
interrupt-parent = <&mpc5200_pic>;
|
||||||
|
@ -161,38 +157,36 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
gpio@b00 {
|
gpio@b00 {
|
||||||
compatible = "mpc5200b-gpio","mpc5200-gpio";
|
compatible = "fsl,mpc5200b-gpio","fsl,mpc5200-gpio";
|
||||||
reg = <b00 40>;
|
reg = <b00 40>;
|
||||||
interrupts = <1 7 0>;
|
interrupts = <1 7 0>;
|
||||||
interrupt-parent = <&mpc5200_pic>;
|
interrupt-parent = <&mpc5200_pic>;
|
||||||
};
|
};
|
||||||
|
|
||||||
gpio-wkup@c00 {
|
gpio@c00 {
|
||||||
compatible = "mpc5200b-gpio-wkup","mpc5200-gpio-wkup";
|
compatible = "fsl,mpc5200b-gpio-wkup","fsl,mpc5200-gpio-wkup";
|
||||||
reg = <c00 40>;
|
reg = <c00 40>;
|
||||||
interrupts = <1 8 0 0 3 0>;
|
interrupts = <1 8 0 0 3 0>;
|
||||||
interrupt-parent = <&mpc5200_pic>;
|
interrupt-parent = <&mpc5200_pic>;
|
||||||
};
|
};
|
||||||
|
|
||||||
spi@f00 {
|
spi@f00 {
|
||||||
device_type = "spi";
|
compatible = "fsl,mpc5200b-spi","fsl,mpc5200-spi";
|
||||||
compatible = "mpc5200b-spi","mpc5200-spi";
|
|
||||||
reg = <f00 20>;
|
reg = <f00 20>;
|
||||||
interrupts = <2 d 0 2 e 0>;
|
interrupts = <2 d 0 2 e 0>;
|
||||||
interrupt-parent = <&mpc5200_pic>;
|
interrupt-parent = <&mpc5200_pic>;
|
||||||
};
|
};
|
||||||
|
|
||||||
usb@1000 {
|
usb@1000 {
|
||||||
device_type = "usb-ohci-be";
|
compatible = "fsl,mpc5200b-ohci","fsl,mpc5200-ohci","ohci-be";
|
||||||
compatible = "mpc5200b-ohci","mpc5200-ohci","ohci-be";
|
|
||||||
reg = <1000 ff>;
|
reg = <1000 ff>;
|
||||||
interrupts = <2 6 0>;
|
interrupts = <2 6 0>;
|
||||||
interrupt-parent = <&mpc5200_pic>;
|
interrupt-parent = <&mpc5200_pic>;
|
||||||
};
|
};
|
||||||
|
|
||||||
bestcomm@1200 {
|
dma-controller@1200 {
|
||||||
device_type = "dma-controller";
|
device_type = "dma-controller";
|
||||||
compatible = "mpc5200b-bestcomm","mpc5200-bestcomm";
|
compatible = "fsl,mpc5200b-bestcomm","fsl,mpc5200-bestcomm";
|
||||||
reg = <1200 80>;
|
reg = <1200 80>;
|
||||||
interrupts = <3 0 0 3 1 0 3 2 0 3 3 0
|
interrupts = <3 0 0 3 1 0 3 2 0 3 3 0
|
||||||
3 4 0 3 5 0 3 6 0 3 7 0
|
3 4 0 3 5 0 3 6 0 3 7 0
|
||||||
|
@ -202,13 +196,13 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
xlb@1f00 {
|
xlb@1f00 {
|
||||||
compatible = "mpc5200b-xlb","mpc5200-xlb";
|
compatible = "fsl,mpc5200b-xlb","fsl,mpc5200-xlb";
|
||||||
reg = <1f00 100>;
|
reg = <1f00 100>;
|
||||||
};
|
};
|
||||||
|
|
||||||
serial@2000 { // PSC1
|
serial@2000 { // PSC1
|
||||||
device_type = "serial";
|
device_type = "serial";
|
||||||
compatible = "mpc5200b-psc-uart","mpc5200-psc-uart";
|
compatible = "fsl,mpc5200b-psc-uart","fsl,mpc5200-psc-uart";
|
||||||
port-number = <0>; // Logical port assignment
|
port-number = <0>; // Logical port assignment
|
||||||
cell-index = <0>;
|
cell-index = <0>;
|
||||||
reg = <2000 100>;
|
reg = <2000 100>;
|
||||||
|
@ -218,8 +212,7 @@
|
||||||
|
|
||||||
// PSC2 in ac97 mode example
|
// PSC2 in ac97 mode example
|
||||||
//ac97@2200 { // PSC2
|
//ac97@2200 { // PSC2
|
||||||
// device_type = "sound";
|
// compatible = "fsl,mpc5200b-psc-ac97","fsl,mpc5200-psc-ac97";
|
||||||
// compatible = "mpc5200b-psc-ac97","mpc5200-psc-ac97";
|
|
||||||
// cell-index = <1>;
|
// cell-index = <1>;
|
||||||
// reg = <2200 100>;
|
// reg = <2200 100>;
|
||||||
// interrupts = <2 2 0>;
|
// interrupts = <2 2 0>;
|
||||||
|
@ -228,8 +221,7 @@
|
||||||
|
|
||||||
// PSC3 in CODEC mode example
|
// PSC3 in CODEC mode example
|
||||||
//i2s@2400 { // PSC3
|
//i2s@2400 { // PSC3
|
||||||
// device_type = "sound";
|
// compatible = "fsl,mpc5200b-psc-i2s"; //not 5200 compatible
|
||||||
// compatible = "mpc5200b-psc-i2s"; //not 5200 compatible
|
|
||||||
// cell-index = <2>;
|
// cell-index = <2>;
|
||||||
// reg = <2400 100>;
|
// reg = <2400 100>;
|
||||||
// interrupts = <2 3 0>;
|
// interrupts = <2 3 0>;
|
||||||
|
@ -239,7 +231,7 @@
|
||||||
// PSC4 in uart mode example
|
// PSC4 in uart mode example
|
||||||
//serial@2600 { // PSC4
|
//serial@2600 { // PSC4
|
||||||
// device_type = "serial";
|
// device_type = "serial";
|
||||||
// compatible = "mpc5200b-psc-uart","mpc5200-psc-uart";
|
// compatible = "fsl,mpc5200b-psc-uart","fsl,mpc5200-psc-uart";
|
||||||
// cell-index = <3>;
|
// cell-index = <3>;
|
||||||
// reg = <2600 100>;
|
// reg = <2600 100>;
|
||||||
// interrupts = <2 b 0>;
|
// interrupts = <2 b 0>;
|
||||||
|
@ -249,7 +241,7 @@
|
||||||
// PSC5 in uart mode example
|
// PSC5 in uart mode example
|
||||||
//serial@2800 { // PSC5
|
//serial@2800 { // PSC5
|
||||||
// device_type = "serial";
|
// device_type = "serial";
|
||||||
// compatible = "mpc5200b-psc-uart","mpc5200-psc-uart";
|
// compatible = "fsl,mpc5200b-psc-uart","fsl,mpc5200-psc-uart";
|
||||||
// cell-index = <4>;
|
// cell-index = <4>;
|
||||||
// reg = <2800 100>;
|
// reg = <2800 100>;
|
||||||
// interrupts = <2 c 0>;
|
// interrupts = <2 c 0>;
|
||||||
|
@ -258,8 +250,7 @@
|
||||||
|
|
||||||
// PSC6 in spi mode example
|
// PSC6 in spi mode example
|
||||||
//spi@2c00 { // PSC6
|
//spi@2c00 { // PSC6
|
||||||
// device_type = "spi";
|
// compatible = "fsl,mpc5200b-psc-spi","fsl,mpc5200-psc-spi";
|
||||||
// compatible = "mpc5200b-psc-spi","mpc5200-psc-spi";
|
|
||||||
// cell-index = <5>;
|
// cell-index = <5>;
|
||||||
// reg = <2c00 100>;
|
// reg = <2c00 100>;
|
||||||
// interrupts = <2 4 0>;
|
// interrupts = <2 4 0>;
|
||||||
|
@ -268,9 +259,9 @@
|
||||||
|
|
||||||
ethernet@3000 {
|
ethernet@3000 {
|
||||||
device_type = "network";
|
device_type = "network";
|
||||||
compatible = "mpc5200b-fec","mpc5200-fec";
|
compatible = "fsl,mpc5200b-fec","fsl,mpc5200-fec";
|
||||||
reg = <3000 400>;
|
reg = <3000 400>;
|
||||||
mac-address = [ 02 03 04 05 06 07 ]; // Bad!
|
local-mac-address = [ 00 00 00 00 00 00 ];
|
||||||
interrupts = <2 5 0>;
|
interrupts = <2 5 0>;
|
||||||
interrupt-parent = <&mpc5200_pic>;
|
interrupt-parent = <&mpc5200_pic>;
|
||||||
phy-handle = <&phy0>;
|
phy-handle = <&phy0>;
|
||||||
|
@ -279,8 +270,7 @@
|
||||||
mdio@3000 {
|
mdio@3000 {
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <0>;
|
#size-cells = <0>;
|
||||||
device_type = "mdio";
|
compatible = "fsl,mpc5200b-mdio";
|
||||||
compatible = "mpc5200b-fec-phy";
|
|
||||||
reg = <3000 400>; // fec range, since we need to setup fec interrupts
|
reg = <3000 400>; // fec range, since we need to setup fec interrupts
|
||||||
interrupts = <2 5 0>; // these are for "mii command finished", not link changes & co.
|
interrupts = <2 5 0>; // these are for "mii command finished", not link changes & co.
|
||||||
interrupt-parent = <&mpc5200_pic>;
|
interrupt-parent = <&mpc5200_pic>;
|
||||||
|
@ -293,7 +283,7 @@
|
||||||
|
|
||||||
ata@3a00 {
|
ata@3a00 {
|
||||||
device_type = "ata";
|
device_type = "ata";
|
||||||
compatible = "mpc5200b-ata","mpc5200-ata";
|
compatible = "fsl,mpc5200b-ata","fsl,mpc5200-ata";
|
||||||
reg = <3a00 100>;
|
reg = <3a00 100>;
|
||||||
interrupts = <2 7 0>;
|
interrupts = <2 7 0>;
|
||||||
interrupt-parent = <&mpc5200_pic>;
|
interrupt-parent = <&mpc5200_pic>;
|
||||||
|
@ -302,7 +292,7 @@
|
||||||
i2c@3d00 {
|
i2c@3d00 {
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <0>;
|
#size-cells = <0>;
|
||||||
compatible = "mpc5200b-i2c","mpc5200-i2c","fsl-i2c";
|
compatible = "fsl,mpc5200b-i2c","fsl,mpc5200-i2c","fsl-i2c";
|
||||||
cell-index = <0>;
|
cell-index = <0>;
|
||||||
reg = <3d00 40>;
|
reg = <3d00 40>;
|
||||||
interrupts = <2 f 0>;
|
interrupts = <2 f 0>;
|
||||||
|
@ -313,7 +303,7 @@
|
||||||
i2c@3d40 {
|
i2c@3d40 {
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <0>;
|
#size-cells = <0>;
|
||||||
compatible = "mpc5200b-i2c","mpc5200-i2c","fsl-i2c";
|
compatible = "fsl,mpc5200b-i2c","fsl,mpc5200-i2c","fsl-i2c";
|
||||||
cell-index = <1>;
|
cell-index = <1>;
|
||||||
reg = <3d40 40>;
|
reg = <3d40 40>;
|
||||||
interrupts = <2 10 0>;
|
interrupts = <2 10 0>;
|
||||||
|
@ -321,8 +311,7 @@
|
||||||
fsl5200-clocking;
|
fsl5200-clocking;
|
||||||
};
|
};
|
||||||
sram@8000 {
|
sram@8000 {
|
||||||
device_type = "sram";
|
compatible = "fsl,mpc5200b-sram","fsl,mpc5200-sram","sram";
|
||||||
compatible = "mpc5200b-sram","mpc5200-sram","sram";
|
|
||||||
reg = <8000 4000>;
|
reg = <8000 4000>;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
@ -332,7 +321,7 @@
|
||||||
#size-cells = <2>;
|
#size-cells = <2>;
|
||||||
#address-cells = <3>;
|
#address-cells = <3>;
|
||||||
device_type = "pci";
|
device_type = "pci";
|
||||||
compatible = "mpc5200b-pci","mpc5200-pci";
|
compatible = "fsl,mpc5200b-pci","fsl,mpc5200-pci";
|
||||||
reg = <f0000d00 100>;
|
reg = <f0000d00 100>;
|
||||||
interrupt-map-mask = <f800 0 0 7>;
|
interrupt-map-mask = <f800 0 0 7>;
|
||||||
interrupt-map = <c000 0 0 1 &mpc5200_pic 0 0 3 // 1st slot
|
interrupt-map = <c000 0 0 1 &mpc5200_pic 0 0 3 // 1st slot
|
||||||
|
|
|
@ -10,12 +10,6 @@
|
||||||
* option) any later version.
|
* option) any later version.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
|
||||||
* WARNING: Do not depend on this tree layout remaining static just yet.
|
|
||||||
* The MPC5200 device tree conventions are still in flux
|
|
||||||
* Keep an eye on the linuxppc-dev mailing list for more details
|
|
||||||
*/
|
|
||||||
|
|
||||||
/ {
|
/ {
|
||||||
model = "promess,motionpro";
|
model = "promess,motionpro";
|
||||||
compatible = "promess,motionpro";
|
compatible = "promess,motionpro";
|
||||||
|
@ -45,29 +39,28 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
soc5200@f0000000 {
|
soc5200@f0000000 {
|
||||||
model = "fsl,mpc5200b";
|
#address-cells = <1>;
|
||||||
compatible = "fsl,mpc5200b";
|
#size-cells = <1>;
|
||||||
revision = ""; // from bootloader
|
compatible = "fsl,mpc5200b-immr";
|
||||||
device_type = "soc";
|
|
||||||
ranges = <0 f0000000 0000c000>;
|
ranges = <0 f0000000 0000c000>;
|
||||||
reg = <f0000000 00000100>;
|
reg = <f0000000 00000100>;
|
||||||
bus-frequency = <0>; // from bootloader
|
bus-frequency = <0>; // from bootloader
|
||||||
system-frequency = <0>; // from bootloader
|
system-frequency = <0>; // from bootloader
|
||||||
|
|
||||||
cdm@200 {
|
cdm@200 {
|
||||||
compatible = "mpc5200b-cdm","mpc5200-cdm";
|
compatible = "fsl,mpc5200b-cdm","fsl,mpc5200-cdm";
|
||||||
reg = <200 38>;
|
reg = <200 38>;
|
||||||
};
|
};
|
||||||
|
|
||||||
mpc5200_pic: pic@500 {
|
mpc5200_pic: interrupt-controller@500 {
|
||||||
// 5200 interrupts are encoded into two levels;
|
// 5200 interrupts are encoded into two levels;
|
||||||
interrupt-controller;
|
interrupt-controller;
|
||||||
#interrupt-cells = <3>;
|
#interrupt-cells = <3>;
|
||||||
compatible = "mpc5200b-pic","mpc5200-pic";
|
compatible = "fsl,mpc5200b-pic","fsl,mpc5200-pic";
|
||||||
reg = <500 80>;
|
reg = <500 80>;
|
||||||
};
|
};
|
||||||
|
|
||||||
gpt@600 { // General Purpose Timer
|
timer@600 { // General Purpose Timer
|
||||||
compatible = "fsl,mpc5200b-gpt","fsl,mpc5200-gpt";
|
compatible = "fsl,mpc5200b-gpt","fsl,mpc5200-gpt";
|
||||||
reg = <600 10>;
|
reg = <600 10>;
|
||||||
interrupts = <1 9 0>;
|
interrupts = <1 9 0>;
|
||||||
|
@ -75,35 +68,35 @@
|
||||||
fsl,has-wdt;
|
fsl,has-wdt;
|
||||||
};
|
};
|
||||||
|
|
||||||
gpt@610 { // General Purpose Timer
|
timer@610 { // General Purpose Timer
|
||||||
compatible = "fsl,mpc5200b-gpt","fsl,mpc5200-gpt";
|
compatible = "fsl,mpc5200b-gpt","fsl,mpc5200-gpt";
|
||||||
reg = <610 10>;
|
reg = <610 10>;
|
||||||
interrupts = <1 a 0>;
|
interrupts = <1 a 0>;
|
||||||
interrupt-parent = <&mpc5200_pic>;
|
interrupt-parent = <&mpc5200_pic>;
|
||||||
};
|
};
|
||||||
|
|
||||||
gpt@620 { // General Purpose Timer
|
timer@620 { // General Purpose Timer
|
||||||
compatible = "fsl,mpc5200b-gpt","fsl,mpc5200-gpt";
|
compatible = "fsl,mpc5200b-gpt","fsl,mpc5200-gpt";
|
||||||
reg = <620 10>;
|
reg = <620 10>;
|
||||||
interrupts = <1 b 0>;
|
interrupts = <1 b 0>;
|
||||||
interrupt-parent = <&mpc5200_pic>;
|
interrupt-parent = <&mpc5200_pic>;
|
||||||
};
|
};
|
||||||
|
|
||||||
gpt@630 { // General Purpose Timer
|
timer@630 { // General Purpose Timer
|
||||||
compatible = "fsl,mpc5200b-gpt","fsl,mpc5200-gpt";
|
compatible = "fsl,mpc5200b-gpt","fsl,mpc5200-gpt";
|
||||||
reg = <630 10>;
|
reg = <630 10>;
|
||||||
interrupts = <1 c 0>;
|
interrupts = <1 c 0>;
|
||||||
interrupt-parent = <&mpc5200_pic>;
|
interrupt-parent = <&mpc5200_pic>;
|
||||||
};
|
};
|
||||||
|
|
||||||
gpt@640 { // General Purpose Timer
|
timer@640 { // General Purpose Timer
|
||||||
compatible = "fsl,mpc5200b-gpt","fsl,mpc5200-gpt";
|
compatible = "fsl,mpc5200b-gpt","fsl,mpc5200-gpt";
|
||||||
reg = <640 10>;
|
reg = <640 10>;
|
||||||
interrupts = <1 d 0>;
|
interrupts = <1 d 0>;
|
||||||
interrupt-parent = <&mpc5200_pic>;
|
interrupt-parent = <&mpc5200_pic>;
|
||||||
};
|
};
|
||||||
|
|
||||||
gpt@650 { // General Purpose Timer
|
timer@650 { // General Purpose Timer
|
||||||
compatible = "fsl,mpc5200b-gpt","fsl,mpc5200-gpt";
|
compatible = "fsl,mpc5200b-gpt","fsl,mpc5200-gpt";
|
||||||
reg = <650 10>;
|
reg = <650 10>;
|
||||||
interrupts = <1 e 0>;
|
interrupts = <1 e 0>;
|
||||||
|
@ -128,28 +121,28 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
rtc@800 { // Real time clock
|
rtc@800 { // Real time clock
|
||||||
compatible = "mpc5200b-rtc","mpc5200-rtc";
|
compatible = "fsl,mpc5200b-rtc","fsl,mpc5200-rtc";
|
||||||
reg = <800 100>;
|
reg = <800 100>;
|
||||||
interrupts = <1 5 0 1 6 0>;
|
interrupts = <1 5 0 1 6 0>;
|
||||||
interrupt-parent = <&mpc5200_pic>;
|
interrupt-parent = <&mpc5200_pic>;
|
||||||
};
|
};
|
||||||
|
|
||||||
mscan@980 {
|
mscan@980 {
|
||||||
compatible = "mpc5200b-mscan","mpc5200-mscan";
|
compatible = "fsl,mpc5200b-mscan","fsl,mpc5200-mscan";
|
||||||
interrupts = <2 12 0>;
|
interrupts = <2 12 0>;
|
||||||
interrupt-parent = <&mpc5200_pic>;
|
interrupt-parent = <&mpc5200_pic>;
|
||||||
reg = <980 80>;
|
reg = <980 80>;
|
||||||
};
|
};
|
||||||
|
|
||||||
gpio@b00 {
|
gpio@b00 {
|
||||||
compatible = "mpc5200b-gpio","mpc5200-gpio";
|
compatible = "fsl,mpc5200b-gpio","fsl,mpc5200-gpio";
|
||||||
reg = <b00 40>;
|
reg = <b00 40>;
|
||||||
interrupts = <1 7 0>;
|
interrupts = <1 7 0>;
|
||||||
interrupt-parent = <&mpc5200_pic>;
|
interrupt-parent = <&mpc5200_pic>;
|
||||||
};
|
};
|
||||||
|
|
||||||
gpio-wkup@c00 {
|
gpio@c00 {
|
||||||
compatible = "mpc5200b-gpio-wkup","mpc5200-gpio-wkup";
|
compatible = "fsl,mpc5200b-gpio-wkup","fsl,mpc5200-gpio-wkup";
|
||||||
reg = <c00 40>;
|
reg = <c00 40>;
|
||||||
interrupts = <1 8 0 0 3 0>;
|
interrupts = <1 8 0 0 3 0>;
|
||||||
interrupt-parent = <&mpc5200_pic>;
|
interrupt-parent = <&mpc5200_pic>;
|
||||||
|
@ -157,21 +150,21 @@
|
||||||
|
|
||||||
|
|
||||||
spi@f00 {
|
spi@f00 {
|
||||||
compatible = "mpc5200b-spi","mpc5200-spi";
|
compatible = "fsl,mpc5200b-spi","fsl,mpc5200-spi";
|
||||||
reg = <f00 20>;
|
reg = <f00 20>;
|
||||||
interrupts = <2 d 0 2 e 0>;
|
interrupts = <2 d 0 2 e 0>;
|
||||||
interrupt-parent = <&mpc5200_pic>;
|
interrupt-parent = <&mpc5200_pic>;
|
||||||
};
|
};
|
||||||
|
|
||||||
usb@1000 {
|
usb@1000 {
|
||||||
compatible = "mpc5200b-ohci","mpc5200-ohci","ohci-be";
|
compatible = "fsl,mpc5200b-ohci","fsl,mpc5200-ohci","ohci-be";
|
||||||
reg = <1000 ff>;
|
reg = <1000 ff>;
|
||||||
interrupts = <2 6 0>;
|
interrupts = <2 6 0>;
|
||||||
interrupt-parent = <&mpc5200_pic>;
|
interrupt-parent = <&mpc5200_pic>;
|
||||||
};
|
};
|
||||||
|
|
||||||
dma-controller@1200 {
|
dma-controller@1200 {
|
||||||
compatible = "mpc5200b-bestcomm","mpc5200-bestcomm";
|
compatible = "fsl,mpc5200b-bestcomm","fsl,mpc5200-bestcomm";
|
||||||
reg = <1200 80>;
|
reg = <1200 80>;
|
||||||
interrupts = <3 0 0 3 1 0 3 2 0 3 3 0
|
interrupts = <3 0 0 3 1 0 3 2 0 3 3 0
|
||||||
3 4 0 3 5 0 3 6 0 3 7 0
|
3 4 0 3 5 0 3 6 0 3 7 0
|
||||||
|
@ -181,13 +174,13 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
xlb@1f00 {
|
xlb@1f00 {
|
||||||
compatible = "mpc5200b-xlb","mpc5200-xlb";
|
compatible = "fsl,mpc5200b-xlb","fsl,mpc5200-xlb";
|
||||||
reg = <1f00 100>;
|
reg = <1f00 100>;
|
||||||
};
|
};
|
||||||
|
|
||||||
serial@2000 { // PSC1
|
serial@2000 { // PSC1
|
||||||
device_type = "serial";
|
device_type = "serial";
|
||||||
compatible = "mpc5200b-psc-uart","mpc5200-psc-uart";
|
compatible = "fsl,mpc5200b-psc-uart","fsl,mpc5200-psc-uart";
|
||||||
port-number = <0>; // Logical port assignment
|
port-number = <0>; // Logical port assignment
|
||||||
reg = <2000 100>;
|
reg = <2000 100>;
|
||||||
interrupts = <2 1 0>;
|
interrupts = <2 1 0>;
|
||||||
|
@ -196,7 +189,7 @@
|
||||||
|
|
||||||
// PSC2 in spi master mode
|
// PSC2 in spi master mode
|
||||||
spi@2200 { // PSC2
|
spi@2200 { // PSC2
|
||||||
compatible = "mpc5200b-psc-spi","mpc5200-psc-spi";
|
compatible = "fsl,mpc5200b-psc-spi","fsl,mpc5200-psc-spi";
|
||||||
cell-index = <1>;
|
cell-index = <1>;
|
||||||
reg = <2200 100>;
|
reg = <2200 100>;
|
||||||
interrupts = <2 2 0>;
|
interrupts = <2 2 0>;
|
||||||
|
@ -206,7 +199,7 @@
|
||||||
// PSC5 in uart mode
|
// PSC5 in uart mode
|
||||||
serial@2800 { // PSC5
|
serial@2800 { // PSC5
|
||||||
device_type = "serial";
|
device_type = "serial";
|
||||||
compatible = "mpc5200b-psc-uart","mpc5200-psc-uart";
|
compatible = "fsl,mpc5200b-psc-uart","fsl,mpc5200-psc-uart";
|
||||||
port-number = <4>; // Logical port assignment
|
port-number = <4>; // Logical port assignment
|
||||||
reg = <2800 100>;
|
reg = <2800 100>;
|
||||||
interrupts = <2 c 0>;
|
interrupts = <2 c 0>;
|
||||||
|
@ -215,22 +208,22 @@
|
||||||
|
|
||||||
ethernet@3000 {
|
ethernet@3000 {
|
||||||
device_type = "network";
|
device_type = "network";
|
||||||
compatible = "mpc5200b-fec","mpc5200-fec";
|
compatible = "fsl,mpc5200b-fec","fsl,mpc5200-fec";
|
||||||
reg = <3000 800>;
|
reg = <3000 800>;
|
||||||
local-mac-address = [ 00 00 00 00 00 00 ]; /* Filled in by U-Boot */
|
local-mac-address = [ 00 00 00 00 00 00 ];
|
||||||
interrupts = <2 5 0>;
|
interrupts = <2 5 0>;
|
||||||
interrupt-parent = <&mpc5200_pic>;
|
interrupt-parent = <&mpc5200_pic>;
|
||||||
};
|
};
|
||||||
|
|
||||||
ata@3a00 {
|
ata@3a00 {
|
||||||
compatible = "mpc5200b-ata","mpc5200-ata";
|
compatible = "fsl,mpc5200b-ata","fsl,mpc5200-ata";
|
||||||
reg = <3a00 100>;
|
reg = <3a00 100>;
|
||||||
interrupts = <2 7 0>;
|
interrupts = <2 7 0>;
|
||||||
interrupt-parent = <&mpc5200_pic>;
|
interrupt-parent = <&mpc5200_pic>;
|
||||||
};
|
};
|
||||||
|
|
||||||
i2c@3d40 {
|
i2c@3d40 {
|
||||||
compatible = "mpc5200b-i2c","mpc5200-i2c","fsl-i2c";
|
compatible = "fsl,mpc5200b-i2c","fsl,mpc5200-i2c","fsl-i2c";
|
||||||
reg = <3d40 40>;
|
reg = <3d40 40>;
|
||||||
interrupts = <2 10 0>;
|
interrupts = <2 10 0>;
|
||||||
interrupt-parent = <&mpc5200_pic>;
|
interrupt-parent = <&mpc5200_pic>;
|
||||||
|
@ -238,13 +231,12 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
sram@8000 {
|
sram@8000 {
|
||||||
compatible = "mpc5200b-sram","mpc5200-sram";
|
compatible = "fsl,mpc5200b-sram","fsl,mpc5200-sram";
|
||||||
reg = <8000 4000>;
|
reg = <8000 4000>;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
lpb {
|
lpb {
|
||||||
model = "fsl,lpb";
|
|
||||||
compatible = "fsl,lpb";
|
compatible = "fsl,lpb";
|
||||||
#address-cells = <2>;
|
#address-cells = <2>;
|
||||||
#size-cells = <1>;
|
#size-cells = <1>;
|
||||||
|
@ -286,7 +278,7 @@
|
||||||
#size-cells = <2>;
|
#size-cells = <2>;
|
||||||
#address-cells = <3>;
|
#address-cells = <3>;
|
||||||
device_type = "pci";
|
device_type = "pci";
|
||||||
compatible = "mpc5200b-pci","mpc5200-pci";
|
compatible = "fsl,mpc5200b-pci","fsl,mpc5200-pci";
|
||||||
reg = <f0000d00 100>;
|
reg = <f0000d00 100>;
|
||||||
interrupt-map-mask = <f800 0 0 7>;
|
interrupt-map-mask = <f800 0 0 7>;
|
||||||
interrupt-map = <c000 0 0 1 &mpc5200_pic 0 0 3 // 1st slot
|
interrupt-map = <c000 0 0 1 &mpc5200_pic 0 0 3 // 1st slot
|
||||||
|
|
|
@ -10,12 +10,6 @@
|
||||||
* option) any later version.
|
* option) any later version.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
|
||||||
* WARNING: Do not depend on this tree layout remaining static just yet.
|
|
||||||
* The MPC5200 device tree conventions are still in flux
|
|
||||||
* Keep an eye on the linuxppc-dev mailing list for more details
|
|
||||||
*/
|
|
||||||
|
|
||||||
/ {
|
/ {
|
||||||
model = "tqc,tqm5200";
|
model = "tqc,tqm5200";
|
||||||
compatible = "tqc,tqm5200";
|
compatible = "tqc,tqm5200";
|
||||||
|
@ -45,29 +39,28 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
soc5200@f0000000 {
|
soc5200@f0000000 {
|
||||||
model = "fsl,mpc5200";
|
#address-cells = <1>;
|
||||||
compatible = "fsl,mpc5200";
|
#size-cells = <1>;
|
||||||
revision = ""; // from bootloader
|
compatible = "fsl,mpc5200-immr";
|
||||||
device_type = "soc";
|
|
||||||
ranges = <0 f0000000 0000c000>;
|
ranges = <0 f0000000 0000c000>;
|
||||||
reg = <f0000000 00000100>;
|
reg = <f0000000 00000100>;
|
||||||
bus-frequency = <0>; // from bootloader
|
bus-frequency = <0>; // from bootloader
|
||||||
system-frequency = <0>; // from bootloader
|
system-frequency = <0>; // from bootloader
|
||||||
|
|
||||||
cdm@200 {
|
cdm@200 {
|
||||||
compatible = "mpc5200-cdm";
|
compatible = "fsl,mpc5200-cdm";
|
||||||
reg = <200 38>;
|
reg = <200 38>;
|
||||||
};
|
};
|
||||||
|
|
||||||
mpc5200_pic: pic@500 {
|
mpc5200_pic: interrupt-controller@500 {
|
||||||
// 5200 interrupts are encoded into two levels;
|
// 5200 interrupts are encoded into two levels;
|
||||||
interrupt-controller;
|
interrupt-controller;
|
||||||
#interrupt-cells = <3>;
|
#interrupt-cells = <3>;
|
||||||
compatible = "mpc5200-pic";
|
compatible = "fsl,mpc5200-pic";
|
||||||
reg = <500 80>;
|
reg = <500 80>;
|
||||||
};
|
};
|
||||||
|
|
||||||
gpt@600 { // General Purpose Timer
|
timer@600 { // General Purpose Timer
|
||||||
compatible = "fsl,mpc5200-gpt";
|
compatible = "fsl,mpc5200-gpt";
|
||||||
reg = <600 10>;
|
reg = <600 10>;
|
||||||
interrupts = <1 9 0>;
|
interrupts = <1 9 0>;
|
||||||
|
@ -76,21 +69,21 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
gpio@b00 {
|
gpio@b00 {
|
||||||
compatible = "mpc5200-gpio";
|
compatible = "fsl,mpc5200-gpio";
|
||||||
reg = <b00 40>;
|
reg = <b00 40>;
|
||||||
interrupts = <1 7 0>;
|
interrupts = <1 7 0>;
|
||||||
interrupt-parent = <&mpc5200_pic>;
|
interrupt-parent = <&mpc5200_pic>;
|
||||||
};
|
};
|
||||||
|
|
||||||
usb@1000 {
|
usb@1000 {
|
||||||
compatible = "mpc5200-ohci","ohci-be";
|
compatible = "fsl,mpc5200-ohci","ohci-be";
|
||||||
reg = <1000 ff>;
|
reg = <1000 ff>;
|
||||||
interrupts = <2 6 0>;
|
interrupts = <2 6 0>;
|
||||||
interrupt-parent = <&mpc5200_pic>;
|
interrupt-parent = <&mpc5200_pic>;
|
||||||
};
|
};
|
||||||
|
|
||||||
dma-controller@1200 {
|
dma-controller@1200 {
|
||||||
compatible = "mpc5200-bestcomm";
|
compatible = "fsl,mpc5200-bestcomm";
|
||||||
reg = <1200 80>;
|
reg = <1200 80>;
|
||||||
interrupts = <3 0 0 3 1 0 3 2 0 3 3 0
|
interrupts = <3 0 0 3 1 0 3 2 0 3 3 0
|
||||||
3 4 0 3 5 0 3 6 0 3 7 0
|
3 4 0 3 5 0 3 6 0 3 7 0
|
||||||
|
@ -100,13 +93,13 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
xlb@1f00 {
|
xlb@1f00 {
|
||||||
compatible = "mpc5200-xlb";
|
compatible = "fsl,mpc5200-xlb";
|
||||||
reg = <1f00 100>;
|
reg = <1f00 100>;
|
||||||
};
|
};
|
||||||
|
|
||||||
serial@2000 { // PSC1
|
serial@2000 { // PSC1
|
||||||
device_type = "serial";
|
device_type = "serial";
|
||||||
compatible = "mpc5200-psc-uart";
|
compatible = "fsl,mpc5200-psc-uart";
|
||||||
port-number = <0>; // Logical port assignment
|
port-number = <0>; // Logical port assignment
|
||||||
reg = <2000 100>;
|
reg = <2000 100>;
|
||||||
interrupts = <2 1 0>;
|
interrupts = <2 1 0>;
|
||||||
|
@ -115,7 +108,7 @@
|
||||||
|
|
||||||
serial@2200 { // PSC2
|
serial@2200 { // PSC2
|
||||||
device_type = "serial";
|
device_type = "serial";
|
||||||
compatible = "mpc5200-psc-uart";
|
compatible = "fsl,mpc5200-psc-uart";
|
||||||
port-number = <1>; // Logical port assignment
|
port-number = <1>; // Logical port assignment
|
||||||
reg = <2200 100>;
|
reg = <2200 100>;
|
||||||
interrupts = <2 2 0>;
|
interrupts = <2 2 0>;
|
||||||
|
@ -124,7 +117,7 @@
|
||||||
|
|
||||||
serial@2400 { // PSC3
|
serial@2400 { // PSC3
|
||||||
device_type = "serial";
|
device_type = "serial";
|
||||||
compatible = "mpc5200-psc-uart";
|
compatible = "fsl,mpc5200-psc-uart";
|
||||||
port-number = <2>; // Logical port assignment
|
port-number = <2>; // Logical port assignment
|
||||||
reg = <2400 100>;
|
reg = <2400 100>;
|
||||||
interrupts = <2 3 0>;
|
interrupts = <2 3 0>;
|
||||||
|
@ -133,22 +126,22 @@
|
||||||
|
|
||||||
ethernet@3000 {
|
ethernet@3000 {
|
||||||
device_type = "network";
|
device_type = "network";
|
||||||
compatible = "mpc5200-fec";
|
compatible = "fsl,mpc5200-fec";
|
||||||
reg = <3000 800>;
|
reg = <3000 800>;
|
||||||
local-mac-address = [ 00 00 00 00 00 00 ]; /* Filled in by U-Boot */
|
local-mac-address = [ 00 00 00 00 00 00 ];
|
||||||
interrupts = <2 5 0>;
|
interrupts = <2 5 0>;
|
||||||
interrupt-parent = <&mpc5200_pic>;
|
interrupt-parent = <&mpc5200_pic>;
|
||||||
};
|
};
|
||||||
|
|
||||||
ata@3a00 {
|
ata@3a00 {
|
||||||
compatible = "mpc5200-ata";
|
compatible = "fsl,mpc5200-ata";
|
||||||
reg = <3a00 100>;
|
reg = <3a00 100>;
|
||||||
interrupts = <2 7 0>;
|
interrupts = <2 7 0>;
|
||||||
interrupt-parent = <&mpc5200_pic>;
|
interrupt-parent = <&mpc5200_pic>;
|
||||||
};
|
};
|
||||||
|
|
||||||
i2c@3d40 {
|
i2c@3d40 {
|
||||||
compatible = "mpc5200-i2c","fsl-i2c";
|
compatible = "fsl,mpc5200-i2c","fsl-i2c";
|
||||||
reg = <3d40 40>;
|
reg = <3d40 40>;
|
||||||
interrupts = <2 10 0>;
|
interrupts = <2 10 0>;
|
||||||
interrupt-parent = <&mpc5200_pic>;
|
interrupt-parent = <&mpc5200_pic>;
|
||||||
|
@ -156,7 +149,7 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
sram@8000 {
|
sram@8000 {
|
||||||
compatible = "mpc5200-sram";
|
compatible = "fsl,mpc5200-sram";
|
||||||
reg = <8000 4000>;
|
reg = <8000 4000>;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
@ -126,7 +126,7 @@ int serial_console_init(void)
|
||||||
dt_is_compatible(devp, "fsl,cpm2-scc-uart") ||
|
dt_is_compatible(devp, "fsl,cpm2-scc-uart") ||
|
||||||
dt_is_compatible(devp, "fsl,cpm2-smc-uart"))
|
dt_is_compatible(devp, "fsl,cpm2-smc-uart"))
|
||||||
rc = cpm_console_init(devp, &serial_cd);
|
rc = cpm_console_init(devp, &serial_cd);
|
||||||
else if (dt_is_compatible(devp, "mpc5200-psc-uart"))
|
else if (dt_is_compatible(devp, "fsl,mpc5200-psc-uart"))
|
||||||
rc = mpc5200_psc_console_init(devp, &serial_cd);
|
rc = mpc5200_psc_console_init(devp, &serial_cd);
|
||||||
else if (dt_is_compatible(devp, "xlnx,opb-uartlite-1.00.b") ||
|
else if (dt_is_compatible(devp, "xlnx,opb-uartlite-1.00.b") ||
|
||||||
dt_is_compatible(devp, "xlnx,xps-uartlite-1.00.a"))
|
dt_is_compatible(devp, "xlnx,xps-uartlite-1.00.a"))
|
||||||
|
|
|
@ -2142,82 +2142,34 @@ static void __init fixup_device_tree_pmac(void)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_PPC_EFIKA
|
#ifdef CONFIG_PPC_EFIKA
|
||||||
/* The current fw of the Efika has a device tree needs quite a few
|
/*
|
||||||
* fixups to be compliant with the mpc52xx bindings. It's currently
|
* The MPC5200 FEC driver requires an phy-handle property to tell it how
|
||||||
* unknown if it will ever be compliant (come on bPlan ...) so we do fixups.
|
* to talk to the phy. If the phy-handle property is missing, then this
|
||||||
* NOTE that we (barely) tolerate it because the EFIKA was out before
|
* function is called to add the appropriate nodes and link it to the
|
||||||
* the bindings were finished, for any new boards -> RTFM ! */
|
* ethernet node.
|
||||||
|
*/
|
||||||
struct subst_entry {
|
static void __init fixup_device_tree_efika_add_phy(void)
|
||||||
char *path;
|
|
||||||
char *property;
|
|
||||||
void *value;
|
|
||||||
int value_len;
|
|
||||||
};
|
|
||||||
|
|
||||||
static void __init fixup_device_tree_efika(void)
|
|
||||||
{
|
{
|
||||||
/* Substitution table */
|
|
||||||
#define prop_cstr(x) x, sizeof(x)
|
|
||||||
int prop_sound_irq[3] = { 2, 2, 0 };
|
|
||||||
int prop_bcomm_irq[3*16] = { 3,0,0, 3,1,0, 3,2,0, 3,3,0,
|
|
||||||
3,4,0, 3,5,0, 3,6,0, 3,7,0,
|
|
||||||
3,8,0, 3,9,0, 3,10,0, 3,11,0,
|
|
||||||
3,12,0, 3,13,0, 3,14,0, 3,15,0 };
|
|
||||||
struct subst_entry efika_subst_table[] = {
|
|
||||||
{ "/", "device_type", prop_cstr("efika") },
|
|
||||||
{ "/builtin", "device_type", prop_cstr("soc") },
|
|
||||||
{ "/builtin/ata", "compatible", prop_cstr("mpc5200b-ata\0mpc5200-ata"), },
|
|
||||||
{ "/builtin/bestcomm", "compatible", prop_cstr("mpc5200b-bestcomm\0mpc5200-bestcomm") },
|
|
||||||
{ "/builtin/bestcomm", "interrupts", prop_bcomm_irq, sizeof(prop_bcomm_irq) },
|
|
||||||
{ "/builtin/ethernet", "compatible", prop_cstr("mpc5200b-fec\0mpc5200-fec") },
|
|
||||||
{ "/builtin/pic", "compatible", prop_cstr("mpc5200b-pic\0mpc5200-pic") },
|
|
||||||
{ "/builtin/serial", "compatible", prop_cstr("mpc5200b-psc-uart\0mpc5200-psc-uart") },
|
|
||||||
{ "/builtin/sound", "compatible", prop_cstr("mpc5200b-psc-ac97\0mpc5200-psc-ac97") },
|
|
||||||
{ "/builtin/sound", "interrupts", prop_sound_irq, sizeof(prop_sound_irq) },
|
|
||||||
{ "/builtin/sram", "compatible", prop_cstr("mpc5200b-sram\0mpc5200-sram") },
|
|
||||||
{ "/builtin/sram", "device_type", prop_cstr("sram") },
|
|
||||||
{}
|
|
||||||
};
|
|
||||||
#undef prop_cstr
|
|
||||||
|
|
||||||
/* Vars */
|
|
||||||
u32 node;
|
u32 node;
|
||||||
char prop[64];
|
char prop[64];
|
||||||
int rv, i;
|
int rv;
|
||||||
|
|
||||||
/* Check if we're really running on a EFIKA */
|
/* Check if /builtin/ethernet exists - bail if it doesn't */
|
||||||
node = call_prom("finddevice", 1, 1, ADDR("/"));
|
node = call_prom("finddevice", 1, 1, ADDR("/builtin/ethernet"));
|
||||||
if (!PHANDLE_VALID(node))
|
if (!PHANDLE_VALID(node))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
rv = prom_getprop(node, "model", prop, sizeof(prop));
|
/* Check if the phy-handle property exists - bail if it does */
|
||||||
if (rv == PROM_ERROR)
|
rv = prom_getprop(node, "phy-handle", prop, sizeof(prop));
|
||||||
return;
|
if (!rv)
|
||||||
if (strcmp(prop, "EFIKA5K2"))
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
prom_printf("Applying EFIKA device tree fixups\n");
|
/*
|
||||||
|
* At this point the ethernet device doesn't have a phy described.
|
||||||
|
* Now we need to add the missing phy node and linkage
|
||||||
|
*/
|
||||||
|
|
||||||
/* Process substitution table */
|
/* Check for an MDIO bus node - if missing then create one */
|
||||||
for (i=0; efika_subst_table[i].path; i++) {
|
|
||||||
struct subst_entry *se = &efika_subst_table[i];
|
|
||||||
|
|
||||||
node = call_prom("finddevice", 1, 1, ADDR(se->path));
|
|
||||||
if (!PHANDLE_VALID(node)) {
|
|
||||||
prom_printf("fixup_device_tree_efika: ",
|
|
||||||
"skipped entry %x - not found\n", i);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
rv = prom_setprop(node, se->path, se->property,
|
|
||||||
se->value, se->value_len );
|
|
||||||
if (rv == PROM_ERROR)
|
|
||||||
prom_printf("fixup_device_tree_efika: ",
|
|
||||||
"skipped entry %x - setprop error\n", i);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Make sure ethernet mdio bus node exists */
|
|
||||||
node = call_prom("finddevice", 1, 1, ADDR("/builtin/mdio"));
|
node = call_prom("finddevice", 1, 1, ADDR("/builtin/mdio"));
|
||||||
if (!PHANDLE_VALID(node)) {
|
if (!PHANDLE_VALID(node)) {
|
||||||
prom_printf("Adding Ethernet MDIO node\n");
|
prom_printf("Adding Ethernet MDIO node\n");
|
||||||
|
@ -2226,8 +2178,8 @@ static void __init fixup_device_tree_efika(void)
|
||||||
" new-device"
|
" new-device"
|
||||||
" 1 encode-int s\" #address-cells\" property"
|
" 1 encode-int s\" #address-cells\" property"
|
||||||
" 0 encode-int s\" #size-cells\" property"
|
" 0 encode-int s\" #size-cells\" property"
|
||||||
" s\" mdio\" 2dup device-name device-type"
|
" s\" mdio\" device-name"
|
||||||
" s\" mpc5200b-fec-phy\" encode-string"
|
" s\" fsl,mpc5200b-mdio\" encode-string"
|
||||||
" s\" compatible\" property"
|
" s\" compatible\" property"
|
||||||
" 0xf0003000 0x400 reg"
|
" 0xf0003000 0x400 reg"
|
||||||
" 0x2 encode-int"
|
" 0x2 encode-int"
|
||||||
|
@ -2237,8 +2189,10 @@ static void __init fixup_device_tree_efika(void)
|
||||||
" finish-device");
|
" finish-device");
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Make sure ethernet phy device node exist */
|
/* Check for a PHY device node - if missing then create one and
|
||||||
node = call_prom("finddevice", 1, 1, ADDR("/builtin/mdio/ethernet-phy"));
|
* give it's phandle to the ethernet node */
|
||||||
|
node = call_prom("finddevice", 1, 1,
|
||||||
|
ADDR("/builtin/mdio/ethernet-phy"));
|
||||||
if (!PHANDLE_VALID(node)) {
|
if (!PHANDLE_VALID(node)) {
|
||||||
prom_printf("Adding Ethernet PHY node\n");
|
prom_printf("Adding Ethernet PHY node\n");
|
||||||
call_prom("interpret", 1, 1,
|
call_prom("interpret", 1, 1,
|
||||||
|
@ -2254,7 +2208,62 @@ static void __init fixup_device_tree_efika(void)
|
||||||
" s\" phy-handle\" property"
|
" s\" phy-handle\" property"
|
||||||
" device-end");
|
" device-end");
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void __init fixup_device_tree_efika(void)
|
||||||
|
{
|
||||||
|
int sound_irq[3] = { 2, 2, 0 };
|
||||||
|
int bcomm_irq[3*16] = { 3,0,0, 3,1,0, 3,2,0, 3,3,0,
|
||||||
|
3,4,0, 3,5,0, 3,6,0, 3,7,0,
|
||||||
|
3,8,0, 3,9,0, 3,10,0, 3,11,0,
|
||||||
|
3,12,0, 3,13,0, 3,14,0, 3,15,0 };
|
||||||
|
u32 node;
|
||||||
|
char prop[64];
|
||||||
|
int rv, len;
|
||||||
|
|
||||||
|
/* Check if we're really running on a EFIKA */
|
||||||
|
node = call_prom("finddevice", 1, 1, ADDR("/"));
|
||||||
|
if (!PHANDLE_VALID(node))
|
||||||
|
return;
|
||||||
|
|
||||||
|
rv = prom_getprop(node, "model", prop, sizeof(prop));
|
||||||
|
if (rv == PROM_ERROR)
|
||||||
|
return;
|
||||||
|
if (strcmp(prop, "EFIKA5K2"))
|
||||||
|
return;
|
||||||
|
|
||||||
|
prom_printf("Applying EFIKA device tree fixups\n");
|
||||||
|
|
||||||
|
/* Claiming to be 'chrp' is death */
|
||||||
|
node = call_prom("finddevice", 1, 1, ADDR("/"));
|
||||||
|
rv = prom_getprop(node, "device_type", prop, sizeof(prop));
|
||||||
|
if (rv != PROM_ERROR && (strcmp(prop, "chrp") == 0))
|
||||||
|
prom_setprop(node, "/", "device_type", "efika", sizeof("efika"));
|
||||||
|
|
||||||
|
/* Fixup bestcomm interrupts property */
|
||||||
|
node = call_prom("finddevice", 1, 1, ADDR("/builtin/bestcomm"));
|
||||||
|
if (PHANDLE_VALID(node)) {
|
||||||
|
len = prom_getproplen(node, "interrupts");
|
||||||
|
if (len == 12) {
|
||||||
|
prom_printf("Fixing bestcomm interrupts property\n");
|
||||||
|
prom_setprop(node, "/builtin/bestcom", "interrupts",
|
||||||
|
bcomm_irq, sizeof(bcomm_irq));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Fixup sound interrupts property */
|
||||||
|
node = call_prom("finddevice", 1, 1, ADDR("/builtin/sound"));
|
||||||
|
if (PHANDLE_VALID(node)) {
|
||||||
|
rv = prom_getprop(node, "interrupts", prop, sizeof(prop));
|
||||||
|
if (rv == PROM_ERROR) {
|
||||||
|
prom_printf("Adding sound interrupts property\n");
|
||||||
|
prom_setprop(node, "/builtin/sound", "interrupts",
|
||||||
|
sound_irq, sizeof(sound_irq));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Make sure ethernet phy-handle property exists */
|
||||||
|
fixup_device_tree_efika_add_phy();
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
#define fixup_device_tree_efika()
|
#define fixup_device_tree_efika()
|
||||||
|
|
|
@ -1,31 +1,14 @@
|
||||||
config PPC_MPC52xx
|
config PPC_MPC52xx
|
||||||
bool
|
bool "52xx-based boards"
|
||||||
|
depends on PPC_MULTIPLATFORM && PPC32
|
||||||
select FSL_SOC
|
select FSL_SOC
|
||||||
select PPC_CLOCK
|
select PPC_CLOCK
|
||||||
default n
|
|
||||||
|
|
||||||
config PPC_MPC5200
|
|
||||||
bool
|
|
||||||
select PPC_MPC52xx
|
|
||||||
default n
|
|
||||||
|
|
||||||
config PPC_MPC5200_BUGFIX
|
|
||||||
bool "MPC5200 (L25R) bugfix support"
|
|
||||||
depends on PPC_MPC5200
|
|
||||||
default n
|
|
||||||
help
|
|
||||||
Enable workarounds for original MPC5200 errata. This is not required
|
|
||||||
for MPC5200B based boards.
|
|
||||||
|
|
||||||
It is safe to say 'Y' here
|
|
||||||
|
|
||||||
config PPC_MPC5200_SIMPLE
|
config PPC_MPC5200_SIMPLE
|
||||||
bool "Generic support for simple MPC5200 based boards"
|
bool "Generic support for simple MPC5200 based boards"
|
||||||
depends on PPC_MULTIPLATFORM && PPC32
|
depends on PPC_MPC52xx
|
||||||
select PPC_MPC5200
|
|
||||||
select DEFAULT_UIMAGE
|
select DEFAULT_UIMAGE
|
||||||
select WANT_DEVICE_TREE
|
select WANT_DEVICE_TREE
|
||||||
default n
|
|
||||||
help
|
help
|
||||||
This option enables support for a simple MPC52xx based boards which
|
This option enables support for a simple MPC52xx based boards which
|
||||||
do not need a custom platform specific setup. Such boards are
|
do not need a custom platform specific setup. Such boards are
|
||||||
|
@ -43,17 +26,23 @@ config PPC_MPC5200_SIMPLE
|
||||||
|
|
||||||
config PPC_EFIKA
|
config PPC_EFIKA
|
||||||
bool "bPlan Efika 5k2. MPC5200B based computer"
|
bool "bPlan Efika 5k2. MPC5200B based computer"
|
||||||
depends on PPC_MULTIPLATFORM && PPC32
|
depends on PPC_MPC52xx
|
||||||
select PPC_RTAS
|
select PPC_RTAS
|
||||||
select RTAS_PROC
|
select RTAS_PROC
|
||||||
select PPC_MPC52xx
|
|
||||||
select PPC_NATIVE
|
select PPC_NATIVE
|
||||||
default n
|
|
||||||
|
|
||||||
config PPC_LITE5200
|
config PPC_LITE5200
|
||||||
bool "Freescale Lite5200 Eval Board"
|
bool "Freescale Lite5200 Eval Board"
|
||||||
depends on PPC_MULTIPLATFORM && PPC32
|
depends on PPC_MPC52xx
|
||||||
select PPC_MPC5200
|
|
||||||
select DEFAULT_UIMAGE
|
select DEFAULT_UIMAGE
|
||||||
select WANT_DEVICE_TREE
|
select WANT_DEVICE_TREE
|
||||||
default n
|
|
||||||
|
config PPC_MPC5200_BUGFIX
|
||||||
|
bool "MPC5200 (L25R) bugfix support"
|
||||||
|
depends on PPC_MPC52xx
|
||||||
|
help
|
||||||
|
Enable workarounds for original MPC5200 errata. This is not required
|
||||||
|
for MPC5200B based boards.
|
||||||
|
|
||||||
|
It is safe to say 'Y' here
|
||||||
|
|
||||||
|
|
|
@ -180,6 +180,9 @@ static void __init efika_setup_arch(void)
|
||||||
{
|
{
|
||||||
rtas_initialize();
|
rtas_initialize();
|
||||||
|
|
||||||
|
/* Map important registers from the internal memory map */
|
||||||
|
mpc52xx_map_common_devices();
|
||||||
|
|
||||||
efika_pcisetup();
|
efika_pcisetup();
|
||||||
|
|
||||||
#ifdef CONFIG_PM
|
#ifdef CONFIG_PM
|
||||||
|
|
|
@ -32,6 +32,19 @@
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/* mpc5200 device tree match tables */
|
||||||
|
static struct of_device_id mpc5200_cdm_ids[] __initdata = {
|
||||||
|
{ .compatible = "fsl,mpc5200-cdm", },
|
||||||
|
{ .compatible = "mpc5200-cdm", },
|
||||||
|
{}
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct of_device_id mpc5200_gpio_ids[] __initdata = {
|
||||||
|
{ .compatible = "fsl,mpc5200-gpio", },
|
||||||
|
{ .compatible = "mpc5200-gpio", },
|
||||||
|
{}
|
||||||
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Fix clock configuration.
|
* Fix clock configuration.
|
||||||
*
|
*
|
||||||
|
@ -44,9 +57,8 @@ lite5200_fix_clock_config(void)
|
||||||
{
|
{
|
||||||
struct device_node *np;
|
struct device_node *np;
|
||||||
struct mpc52xx_cdm __iomem *cdm;
|
struct mpc52xx_cdm __iomem *cdm;
|
||||||
|
|
||||||
/* Map zones */
|
/* Map zones */
|
||||||
np = of_find_compatible_node(NULL, NULL, "mpc5200-cdm");
|
np = of_find_matching_node(NULL, mpc5200_cdm_ids);
|
||||||
cdm = of_iomap(np, 0);
|
cdm = of_iomap(np, 0);
|
||||||
of_node_put(np);
|
of_node_put(np);
|
||||||
if (!cdm) {
|
if (!cdm) {
|
||||||
|
@ -81,7 +93,7 @@ lite5200_fix_port_config(void)
|
||||||
struct mpc52xx_gpio __iomem *gpio;
|
struct mpc52xx_gpio __iomem *gpio;
|
||||||
u32 port_config;
|
u32 port_config;
|
||||||
|
|
||||||
np = of_find_compatible_node(NULL, NULL, "mpc5200-gpio");
|
np = of_find_matching_node(NULL, mpc5200_gpio_ids);
|
||||||
gpio = of_iomap(np, 0);
|
gpio = of_iomap(np, 0);
|
||||||
of_node_put(np);
|
of_node_put(np);
|
||||||
if (!gpio) {
|
if (!gpio) {
|
||||||
|
@ -140,15 +152,15 @@ static void __init lite5200_setup_arch(void)
|
||||||
if (ppc_md.progress)
|
if (ppc_md.progress)
|
||||||
ppc_md.progress("lite5200_setup_arch()", 0);
|
ppc_md.progress("lite5200_setup_arch()", 0);
|
||||||
|
|
||||||
/* Fix things that firmware should have done. */
|
/* Map important registers from the internal memory map */
|
||||||
lite5200_fix_clock_config();
|
mpc52xx_map_common_devices();
|
||||||
lite5200_fix_port_config();
|
|
||||||
|
|
||||||
/* Some mpc5200 & mpc5200b related configuration */
|
/* Some mpc5200 & mpc5200b related configuration */
|
||||||
mpc5200_setup_xlb_arbiter();
|
mpc5200_setup_xlb_arbiter();
|
||||||
|
|
||||||
/* Map wdt for mpc52xx_restart() */
|
/* Fix things that firmware should have done. */
|
||||||
mpc52xx_map_wdt();
|
lite5200_fix_clock_config();
|
||||||
|
lite5200_fix_port_config();
|
||||||
|
|
||||||
#ifdef CONFIG_PM
|
#ifdef CONFIG_PM
|
||||||
mpc52xx_suspend.board_suspend_prepare = lite5200_suspend_prepare;
|
mpc52xx_suspend.board_suspend_prepare = lite5200_suspend_prepare;
|
||||||
|
|
|
@ -43,6 +43,13 @@ static int lite5200_pm_set_target(suspend_state_t state)
|
||||||
static int lite5200_pm_prepare(void)
|
static int lite5200_pm_prepare(void)
|
||||||
{
|
{
|
||||||
struct device_node *np;
|
struct device_node *np;
|
||||||
|
const struct of_device_id immr_ids[] = {
|
||||||
|
{ .compatible = "fsl,mpc5200-immr", },
|
||||||
|
{ .compatible = "fsl,mpc5200b-immr", },
|
||||||
|
{ .type = "soc", .compatible = "mpc5200", }, /* lite5200 */
|
||||||
|
{ .type = "builtin", .compatible = "mpc5200", }, /* efika */
|
||||||
|
{}
|
||||||
|
};
|
||||||
|
|
||||||
/* deep sleep? let mpc52xx code handle that */
|
/* deep sleep? let mpc52xx code handle that */
|
||||||
if (lite5200_pm_target_state == PM_SUSPEND_STANDBY)
|
if (lite5200_pm_target_state == PM_SUSPEND_STANDBY)
|
||||||
|
@ -52,7 +59,7 @@ static int lite5200_pm_prepare(void)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
/* map registers */
|
/* map registers */
|
||||||
np = of_find_compatible_node(NULL, NULL, "mpc5200");
|
np = of_find_matching_node(NULL, immr_ids);
|
||||||
mbar = of_iomap(np, 0);
|
mbar = of_iomap(np, 0);
|
||||||
of_node_put(np);
|
of_node_put(np);
|
||||||
if (!mbar) {
|
if (!mbar) {
|
||||||
|
|
|
@ -39,12 +39,12 @@ static void __init mpc5200_simple_setup_arch(void)
|
||||||
if (ppc_md.progress)
|
if (ppc_md.progress)
|
||||||
ppc_md.progress("mpc5200_simple_setup_arch()", 0);
|
ppc_md.progress("mpc5200_simple_setup_arch()", 0);
|
||||||
|
|
||||||
|
/* Map important registers from the internal memory map */
|
||||||
|
mpc52xx_map_common_devices();
|
||||||
|
|
||||||
/* Some mpc5200 & mpc5200b related configuration */
|
/* Some mpc5200 & mpc5200b related configuration */
|
||||||
mpc5200_setup_xlb_arbiter();
|
mpc5200_setup_xlb_arbiter();
|
||||||
|
|
||||||
/* Map wdt for mpc52xx_restart() */
|
|
||||||
mpc52xx_map_wdt();
|
|
||||||
|
|
||||||
mpc52xx_setup_pci();
|
mpc52xx_setup_pci();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -13,18 +13,38 @@
|
||||||
#undef DEBUG
|
#undef DEBUG
|
||||||
|
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
|
#include <linux/spinlock.h>
|
||||||
#include <linux/of_platform.h>
|
#include <linux/of_platform.h>
|
||||||
#include <asm/io.h>
|
#include <asm/io.h>
|
||||||
#include <asm/prom.h>
|
#include <asm/prom.h>
|
||||||
#include <asm/mpc52xx.h>
|
#include <asm/mpc52xx.h>
|
||||||
|
|
||||||
|
/* MPC5200 device tree match tables */
|
||||||
|
static struct of_device_id mpc52xx_xlb_ids[] __initdata = {
|
||||||
|
{ .compatible = "fsl,mpc5200-xlb", },
|
||||||
|
{ .compatible = "mpc5200-xlb", },
|
||||||
|
{}
|
||||||
|
};
|
||||||
|
static struct of_device_id mpc52xx_bus_ids[] __initdata = {
|
||||||
|
{ .compatible = "fsl,mpc5200-immr", },
|
||||||
|
{ .compatible = "fsl,mpc5200b-immr", },
|
||||||
|
{ .compatible = "fsl,lpb", },
|
||||||
|
|
||||||
|
/* depreciated matches; shouldn't be used in new device trees */
|
||||||
|
{ .type = "builtin", .compatible = "mpc5200", }, /* efika */
|
||||||
|
{ .type = "soc", .compatible = "mpc5200", }, /* lite5200 */
|
||||||
|
{}
|
||||||
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This variable is mapped in mpc52xx_map_wdt() and used in mpc52xx_restart().
|
* This variable is mapped in mpc52xx_map_wdt() and used in mpc52xx_restart().
|
||||||
* Permanent mapping is required because mpc52xx_restart() can be called
|
* Permanent mapping is required because mpc52xx_restart() can be called
|
||||||
* from interrupt context while node mapping (which calls ioremap())
|
* from interrupt context while node mapping (which calls ioremap())
|
||||||
* cannot be used at such point.
|
* cannot be used at such point.
|
||||||
*/
|
*/
|
||||||
static volatile struct mpc52xx_gpt *mpc52xx_wdt = NULL;
|
static spinlock_t mpc52xx_lock = SPIN_LOCK_UNLOCKED;
|
||||||
|
static struct mpc52xx_gpt __iomem *mpc52xx_wdt;
|
||||||
|
static struct mpc52xx_cdm __iomem *mpc52xx_cdm;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* mpc52xx_find_ipb_freq - Find the IPB bus frequency for a device
|
* mpc52xx_find_ipb_freq - Find the IPB bus frequency for a device
|
||||||
|
@ -65,7 +85,7 @@ mpc5200_setup_xlb_arbiter(void)
|
||||||
struct device_node *np;
|
struct device_node *np;
|
||||||
struct mpc52xx_xlb __iomem *xlb;
|
struct mpc52xx_xlb __iomem *xlb;
|
||||||
|
|
||||||
np = of_find_compatible_node(NULL, NULL, "mpc5200-xlb");
|
np = of_find_matching_node(NULL, mpc52xx_xlb_ids);
|
||||||
xlb = of_iomap(np, 0);
|
xlb = of_iomap(np, 0);
|
||||||
of_node_put(np);
|
of_node_put(np);
|
||||||
if (!xlb) {
|
if (!xlb) {
|
||||||
|
@ -88,16 +108,11 @@ mpc5200_setup_xlb_arbiter(void)
|
||||||
iounmap(xlb);
|
iounmap(xlb);
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct of_device_id mpc52xx_bus_ids[] __initdata= {
|
/**
|
||||||
{ .compatible = "fsl,mpc5200-immr", },
|
* mpc52xx_declare_of_platform_devices: register internal devices and children
|
||||||
{ .compatible = "fsl,lpb", },
|
* of the localplus bus to the of_platform
|
||||||
|
* bus.
|
||||||
/* depreciated matches; shouldn't be used in new device trees */
|
*/
|
||||||
{ .type = "builtin", .compatible = "mpc5200", }, /* efika */
|
|
||||||
{ .type = "soc", .compatible = "mpc5200", }, /* lite5200 */
|
|
||||||
{},
|
|
||||||
};
|
|
||||||
|
|
||||||
void __init
|
void __init
|
||||||
mpc52xx_declare_of_platform_devices(void)
|
mpc52xx_declare_of_platform_devices(void)
|
||||||
{
|
{
|
||||||
|
@ -107,35 +122,87 @@ mpc52xx_declare_of_platform_devices(void)
|
||||||
"Error while probing of_platform bus\n");
|
"Error while probing of_platform bus\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* match tables used by mpc52xx_map_common_devices()
|
||||||
|
*/
|
||||||
|
static struct of_device_id mpc52xx_gpt_ids[] __initdata = {
|
||||||
|
{ .compatible = "fsl,mpc5200-gpt", },
|
||||||
|
{ .compatible = "mpc5200-gpt", }, /* old */
|
||||||
|
{}
|
||||||
|
};
|
||||||
|
static struct of_device_id mpc52xx_cdm_ids[] __initdata = {
|
||||||
|
{ .compatible = "fsl,mpc5200-cdm", },
|
||||||
|
{ .compatible = "mpc5200-cdm", }, /* old */
|
||||||
|
{}
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* mpc52xx_map_common_devices: iomap devices required by common code
|
||||||
|
*/
|
||||||
void __init
|
void __init
|
||||||
mpc52xx_map_wdt(void)
|
mpc52xx_map_common_devices(void)
|
||||||
{
|
{
|
||||||
const void *has_wdt;
|
|
||||||
struct device_node *np;
|
struct device_node *np;
|
||||||
|
|
||||||
/* mpc52xx_wdt is mapped here and used in mpc52xx_restart,
|
/* mpc52xx_wdt is mapped here and used in mpc52xx_restart,
|
||||||
* possibly from a interrupt context. wdt is only implement
|
* possibly from a interrupt context. wdt is only implement
|
||||||
* on a gpt0, so check has-wdt property before mapping.
|
* on a gpt0, so check has-wdt property before mapping.
|
||||||
*/
|
*/
|
||||||
for_each_compatible_node(np, NULL, "fsl,mpc5200-gpt") {
|
for_each_matching_node(np, mpc52xx_gpt_ids) {
|
||||||
has_wdt = of_get_property(np, "fsl,has-wdt", NULL);
|
if (of_get_property(np, "fsl,has-wdt", NULL) ||
|
||||||
if (has_wdt) {
|
of_get_property(np, "has-wdt", NULL)) {
|
||||||
mpc52xx_wdt = of_iomap(np, 0);
|
mpc52xx_wdt = of_iomap(np, 0);
|
||||||
of_node_put(np);
|
of_node_put(np);
|
||||||
return;
|
break;
|
||||||
}
|
|
||||||
}
|
|
||||||
for_each_compatible_node(np, NULL, "mpc5200-gpt") {
|
|
||||||
has_wdt = of_get_property(np, "has-wdt", NULL);
|
|
||||||
if (has_wdt) {
|
|
||||||
mpc52xx_wdt = of_iomap(np, 0);
|
|
||||||
of_node_put(np);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Clock Distribution Module, used by PSC clock setting function */
|
||||||
|
np = of_find_matching_node(NULL, mpc52xx_cdm_ids);
|
||||||
|
mpc52xx_cdm = of_iomap(np, 0);
|
||||||
|
of_node_put(np);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* mpc52xx_set_psc_clkdiv: Set clock divider in the CDM for PSC ports
|
||||||
|
*
|
||||||
|
* @psc_id: id of psc port; must be 1,2,3 or 6
|
||||||
|
* @clkdiv: clock divider value to put into CDM PSC register.
|
||||||
|
*/
|
||||||
|
int mpc52xx_set_psc_clkdiv(int psc_id, int clkdiv)
|
||||||
|
{
|
||||||
|
unsigned long flags;
|
||||||
|
u16 __iomem *reg;
|
||||||
|
u32 val;
|
||||||
|
u32 mask;
|
||||||
|
u32 mclken_div;
|
||||||
|
|
||||||
|
if (!mpc52xx_cdm)
|
||||||
|
return -ENODEV;
|
||||||
|
|
||||||
|
mclken_div = 0x8000 | (clkdiv & 0x1FF);
|
||||||
|
switch (psc_id) {
|
||||||
|
case 1: reg = &mpc52xx_cdm->mclken_div_psc1; mask = 0x20; break;
|
||||||
|
case 2: reg = &mpc52xx_cdm->mclken_div_psc2; mask = 0x40; break;
|
||||||
|
case 3: reg = &mpc52xx_cdm->mclken_div_psc3; mask = 0x80; break;
|
||||||
|
case 6: reg = &mpc52xx_cdm->mclken_div_psc6; mask = 0x10; break;
|
||||||
|
default:
|
||||||
|
return -ENODEV;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Set the rate and enable the clock */
|
||||||
|
spin_lock_irqsave(&mpc52xx_lock, flags);
|
||||||
|
out_be16(reg, mclken_div);
|
||||||
|
val = in_be32(&mpc52xx_cdm->clk_enables);
|
||||||
|
out_be32(&mpc52xx_cdm->clk_enables, val | mask);
|
||||||
|
spin_unlock_irqrestore(&mpc52xx_lock, flags);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* mpc52xx_restart: ppc_md->restart hook for mpc5200 using the watchdog timer
|
||||||
|
*/
|
||||||
void
|
void
|
||||||
mpc52xx_restart(char *cmd)
|
mpc52xx_restart(char *cmd)
|
||||||
{
|
{
|
||||||
|
|
|
@ -99,6 +99,12 @@ struct mpc52xx_pci {
|
||||||
u8 reserved6[4]; /* PCI + 0xFC */
|
u8 reserved6[4]; /* PCI + 0xFC */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* MPC5200 device tree match tables */
|
||||||
|
const struct of_device_id mpc52xx_pci_ids[] __initdata = {
|
||||||
|
{ .type = "pci", .compatible = "fsl,mpc5200-pci", },
|
||||||
|
{ .type = "pci", .compatible = "mpc5200-pci", },
|
||||||
|
{}
|
||||||
|
};
|
||||||
|
|
||||||
/* ======================================================================== */
|
/* ======================================================================== */
|
||||||
/* PCI configuration acess */
|
/* PCI configuration acess */
|
||||||
|
@ -411,9 +417,7 @@ void __init mpc52xx_setup_pci(void)
|
||||||
{
|
{
|
||||||
struct device_node *pci;
|
struct device_node *pci;
|
||||||
|
|
||||||
pci = of_find_compatible_node(NULL, NULL, "fsl,mpc5200-pci");
|
pci = of_find_matching_node(NULL, mpc52xx_pci_ids);
|
||||||
if (!pci)
|
|
||||||
pci = of_find_compatible_node(NULL, NULL, "mpc5200-pci");
|
|
||||||
if (!pci)
|
if (!pci)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
|
|
@ -29,6 +29,18 @@
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/* MPC5200 device tree match tables */
|
||||||
|
static struct of_device_id mpc52xx_pic_ids[] __initdata = {
|
||||||
|
{ .compatible = "fsl,mpc5200-pic", },
|
||||||
|
{ .compatible = "mpc5200-pic", },
|
||||||
|
{}
|
||||||
|
};
|
||||||
|
static struct of_device_id mpc52xx_sdma_ids[] __initdata = {
|
||||||
|
{ .compatible = "fsl,mpc5200-bestcomm", },
|
||||||
|
{ .compatible = "mpc5200-bestcomm", },
|
||||||
|
{}
|
||||||
|
};
|
||||||
|
|
||||||
static struct mpc52xx_intr __iomem *intr;
|
static struct mpc52xx_intr __iomem *intr;
|
||||||
static struct mpc52xx_sdma __iomem *sdma;
|
static struct mpc52xx_sdma __iomem *sdma;
|
||||||
static struct irq_host *mpc52xx_irqhost = NULL;
|
static struct irq_host *mpc52xx_irqhost = NULL;
|
||||||
|
@ -367,13 +379,13 @@ void __init mpc52xx_init_irq(void)
|
||||||
struct device_node *np;
|
struct device_node *np;
|
||||||
|
|
||||||
/* Remap the necessary zones */
|
/* Remap the necessary zones */
|
||||||
picnode = of_find_compatible_node(NULL, NULL, "mpc5200-pic");
|
picnode = of_find_matching_node(NULL, mpc52xx_pic_ids);
|
||||||
intr = of_iomap(picnode, 0);
|
intr = of_iomap(picnode, 0);
|
||||||
if (!intr)
|
if (!intr)
|
||||||
panic(__FILE__ ": find_and_map failed on 'mpc5200-pic'. "
|
panic(__FILE__ ": find_and_map failed on 'mpc5200-pic'. "
|
||||||
"Check node !");
|
"Check node !");
|
||||||
|
|
||||||
np = of_find_compatible_node(NULL, NULL, "mpc5200-bestcomm");
|
np = of_find_matching_node(NULL, mpc52xx_sdma_ids);
|
||||||
sdma = of_iomap(np, 0);
|
sdma = of_iomap(np, 0);
|
||||||
of_node_put(np);
|
of_node_put(np);
|
||||||
if (!sdma)
|
if (!sdma)
|
||||||
|
|
|
@ -60,9 +60,16 @@ int mpc52xx_set_wakeup_gpio(u8 pin, u8 level)
|
||||||
int mpc52xx_pm_prepare(void)
|
int mpc52xx_pm_prepare(void)
|
||||||
{
|
{
|
||||||
struct device_node *np;
|
struct device_node *np;
|
||||||
|
const struct of_device_id immr_ids[] = {
|
||||||
|
{ .compatible = "fsl,mpc5200-immr", },
|
||||||
|
{ .compatible = "fsl,mpc5200b-immr", },
|
||||||
|
{ .type = "soc", .compatible = "mpc5200", }, /* lite5200 */
|
||||||
|
{ .type = "builtin", .compatible = "mpc5200", }, /* efika */
|
||||||
|
{}
|
||||||
|
};
|
||||||
|
|
||||||
/* map the whole register space */
|
/* map the whole register space */
|
||||||
np = of_find_compatible_node(NULL, NULL, "mpc5200");
|
np = of_find_matching_node(NULL, immr_ids);
|
||||||
mbar = of_iomap(np, 0);
|
mbar = of_iomap(np, 0);
|
||||||
of_node_put(np);
|
of_node_put(np);
|
||||||
if (!mbar) {
|
if (!mbar) {
|
||||||
|
|
|
@ -29,11 +29,17 @@
|
||||||
|
|
||||||
#define DRIVER_NAME "bestcomm-core"
|
#define DRIVER_NAME "bestcomm-core"
|
||||||
|
|
||||||
|
/* MPC5200 device tree match tables */
|
||||||
|
static struct of_device_id mpc52xx_sram_ids[] __devinitdata = {
|
||||||
|
{ .compatible = "fsl,mpc5200-sram", },
|
||||||
|
{ .compatible = "mpc5200-sram", },
|
||||||
|
{}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
struct bcom_engine *bcom_eng = NULL;
|
struct bcom_engine *bcom_eng = NULL;
|
||||||
EXPORT_SYMBOL_GPL(bcom_eng); /* needed for inline functions */
|
EXPORT_SYMBOL_GPL(bcom_eng); /* needed for inline functions */
|
||||||
|
|
||||||
|
|
||||||
/* ======================================================================== */
|
/* ======================================================================== */
|
||||||
/* Public and private API */
|
/* Public and private API */
|
||||||
/* ======================================================================== */
|
/* ======================================================================== */
|
||||||
|
@ -373,7 +379,7 @@ mpc52xx_bcom_probe(struct of_device *op, const struct of_device_id *match)
|
||||||
of_node_get(op->node);
|
of_node_get(op->node);
|
||||||
|
|
||||||
/* Prepare SRAM */
|
/* Prepare SRAM */
|
||||||
ofn_sram = of_find_compatible_node(NULL, "sram", "mpc5200-sram");
|
ofn_sram = of_find_matching_node(NULL, mpc52xx_sram_ids);
|
||||||
if (!ofn_sram) {
|
if (!ofn_sram) {
|
||||||
printk(KERN_ERR DRIVER_NAME ": "
|
printk(KERN_ERR DRIVER_NAME ": "
|
||||||
"No SRAM found in device tree\n");
|
"No SRAM found in device tree\n");
|
||||||
|
@ -478,10 +484,8 @@ mpc52xx_bcom_remove(struct of_device *op)
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct of_device_id mpc52xx_bcom_of_match[] = {
|
static struct of_device_id mpc52xx_bcom_of_match[] = {
|
||||||
{
|
{ .type = "dma-controller", .compatible = "fsl,mpc5200-bestcomm", },
|
||||||
.type = "dma-controller",
|
{ .type = "dma-controller", .compatible = "mpc5200-bestcomm", },
|
||||||
.compatible = "mpc5200-bestcomm",
|
|
||||||
},
|
|
||||||
{},
|
{},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#include <linux/spinlock.h>
|
||||||
#include <asm/io.h>
|
#include <asm/io.h>
|
||||||
#include <asm/time.h>
|
#include <asm/time.h>
|
||||||
#include <asm/mpc52xx.h>
|
#include <asm/mpc52xx.h>
|
||||||
|
@ -275,3 +276,38 @@ int mpc52xx_match_psc_function(int psc_idx, const char *func)
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int mpc52xx_set_psc_clkdiv(int psc_id, int clkdiv)
|
||||||
|
{
|
||||||
|
static spinlock_t lock = SPIN_LOCK_UNLOCKED;
|
||||||
|
struct mpc52xx_cdm __iomem *cdm;
|
||||||
|
unsigned long flags;
|
||||||
|
u16 mclken_div;
|
||||||
|
u16 __iomem *reg;
|
||||||
|
u32 mask;
|
||||||
|
|
||||||
|
cdm = ioremap(MPC52xx_PA(MPC52xx_CDM_OFFSET), MPC52xx_CDM_SIZE);
|
||||||
|
if (!cdm) {
|
||||||
|
printk(KERN_ERR __FILE__ ": Error mapping CDM\n");
|
||||||
|
return -ENODEV;
|
||||||
|
}
|
||||||
|
|
||||||
|
mclken_div = 0x8000 | (clkdiv & 0x1FF);
|
||||||
|
switch (psc_id) {
|
||||||
|
case 1: reg = &cdm->mclken_div_psc1; mask = 0x20; break;
|
||||||
|
case 2: reg = &cdm->mclken_div_psc2; mask = 0x40; break;
|
||||||
|
case 3: reg = &cdm->mclken_div_psc3; mask = 0x80; break;
|
||||||
|
case 6: reg = &cdm->mclken_div_psc6; mask = 0x10; break;
|
||||||
|
default:
|
||||||
|
return -ENODEV;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Set the rate and enable the clock */
|
||||||
|
spin_lock_irqsave(&lock, flags);
|
||||||
|
out_be16(reg, mclken_div);
|
||||||
|
out_be32(&cdm->clk_enables, in_be32(&cdm->clk_enables) | mask);
|
||||||
|
spin_unlock_irqrestore(&lock, flags);
|
||||||
|
|
||||||
|
iounmap(cdm);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
|
@ -494,10 +494,8 @@ mpc52xx_ata_resume(struct of_device *op)
|
||||||
|
|
||||||
|
|
||||||
static struct of_device_id mpc52xx_ata_of_match[] = {
|
static struct of_device_id mpc52xx_ata_of_match[] = {
|
||||||
{
|
{ .compatible = "fsl,mpc5200-ata", },
|
||||||
.type = "ata",
|
{ .compatible = "mpc5200-ata", },
|
||||||
.compatible = "mpc5200-ata",
|
|
||||||
},
|
|
||||||
{},
|
{},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -1057,10 +1057,8 @@ static int mpc52xx_fec_of_resume(struct of_device *op)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static struct of_device_id mpc52xx_fec_match[] = {
|
static struct of_device_id mpc52xx_fec_match[] = {
|
||||||
{
|
{ .type = "network", .compatible = "fsl,mpc5200-fec", },
|
||||||
.type = "network",
|
{ .type = "network", .compatible = "mpc5200-fec", },
|
||||||
.compatible = "mpc5200-fec",
|
|
||||||
},
|
|
||||||
{ }
|
{ }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -177,11 +177,9 @@ static int mpc52xx_fec_mdio_remove(struct of_device *of)
|
||||||
|
|
||||||
|
|
||||||
static struct of_device_id mpc52xx_fec_mdio_match[] = {
|
static struct of_device_id mpc52xx_fec_mdio_match[] = {
|
||||||
{
|
{ .compatible = "fsl,mpc5200b-mdio", },
|
||||||
.type = "mdio",
|
{ .compatible = "mpc5200b-fec-phy", },
|
||||||
.compatible = "mpc5200b-fec-phy",
|
{}
|
||||||
},
|
|
||||||
{},
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct of_platform_driver mpc52xx_fec_mdio_driver = {
|
struct of_platform_driver mpc52xx_fec_mdio_driver = {
|
||||||
|
|
|
@ -130,7 +130,9 @@ static irqreturn_t mpc52xx_uart_int(int irq, void *dev_id);
|
||||||
|
|
||||||
#if defined(CONFIG_PPC_MERGE)
|
#if defined(CONFIG_PPC_MERGE)
|
||||||
static struct of_device_id mpc52xx_uart_of_match[] = {
|
static struct of_device_id mpc52xx_uart_of_match[] = {
|
||||||
{ .type = "serial", .compatible = "mpc5200-psc-uart", },
|
{ .type = "serial", .compatible = "fsl,mpc5200-psc-uart", },
|
||||||
|
{ .type = "serial", .compatible = "mpc5200-psc-uart", }, /* lite5200 */
|
||||||
|
{ .type = "serial", .compatible = "mpc5200-serial", }, /* efika */
|
||||||
{},
|
{},
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -330,80 +330,13 @@ static void mpc52xx_psc_spi_cleanup(struct spi_device *spi)
|
||||||
|
|
||||||
static int mpc52xx_psc_spi_port_config(int psc_id, struct mpc52xx_psc_spi *mps)
|
static int mpc52xx_psc_spi_port_config(int psc_id, struct mpc52xx_psc_spi *mps)
|
||||||
{
|
{
|
||||||
struct device_node *np;
|
|
||||||
struct mpc52xx_cdm __iomem *cdm;
|
|
||||||
struct mpc52xx_gpio __iomem *gpio;
|
|
||||||
struct mpc52xx_psc __iomem *psc = mps->psc;
|
struct mpc52xx_psc __iomem *psc = mps->psc;
|
||||||
u32 ul;
|
|
||||||
u32 mclken_div;
|
u32 mclken_div;
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|
||||||
#if defined(CONFIG_PPC_MERGE)
|
|
||||||
np = of_find_compatible_node(NULL, NULL, "mpc5200-cdm");
|
|
||||||
cdm = of_iomap(np, 0);
|
|
||||||
of_node_put(np);
|
|
||||||
np = of_find_compatible_node(NULL, NULL, "mpc5200-gpio");
|
|
||||||
gpio = of_iomap(np, 0);
|
|
||||||
of_node_put(np);
|
|
||||||
#else
|
|
||||||
cdm = ioremap(MPC52xx_PA(MPC52xx_CDM_OFFSET), MPC52xx_CDM_SIZE);
|
|
||||||
gpio = ioremap(MPC52xx_PA(MPC52xx_GPIO_OFFSET), MPC52xx_GPIO_SIZE);
|
|
||||||
#endif
|
|
||||||
if (!cdm || !gpio) {
|
|
||||||
printk(KERN_ERR "Error mapping CDM/GPIO\n");
|
|
||||||
ret = -EFAULT;
|
|
||||||
goto unmap_regs;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* default sysclk is 512MHz */
|
/* default sysclk is 512MHz */
|
||||||
mclken_div = 0x8000 |
|
mclken_div = (mps->sysclk ? mps->sysclk : 512000000) / MCLK;
|
||||||
(((mps->sysclk ? mps->sysclk : 512000000) / MCLK) & 0x1FF);
|
mpc52xx_set_psc_clkdiv(psc_id, mclken_div);
|
||||||
|
|
||||||
switch (psc_id) {
|
|
||||||
case 1:
|
|
||||||
ul = in_be32(&gpio->port_config);
|
|
||||||
ul &= 0xFFFFFFF8;
|
|
||||||
ul |= 0x00000006;
|
|
||||||
out_be32(&gpio->port_config, ul);
|
|
||||||
out_be16(&cdm->mclken_div_psc1, mclken_div);
|
|
||||||
ul = in_be32(&cdm->clk_enables);
|
|
||||||
ul |= 0x00000020;
|
|
||||||
out_be32(&cdm->clk_enables, ul);
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
ul = in_be32(&gpio->port_config);
|
|
||||||
ul &= 0xFFFFFF8F;
|
|
||||||
ul |= 0x00000060;
|
|
||||||
out_be32(&gpio->port_config, ul);
|
|
||||||
out_be16(&cdm->mclken_div_psc2, mclken_div);
|
|
||||||
ul = in_be32(&cdm->clk_enables);
|
|
||||||
ul |= 0x00000040;
|
|
||||||
out_be32(&cdm->clk_enables, ul);
|
|
||||||
break;
|
|
||||||
case 3:
|
|
||||||
ul = in_be32(&gpio->port_config);
|
|
||||||
ul &= 0xFFFFF0FF;
|
|
||||||
ul |= 0x00000600;
|
|
||||||
out_be32(&gpio->port_config, ul);
|
|
||||||
out_be16(&cdm->mclken_div_psc3, mclken_div);
|
|
||||||
ul = in_be32(&cdm->clk_enables);
|
|
||||||
ul |= 0x00000080;
|
|
||||||
out_be32(&cdm->clk_enables, ul);
|
|
||||||
break;
|
|
||||||
case 6:
|
|
||||||
ul = in_be32(&gpio->port_config);
|
|
||||||
ul &= 0xFF8FFFFF;
|
|
||||||
ul |= 0x00700000;
|
|
||||||
out_be32(&gpio->port_config, ul);
|
|
||||||
out_be16(&cdm->mclken_div_psc6, mclken_div);
|
|
||||||
ul = in_be32(&cdm->clk_enables);
|
|
||||||
ul |= 0x00000010;
|
|
||||||
out_be32(&cdm->clk_enables, ul);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
ret = -EINVAL;
|
|
||||||
goto unmap_regs;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Reset the PSC into a known state */
|
/* Reset the PSC into a known state */
|
||||||
out_8(&psc->command, MPC52xx_PSC_RST_RX);
|
out_8(&psc->command, MPC52xx_PSC_RST_RX);
|
||||||
|
@ -427,12 +360,6 @@ static int mpc52xx_psc_spi_port_config(int psc_id, struct mpc52xx_psc_spi *mps)
|
||||||
|
|
||||||
mps->bits_per_word = 8;
|
mps->bits_per_word = 8;
|
||||||
|
|
||||||
unmap_regs:
|
|
||||||
if (cdm)
|
|
||||||
iounmap(cdm);
|
|
||||||
if (gpio)
|
|
||||||
iounmap(gpio);
|
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -628,8 +555,9 @@ static int __exit mpc52xx_psc_spi_of_remove(struct of_device *op)
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct of_device_id mpc52xx_psc_spi_of_match[] = {
|
static struct of_device_id mpc52xx_psc_spi_of_match[] = {
|
||||||
{ .type = "spi", .compatible = "mpc5200-psc-spi", },
|
{ .compatible = "fsl,mpc5200-psc-spi", },
|
||||||
{},
|
{ .compatible = "mpc5200-psc-spi", }, /* old */
|
||||||
|
{}
|
||||||
};
|
};
|
||||||
|
|
||||||
MODULE_DEVICE_TABLE(of, mpc52xx_psc_spi_of_match);
|
MODULE_DEVICE_TABLE(of, mpc52xx_psc_spi_of_match);
|
||||||
|
|
|
@ -136,6 +136,8 @@ ohci_hcd_ppc_of_probe(struct of_device *op, const struct of_device_id *match)
|
||||||
ohci = hcd_to_ohci(hcd);
|
ohci = hcd_to_ohci(hcd);
|
||||||
if (is_bigendian) {
|
if (is_bigendian) {
|
||||||
ohci->flags |= OHCI_QUIRK_BE_MMIO | OHCI_QUIRK_BE_DESC;
|
ohci->flags |= OHCI_QUIRK_BE_MMIO | OHCI_QUIRK_BE_DESC;
|
||||||
|
if (of_device_is_compatible(dn, "fsl,mpc5200-ohci"))
|
||||||
|
ohci->flags |= OHCI_QUIRK_FRAME_NO;
|
||||||
if (of_device_is_compatible(dn, "mpc5200-ohci"))
|
if (of_device_is_compatible(dn, "mpc5200-ohci"))
|
||||||
ohci->flags |= OHCI_QUIRK_FRAME_NO;
|
ohci->flags |= OHCI_QUIRK_FRAME_NO;
|
||||||
}
|
}
|
||||||
|
|
|
@ -248,13 +248,19 @@ struct mpc52xx_cdm {
|
||||||
|
|
||||||
#ifndef __ASSEMBLY__
|
#ifndef __ASSEMBLY__
|
||||||
|
|
||||||
|
/* mpc52xx_common.c */
|
||||||
extern unsigned int mpc52xx_find_ipb_freq(struct device_node *node);
|
extern unsigned int mpc52xx_find_ipb_freq(struct device_node *node);
|
||||||
extern void mpc5200_setup_xlb_arbiter(void);
|
extern void mpc5200_setup_xlb_arbiter(void);
|
||||||
extern void mpc52xx_declare_of_platform_devices(void);
|
extern void mpc52xx_declare_of_platform_devices(void);
|
||||||
|
extern void mpc52xx_map_common_devices(void);
|
||||||
|
extern int mpc52xx_set_psc_clkdiv(int psc_id, int clkdiv);
|
||||||
|
extern void mpc52xx_restart(char *cmd);
|
||||||
|
|
||||||
|
/* mpc52xx_pic.c */
|
||||||
extern void mpc52xx_init_irq(void);
|
extern void mpc52xx_init_irq(void);
|
||||||
extern unsigned int mpc52xx_get_irq(void);
|
extern unsigned int mpc52xx_get_irq(void);
|
||||||
|
|
||||||
|
/* mpc52xx_pci.c */
|
||||||
#ifdef CONFIG_PCI
|
#ifdef CONFIG_PCI
|
||||||
extern int __init mpc52xx_add_bridge(struct device_node *node);
|
extern int __init mpc52xx_add_bridge(struct device_node *node);
|
||||||
extern void __init mpc52xx_setup_pci(void);
|
extern void __init mpc52xx_setup_pci(void);
|
||||||
|
@ -262,9 +268,6 @@ extern void __init mpc52xx_setup_pci(void);
|
||||||
static inline void mpc52xx_setup_pci(void) { }
|
static inline void mpc52xx_setup_pci(void) { }
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
extern void __init mpc52xx_map_wdt(void);
|
|
||||||
extern void mpc52xx_restart(char *cmd);
|
|
||||||
|
|
||||||
#endif /* __ASSEMBLY__ */
|
#endif /* __ASSEMBLY__ */
|
||||||
|
|
||||||
#ifdef CONFIG_PM
|
#ifdef CONFIG_PM
|
||||||
|
|
Загрузка…
Ссылка в новой задаче