162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0
262306a36Sopenharmony_ci *
362306a36Sopenharmony_ci * AP325RXA sdram self/auto-refresh setup code
462306a36Sopenharmony_ci *
562306a36Sopenharmony_ci *  Copyright (C) 2009 Magnus Damm
662306a36Sopenharmony_ci */
762306a36Sopenharmony_ci
862306a36Sopenharmony_ci#include <linux/sys.h>
962306a36Sopenharmony_ci#include <linux/errno.h>
1062306a36Sopenharmony_ci#include <linux/linkage.h>
1162306a36Sopenharmony_ci#include <asm/asm-offsets.h>
1262306a36Sopenharmony_ci#include <asm/suspend.h>
1362306a36Sopenharmony_ci#include <asm/romimage-macros.h>
1462306a36Sopenharmony_ci
1562306a36Sopenharmony_ci/* code to enter and leave self-refresh. must be self-contained.
1662306a36Sopenharmony_ci * this code will be copied to on-chip memory and executed from there.
1762306a36Sopenharmony_ci */
1862306a36Sopenharmony_ci	.balign 4
1962306a36Sopenharmony_ciENTRY(ap325rxa_sdram_enter_start)
2062306a36Sopenharmony_ci
2162306a36Sopenharmony_ci	/* SBSC: disable power down and put in self-refresh mode */
2262306a36Sopenharmony_ci	mov.l	1f, r4
2362306a36Sopenharmony_ci	mov.l	2f, r1
2462306a36Sopenharmony_ci	mov.l	@r4, r2
2562306a36Sopenharmony_ci	or	r1, r2
2662306a36Sopenharmony_ci	mov.l   3f, r3
2762306a36Sopenharmony_ci	and	r3, r2
2862306a36Sopenharmony_ci	mov.l	r2, @r4
2962306a36Sopenharmony_ci
3062306a36Sopenharmony_ci	rts
3162306a36Sopenharmony_ci	 nop
3262306a36Sopenharmony_ci
3362306a36Sopenharmony_ci	.balign 4
3462306a36Sopenharmony_ci1:	.long	0xfe400008 /* SDCR0 */
3562306a36Sopenharmony_ci2:	.long	0x00000400
3662306a36Sopenharmony_ci3:	.long	0xffff7fff
3762306a36Sopenharmony_ciENTRY(ap325rxa_sdram_enter_end)
3862306a36Sopenharmony_ci
3962306a36Sopenharmony_ci	.balign 4
4062306a36Sopenharmony_ciENTRY(ap325rxa_sdram_leave_start)
4162306a36Sopenharmony_ci
4262306a36Sopenharmony_ci	/* SBSC: set auto-refresh mode */
4362306a36Sopenharmony_ci	mov.l	1f, r4
4462306a36Sopenharmony_ci	mov.l	@r4, r0
4562306a36Sopenharmony_ci	mov.l   4f, r1
4662306a36Sopenharmony_ci	and	r1, r0
4762306a36Sopenharmony_ci	mov.l	r0, @r4
4862306a36Sopenharmony_ci	mov.l	6f, r4
4962306a36Sopenharmony_ci	mov.l	8f, r0
5062306a36Sopenharmony_ci	mov.l	@r4, r1
5162306a36Sopenharmony_ci	mov	#-1, r4
5262306a36Sopenharmony_ci	add	r4, r1
5362306a36Sopenharmony_ci	or	r1, r0
5462306a36Sopenharmony_ci	mov.l	7f, r1
5562306a36Sopenharmony_ci	mov.l	r0, @r1
5662306a36Sopenharmony_ci
5762306a36Sopenharmony_ci	rts
5862306a36Sopenharmony_ci	 nop
5962306a36Sopenharmony_ci
6062306a36Sopenharmony_ci	.balign 4
6162306a36Sopenharmony_ci1:	.long	0xfe400008 /* SDCR0 */
6262306a36Sopenharmony_ci4:	.long	0xfffffbff
6362306a36Sopenharmony_ci6:	.long   0xfe40001c /* RTCOR */
6462306a36Sopenharmony_ci7:	.long   0xfe400018 /* RTCNT */
6562306a36Sopenharmony_ci8:	.long   0xa55a0000
6662306a36Sopenharmony_ciENTRY(ap325rxa_sdram_leave_end)
67