18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 28c2ecf20Sopenharmony_ci * 38c2ecf20Sopenharmony_ci * Ecovec24 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(ecovec24_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(ecovec24_sdram_enter_end) 338c2ecf20Sopenharmony_ci 348c2ecf20Sopenharmony_ci .balign 4 358c2ecf20Sopenharmony_ciENTRY(ecovec24_sdram_leave_start) 368c2ecf20Sopenharmony_ci 378c2ecf20Sopenharmony_ci mov.l @(SH_SLEEP_MODE, r5), r0 388c2ecf20Sopenharmony_ci tst #SUSP_SH_RSTANDBY, r0 398c2ecf20Sopenharmony_ci bf resume_rstandby 408c2ecf20Sopenharmony_ci 418c2ecf20Sopenharmony_ci /* DBSC: put memory in auto-refresh mode */ 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, 0x00000181 /* DBPDCNT0 */ 588c2ecf20Sopenharmony_ci ED 0xFD000020, 0x015B0002 /* DBCONF */ 598c2ecf20Sopenharmony_ci ED 0xFD000030, 0x03071502 /* DBTR0 */ 608c2ecf20Sopenharmony_ci ED 0xFD000034, 0x02020102 /* DBTR1 */ 618c2ecf20Sopenharmony_ci ED 0xFD000038, 0x01090405 /* DBTR2 */ 628c2ecf20Sopenharmony_ci ED 0xFD00003C, 0x00000002 /* DBTR3 */ 638c2ecf20Sopenharmony_ci ED 0xFD000008, 0x00000005 /* DBKIND */ 648c2ecf20Sopenharmony_ci ED 0xFD000040, 0x00000001 /* DBRFPDN0 */ 658c2ecf20Sopenharmony_ci ED 0xFD000040, 0x00000000 /* DBRFPDN0 */ 668c2ecf20Sopenharmony_ci ED 0xFD000018, 0x00000001 /* DBCKECNT */ 678c2ecf20Sopenharmony_ci 688c2ecf20Sopenharmony_ci mov #100,r0 698c2ecf20Sopenharmony_ciWAIT_400NS: 708c2ecf20Sopenharmony_ci dt r0 718c2ecf20Sopenharmony_ci bf WAIT_400NS 728c2ecf20Sopenharmony_ci 738c2ecf20Sopenharmony_ci ED 0xFD000014, 0x00000002 /* DBCMDCNT (PALL) */ 748c2ecf20Sopenharmony_ci ED 0xFD000060, 0x00020000 /* DBMRCNT (EMR2) */ 758c2ecf20Sopenharmony_ci ED 0xFD000060, 0x00030000 /* DBMRCNT (EMR3) */ 768c2ecf20Sopenharmony_ci ED 0xFD000060, 0x00010004 /* DBMRCNT (EMR) */ 778c2ecf20Sopenharmony_ci ED 0xFD000060, 0x00000532 /* DBMRCNT (MRS) */ 788c2ecf20Sopenharmony_ci ED 0xFD000014, 0x00000002 /* DBCMDCNT (PALL) */ 798c2ecf20Sopenharmony_ci ED 0xFD000014, 0x00000004 /* DBCMDCNT (REF) */ 808c2ecf20Sopenharmony_ci ED 0xFD000014, 0x00000004 /* DBCMDCNT (REF) */ 818c2ecf20Sopenharmony_ci ED 0xFD000060, 0x00000432 /* DBMRCNT (MRS) */ 828c2ecf20Sopenharmony_ci ED 0xFD000060, 0x000103c0 /* DBMRCNT (EMR) */ 838c2ecf20Sopenharmony_ci ED 0xFD000060, 0x00010040 /* DBMRCNT (EMR) */ 848c2ecf20Sopenharmony_ci 858c2ecf20Sopenharmony_ci mov #100,r0 868c2ecf20Sopenharmony_ciWAIT_400NS_2: 878c2ecf20Sopenharmony_ci dt r0 888c2ecf20Sopenharmony_ci bf WAIT_400NS_2 898c2ecf20Sopenharmony_ci 908c2ecf20Sopenharmony_ci ED 0xFD000010, 0x00000001 /* DBEN */ 918c2ecf20Sopenharmony_ci ED 0xFD000044, 0x0000050f /* DBRFPDN1 */ 928c2ecf20Sopenharmony_ci ED 0xFD000048, 0x236800e6 /* DBRFPDN2 */ 938c2ecf20Sopenharmony_ci 948c2ecf20Sopenharmony_ci mov.l DUMMY,r0 958c2ecf20Sopenharmony_ci mov.l @r0, r1 /* force single dummy read */ 968c2ecf20Sopenharmony_ci 978c2ecf20Sopenharmony_ci ED 0xFD000014, 0x00000002 /* DBCMDCNT (PALL) */ 988c2ecf20Sopenharmony_ci ED 0xFD000014, 0x00000004 /* DBCMDCNT (REF) */ 998c2ecf20Sopenharmony_ci ED 0xFD000108, 0x00000080 /* DBPDCNT0 */ 1008c2ecf20Sopenharmony_ci ED 0xFD000040, 0x00010000 /* DBRFPDN0 */ 1018c2ecf20Sopenharmony_ci 1028c2ecf20Sopenharmony_ci rts 1038c2ecf20Sopenharmony_ci nop 1048c2ecf20Sopenharmony_ci 1058c2ecf20Sopenharmony_ci .balign 4 1068c2ecf20Sopenharmony_ciDUMMY: .long 0xac400000 1078c2ecf20Sopenharmony_ci 1088c2ecf20Sopenharmony_ciENTRY(ecovec24_sdram_leave_end) 109