18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 28c2ecf20Sopenharmony_ci * 38c2ecf20Sopenharmony_ci * KFR2R09 sdram self/auto-refresh setup code 48c2ecf20Sopenharmony_ci * 58c2ecf20Sopenharmony_ci * Copyright (C) 2009 Magnus Damm 68c2ecf20Sopenharmony_ci */ 78c2ecf20Sopenharmony_ci 88c2ecf20Sopenharmony_ci#include <linux/sys.h> 98c2ecf20Sopenharmony_ci#include <linux/errno.h> 108c2ecf20Sopenharmony_ci#include <linux/linkage.h> 118c2ecf20Sopenharmony_ci#include <asm/asm-offsets.h> 128c2ecf20Sopenharmony_ci#include <asm/suspend.h> 138c2ecf20Sopenharmony_ci#include <asm/romimage-macros.h> 148c2ecf20Sopenharmony_ci 158c2ecf20Sopenharmony_ci/* code to enter and leave self-refresh. must be self-contained. 168c2ecf20Sopenharmony_ci * this code will be copied to on-chip memory and executed from there. 178c2ecf20Sopenharmony_ci */ 188c2ecf20Sopenharmony_ci .balign 4 198c2ecf20Sopenharmony_ciENTRY(kfr2r09_sdram_enter_start) 208c2ecf20Sopenharmony_ci 218c2ecf20Sopenharmony_ci /* DBSC: put memory in self-refresh mode */ 228c2ecf20Sopenharmony_ci 238c2ecf20Sopenharmony_ci ED 0xFD000010, 0x00000000 /* DBEN */ 248c2ecf20Sopenharmony_ci ED 0xFD000040, 0x00000000 /* DBRFPDN0 */ 258c2ecf20Sopenharmony_ci ED 0xFD000014, 0x00000002 /* DBCMDCNT (PALL) */ 268c2ecf20Sopenharmony_ci ED 0xFD000014, 0x00000004 /* DBCMDCNT (REF) */ 278c2ecf20Sopenharmony_ci ED 0xFD000040, 0x00000001 /* DBRFPDN0 */ 288c2ecf20Sopenharmony_ci 298c2ecf20Sopenharmony_ci rts 308c2ecf20Sopenharmony_ci nop 318c2ecf20Sopenharmony_ci 328c2ecf20Sopenharmony_ciENTRY(kfr2r09_sdram_enter_end) 338c2ecf20Sopenharmony_ci 348c2ecf20Sopenharmony_ci .balign 4 358c2ecf20Sopenharmony_ciENTRY(kfr2r09_sdram_leave_start) 368c2ecf20Sopenharmony_ci 378c2ecf20Sopenharmony_ci /* DBSC: put memory in auto-refresh mode */ 388c2ecf20Sopenharmony_ci 398c2ecf20Sopenharmony_ci mov.l @(SH_SLEEP_MODE, r5), r0 408c2ecf20Sopenharmony_ci tst #SUSP_SH_RSTANDBY, r0 418c2ecf20Sopenharmony_ci bf resume_rstandby 428c2ecf20Sopenharmony_ci 438c2ecf20Sopenharmony_ci ED 0xFD000040, 0x00000000 /* DBRFPDN0 */ 448c2ecf20Sopenharmony_ci WAIT 1 458c2ecf20Sopenharmony_ci ED 0xFD000014, 0x00000002 /* DBCMDCNT (PALL) */ 468c2ecf20Sopenharmony_ci ED 0xFD000014, 0x00000004 /* DBCMDCNT (REF) */ 478c2ecf20Sopenharmony_ci ED 0xFD000010, 0x00000001 /* DBEN */ 488c2ecf20Sopenharmony_ci ED 0xFD000040, 0x00010000 /* DBRFPDN0 */ 498c2ecf20Sopenharmony_ci 508c2ecf20Sopenharmony_ci rts 518c2ecf20Sopenharmony_ci nop 528c2ecf20Sopenharmony_ci 538c2ecf20Sopenharmony_ciresume_rstandby: 548c2ecf20Sopenharmony_ci 558c2ecf20Sopenharmony_ci /* DBSC: re-initialize and put in auto-refresh */ 568c2ecf20Sopenharmony_ci 578c2ecf20Sopenharmony_ci ED 0xFD000108, 0x40000301 /* DBPDCNT0 */ 588c2ecf20Sopenharmony_ci ED 0xFD000020, 0x011B0002 /* DBCONF */ 598c2ecf20Sopenharmony_ci ED 0xFD000030, 0x03060E02 /* DBTR0 */ 608c2ecf20Sopenharmony_ci ED 0xFD000034, 0x01020102 /* DBTR1 */ 618c2ecf20Sopenharmony_ci ED 0xFD000038, 0x01090406 /* DBTR2 */ 628c2ecf20Sopenharmony_ci ED 0xFD000008, 0x00000004 /* DBKIND */ 638c2ecf20Sopenharmony_ci ED 0xFD000040, 0x00000001 /* DBRFPDN0 */ 648c2ecf20Sopenharmony_ci ED 0xFD000040, 0x00000000 /* DBRFPDN0 */ 658c2ecf20Sopenharmony_ci ED 0xFD000018, 0x00000001 /* DBCKECNT */ 668c2ecf20Sopenharmony_ci WAIT 1 678c2ecf20Sopenharmony_ci ED 0xFD000010, 0x00000001 /* DBEN */ 688c2ecf20Sopenharmony_ci ED 0xFD000044, 0x000004AF /* DBRFPDN1 */ 698c2ecf20Sopenharmony_ci ED 0xFD000048, 0x20CF0037 /* DBRFPDN2 */ 708c2ecf20Sopenharmony_ci ED 0xFD000014, 0x00000004 /* DBCMDCNT (REF) */ 718c2ecf20Sopenharmony_ci ED 0xFD000108, 0x40000300 /* DBPDCNT0 */ 728c2ecf20Sopenharmony_ci ED 0xFD000040, 0x00010000 /* DBRFPDN0 */ 738c2ecf20Sopenharmony_ci 748c2ecf20Sopenharmony_ci rts 758c2ecf20Sopenharmony_ci nop 768c2ecf20Sopenharmony_ci 778c2ecf20Sopenharmony_ciENTRY(kfr2r09_sdram_leave_end) 78