diff options
author | Dmitry Baryshkov <dbaryshkov@gmail.com> | 2010-06-10 21:52:35 -0400 |
---|---|---|
committer | Grant Likely <grant.likely@secretlab.ca> | 2010-06-15 16:47:04 -0400 |
commit | fb73538e10c7fc4823a56e97bba600c2f9294012 (patch) | |
tree | 4b3766db5c91161d90ae0a0a33fb6293f52109f7 /arch | |
parent | a2c9a603c72be0d9a0780f196bff53ab0d517347 (diff) |
powerpc/5200: fix oops during going to standby
When going to standby mode mpc code maps the whole soc5200 node
to access warious MBAR registers. However as of_iomap uses 'reg'
property of device node, only small part of MBAR is getting mapped.
Thus pm code gets oops when trying to access high parts of MBAR.
As a way to overcome this, make mpc52xx_pm_prepare() explicitly
map whole MBAR (0xc0000).
Signed-off-by: Dmitry Eremin-Solenikov <dbaryshkov@gmail.com>
Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/powerpc/platforms/52xx/mpc52xx_pm.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/arch/powerpc/platforms/52xx/mpc52xx_pm.c b/arch/powerpc/platforms/52xx/mpc52xx_pm.c index a55b0b6813ed..76722532bd95 100644 --- a/arch/powerpc/platforms/52xx/mpc52xx_pm.c +++ b/arch/powerpc/platforms/52xx/mpc52xx_pm.c | |||
@@ -64,10 +64,19 @@ int mpc52xx_pm_prepare(void) | |||
64 | { .type = "builtin", .compatible = "mpc5200", }, /* efika */ | 64 | { .type = "builtin", .compatible = "mpc5200", }, /* efika */ |
65 | {} | 65 | {} |
66 | }; | 66 | }; |
67 | struct resource res; | ||
67 | 68 | ||
68 | /* map the whole register space */ | 69 | /* map the whole register space */ |
69 | np = of_find_matching_node(NULL, immr_ids); | 70 | np = of_find_matching_node(NULL, immr_ids); |
70 | mbar = of_iomap(np, 0); | 71 | |
72 | if (of_address_to_resource(np, 0, &res)) { | ||
73 | pr_err("mpc52xx_pm_prepare(): could not get IMMR address\n"); | ||
74 | of_node_put(np); | ||
75 | return -ENOSYS; | ||
76 | } | ||
77 | |||
78 | mbar = ioremap(res.start, 0xc000); /* we should map whole region including SRAM */ | ||
79 | |||
71 | of_node_put(np); | 80 | of_node_put(np); |
72 | if (!mbar) { | 81 | if (!mbar) { |
73 | pr_err("mpc52xx_pm_prepare(): could not map registers\n"); | 82 | pr_err("mpc52xx_pm_prepare(): could not map registers\n"); |