Răsfoiți Sursa

sh: Add KFR2R09 specific memory pre/post R-standby code

Add R-standby support to the KFR2R09 sdram code.

Signed-off-by: Magnus Damm <damm@opensource.se>
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
Magnus Damm 15 ani în urmă
părinte
comite
58ee987e2f
2 a modificat fișierele cu 30 adăugiri și 1 ștergeri
  1. 28 0
      arch/sh/boards/mach-kfr2r09/sdram.S
  2. 2 1
      arch/sh/boards/mach-kfr2r09/setup.c

+ 28 - 0
arch/sh/boards/mach-kfr2r09/sdram.S

@@ -39,6 +39,10 @@ ENTRY(kfr2r09_sdram_leave_start)
 
 
 	/* DBSC: put memory in auto-refresh mode */
 	/* DBSC: put memory in auto-refresh mode */
 
 
+	mov.l	@(SH_SLEEP_MODE, r5), r0
+	tst	#SUSP_SH_RSTANDBY, r0
+	bf	resume_rstandby
+
 	ED 0xFD000040, 0x00000000 /* DBRFPDN0 */
 	ED 0xFD000040, 0x00000000 /* DBRFPDN0 */
 	WAIT 1
 	WAIT 1
 	ED 0xFD000014, 0x00000002 /* DBCMDCNT (PALL) */
 	ED 0xFD000014, 0x00000002 /* DBCMDCNT (PALL) */
@@ -49,4 +53,28 @@ ENTRY(kfr2r09_sdram_leave_start)
 	rts
 	rts
 	 nop
 	 nop
 
 
+resume_rstandby:
+
+	/* DBSC: re-initialize and put in auto-refresh */
+
+	ED 0xFD000108, 0x40000301 /* DBPDCNT0 */
+	ED 0xFD000020, 0x011B0002 /* DBCONF */
+	ED 0xFD000030, 0x03060E02 /* DBTR0 */
+	ED 0xFD000034, 0x01020102 /* DBTR1 */
+	ED 0xFD000038, 0x01090406 /* DBTR2 */
+	ED 0xFD000008, 0x00000004 /* DBKIND */
+	ED 0xFD000040, 0x00000001 /* DBRFPDN0 */
+	ED 0xFD000040, 0x00000000 /* DBRFPDN0 */
+	ED 0xFD000018, 0x00000001 /* DBCKECNT */
+	WAIT 1
+	ED 0xFD000010, 0x00000001 /* DBEN */
+	ED 0xFD000044, 0x000004AF /* DBRFPDN1 */
+	ED 0xFD000048, 0x20CF0037 /* DBRFPDN2 */
+	ED 0xFD000014, 0x00000004 /* DBCMDCNT (REF) */
+	ED 0xFD000108, 0x40000300 /* DBPDCNT0 */
+	ED 0xFD000040, 0x00010000 /* DBRFPDN0 */
+
+	rts
+	 nop
+
 ENTRY(kfr2r09_sdram_leave_end)
 ENTRY(kfr2r09_sdram_leave_end)

+ 2 - 1
arch/sh/boards/mach-kfr2r09/setup.c

@@ -453,7 +453,8 @@ extern char kfr2r09_sdram_leave_end;
 static int __init kfr2r09_devices_setup(void)
 static int __init kfr2r09_devices_setup(void)
 {
 {
 	/* register board specific self-refresh code */
 	/* register board specific self-refresh code */
-	sh_mobile_register_self_refresh(SUSP_SH_STANDBY | SUSP_SH_SF,
+	sh_mobile_register_self_refresh(SUSP_SH_STANDBY | SUSP_SH_SF |
+					SUSP_SH_RSTANDBY,
 					&kfr2r09_sdram_enter_start,
 					&kfr2r09_sdram_enter_start,
 					&kfr2r09_sdram_enter_end,
 					&kfr2r09_sdram_enter_end,
 					&kfr2r09_sdram_leave_start,
 					&kfr2r09_sdram_leave_start,