aboutsummaryrefslogtreecommitdiffstats
path: root/arch/powerpc/platforms
diff options
context:
space:
mode:
Diffstat (limited to 'arch/powerpc/platforms')
-rw-r--r--arch/powerpc/platforms/52xx/Kconfig41
-rw-r--r--arch/powerpc/platforms/52xx/efika.c3
-rw-r--r--arch/powerpc/platforms/52xx/lite5200.c28
-rw-r--r--arch/powerpc/platforms/52xx/lite5200_pm.c9
-rw-r--r--arch/powerpc/platforms/52xx/mpc5200_simple.c6
-rw-r--r--arch/powerpc/platforms/52xx/mpc52xx_common.c117
-rw-r--r--arch/powerpc/platforms/52xx/mpc52xx_pci.c10
-rw-r--r--arch/powerpc/platforms/52xx/mpc52xx_pic.c16
-rw-r--r--arch/powerpc/platforms/52xx/mpc52xx_pm.c9
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 @@
1config PPC_MPC52xx 1config 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
7config PPC_MPC5200
8 bool
9 select PPC_MPC52xx
10 default n
11
12config 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
22config PPC_MPC5200_SIMPLE 7config 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
44config PPC_EFIKA 27config 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
53config PPC_LITE5200 34config 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
40config 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 */
36static struct of_device_id mpc5200_cdm_ids[] __initdata = {
37 { .compatible = "fsl,mpc5200-cdm", },
38 { .compatible = "mpc5200-cdm", },
39 {}
40};
41
42static 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)
43static int lite5200_pm_prepare(void) 43static 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 */
23static struct of_device_id mpc52xx_xlb_ids[] __initdata = {
24 { .compatible = "fsl,mpc5200-xlb", },
25 { .compatible = "mpc5200-xlb", },
26 {}
27};
28static 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 */
27static volatile struct mpc52xx_gpt *mpc52xx_wdt = NULL; 45static spinlock_t mpc52xx_lock = SPIN_LOCK_UNLOCKED;
46static struct mpc52xx_gpt __iomem *mpc52xx_wdt;
47static 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
91static 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
101void __init 116void __init
102mpc52xx_declare_of_platform_devices(void) 117mpc52xx_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 */
128static struct of_device_id mpc52xx_gpt_ids[] __initdata = {
129 { .compatible = "fsl,mpc5200-gpt", },
130 { .compatible = "mpc5200-gpt", }, /* old */
131 {}
132};
133static 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 */
110void __init 142void __init
111mpc52xx_map_wdt(void) 143mpc52xx_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 */
172int 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 */
139void 206void
140mpc52xx_restart(char *cmd) 207mpc52xx_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 */
103const 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 */
33static struct of_device_id mpc52xx_pic_ids[] __initdata = {
34 { .compatible = "fsl,mpc5200-pic", },
35 { .compatible = "mpc5200-pic", },
36 {}
37};
38static struct of_device_id mpc52xx_sdma_ids[] __initdata = {
39 { .compatible = "fsl,mpc5200-bestcomm", },
40 { .compatible = "mpc5200-bestcomm", },
41 {}
42};
43
32static struct mpc52xx_intr __iomem *intr; 44static struct mpc52xx_intr __iomem *intr;
33static struct mpc52xx_sdma __iomem *sdma; 45static struct mpc52xx_sdma __iomem *sdma;
34static struct irq_host *mpc52xx_irqhost = NULL; 46static 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)
60int mpc52xx_pm_prepare(void) 60int 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) {