linux-ti33x-psp 3.2: backport PM and USB fixes from PSP
[glsdk/meta-ti-glsdk.git] / recipes-kernel / linux / linux-ti33x-psp-3.2 / psp / 0007-ARM-OMAP-PM-AM33XX-Update-the-sleep-code-to-handle-D.patch
1 From db18037175f6b61dfe2be5e657f1b90fe29fd946 Mon Sep 17 00:00:00 2001
2 From: "Satyanarayana, Sandhya" <sandhya.satyanarayana@ti.com>
3 Date: Tue, 22 May 2012 13:40:34 +0530
4 Subject: [PATCH 07/18] ARM: OMAP: PM: AM33XX: Update the sleep code to handle
5  DDR3
7 DDR3 devices have a reset signal which is active low. When the
8 system enters low power state this signal needs to be kept high
9 to avoid a reset and hence a loss of memory content. DDR_IO_CTRL
10 register in the control module gives s/w control over the reset
11 line. Since the reset line is left open for DDR2 devices
12 (some implementation might connect this but finally it becomes
13 a NOP), there is no harm in setting the reset pin to high even
14 for DDR2. This also enables us to have the same sequence for
15 DDR2 and DDR3 devices.
17 Signed-off-by: Satyanarayana, Sandhya <sandhya.satyanarayana@ti.com>
18 Signed-off-by: Vaibhav Bedia <vaibhav.bedia@ti.com>
19 ---
20  arch/arm/mach-omap2/sleep33xx.S |   59 +++++++++++++++-----------------------
21  1 files changed, 23 insertions(+), 36 deletions(-)
23 diff --git a/arch/arm/mach-omap2/sleep33xx.S b/arch/arm/mach-omap2/sleep33xx.S
24 index 4db3a94..6e802da 100644
25 --- a/arch/arm/mach-omap2/sleep33xx.S
26 +++ b/arch/arm/mach-omap2/sleep33xx.S
27 @@ -104,13 +104,13 @@ pll_mode_restored_\name:
28         ldr     r2, [r1]
29         orr     r2, r2, #0xa0           @ a reasonable delay for entering SR
30         str     r2, [r1, #0]
31 +       str     r2, [r1, #4]            @ write to shadow register also
32  
33         ldr     r2, ddr_start           @ do a dummy access to DDR
34         ldr     r3, [r2, #0]
35         ldr     r3, [r1, #0]
36         orr     r3, r3, #0x200          @ now set the LP MODE to Self-Refresh
37         str     r3, [r1, #0]
38 -       str     r2, [r1, #4]            @ write to shadow register also
39  
40         mov     r1, #0x1000             @ Give some time for the system to enter SR
41  wait_sr:
42 @@ -130,6 +130,11 @@ wait_emif_disable:
43         cmp     r2, r3
44         bne     wait_emif_disable
45  
46 +       /* DDR3 reset override and mDDR mode selection */
47 +       ldr     r0, virt_ddr_io_ctrl
48 +       mov     r1, #(0x9 << 28)
49 +       str     r1, [r0]
50 +
51         /* Weak pull down for DQ, DM */
52         ldr     r1, virt_ddr_io_pull1
53         ldr     r2, susp_io_pull
54 @@ -144,13 +149,6 @@ wait_emif_disable:
55         ldr     r2, susp_vtp_ctrl_val
56         str     r2, [r1]
57  
58 -       /* IO to work in mDDR mode */
59 -       ldr     r0, virt_ddr_io_ctrl
60 -       ldr     r1, [r0]
61 -       mov     r2, #1
62 -       mov     r3, r2, lsl #28
63 -       str     r3, [r0]
64 -
65         /* Enable SRAM LDO ret mode */
66         ldr     r0, virt_sram_ldo_addr
67         ldr     r1, [r0]
68 @@ -198,13 +196,6 @@ wait_emif_disable:
69         bic     r1, #1
70         str     r1, [r0]
71  
72 -       /* IO to work in DDR mode */
73 -       ldr     r0, virt_ddr_io_ctrl
74 -       ldr     r1, [r0]
75 -       mov     r2, #0x0
76 -       mov     r3, r2, lsl #28
77 -       str     r3, [r0]
78 -
79         /* Restore the pull for DQ, DM */
80         ldr     r1, virt_ddr_io_pull1
81         ldr     r2, resume_io_pull1
82 @@ -214,6 +205,15 @@ wait_emif_disable:
83         ldr     r2, resume_io_pull2
84         str     r2, [r1]
85  
86 +       /* Enable EMIF */
87 +       ldr     r1, virt_emif_clkctrl
88 +       mov     r2, #0x2
89 +       str     r2, [r1]
90 +wait_emif_enable:
91 +       ldr     r3, [r1]
92 +       cmp     r2, r3
93 +       bne     wait_emif_enable
94 +
95         /* Enable VTP */
96  config_vtp_abt:
97         ldr     r0, virt_ddr_vtp_ctrl
98 @@ -241,14 +241,10 @@ poll_vtp_ready_abt:
99         tst     r1, #(1 << 5)
100         beq     poll_vtp_ready_abt
101  
102 -       /* Enable EMIF */
103 -       ldr     r1, virt_emif_clkctrl
104 -       mov     r2, #0x2
105 -       str     r2, [r1]
106 -wait_emif_enable:
107 -       ldr     r3, [r1]
108 -       cmp     r2, r3
109 -       bne     wait_emif_enable
110 +       /* DDR3 reset override and mDDR mode clear */
111 +       ldr     r0, virt_ddr_io_ctrl
112 +       mov     r1, #0
113 +       str     r1, [r0]
114  
115         /* Disable EMIF self-refresh */
116         ldr     r0, emif_addr_virt
117 @@ -286,19 +282,6 @@ ENTRY(am33xx_resume_from_deep_sleep)
118         ldr     r2, resume_io_pull2
119         str     r2, [r1]
120  
121 -       /* Disable EMIF self-refresh */
122 -       ldr     r0, emif_phys_addr
123 -       add     r0, r0, #EMIF4_0_SDRAM_MGMT_CTRL
124 -       ldr     r1, [r0]
125 -       bic     r1, r1, #(0x7 << 7)
126 -       str     r1, [r0]
128 -       /* Take out IO of mDDR mode */
129 -       ldr     r0, phys_ddr_io_ctrl
130 -       ldr     r1, [r0]
131 -       bic     r1, r1, #28
132 -       str     r1, [r0]
134  
135  config_vtp:
136         ldr     r0, phys_ddr_vtp_ctrl
137 @@ -326,6 +309,10 @@ poll_vtp_ready:
138         tst     r1, #(1 << 5)
139         beq     poll_vtp_ready
140  
141 +       /* DDR3 reset override and mDDR mode clear */
142 +       ldr     r0, phys_ddr_io_ctrl
143 +       mov     r1, #0
144 +       str     r1, [r0]
145  
146  config_emif_timings:
147         ldr     r3, emif_phys_addr
148 -- 
149 1.7.7.6