diff options
Diffstat (limited to 'arch/powerpc/platforms')
-rw-r--r-- | arch/powerpc/platforms/52xx/Kconfig | 41 | ||||
-rw-r--r-- | arch/powerpc/platforms/52xx/efika.c | 3 | ||||
-rw-r--r-- | arch/powerpc/platforms/52xx/lite5200.c | 28 | ||||
-rw-r--r-- | arch/powerpc/platforms/52xx/lite5200_pm.c | 9 | ||||
-rw-r--r-- | arch/powerpc/platforms/52xx/mpc5200_simple.c | 6 | ||||
-rw-r--r-- | arch/powerpc/platforms/52xx/mpc52xx_common.c | 117 | ||||
-rw-r--r-- | arch/powerpc/platforms/52xx/mpc52xx_pci.c | 10 | ||||
-rw-r--r-- | arch/powerpc/platforms/52xx/mpc52xx_pic.c | 16 | ||||
-rw-r--r-- | arch/powerpc/platforms/52xx/mpc52xx_pm.c | 9 |
9 files changed, 170 insertions, 69 deletions
diff --git a/arch/powerpc/platforms/52xx/Kconfig b/arch/powerpc/platforms/52xx/Kconfig index 733a8063d400..515f244c90bb 100644 --- a/arch/powerpc/platforms/52xx/Kconfig +++ b/arch/powerpc/platforms/52xx/Kconfig | |||
@@ -1,31 +1,14 @@ | |||
1 | config PPC_MPC52xx | 1 | config PPC_MPC52xx |
2 | bool | 2 | bool "52xx-based boards" |
3 | depends on PPC_MULTIPLATFORM && PPC32 | ||
3 | select FSL_SOC | 4 | select FSL_SOC |
4 | select PPC_CLOCK | 5 | select PPC_CLOCK |
5 | default n | ||
6 | |||
7 | config PPC_MPC5200 | ||
8 | bool | ||
9 | select PPC_MPC52xx | ||
10 | default n | ||
11 | |||
12 | config PPC_MPC5200_BUGFIX | ||
13 | bool "MPC5200 (L25R) bugfix support" | ||
14 | depends on PPC_MPC5200 | ||
15 | default n | ||
16 | help | ||
17 | Enable workarounds for original MPC5200 errata. This is not required | ||
18 | for MPC5200B based boards. | ||
19 | |||
20 | It is safe to say 'Y' here | ||
21 | 6 | ||
22 | config PPC_MPC5200_SIMPLE | 7 | config PPC_MPC5200_SIMPLE |
23 | bool "Generic support for simple MPC5200 based boards" | 8 | bool "Generic support for simple MPC5200 based boards" |
24 | depends on PPC_MULTIPLATFORM && PPC32 | 9 | depends on PPC_MPC52xx |
25 | select PPC_MPC5200 | ||
26 | select DEFAULT_UIMAGE | 10 | select DEFAULT_UIMAGE |
27 | select WANT_DEVICE_TREE | 11 | select WANT_DEVICE_TREE |
28 | default n | ||
29 | help | 12 | help |
30 | This option enables support for a simple MPC52xx based boards which | 13 | This option enables support for a simple MPC52xx based boards which |
31 | do not need a custom platform specific setup. Such boards are | 14 | do not need a custom platform specific setup. Such boards are |
@@ -43,17 +26,23 @@ config PPC_MPC5200_SIMPLE | |||
43 | 26 | ||
44 | config PPC_EFIKA | 27 | config PPC_EFIKA |
45 | bool "bPlan Efika 5k2. MPC5200B based computer" | 28 | bool "bPlan Efika 5k2. MPC5200B based computer" |
46 | depends on PPC_MULTIPLATFORM && PPC32 | 29 | depends on PPC_MPC52xx |
47 | select PPC_RTAS | 30 | select PPC_RTAS |
48 | select RTAS_PROC | 31 | select RTAS_PROC |
49 | select PPC_MPC52xx | ||
50 | select PPC_NATIVE | 32 | select PPC_NATIVE |
51 | default n | ||
52 | 33 | ||
53 | config PPC_LITE5200 | 34 | config PPC_LITE5200 |
54 | bool "Freescale Lite5200 Eval Board" | 35 | bool "Freescale Lite5200 Eval Board" |
55 | depends on PPC_MULTIPLATFORM && PPC32 | 36 | depends on PPC_MPC52xx |
56 | select PPC_MPC5200 | ||
57 | select DEFAULT_UIMAGE | 37 | select DEFAULT_UIMAGE |
58 | select WANT_DEVICE_TREE | 38 | select WANT_DEVICE_TREE |
59 | default n | 39 | |
40 | config PPC_MPC5200_BUGFIX | ||
41 | bool "MPC5200 (L25R) bugfix support" | ||
42 | depends on PPC_MPC52xx | ||
43 | help | ||
44 | Enable workarounds for original MPC5200 errata. This is not required | ||
45 | for MPC5200B based boards. | ||
46 | |||
47 | It is safe to say 'Y' here | ||
48 | |||
diff --git a/arch/powerpc/platforms/52xx/efika.c b/arch/powerpc/platforms/52xx/efika.c index a0da70c8b502..a2068faef6ea 100644 --- a/arch/powerpc/platforms/52xx/efika.c +++ b/arch/powerpc/platforms/52xx/efika.c | |||
@@ -180,6 +180,9 @@ static void __init efika_setup_arch(void) | |||
180 | { | 180 | { |
181 | rtas_initialize(); | 181 | rtas_initialize(); |
182 | 182 | ||
183 | /* Map important registers from the internal memory map */ | ||
184 | mpc52xx_map_common_devices(); | ||
185 | |||
183 | efika_pcisetup(); | 186 | efika_pcisetup(); |
184 | 187 | ||
185 | #ifdef CONFIG_PM | 188 | #ifdef CONFIG_PM |
diff --git a/arch/powerpc/platforms/52xx/lite5200.c b/arch/powerpc/platforms/52xx/lite5200.c index 5a8d190f53e4..956f459e175c 100644 --- a/arch/powerpc/platforms/52xx/lite5200.c +++ b/arch/powerpc/platforms/52xx/lite5200.c | |||
@@ -32,6 +32,19 @@ | |||
32 | * | 32 | * |
33 | */ | 33 | */ |
34 | 34 | ||
35 | /* mpc5200 device tree match tables */ | ||
36 | static struct of_device_id mpc5200_cdm_ids[] __initdata = { | ||
37 | { .compatible = "fsl,mpc5200-cdm", }, | ||
38 | { .compatible = "mpc5200-cdm", }, | ||
39 | {} | ||
40 | }; | ||
41 | |||
42 | static struct of_device_id mpc5200_gpio_ids[] __initdata = { | ||
43 | { .compatible = "fsl,mpc5200-gpio", }, | ||
44 | { .compatible = "mpc5200-gpio", }, | ||
45 | {} | ||
46 | }; | ||
47 | |||
35 | /* | 48 | /* |
36 | * Fix clock configuration. | 49 | * Fix clock configuration. |
37 | * | 50 | * |
@@ -44,9 +57,8 @@ lite5200_fix_clock_config(void) | |||
44 | { | 57 | { |
45 | struct device_node *np; | 58 | struct device_node *np; |
46 | struct mpc52xx_cdm __iomem *cdm; | 59 | struct mpc52xx_cdm __iomem *cdm; |
47 | |||
48 | /* Map zones */ | 60 | /* Map zones */ |
49 | np = of_find_compatible_node(NULL, NULL, "mpc5200-cdm"); | 61 | np = of_find_matching_node(NULL, mpc5200_cdm_ids); |
50 | cdm = of_iomap(np, 0); | 62 | cdm = of_iomap(np, 0); |
51 | of_node_put(np); | 63 | of_node_put(np); |
52 | if (!cdm) { | 64 | if (!cdm) { |
@@ -81,7 +93,7 @@ lite5200_fix_port_config(void) | |||
81 | struct mpc52xx_gpio __iomem *gpio; | 93 | struct mpc52xx_gpio __iomem *gpio; |
82 | u32 port_config; | 94 | u32 port_config; |
83 | 95 | ||
84 | np = of_find_compatible_node(NULL, NULL, "mpc5200-gpio"); | 96 | np = of_find_matching_node(NULL, mpc5200_gpio_ids); |
85 | gpio = of_iomap(np, 0); | 97 | gpio = of_iomap(np, 0); |
86 | of_node_put(np); | 98 | of_node_put(np); |
87 | if (!gpio) { | 99 | if (!gpio) { |
@@ -140,15 +152,15 @@ static void __init lite5200_setup_arch(void) | |||
140 | if (ppc_md.progress) | 152 | if (ppc_md.progress) |
141 | ppc_md.progress("lite5200_setup_arch()", 0); | 153 | ppc_md.progress("lite5200_setup_arch()", 0); |
142 | 154 | ||
143 | /* Fix things that firmware should have done. */ | 155 | /* Map important registers from the internal memory map */ |
144 | lite5200_fix_clock_config(); | 156 | mpc52xx_map_common_devices(); |
145 | lite5200_fix_port_config(); | ||
146 | 157 | ||
147 | /* Some mpc5200 & mpc5200b related configuration */ | 158 | /* Some mpc5200 & mpc5200b related configuration */ |
148 | mpc5200_setup_xlb_arbiter(); | 159 | mpc5200_setup_xlb_arbiter(); |
149 | 160 | ||
150 | /* Map wdt for mpc52xx_restart() */ | 161 | /* Fix things that firmware should have done. */ |
151 | mpc52xx_map_wdt(); | 162 | lite5200_fix_clock_config(); |
163 | lite5200_fix_port_config(); | ||
152 | 164 | ||
153 | #ifdef CONFIG_PM | 165 | #ifdef CONFIG_PM |
154 | mpc52xx_suspend.board_suspend_prepare = lite5200_suspend_prepare; | 166 | mpc52xx_suspend.board_suspend_prepare = lite5200_suspend_prepare; |
diff --git a/arch/powerpc/platforms/52xx/lite5200_pm.c b/arch/powerpc/platforms/52xx/lite5200_pm.c index c3ada1e340d2..c0f13e8deb0b 100644 --- a/arch/powerpc/platforms/52xx/lite5200_pm.c +++ b/arch/powerpc/platforms/52xx/lite5200_pm.c | |||
@@ -43,6 +43,13 @@ static int lite5200_pm_set_target(suspend_state_t state) | |||
43 | static int lite5200_pm_prepare(void) | 43 | static int lite5200_pm_prepare(void) |
44 | { | 44 | { |
45 | struct device_node *np; | 45 | struct device_node *np; |
46 | const struct of_device_id immr_ids[] = { | ||
47 | { .compatible = "fsl,mpc5200-immr", }, | ||
48 | { .compatible = "fsl,mpc5200b-immr", }, | ||
49 | { .type = "soc", .compatible = "mpc5200", }, /* lite5200 */ | ||
50 | { .type = "builtin", .compatible = "mpc5200", }, /* efika */ | ||
51 | {} | ||
52 | }; | ||
46 | 53 | ||
47 | /* deep sleep? let mpc52xx code handle that */ | 54 | /* deep sleep? let mpc52xx code handle that */ |
48 | if (lite5200_pm_target_state == PM_SUSPEND_STANDBY) | 55 | if (lite5200_pm_target_state == PM_SUSPEND_STANDBY) |
@@ -52,7 +59,7 @@ static int lite5200_pm_prepare(void) | |||
52 | return -EINVAL; | 59 | return -EINVAL; |
53 | 60 | ||
54 | /* map registers */ | 61 | /* map registers */ |
55 | np = of_find_compatible_node(NULL, NULL, "mpc5200"); | 62 | np = of_find_matching_node(NULL, immr_ids); |
56 | mbar = of_iomap(np, 0); | 63 | mbar = of_iomap(np, 0); |
57 | of_node_put(np); | 64 | of_node_put(np); |
58 | if (!mbar) { | 65 | if (!mbar) { |
diff --git a/arch/powerpc/platforms/52xx/mpc5200_simple.c b/arch/powerpc/platforms/52xx/mpc5200_simple.c index 754aa932f595..c48b82bc2aad 100644 --- a/arch/powerpc/platforms/52xx/mpc5200_simple.c +++ b/arch/powerpc/platforms/52xx/mpc5200_simple.c | |||
@@ -39,12 +39,12 @@ static void __init mpc5200_simple_setup_arch(void) | |||
39 | if (ppc_md.progress) | 39 | if (ppc_md.progress) |
40 | ppc_md.progress("mpc5200_simple_setup_arch()", 0); | 40 | ppc_md.progress("mpc5200_simple_setup_arch()", 0); |
41 | 41 | ||
42 | /* Map important registers from the internal memory map */ | ||
43 | mpc52xx_map_common_devices(); | ||
44 | |||
42 | /* Some mpc5200 & mpc5200b related configuration */ | 45 | /* Some mpc5200 & mpc5200b related configuration */ |
43 | mpc5200_setup_xlb_arbiter(); | 46 | mpc5200_setup_xlb_arbiter(); |
44 | 47 | ||
45 | /* Map wdt for mpc52xx_restart() */ | ||
46 | mpc52xx_map_wdt(); | ||
47 | |||
48 | mpc52xx_setup_pci(); | 48 | mpc52xx_setup_pci(); |
49 | } | 49 | } |
50 | 50 | ||
diff --git a/arch/powerpc/platforms/52xx/mpc52xx_common.c b/arch/powerpc/platforms/52xx/mpc52xx_common.c index 66955937be2a..9aa4425d80b2 100644 --- a/arch/powerpc/platforms/52xx/mpc52xx_common.c +++ b/arch/powerpc/platforms/52xx/mpc52xx_common.c | |||
@@ -13,18 +13,38 @@ | |||
13 | #undef DEBUG | 13 | #undef DEBUG |
14 | 14 | ||
15 | #include <linux/kernel.h> | 15 | #include <linux/kernel.h> |
16 | #include <linux/spinlock.h> | ||
16 | #include <linux/of_platform.h> | 17 | #include <linux/of_platform.h> |
17 | #include <asm/io.h> | 18 | #include <asm/io.h> |
18 | #include <asm/prom.h> | 19 | #include <asm/prom.h> |
19 | #include <asm/mpc52xx.h> | 20 | #include <asm/mpc52xx.h> |
20 | 21 | ||
22 | /* MPC5200 device tree match tables */ | ||
23 | static struct of_device_id mpc52xx_xlb_ids[] __initdata = { | ||
24 | { .compatible = "fsl,mpc5200-xlb", }, | ||
25 | { .compatible = "mpc5200-xlb", }, | ||
26 | {} | ||
27 | }; | ||
28 | static struct of_device_id mpc52xx_bus_ids[] __initdata = { | ||
29 | { .compatible = "fsl,mpc5200-immr", }, | ||
30 | { .compatible = "fsl,mpc5200b-immr", }, | ||
31 | { .compatible = "fsl,lpb", }, | ||
32 | |||
33 | /* depreciated matches; shouldn't be used in new device trees */ | ||
34 | { .type = "builtin", .compatible = "mpc5200", }, /* efika */ | ||
35 | { .type = "soc", .compatible = "mpc5200", }, /* lite5200 */ | ||
36 | {} | ||
37 | }; | ||
38 | |||
21 | /* | 39 | /* |
22 | * This variable is mapped in mpc52xx_map_wdt() and used in mpc52xx_restart(). | 40 | * This variable is mapped in mpc52xx_map_wdt() and used in mpc52xx_restart(). |
23 | * Permanent mapping is required because mpc52xx_restart() can be called | 41 | * Permanent mapping is required because mpc52xx_restart() can be called |
24 | * from interrupt context while node mapping (which calls ioremap()) | 42 | * from interrupt context while node mapping (which calls ioremap()) |
25 | * cannot be used at such point. | 43 | * cannot be used at such point. |
26 | */ | 44 | */ |
27 | static volatile struct mpc52xx_gpt *mpc52xx_wdt = NULL; | 45 | static spinlock_t mpc52xx_lock = SPIN_LOCK_UNLOCKED; |
46 | static struct mpc52xx_gpt __iomem *mpc52xx_wdt; | ||
47 | static struct mpc52xx_cdm __iomem *mpc52xx_cdm; | ||
28 | 48 | ||
29 | /** | 49 | /** |
30 | * mpc52xx_find_ipb_freq - Find the IPB bus frequency for a device | 50 | * mpc52xx_find_ipb_freq - Find the IPB bus frequency for a device |
@@ -65,7 +85,7 @@ mpc5200_setup_xlb_arbiter(void) | |||
65 | struct device_node *np; | 85 | struct device_node *np; |
66 | struct mpc52xx_xlb __iomem *xlb; | 86 | struct mpc52xx_xlb __iomem *xlb; |
67 | 87 | ||
68 | np = of_find_compatible_node(NULL, NULL, "mpc5200-xlb"); | 88 | np = of_find_matching_node(NULL, mpc52xx_xlb_ids); |
69 | xlb = of_iomap(np, 0); | 89 | xlb = of_iomap(np, 0); |
70 | of_node_put(np); | 90 | of_node_put(np); |
71 | if (!xlb) { | 91 | if (!xlb) { |
@@ -88,16 +108,11 @@ mpc5200_setup_xlb_arbiter(void) | |||
88 | iounmap(xlb); | 108 | iounmap(xlb); |
89 | } | 109 | } |
90 | 110 | ||
91 | static struct of_device_id mpc52xx_bus_ids[] __initdata= { | 111 | /** |
92 | { .compatible = "fsl,mpc5200-immr", }, | 112 | * mpc52xx_declare_of_platform_devices: register internal devices and children |
93 | { .compatible = "fsl,lpb", }, | 113 | * of the localplus bus to the of_platform |
94 | 114 | * bus. | |
95 | /* depreciated matches; shouldn't be used in new device trees */ | 115 | */ |
96 | { .type = "builtin", .compatible = "mpc5200", }, /* efika */ | ||
97 | { .type = "soc", .compatible = "mpc5200", }, /* lite5200 */ | ||
98 | {}, | ||
99 | }; | ||
100 | |||
101 | void __init | 116 | void __init |
102 | mpc52xx_declare_of_platform_devices(void) | 117 | mpc52xx_declare_of_platform_devices(void) |
103 | { | 118 | { |
@@ -107,35 +122,87 @@ mpc52xx_declare_of_platform_devices(void) | |||
107 | "Error while probing of_platform bus\n"); | 122 | "Error while probing of_platform bus\n"); |
108 | } | 123 | } |
109 | 124 | ||
125 | /* | ||
126 | * match tables used by mpc52xx_map_common_devices() | ||
127 | */ | ||
128 | static struct of_device_id mpc52xx_gpt_ids[] __initdata = { | ||
129 | { .compatible = "fsl,mpc5200-gpt", }, | ||
130 | { .compatible = "mpc5200-gpt", }, /* old */ | ||
131 | {} | ||
132 | }; | ||
133 | static struct of_device_id mpc52xx_cdm_ids[] __initdata = { | ||
134 | { .compatible = "fsl,mpc5200-cdm", }, | ||
135 | { .compatible = "mpc5200-cdm", }, /* old */ | ||
136 | {} | ||
137 | }; | ||
138 | |||
139 | /** | ||
140 | * mpc52xx_map_common_devices: iomap devices required by common code | ||
141 | */ | ||
110 | void __init | 142 | void __init |
111 | mpc52xx_map_wdt(void) | 143 | mpc52xx_map_common_devices(void) |
112 | { | 144 | { |
113 | const void *has_wdt; | ||
114 | struct device_node *np; | 145 | struct device_node *np; |
115 | 146 | ||
116 | /* mpc52xx_wdt is mapped here and used in mpc52xx_restart, | 147 | /* mpc52xx_wdt is mapped here and used in mpc52xx_restart, |
117 | * possibly from a interrupt context. wdt is only implement | 148 | * possibly from a interrupt context. wdt is only implement |
118 | * on a gpt0, so check has-wdt property before mapping. | 149 | * on a gpt0, so check has-wdt property before mapping. |
119 | */ | 150 | */ |
120 | for_each_compatible_node(np, NULL, "fsl,mpc5200-gpt") { | 151 | for_each_matching_node(np, mpc52xx_gpt_ids) { |
121 | has_wdt = of_get_property(np, "fsl,has-wdt", NULL); | 152 | if (of_get_property(np, "fsl,has-wdt", NULL) || |
122 | if (has_wdt) { | 153 | of_get_property(np, "has-wdt", NULL)) { |
123 | mpc52xx_wdt = of_iomap(np, 0); | 154 | mpc52xx_wdt = of_iomap(np, 0); |
124 | of_node_put(np); | 155 | of_node_put(np); |
125 | return; | 156 | break; |
126 | } | 157 | } |
127 | } | 158 | } |
128 | for_each_compatible_node(np, NULL, "mpc5200-gpt") { | ||
129 | has_wdt = of_get_property(np, "has-wdt", NULL); | ||
130 | if (has_wdt) { | ||
131 | mpc52xx_wdt = of_iomap(np, 0); | ||
132 | of_node_put(np); | ||
133 | return; | ||
134 | } | ||
135 | 159 | ||
160 | /* Clock Distribution Module, used by PSC clock setting function */ | ||
161 | np = of_find_matching_node(NULL, mpc52xx_cdm_ids); | ||
162 | mpc52xx_cdm = of_iomap(np, 0); | ||
163 | of_node_put(np); | ||
164 | } | ||
165 | |||
166 | /** | ||
167 | * mpc52xx_set_psc_clkdiv: Set clock divider in the CDM for PSC ports | ||
168 | * | ||
169 | * @psc_id: id of psc port; must be 1,2,3 or 6 | ||
170 | * @clkdiv: clock divider value to put into CDM PSC register. | ||
171 | */ | ||
172 | int mpc52xx_set_psc_clkdiv(int psc_id, int clkdiv) | ||
173 | { | ||
174 | unsigned long flags; | ||
175 | u16 __iomem *reg; | ||
176 | u32 val; | ||
177 | u32 mask; | ||
178 | u32 mclken_div; | ||
179 | |||
180 | if (!mpc52xx_cdm) | ||
181 | return -ENODEV; | ||
182 | |||
183 | mclken_div = 0x8000 | (clkdiv & 0x1FF); | ||
184 | switch (psc_id) { | ||
185 | case 1: reg = &mpc52xx_cdm->mclken_div_psc1; mask = 0x20; break; | ||
186 | case 2: reg = &mpc52xx_cdm->mclken_div_psc2; mask = 0x40; break; | ||
187 | case 3: reg = &mpc52xx_cdm->mclken_div_psc3; mask = 0x80; break; | ||
188 | case 6: reg = &mpc52xx_cdm->mclken_div_psc6; mask = 0x10; break; | ||
189 | default: | ||
190 | return -ENODEV; | ||
136 | } | 191 | } |
192 | |||
193 | /* Set the rate and enable the clock */ | ||
194 | spin_lock_irqsave(&mpc52xx_lock, flags); | ||
195 | out_be16(reg, mclken_div); | ||
196 | val = in_be32(&mpc52xx_cdm->clk_enables); | ||
197 | out_be32(&mpc52xx_cdm->clk_enables, val | mask); | ||
198 | spin_unlock_irqrestore(&mpc52xx_lock, flags); | ||
199 | |||
200 | return 0; | ||
137 | } | 201 | } |
138 | 202 | ||
203 | /** | ||
204 | * mpc52xx_restart: ppc_md->restart hook for mpc5200 using the watchdog timer | ||
205 | */ | ||
139 | void | 206 | void |
140 | mpc52xx_restart(char *cmd) | 207 | mpc52xx_restart(char *cmd) |
141 | { | 208 | { |
diff --git a/arch/powerpc/platforms/52xx/mpc52xx_pci.c b/arch/powerpc/platforms/52xx/mpc52xx_pci.c index 4b79398b2e40..e3428ddd9040 100644 --- a/arch/powerpc/platforms/52xx/mpc52xx_pci.c +++ b/arch/powerpc/platforms/52xx/mpc52xx_pci.c | |||
@@ -99,6 +99,12 @@ struct mpc52xx_pci { | |||
99 | u8 reserved6[4]; /* PCI + 0xFC */ | 99 | u8 reserved6[4]; /* PCI + 0xFC */ |
100 | }; | 100 | }; |
101 | 101 | ||
102 | /* MPC5200 device tree match tables */ | ||
103 | const struct of_device_id mpc52xx_pci_ids[] __initdata = { | ||
104 | { .type = "pci", .compatible = "fsl,mpc5200-pci", }, | ||
105 | { .type = "pci", .compatible = "mpc5200-pci", }, | ||
106 | {} | ||
107 | }; | ||
102 | 108 | ||
103 | /* ======================================================================== */ | 109 | /* ======================================================================== */ |
104 | /* PCI configuration acess */ | 110 | /* PCI configuration acess */ |
@@ -411,9 +417,7 @@ void __init mpc52xx_setup_pci(void) | |||
411 | { | 417 | { |
412 | struct device_node *pci; | 418 | struct device_node *pci; |
413 | 419 | ||
414 | pci = of_find_compatible_node(NULL, NULL, "fsl,mpc5200-pci"); | 420 | pci = of_find_matching_node(NULL, mpc52xx_pci_ids); |
415 | if (!pci) | ||
416 | pci = of_find_compatible_node(NULL, NULL, "mpc5200-pci"); | ||
417 | if (!pci) | 421 | if (!pci) |
418 | return; | 422 | return; |
419 | 423 | ||
diff --git a/arch/powerpc/platforms/52xx/mpc52xx_pic.c b/arch/powerpc/platforms/52xx/mpc52xx_pic.c index 07e89876d582..d0dead8b9a95 100644 --- a/arch/powerpc/platforms/52xx/mpc52xx_pic.c +++ b/arch/powerpc/platforms/52xx/mpc52xx_pic.c | |||
@@ -29,6 +29,18 @@ | |||
29 | * | 29 | * |
30 | */ | 30 | */ |
31 | 31 | ||
32 | /* MPC5200 device tree match tables */ | ||
33 | static struct of_device_id mpc52xx_pic_ids[] __initdata = { | ||
34 | { .compatible = "fsl,mpc5200-pic", }, | ||
35 | { .compatible = "mpc5200-pic", }, | ||
36 | {} | ||
37 | }; | ||
38 | static struct of_device_id mpc52xx_sdma_ids[] __initdata = { | ||
39 | { .compatible = "fsl,mpc5200-bestcomm", }, | ||
40 | { .compatible = "mpc5200-bestcomm", }, | ||
41 | {} | ||
42 | }; | ||
43 | |||
32 | static struct mpc52xx_intr __iomem *intr; | 44 | static struct mpc52xx_intr __iomem *intr; |
33 | static struct mpc52xx_sdma __iomem *sdma; | 45 | static struct mpc52xx_sdma __iomem *sdma; |
34 | static struct irq_host *mpc52xx_irqhost = NULL; | 46 | static struct irq_host *mpc52xx_irqhost = NULL; |
@@ -367,13 +379,13 @@ void __init mpc52xx_init_irq(void) | |||
367 | struct device_node *np; | 379 | struct device_node *np; |
368 | 380 | ||
369 | /* Remap the necessary zones */ | 381 | /* Remap the necessary zones */ |
370 | picnode = of_find_compatible_node(NULL, NULL, "mpc5200-pic"); | 382 | picnode = of_find_matching_node(NULL, mpc52xx_pic_ids); |
371 | intr = of_iomap(picnode, 0); | 383 | intr = of_iomap(picnode, 0); |
372 | if (!intr) | 384 | if (!intr) |
373 | panic(__FILE__ ": find_and_map failed on 'mpc5200-pic'. " | 385 | panic(__FILE__ ": find_and_map failed on 'mpc5200-pic'. " |
374 | "Check node !"); | 386 | "Check node !"); |
375 | 387 | ||
376 | np = of_find_compatible_node(NULL, NULL, "mpc5200-bestcomm"); | 388 | np = of_find_matching_node(NULL, mpc52xx_sdma_ids); |
377 | sdma = of_iomap(np, 0); | 389 | sdma = of_iomap(np, 0); |
378 | of_node_put(np); | 390 | of_node_put(np); |
379 | if (!sdma) | 391 | if (!sdma) |
diff --git a/arch/powerpc/platforms/52xx/mpc52xx_pm.c b/arch/powerpc/platforms/52xx/mpc52xx_pm.c index 52f027789c8f..c72d3304387f 100644 --- a/arch/powerpc/platforms/52xx/mpc52xx_pm.c +++ b/arch/powerpc/platforms/52xx/mpc52xx_pm.c | |||
@@ -60,9 +60,16 @@ int mpc52xx_set_wakeup_gpio(u8 pin, u8 level) | |||
60 | int mpc52xx_pm_prepare(void) | 60 | int mpc52xx_pm_prepare(void) |
61 | { | 61 | { |
62 | struct device_node *np; | 62 | struct device_node *np; |
63 | const struct of_device_id immr_ids[] = { | ||
64 | { .compatible = "fsl,mpc5200-immr", }, | ||
65 | { .compatible = "fsl,mpc5200b-immr", }, | ||
66 | { .type = "soc", .compatible = "mpc5200", }, /* lite5200 */ | ||
67 | { .type = "builtin", .compatible = "mpc5200", }, /* efika */ | ||
68 | {} | ||
69 | }; | ||
63 | 70 | ||
64 | /* map the whole register space */ | 71 | /* map the whole register space */ |
65 | np = of_find_compatible_node(NULL, NULL, "mpc5200"); | 72 | np = of_find_matching_node(NULL, immr_ids); |
66 | mbar = of_iomap(np, 0); | 73 | mbar = of_iomap(np, 0); |
67 | of_node_put(np); | 74 | of_node_put(np); |
68 | if (!mbar) { | 75 | if (!mbar) { |