diff options
| author | Mike Frysinger <vapier@gentoo.org> | 2011-06-27 15:46:40 -0400 |
|---|---|---|
| committer | Mike Frysinger <vapier@gentoo.org> | 2011-07-23 01:18:31 -0400 |
| commit | 9e770f77801fce713f5736c66f8441467eb36db5 (patch) | |
| tree | 38b0a8bd9da5ce486f102bcefe95261cb81877fe | |
| parent | da31d6fb46b7671622dbfd44c7f27b0c97dc2faa (diff) | |
Blackfin: dpmc: optimize SDRAM programming slightly
No need to reload these registers constantly since they're always
available (we're not making any function calls in between).
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
| -rw-r--r-- | arch/blackfin/mach-common/dpmc_modes.S | 19 |
1 files changed, 10 insertions, 9 deletions
diff --git a/arch/blackfin/mach-common/dpmc_modes.S b/arch/blackfin/mach-common/dpmc_modes.S index 2d1c3ce19fb1..1c534d298de4 100644 --- a/arch/blackfin/mach-common/dpmc_modes.S +++ b/arch/blackfin/mach-common/dpmc_modes.S | |||
| @@ -196,21 +196,20 @@ ENTRY(_set_dram_srfs) | |||
| 196 | #else /* SDRAM */ | 196 | #else /* SDRAM */ |
| 197 | P0.L = lo(EBIU_SDGCTL); | 197 | P0.L = lo(EBIU_SDGCTL); |
| 198 | P0.H = hi(EBIU_SDGCTL); | 198 | P0.H = hi(EBIU_SDGCTL); |
| 199 | P1.L = lo(EBIU_SDSTAT); | ||
| 200 | P1.H = hi(EBIU_SDSTAT); | ||
| 201 | |||
| 199 | R2 = [P0]; | 202 | R2 = [P0]; |
| 200 | BITSET(R2, 24); /* SRFS enter self-refresh mode */ | 203 | BITSET(R2, 24); /* SRFS enter self-refresh mode */ |
| 201 | [P0] = R2; | 204 | [P0] = R2; |
| 202 | SSYNC; | 205 | SSYNC; |
| 203 | 206 | ||
| 204 | P0.L = lo(EBIU_SDSTAT); | ||
| 205 | P0.H = hi(EBIU_SDSTAT); | ||
| 206 | 1: | 207 | 1: |
| 207 | R2 = w[P0]; | 208 | R2 = w[P1]; |
| 208 | SSYNC; | 209 | SSYNC; |
| 209 | cc = BITTST(R2, 1); /* SDSRA poll self-refresh status */ | 210 | cc = BITTST(R2, 1); /* SDSRA poll self-refresh status */ |
| 210 | if !cc jump 1b; | 211 | if !cc jump 1b; |
| 211 | 212 | ||
| 212 | P0.L = lo(EBIU_SDGCTL); | ||
| 213 | P0.H = hi(EBIU_SDGCTL); | ||
| 214 | R2 = [P0]; | 213 | R2 = [P0]; |
| 215 | BITCLR(R2, 0); /* SCTLE disable CLKOUT */ | 214 | BITCLR(R2, 0); /* SCTLE disable CLKOUT */ |
| 216 | [P0] = R2; | 215 | [P0] = R2; |
| @@ -220,6 +219,7 @@ ENDPROC(_set_dram_srfs) | |||
| 220 | 219 | ||
| 221 | ENTRY(_unset_dram_srfs) | 220 | ENTRY(_unset_dram_srfs) |
| 222 | /* set the dram out of self refresh mode */ | 221 | /* set the dram out of self refresh mode */ |
| 222 | |||
| 223 | #if defined(EBIU_RSTCTL) /* DDR */ | 223 | #if defined(EBIU_RSTCTL) /* DDR */ |
| 224 | P0.H = hi(EBIU_RSTCTL); | 224 | P0.H = hi(EBIU_RSTCTL); |
| 225 | P0.L = lo(EBIU_RSTCTL); | 225 | P0.L = lo(EBIU_RSTCTL); |
| @@ -227,20 +227,21 @@ ENTRY(_unset_dram_srfs) | |||
| 227 | BITCLR(R2, 3); /* clear SRREQ bit */ | 227 | BITCLR(R2, 3); /* clear SRREQ bit */ |
| 228 | [P0] = R2; | 228 | [P0] = R2; |
| 229 | #elif defined(EBIU_SDGCTL) /* SDRAM */ | 229 | #elif defined(EBIU_SDGCTL) /* SDRAM */ |
| 230 | 230 | /* release CLKOUT from self-refresh */ | |
| 231 | P0.L = lo(EBIU_SDGCTL); /* release CLKOUT from self-refresh */ | 231 | P0.L = lo(EBIU_SDGCTL); |
| 232 | P0.H = hi(EBIU_SDGCTL); | 232 | P0.H = hi(EBIU_SDGCTL); |
| 233 | |||
| 233 | R2 = [P0]; | 234 | R2 = [P0]; |
| 234 | BITSET(R2, 0); /* SCTLE enable CLKOUT */ | 235 | BITSET(R2, 0); /* SCTLE enable CLKOUT */ |
| 235 | [P0] = R2 | 236 | [P0] = R2 |
| 236 | SSYNC; | 237 | SSYNC; |
| 237 | 238 | ||
| 238 | P0.L = lo(EBIU_SDGCTL); /* release SDRAM from self-refresh */ | 239 | /* release SDRAM from self-refresh */ |
| 239 | P0.H = hi(EBIU_SDGCTL); | ||
| 240 | R2 = [P0]; | 240 | R2 = [P0]; |
| 241 | BITCLR(R2, 24); /* clear SRFS bit */ | 241 | BITCLR(R2, 24); /* clear SRFS bit */ |
| 242 | [P0] = R2 | 242 | [P0] = R2 |
| 243 | #endif | 243 | #endif |
| 244 | |||
| 244 | SSYNC; | 245 | SSYNC; |
| 245 | RTS; | 246 | RTS; |
| 246 | ENDPROC(_unset_dram_srfs) | 247 | ENDPROC(_unset_dram_srfs) |
