diff options
author | Magnus Damm <damm@opensource.se> | 2010-02-25 06:06:02 -0500 |
---|---|---|
committer | Paul Mundt <lethal@linux-sh.org> | 2010-02-26 01:29:27 -0500 |
commit | b67cf2848af1cf4a4c9c277429092ae59adf859b (patch) | |
tree | 446875f368f0f5d7dd41637979b7c85d023ac037 /arch/sh/boards | |
parent | 41bfb7d7a6ce3d8dd83112e65f5d97feefde818a (diff) |
sh: ms7724se r-standby support
This patch adds board specific r-standby resume code
for ms7724se.
Signed-off-by: Magnus Damm <damm@opensource.se>
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
Diffstat (limited to 'arch/sh/boards')
-rw-r--r-- | arch/sh/boards/mach-se/7724/sdram.S | 79 | ||||
-rw-r--r-- | arch/sh/boards/mach-se/7724/setup.c | 3 |
2 files changed, 81 insertions, 1 deletions
diff --git a/arch/sh/boards/mach-se/7724/sdram.S b/arch/sh/boards/mach-se/7724/sdram.S index 9040167d5022..6fa4734d09c7 100644 --- a/arch/sh/boards/mach-se/7724/sdram.S +++ b/arch/sh/boards/mach-se/7724/sdram.S | |||
@@ -39,6 +39,10 @@ ENTRY(ms7724se_sdram_leave_start) | |||
39 | 39 | ||
40 | /* DBSC: put memory in auto-refresh mode */ | 40 | /* DBSC: put memory in auto-refresh mode */ |
41 | 41 | ||
42 | mov.l @(SH_SLEEP_MODE, r5), r0 | ||
43 | tst #SUSP_SH_RSTANDBY, r0 | ||
44 | bf resume_rstandby | ||
45 | |||
42 | ED 0xFD000040, 0x00000000 /* DBRFPDN0 */ | 46 | ED 0xFD000040, 0x00000000 /* DBRFPDN0 */ |
43 | WAIT 1 | 47 | WAIT 1 |
44 | ED 0xFD000014, 0x00000002 /* DBCMDCNT (PALL) */ | 48 | ED 0xFD000014, 0x00000002 /* DBCMDCNT (PALL) */ |
@@ -49,4 +53,79 @@ ENTRY(ms7724se_sdram_leave_start) | |||
49 | rts | 53 | rts |
50 | nop | 54 | nop |
51 | 55 | ||
56 | resume_rstandby: | ||
57 | |||
58 | /* CPG: setup clocks before restarting external memory */ | ||
59 | |||
60 | ED 0xA4150024, 0x00004000 /* PLLCR */ | ||
61 | |||
62 | mov.l FRQCRA,r0 | ||
63 | mov.l @r0,r3 | ||
64 | mov.l KICK,r1 | ||
65 | or r1, r3 | ||
66 | mov.l r3, @r0 | ||
67 | |||
68 | mov.l LSTATS,r0 | ||
69 | mov #1,r1 | ||
70 | WAIT_LSTATS: | ||
71 | mov.l @r0,r3 | ||
72 | tst r1,r3 | ||
73 | bf WAIT_LSTATS | ||
74 | |||
75 | /* DBSC: re-initialize and put in auto-refresh */ | ||
76 | |||
77 | ED 0xFD000108, 0x00000181 /* DBPDCNT0 */ | ||
78 | ED 0xFD000020, 0x015B0002 /* DBCONF */ | ||
79 | ED 0xFD000030, 0x03071502 /* DBTR0 */ | ||
80 | ED 0xFD000034, 0x02020102 /* DBTR1 */ | ||
81 | ED 0xFD000038, 0x01090405 /* DBTR2 */ | ||
82 | ED 0xFD00003C, 0x00000002 /* DBTR3 */ | ||
83 | ED 0xFD000008, 0x00000005 /* DBKIND */ | ||
84 | ED 0xFD000040, 0x00000001 /* DBRFPDN0 */ | ||
85 | ED 0xFD000040, 0x00000000 /* DBRFPDN0 */ | ||
86 | ED 0xFD000018, 0x00000001 /* DBCKECNT */ | ||
87 | |||
88 | mov #100,r0 | ||
89 | WAIT_400NS: | ||
90 | dt r0 | ||
91 | bf WAIT_400NS | ||
92 | |||
93 | ED 0xFD000014, 0x00000002 /* DBCMDCNT (PALL) */ | ||
94 | ED 0xFD000060, 0x00020000 /* DBMRCNT (EMR2) */ | ||
95 | ED 0xFD000060, 0x00030000 /* DBMRCNT (EMR3) */ | ||
96 | ED 0xFD000060, 0x00010004 /* DBMRCNT (EMR) */ | ||
97 | ED 0xFD000060, 0x00000532 /* DBMRCNT (MRS) */ | ||
98 | ED 0xFD000014, 0x00000002 /* DBCMDCNT (PALL) */ | ||
99 | ED 0xFD000014, 0x00000004 /* DBCMDCNT (REF) */ | ||
100 | ED 0xFD000014, 0x00000004 /* DBCMDCNT (REF) */ | ||
101 | ED 0xFD000060, 0x00000432 /* DBMRCNT (MRS) */ | ||
102 | ED 0xFD000060, 0x000103c0 /* DBMRCNT (EMR) */ | ||
103 | ED 0xFD000060, 0x00010040 /* DBMRCNT (EMR) */ | ||
104 | |||
105 | mov #100,r0 | ||
106 | WAIT_400NS_2: | ||
107 | dt r0 | ||
108 | bf WAIT_400NS_2 | ||
109 | |||
110 | ED 0xFD000010, 0x00000001 /* DBEN */ | ||
111 | ED 0xFD000044, 0x0000050f /* DBRFPDN1 */ | ||
112 | ED 0xFD000048, 0x236800e6 /* DBRFPDN2 */ | ||
113 | |||
114 | mov.l DUMMY,r0 | ||
115 | mov.l @r0, r1 /* force single dummy read */ | ||
116 | |||
117 | ED 0xFD000014, 0x00000002 /* DBCMDCNT (PALL) */ | ||
118 | ED 0xFD000014, 0x00000004 /* DBCMDCNT (REF) */ | ||
119 | ED 0xFD000108, 0x00000080 /* DBPDCNT0 */ | ||
120 | ED 0xFD000040, 0x00010000 /* DBRFPDN0 */ | ||
121 | |||
122 | rts | ||
123 | nop | ||
124 | |||
125 | .balign 4 | ||
126 | DUMMY: .long 0xac400000 | ||
127 | FRQCRA: .long 0xa4150000 | ||
128 | KICK: .long 0x80000000 | ||
129 | LSTATS: .long 0xa4150060 | ||
130 | |||
52 | ENTRY(ms7724se_sdram_leave_end) | 131 | ENTRY(ms7724se_sdram_leave_end) |
diff --git a/arch/sh/boards/mach-se/7724/setup.c b/arch/sh/boards/mach-se/7724/setup.c index ee5251f92811..563f3dcb1f9b 100644 --- a/arch/sh/boards/mach-se/7724/setup.c +++ b/arch/sh/boards/mach-se/7724/setup.c | |||
@@ -610,7 +610,8 @@ static int __init devices_setup(void) | |||
610 | struct clk *clk; | 610 | struct clk *clk; |
611 | 611 | ||
612 | /* register board specific self-refresh code */ | 612 | /* register board specific self-refresh code */ |
613 | sh_mobile_register_self_refresh(SUSP_SH_STANDBY | SUSP_SH_SF, | 613 | sh_mobile_register_self_refresh(SUSP_SH_STANDBY | SUSP_SH_SF | |
614 | SUSP_SH_RSTANDBY, | ||
614 | &ms7724se_sdram_enter_start, | 615 | &ms7724se_sdram_enter_start, |
615 | &ms7724se_sdram_enter_end, | 616 | &ms7724se_sdram_enter_end, |
616 | &ms7724se_sdram_leave_start, | 617 | &ms7724se_sdram_leave_start, |