diff options
Diffstat (limited to 'arch/powerpc')
-rw-r--r-- | arch/powerpc/platforms/85xx/deepsleep.c | 22 | ||||
-rw-r--r-- | arch/powerpc/platforms/85xx/sleep.S | 6 |
2 files changed, 22 insertions, 6 deletions
diff --git a/arch/powerpc/platforms/85xx/deepsleep.c b/arch/powerpc/platforms/85xx/deepsleep.c index 454c070..755be0b 100644 --- a/arch/powerpc/platforms/85xx/deepsleep.c +++ b/arch/powerpc/platforms/85xx/deepsleep.c @@ -83,6 +83,11 @@ int fsl_dp_iomap(void) int ret = 0; phys_addr_t ccsr_phy_addr, dcsr_phy_addr; + saved_law = NULL; + ccsr_base = NULL; + dcsr_base = NULL; + pld_base = NULL; + ccsr_phy_addr = get_immrbase(); if (ccsr_phy_addr == -1) { pr_err("%s: Can't get the address of CCSR\n", __func__); @@ -128,31 +133,33 @@ int fsl_dp_iomap(void) if (!np) { pr_err("%s: Can't find the node of \"law\"\n", __func__); ret = -EINVAL; - goto pld_err; + goto alloc_err; } ret = of_property_read_u32(np, "fsl,num-laws", &num_laws); if (ret) { ret = -EINVAL; - goto pld_err; + goto alloc_err; } saved_law = kzalloc(sizeof(*saved_law) * num_laws, GFP_KERNEL); if (!saved_law) { ret = -ENOMEM; - goto pld_err; + goto alloc_err; } of_node_put(np); return 0; +alloc_err: + iounmap(pld_base); + pld_base = NULL; pld_err: iounmap(dcsr_base); + dcsr_base = NULL; dcsr_err: iounmap(ccsr_base); -ccsr_err: ccsr_base = NULL; - dcsr_base = NULL; - pld_base = NULL; +ccsr_err: return ret; } @@ -172,6 +179,9 @@ void fsl_dp_iounmap(void) iounmap(pld_base); pld_base = NULL; } + + kfree(saved_law); + saved_law = NULL; } static void fsl_dp_ddr_save(void *ccsr_base) diff --git a/arch/powerpc/platforms/85xx/sleep.S b/arch/powerpc/platforms/85xx/sleep.S index 9c7c0f3..a6e89b7 100644 --- a/arch/powerpc/platforms/85xx/sleep.S +++ b/arch/powerpc/platforms/85xx/sleep.S @@ -892,6 +892,8 @@ deepsleep_start: PPC_STL r8, 8(r9) mfspr r8, SPRN_TCR PPC_STL r8, 16(r9) + mfcr r8 + PPC_STL r8, 24(r9) li r8, 0 mtspr SPRN_TCR, r8 @@ -1103,6 +1105,8 @@ _GLOBAL(fsl_booke_deep_sleep_resume) mtlr r4 lwz r4, 8(r3) mtmsr r4 + lwz r4, 24(r3) + mtcr r4 blr @@ -1155,6 +1159,8 @@ _GLOBAL(fsl_booke_deep_sleep_resume) mtlr r4 ld r4, 8(r3) mtmsr r4 + ld r4, 24(r3) + mtcr r4 blr |