]> pilppa.com Git - linux-2.6-omap-h63xx.git/commitdiff
SRAM patcher: convert omap24xx_sram_suspend to use runtime SRAM patcher
authorPaul Walmsley <paul@pwsan.com>
Wed, 14 Nov 2007 08:30:12 +0000 (01:30 -0700)
committerTony Lindgren <tony@atomide.com>
Fri, 16 Nov 2007 22:30:57 +0000 (14:30 -0800)
Use the runtime SRAM patcher to set register addresses in
omap24xx_sram_suspend.  The long symbol names are intended to help
disambiguate the symbols, now that they are global.

Signed-off-by: Paul Walmsley <paul@pwsan.com>
Signed-off-by: Tony Lindgren <tony@atomide.com>
arch/arm/mach-omap2/pm.c
arch/arm/mach-omap2/sleep.S

index a7723349a29062c920e9a43053d4f9e79309d1ab..16df6d7b565dbf9f350f54a4a57adcbde75c78d7 100644 (file)
 #include "cm_regbits_24xx.h"
 #include "sdrc.h"
 
+/* These addrs are in assembly language code to be patched at runtime */
+extern void *omap2_ocs_sdrc_power;
+extern void *omap2_ocs_sdrc_dlla_ctrl;
+
 static void (*omap2_sram_idle)(void);
 static void (*omap2_sram_suspend)(void __iomem *dllctrl);
 static void (*saved_idle)(void);
@@ -803,9 +807,18 @@ int __init omap2_pm_init(void)
         */
        omap2_sram_idle = omap_sram_push(omap24xx_idle_loop_suspend,
                                         omap24xx_idle_loop_suspend_sz);
+
        omap2_sram_suspend = omap_sram_push(omap24xx_cpu_suspend,
                                            omap24xx_cpu_suspend_sz);
 
+       /* Patch in the correct register addresses for multiboot */
+       omap_sram_patch_va(omap24xx_cpu_suspend, &omap2_ocs_sdrc_power,
+                          omap2_sram_suspend,
+                          OMAP_SDRC_REGADDR(SDRC_POWER));
+       omap_sram_patch_va(omap24xx_cpu_suspend, &omap2_ocs_sdrc_dlla_ctrl,
+                          omap2_sram_suspend,
+                          OMAP_SDRC_REGADDR(SDRC_DLLA_CTRL));
+
        suspend_set_ops(&omap_pm_ops);
        pm_idle = omap2_pm_idle;
 
index bf4d62399765873577452fd78c1b5c6ece38a08a..3e0a7dcc21c1577257d15a9a663fcf1c7e0a3d25 100644 (file)
  */
 
 #include <linux/linkage.h>
+#include <linux/poison.h>      /* for SRAM_VA_MAGIC */
 #include <asm/assembler.h>
 #include <asm/arch/io.h>
 #include <asm/arch/pm.h>
 
 #include <asm/arch/omap24xx.h>
 
-#define A_SDRC_DLLA_CTRL_V     IO_ADDRESS(OMAP2_SDRC_BASE + 0x60)
-#define        A_SDRC_POWER_V          IO_ADDRESS(OMAP2_SDRC_BASE + 0x70)
-#define A_SDRC_RFR_CTRL_V      IO_ADDRESS(OMAP2_SDRC_BASE + 0xA4)
+/* First address of reserved address space?  apparently valid for OMAP2 & 3 */
 #define A_SDRC0_V              (0xC0000000)
-#define A_SDRC_MANUAL_V                IO_ADDRESS(OMAP2_SDRC_BASE + 0xA8)
 
        .text
 
@@ -88,7 +86,7 @@ ENTRY(omap24xx_cpu_suspend)
        mcr     p15, 0, r3, c7, c10, 4  @ memory barrier, hope SDR/DDR finished
        nop
        nop
-       ldr     r3, A_SDRC_POWER        @ addr of sdrc power
+       ldr     r3, omap2_ocs_sdrc_power        @ addr of sdrc power
        ldr     r4, [r3]                @ value of sdrc power
        orr     r4, r4, #0x40           @ enable self refresh on idle req
        mov     r5, #0x2000             @ set delay (DPLL relock + DLL relock)
@@ -108,7 +106,7 @@ loop:
        ldr     r4, [r4]
        nop                             @ start auto refresh only after clk ok
        movs    r0, r0                  @ see if DDR or SDR
-       ldrne   r1, A_SDRC_DLLA_CTRL_S  @ get addr of DLL ctrl
+       ldrne   r1, omap2_ocs_sdrc_dlla_ctrl    @ get addr of DLL ctrl
        strne   r0, [r1]                @ rewrite DLLA to force DLL reload
        addne   r1, r1, #0x8            @ move to DLLB
        strne   r0, [r1]                @ rewrite DLLB to force DLL reload
@@ -120,12 +118,15 @@ loop2:
        /* resume*/
        ldmfd   sp!, {r0 - r12, pc}     @ restore regs and return
 
-A_SDRC_POWER:
-       .word A_SDRC_POWER_V
+       .globl  omap2_ocs_sdrc_power
+       .globl  omap2_ocs_sdrc_dlla_ctrl
+
+omap2_ocs_sdrc_power:
+       .word SRAM_VA_MAGIC
 A_SDRC0:
        .word A_SDRC0_V
-A_SDRC_DLLA_CTRL_S:
-       .word A_SDRC_DLLA_CTRL_V
+omap2_ocs_sdrc_dlla_ctrl:
+       .word SRAM_VA_MAGIC
 
 ENTRY(omap24xx_cpu_suspend_sz)
        .word   . - omap24xx_cpu_suspend