69b49ea2497abf800de5c1abbecf9f2ee7ed4520
[sitara-epos/sitara-epos-kernel.git] / arch / arm / mach-omap2 / sleep33xx.S
1 /*
2  * Low level suspend code for AM33XX SoCs
3  *
4  * Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com/
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License as
8  * published by the Free Software Foundation version 2.
9  *
10  * This program is distributed "as is" WITHOUT ANY WARRANTY of any
11  * kind, whether express or implied; without even the implied warranty
12  * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU General Public License for more details.
14  */
16 #include <linux/linkage.h>
17 #include <linux/init.h>
18 #include <asm/memory.h>
19 #include <asm/assembler.h>
20 #include <mach/io.h>
21 #include <plat/emif.h>
22 #include "cm33xx.h"
24 #include <plat/emif.h>
25 #include <plat/sram.h>
27 #include "cm33xx.h"
28 #include "pm33xx.h"
29 #include "prm33xx.h"
30 #include "control.h"
32 /* We should probably pass in the virtual address of PRCM, Control and EMIF
33  * along with the physical addresses
34  * load it into the registers and then continue
35  */
36         .align 3
37 ENTRY(am33xx_do_wfi)
38         stmfd   sp!, {r4 - r11, lr}     @ save registers on stack
40         .macro  pll_bypass, name, clk_mode_addr, idlest_addr
41 pll_bypass_\name:
42         ldr     r0, \clk_mode_addr
43         ldr     r1, [r0]
44         bic     r1, r1, #(7 << 0)
45         orr     r1, r1, #0x5
46         str     r1, [r0]
47         ldr     r0, \idlest_addr
48 wait_pll_bypass_\name:
49         ldr     r1, [r0]
50         tst     r1, #0x0
51         bne     wait_pll_bypass_\name
52         .endm
54         .macro  pll_lock, name, clk_mode_addr, idlest_addr
55 pll_lock_\name:
56         ldr     r0, \clk_mode_addr
57         ldr     r1, [r0]
58         bic     r1, r1, #(7 << 0)
59         orr     r1, r1, #0x7
60         str     r1, [r0]
61         ldr     r0, \idlest_addr
62 wait_pll_lock_\name:
63         ldr     r1, [r0]
64         tst     r1, #0x1
65         bne     wait_pll_lock_\name
66         .endm
68         /* EMIF config for low power mode */
69         ldr     r0, emif_addr_func
70         blx     r0
72         str     r0, emif_addr_virt
74         /* Ensure that all the writes to DDR leave the A8 */
75         dsb
76         dmb
77         isb
79         add     r1, r0, #EMIF4_0_SDRAM_MGMT_CTRL
80         ldr     r2, [r1]
81         orr     r2, r2, #0xa0           @ a reasonable delay for entering SR
82         str     r2, [r1, #0]
84         ldr     r2, ddr_start           @ do a dummy access to DDR
85         ldr     r3, [r2, #0]
86         ldr     r3, [r1, #0]
87         orr     r3, r3, #0x200          @ now set the LP MODE to Self-Refresh
88         str     r3, [r1, #0]
89         str     r2, [r1, #4]            @ write to shadow register also
91         mov     r1, #0x1000             @ Give some time for the system to enter SR
92 wait_sr:
93         subs    r1, r1, #1
94         bne     wait_sr
96         /* Disable EMIF at this point */
97         ldr     r1, virt_emif_clkctrl
98         ldr     r2, [r1]
99         bic     r2, r2, #(3 << 0)
100         str     r2, [r1]
102         ldr     r1, virt_emif_clkctrl
103 wait_emif_disable:
104         ldr     r2, [r1]
105         ldr     r3, module_disabled_val
106         cmp     r2, r3
107         bne     wait_emif_disable
109         /* Weak pull down for DQ, DM */
110         ldr     r1, virt_ddr_io_pull1
111         ldr     r2, susp_io_pull
112         str     r2, [r1]
114         ldr     r1, virt_ddr_io_pull2
115         ldr     r2, susp_io_pull
116         str     r2, [r1]
118         /* Disable VTP with N & P = 0x1 */
119         ldr     r1, virt_ddr_vtp_ctrl
120         ldr     r2, susp_vtp_ctrl_val
121         str     r2, [r1]
123         /* IO to work in mDDR mode */
124         ldr     r0, virt_ddr_io_ctrl
125         ldr     r1, [r0]
126         mov     r2, #1
127         mov     r3, r2, lsl #28
128         str     r3, [r0]
130         /* Enable SRAM LDO ret mode */
131         ldr     r0, virt_sram_ldo_addr
132         ldr     r1, [r0]
133         orr     r1, #1
134         str     r1, [r0]
136         /* Put the PLLs in bypass mode */
137         pll_bypass      core, virt_core_clk_mode, virt_core_idlest
138         pll_bypass      ddr, virt_ddr_clk_mode, virt_ddr_idlest
139         pll_bypass      disp, virt_disp_clk_mode, virt_disp_idlest
140         pll_bypass      per, virt_per_clk_mode, virt_per_idlest
141         pll_bypass      mpu, virt_mpu_clk_mode, virt_mpu_idlest
143         dsb
144         dmb
145         isb
147         wfi
148         nop
149         nop
150         nop
151         nop
152         nop
153         nop
154         nop
155         nop
156         nop
157         nop
158         nop
160         /* We come here in case of an abort */
162         /* Relock the PLLs */
163         pll_lock        mpu_abt, virt_mpu_clk_mode, virt_mpu_idlest
164         pll_lock        per_abt, virt_per_clk_mode, virt_per_idlest
165         pll_lock        disp_abt, virt_disp_clk_mode, virt_disp_idlest
166         pll_lock        ddr_abt, virt_ddr_clk_mode, virt_ddr_idlest
167         pll_lock        core_abt, virt_core_clk_mode, virt_core_idlest
169         /* Disable SRAM LDO ret mode */
170         ldr     r0, virt_sram_ldo_addr
171         ldr     r1, [r0]
172         bic     r1, #1
173         str     r1, [r0]
175         /* IO to work in DDR mode */
176         ldr     r0, virt_ddr_io_ctrl
177         ldr     r1, [r0]
178         mov     r2, #0x0
179         mov     r3, r2, lsl #28
180         str     r3, [r0]
182         /* Restore the pull for DQ, DM */
183         ldr     r1, virt_ddr_io_pull1
184         ldr     r2, resume_io_pull1
185         str     r2, [r1]
187         ldr     r1, virt_ddr_io_pull2
188         ldr     r2, resume_io_pull2
189         str     r2, [r1]
191         /* Enable VTP */
192 config_vtp_abt:
193         ldr     r0, virt_ddr_vtp_ctrl
194         ldr     r1, [r0]
195         mov     r2, #0x0        @ clear the register
196         str     r2, [r0]
197         mov     r2, #0x6        @ write the filter value
198         str     r2, [r0]
200         ldr     r1, [r0]
201         ldr     r2, vtp_enable  @ set the enable bit
202         orr     r2, r2, r1
203         str     r2, [r0]
205         ldr     r1, [r0]        @ toggle the CLRZ bit
206         bic     r1, #1
207         str     r1, [r0]
209         ldr     r1, [r0]
210         orr     r1, #1
211         str     r1, [r0]
213 poll_vtp_ready_abt:
214         ldr     r1, [r0]        @ poll for VTP ready
215         tst     r1, #(1 << 5)
216         beq     poll_vtp_ready_abt
218         /* Enable EMIF */
219         ldr     r1, virt_emif_clkctrl
220         mov     r2, #0x2
221         str     r2, [r1]
222 wait_emif_enable:
223         ldr     r3, [r1]
224         cmp     r2, r3
225         bne     wait_emif_enable
227         /* Disable EMIF self-refresh */
228         ldr     r0, emif_addr_virt
229         add     r0, r0, #EMIF4_0_SDRAM_MGMT_CTRL
230         ldr     r1, [r0]
231         bic     r1, r1, #(0x7 << 7)
232         str     r1, [r0]
234         mov     r0, #7
235         ldmfd   sp!, {r4 - r11, pc}     @ restore regs and return
237         nop
238         nop
239         nop
240         nop
241         nop
242         nop
243         nop
244         nop
245         nop
246         nop
247         nop
248         nop
249         nop
251         /* Take the PLLs out of LP_BYPASS */
252         pll_lock        mpu, phys_mpu_clk_mode, phys_mpu_idlest
253         pll_lock        per, phys_per_clk_mode, phys_per_idlest
254         pll_lock        disp, phys_disp_clk_mode, phys_disp_idlest
255         pll_lock        ddr, phys_ddr_clk_mode, phys_ddr_idlest
256         pll_lock        core, phys_core_clk_mode, phys_core_idlest
258         /* Disable SRAM LDO ret mode */
259         ldr     r0, phys_sram_ldo_addr
260         ldr     r1, [r0]
261         bic     r1, #1
262         str     r1, [r0]
264         /* Restore the pull for DQ, DM */
265         ldr     r1, phys_ddr_io_pull1
266         ldr     r2, resume_io_pull1
267         str     r2, [r1]
269         ldr     r1, phys_ddr_io_pull2
270         ldr     r2, resume_io_pull2
271         str     r2, [r1]
273         /* Disable EMIF self-refresh */
274         ldr     r0, emif_phys_addr
275         add     r0, r0, #EMIF4_0_SDRAM_MGMT_CTRL
276         ldr     r1, [r0]
277         bic     r1, r1, #(0x7 << 7)
278         str     r1, [r0]
280         /* Take out IO of mDDR mode */
281         ldr     r0, phys_ddr_io_ctrl
282         ldr     r1, [r0]
283         bic     r1, r1, #28
284         str     r1, [r0]
286 /*
287  * Instead of harcoding the EMIF and DDR PHY related settings
288  * in this file, the sane thing to do would have been to backup
289  * the register contents during suspend and restore it back in
290  * the resume path. However, due to the Si errata related to
291  * DDR PHY registers, these registers are read-only. So, we'll
292  * need to hardcode atleast the DDR PHY configuration over here.
293  * We _could_ back up the EMIF registers but in order to be
294  * consistent with the DDR setup procedure we skip this for now.
295  * The person updating the DDR PHY config values is expected
296  * to update the EMIF config values also.
297  */
299 config_vtp:
300         ldr     r0, vtp0_addr
301         ldr     r1, [r0]
302         mov     r2, #0x0        @ clear the register
303         str     r2, [r0]
304         mov     r2, #0x6        @ write the filter value
305         str     r2, [r0]
307         ldr     r1, [r0]
308         ldr     r2, vtp_enable  @ set the enable bit
309         orr     r2, r2, r1
310         str     r2, [r0]
312         ldr     r1, [r0]        @ toggle the CLRZ bit
313         bic     r1, #1
314         str     r1, [r0]
316         ldr     r1, [r0]
317         orr     r1, #1
318         str     r1, [r0]
320 poll_vtp_ready:
321         ldr     r1, [r0]        @ poll for VTP ready
322         tst     r1, #(1 << 5)
323         beq     poll_vtp_ready
325 cmd_macro_config:
326         ldr     r0, ddr_phy_base
327         ldr     r1, [r0]
328         ldr     r2, ddr2_ratio_val
329         mov     r3, r2
330         @ TODO: Need to use proper variable here
331         mov     r4, #0
332         str     r3, [r0, #28]   @cmd0
333         str     r4, [r0, #32]
334         str     r4, [r0, #36]
335         str     r4, [r0, #40]
336         str     r4, [r0, #44]
337         str     r3, [r0, #80]   @cmd1
338         str     r4, [r0, #84]
339         str     r4, [r0, #88]
340         str     r4, [r0, #92]
341         str     r4, [r0, #96]
342         str     r3, [r0, #132]  @cmd2
343         str     r4, [r0, #136]
344         str     r4, [r0, #140]
345         str     r4, [r0, #144]
346         str     r4, [r0, #148]
348         mov     r3, #0x0
349         bl      data_macro_config
350         mov     r3, #0xa4
351         bl      data_macro_config
352         b       setup_rank_delays
354 data_macro_config:
355         ldr     r0, ddr_phy_base
356         add     r0, r0, r3
357 rd_dqs:
358         ldr     r1, data0_rd_dqs_slave_ratio0_val
359         mov     r2, r1
360         /* shift by 30, 20, 10 and orr */
361         mov     r5, r2, lsl #10
362         mov     r6, r2, lsl #20
363         mov     r7, r2, lsl #30
364         orr     r2, r2, r5
365         orr     r2, r2, r6
366         orr     r2, r2, r7
367         /* Done with crazy bit ops. store it now */
368         str     r2, [r0, #200]
369         ldr     r1, data0_rd_dqs_slave_ratio1_val
370         mov     r2, r1
371         mov     r5, r2, lsr #2
372         mov     r2, r5
373         str     r2, [r0, #204]
374 wr_dqs:
375         ldr     r1, data0_wr_dqs_slave_ratio0_val
376         mov     r2, r1
377         /* shift by 30, 20, 10 and orr */
378         mov     r5, r2, lsl #10
379         mov     r6, r2, lsl #20
380         mov     r7, r2, lsl #30
381         orr     r2, r2, r5
382         orr     r2, r2, r6
383         orr     r2, r2, r7
384         /* Done with crazy bit ops. store it now */
385         str     r2, [r0, #220]
386         ldr     r1, data0_wr_dqs_slave_ratio1_val
387         mov     r2, r1
388         mov     r5, r2, lsr #2
389         mov     r2, r5
390         str     r2, [r0, #224]
391 wr_lvl:
392         ldr     r1, data0_wr_lvl_init_ratio0_val
393         mov     r2, r1
394         /* shift by 30, 20, 10 and orr */
395         mov     r5, r2, lsl #10
396         mov     r6, r2, lsl #20
397         mov     r7, r2, lsl #30
398         orr     r2, r2, r5
399         orr     r2, r2, r6
400         orr     r2, r2, r7
401         /* Done with crazy bit ops. store it now */
402         str     r2, [r0, #240]
403         ldr     r1, data0_wr_lvl_init_ratio1_val
404         mov     r2, r1
405         mov     r5, r2, lsr #2
406         mov     r2, r5
407         str     r2, [r0, #244]
408 gate_lvl:
409         ldr     r1, data0_gate_lvl_init_ratio0_val
410         mov     r2, r1
411         /* shift by 30, 20, 10 and orr */
412         mov     r5, r2, lsl #10
413         mov     r6, r2, lsl #20
414         mov     r7, r2, lsl #30
415         orr     r2, r2, r5
416         orr     r2, r2, r6
417         orr     r2, r2, r7
418         /* Done with crazy bit ops. store it now */
419         str     r2, [r0, #248]
420         ldr     r1, data0_gate_lvl_init_ratio1_val
421         mov     r2, r1
422         mov     r5, r2, lsr #2
423         mov     r2, r5
424         str     r2, [r0, #256]
425 we_slv:
426         ldr     r1, data0_wr_lvl_slave_ratio0_val
427         mov     r2, r1
428         /* shift by 30, 20, 10 and orr */
429         mov     r5, r2, lsl #10
430         mov     r6, r2, lsl #20
431         mov     r7, r2, lsl #30
432         orr     r2, r2, r5
433         orr     r2, r2, r6
434         orr     r2, r2, r7
435         /* Done with crazy bit ops. store it now */
436         str     r2, [r0, #264]
437         ldr     r1, data0_wr_lvl_slave_ratio1_val
438         mov     r2, r1
439         mov     r5, r2, lsr #2
440         mov     r2, r5
441         str     r2, [r0, #268]
442 wr_data:
443         ldr     r1, data0_wr_data_slave_ratio0_val
444         mov     r2, r1
445         /* shift by 30, 20, 10 and orr */
446         mov     r5, r2, lsl #10
447         mov     r6, r2, lsl #20
448         mov     r7, r2, lsl #30
449         orr     r2, r2, r5
450         orr     r2, r2, r6
451         orr     r2, r2, r7
452         /* Done with crazy bit ops. store it now */
453         str     r2, [r0, #288]
454         ldr     r1, data0_wr_data_slave_ratio1_val
455         mov     r2, r1
456         mov     r5, r2, lsr #2
457         mov     r2, r5
458         str     r2, [r0, #292]
459 dll_lock:
460         ldr     r1, data0_dll_lock_diff_val
461         mov     r2, r1
462         str     r2, [r0, #312]
464 setup_rank_delays:
465         ldr     r1, data0_rank0_delay0_val
466         mov     r2, r1
467         str     r2, [r0, #308]
468         ldr     r1, data1_rank0_delay1_val
469         mov     r2, r1
470         str     r2, [r0, #472]
472 setup_io_ctrl:
473         ldr     r0, control_base
474         ldr     r1, ddr_ioctrl_val
475         mov     r2, r1
476         ldr     r4, ddr_cmd_offset
477         mov     r3, r4
478         str     r2, [r0, r3]    @cmd0 0x1404
479         add     r3, r3, #4
480         str     r2, [r0, r3]    @cmd1 0x1408
481         add     r3, r3, #4
482         str     r2, [r0, r3]    @cmd2 0x140c
483         ldr     r4, ddr_data_offset
484         mov     r3, r4
485         str     r2, [r0, r3]    @data0 0x1440
486         add     r3, r3, #4
487         str     r2, [r0, r3]    @data1 0x1444
489 misc_config:
490         ldr     r1, ddr_io_ctrl_addr
491         ldr     r2, [r1]
492         and     r2, #0xefffffff
493         str     r2, [r1]
494         ldr     r1, ddr_cke_addr
495         ldr     r2, [r1]
496         orr     r2, #0x00000001
497         str     r2, [r1]
499 config_emif_timings:
500         mov     r3, #1275068416 @ 0x4c000000
501 disable_sr:
502         mov     r4, #0
503         str     r4, [r3, #56]   @ 0x38
504         ldr     r4, emif_rd_lat_val
505         mov     r2, r4
506 rd_lat:
507         str     r2, [r3, #228]  @ 0xe4
508         str     r2, [r3, #232]  @ 0xe8
509         str     r2, [r3, #236]  @ 0xec
510 timing1:
511         ldr     r4, emif_timing1_val
512         mov     r2, r4
513         str     r2, [r3, #24]
514         str     r2, [r3, #28]
515 timing2:
516         ldr     r4, emif_timing2_val
517         mov     r2, r4
518         str     r2, [r3, #32]
519         str     r2, [r3, #36]   @ 0x24
520 timing3:
521         ldr     r4, emif_timing3_val
522         mov     r2, r4
523         str     r2, [r3, #40]   @ 0x28
524         str     r2, [r3, #44]   @ 0x2c
525 sdcfg1:
526         ldr     r4, emif_sdcfg_val
527         mov     r2, r4
528         str     r2, [r3, #8]
529         str     r2, [r3, #12]
530 ref_ctrl_const:
531         ldr     r4, emif_ref_ctrl_const_val
532         mov     r2, r4
533         str     r2, [r3, #16]
534         str     r2, [r3, #20]
536         /* GEL had a loop with init value of 5000 */
537         mov     r0, #0x1000
538 wait_loop1:
539         subs    r0, r0, #1
540         bne     wait_loop1
542 ref_ctrl_actual:
543         ldr     r4, emif_ref_ctrl_val
544         mov     r2, r4
545         str     r2, [r3, #16]
546         str     r2, [r3, #20]
547 sdcfg2:
548         ldr     r4, emif_sdcfg_val
549         mov     r2, r4
550         str     r2, [r3, #8]
551         str     r2, [r3, #12]
553         /* Back from la-la-land. Kill some time for sanity to settle in */
554         mov     r0, #0x1000
555 wait_loop2:
556         subs    r0, r0, #1
557         bne     wait_loop2
559         /* We are back. Branch to the common CPU resume routine */
560 ENTRY(am33xx_resume_vector)
561         ldr     pc, resume_addr
563 /*
564  * Local variables
565  */
567 resume_addr:
568         .word   cpu_resume - PAGE_OFFSET + 0x80000000
570 emif_addr_func:
571         .word   am33xx_get_ram_base
572 emif_phys_addr:
573         .word   AM33XX_EMIF0_BASE
575 emif_pm_ctrl:
576         .word EMIF4_0_SDRAM_MGMT_CTRL
577 ddr_start:
578         .word PAGE_OFFSET
580 virt_mpu_idlest:
581         .word   AM33XX_CM_IDLEST_DPLL_MPU
582 virt_mpu_clk_mode:
583         .word   AM33XX_CM_CLKMODE_DPLL_MPU
585 phys_pll_mod:
586         .word   AM33XX_CM_BASE + AM33XX_CM_WKUP_MOD
587 phys_mpu_clk_mode:
588         .word   AM33XX_CM_BASE + AM33XX_CM_WKUP_MOD + AM33XX_CM_CLKMODE_DPLL_MPU_OFFSET
589 phys_mpu_idlest:
590         .word   AM33XX_CM_BASE + AM33XX_CM_WKUP_MOD + AM33XX_CM_IDLEST_DPLL_MPU_OFFSET
592 virt_core_idlest:
593         .word   AM33XX_CM_IDLEST_DPLL_CORE
594 virt_core_clk_mode:
595         .word   AM33XX_CM_CLKMODE_DPLL_CORE
596 phys_core_clk_mode:
597         .word   AM33XX_CM_BASE + AM33XX_CM_WKUP_MOD + AM33XX_CM_CLKMODE_DPLL_CORE_OFFSET
598 phys_core_idlest:
599         .word   AM33XX_CM_BASE + AM33XX_CM_WKUP_MOD + AM33XX_CM_IDLEST_DPLL_CORE_OFFSET
601 virt_per_idlest:
602         .word   AM33XX_CM_IDLEST_DPLL_PER
603 virt_per_clk_mode:
604         .word   AM33XX_CM_CLKMODE_DPLL_PER
605 phys_per_clk_mode:
606         .word   AM33XX_CM_BASE + AM33XX_CM_WKUP_MOD + AM33XX_CM_CLKMODE_DPLL_PER_OFFSET
607 phys_per_idlest:
608         .word   AM33XX_CM_BASE + AM33XX_CM_WKUP_MOD + AM33XX_CM_IDLEST_DPLL_PER_OFFSET
610 virt_disp_idlest:
611         .word   AM33XX_CM_IDLEST_DPLL_DISP
612 virt_disp_clk_mode:
613         .word   AM33XX_CM_CLKMODE_DPLL_DISP
614 phys_disp_clk_mode:
615         .word   AM33XX_CM_BASE + AM33XX_CM_WKUP_MOD + AM33XX_CM_CLKMODE_DPLL_DISP_OFFSET
616 phys_disp_idlest:
617         .word   AM33XX_CM_BASE + AM33XX_CM_WKUP_MOD + AM33XX_CM_IDLEST_DPLL_DISP_OFFSET
619 virt_ddr_idlest:
620         .word   AM33XX_CM_IDLEST_DPLL_DDR
621 virt_ddr_clk_mode:
622         .word   AM33XX_CM_CLKMODE_DPLL_DDR
623 phys_ddr_clk_mode:
624         .word   AM33XX_CM_BASE + AM33XX_CM_WKUP_MOD + AM33XX_CM_CLKMODE_DPLL_DDR_OFFSET
625 phys_ddr_idlest:
626         .word   AM33XX_CM_BASE + AM33XX_CM_WKUP_MOD + AM33XX_CM_IDLEST_DPLL_DDR_OFFSET
628 virt_sram_ldo_addr:
629         .word   AM33XX_PRM_LDO_SRAM_MPU_CTRL
630 phys_sram_ldo_addr:
631         .word   AM33XX_PRM_BASE + AM33XX_PRM_DEVICE_MOD + AM33XX_PRM_LDO_SRAM_MPU_CTRL_OFFSET
633 virt_emif_clkctrl:
634         .word   AM33XX_CM_PER_EMIF_CLKCTRL
635 phys_emif_clkctrl:
636         .word   AM33XX_CM_BASE + AM33XX_CM_PER_MOD + AM33XX_CM_PER_EMIF_CLKCTRL_OFFSET
637 module_disabled_val:
638         .word   0x30000
640 /* DDR related stuff */
641 vtp0_addr:
642         .word   VTP0_CTRL_REG
643 vtp_enable:
644         .word   VTP_CTRL_ENABLE
645 vtp_start_en:
646         .word   VTP_CTRL_START_EN
647 vtp_ready:
648         .word   VTP_CTRL_READY
650 ddr_phy_base:
651         .word   DDR_PHY_BASE_ADDR
652 ddr2_ratio_val:
653         .word   DDR2_RATIO
654 data0_rd_dqs_slave_ratio0_val:
655         .word   DDR2_RD_DQS
656 data0_rd_dqs_slave_ratio1_val:
657         .word   DDR2_RD_DQS
658 data0_wr_dqs_slave_ratio0_val:
659         .word   DDR2_WR_DQS
660 data0_wr_dqs_slave_ratio1_val:
661         .word   DDR2_WR_DQS
662 data0_wr_lvl_init_ratio0_val:
663         .word   DDR2_PHY_WRLVL
664 data0_wr_lvl_init_ratio1_val:
665         .word   DDR2_PHY_WRLVL
666 data0_gate_lvl_init_ratio0_val:
667         .word   DDR2_PHY_GATELVL
668 data0_gate_lvl_init_ratio1_val:
669         .word   DDR2_PHY_GATELVL
670 data0_wr_lvl_slave_ratio0_val:
671         .word   DDR2_PHY_FIFO_WE
672 data0_wr_lvl_slave_ratio1_val:
673         .word   DDR2_PHY_FIFO_WE
674 data0_wr_data_slave_ratio0_val:
675         .word   DDR2_PHY_WR_DATA
676 data0_wr_data_slave_ratio1_val:
677         .word   DDR2_PHY_WR_DATA
678 data0_dll_lock_diff_val:
679         .word   PHY_DLL_LOCK_DIFF
681 data0_rank0_delay0_val:
682         .word   PHY_RANK0_DELAY
683 data1_rank0_delay1_val:
684         .word   PHY_RANK0_DELAY
686 control_base:
687         .word   AM33XX_CTRL_BASE
688 ddr_io_ctrl_addr:
689         .word   DDR_IO_CTRL
690 ddr_ioctrl_val:
691         .word   0x18B
692 ddr_cmd_offset:
693         .word   0x1404
694 ddr_data_offset:
695         .word   0x1440
696 virt_ddr_io_ctrl:
697         .word   AM33XX_CTRL_REGADDR(0x0E04)
698 phys_ddr_io_ctrl:
699         .word   DDR_IO_CTRL
700 virt_ddr_vtp_ctrl:
701         .word   AM33XX_CTRL_REGADDR(0x0E0C)
702 phys_ddr_vtp_ctrl:
703         .word   VTP0_CTRL_REG
704 virt_ddr_io_pull1:
705         .word   AM33XX_CTRL_REGADDR(0x1440)
706 phys_ddr_io_pull1:
707         .word   AM33XX_CTRL_BASE + (0x1440)
708 virt_ddr_io_pull2:
709         .word   AM33XX_CTRL_REGADDR(0x1444)
710 phys_ddr_io_pull2:
711         .word   AM33XX_CTRL_BASE + (0x1444)
712 virt_ddr_io_pull3:
713         .word   AM33XX_CTRL_REGADDR(0x1448)
714 phys_ddr_io_pull3:
715         .word   AM33XX_CTRL_BASE + (0x1448)
717 ddr_cke_addr:
718         .word   DDR_CKE_CTRL
719 emif_rd_lat_val:
720         .word   EMIF_READ_LATENCY
721 emif_timing1_val:
722         .word   EMIF_TIM1
723 emif_timing2_val:
724         .word   EMIF_TIM2
725 emif_timing3_val:
726         .word   EMIF_TIM3
727 emif_sdcfg_val:
728         .word   EMIF_SDCFG
729 emif_ref_ctrl_const_val:
730         .word   0x4650
731 emif_ref_ctrl_val:
732         .word   EMIF_SDREF
734 susp_io_pull:
735         .word   0x3FF00003
736 resume_io_pull1:
737         .word   0x18B
738 resume_io_pull2:
739         .word   0x18B
740 dyn_pd_val:
741         .word   0x100000
742 susp_sdram_config:
743         .word   0x40805332
744 susp_vtp_ctrl_val:
745         .word   0x10117
746 emif_addr_virt:
747         .word   0xDEADBEEF
750 ENTRY(am33xx_do_wfi_sz)
751         .word   . - am33xx_do_wfi