xref: /OK3568_Linux_fs/kernel/arch/arm/mach-pxa/mioa701_bootresume.S (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun/* SPDX-License-Identifier: GPL-2.0-only */
2*4882a593Smuzhiyun/* Bootloader to resume MIO A701
3*4882a593Smuzhiyun *
4*4882a593Smuzhiyun * 2007-1-12 Robert Jarzmik
5*4882a593Smuzhiyun*/
6*4882a593Smuzhiyun
7*4882a593Smuzhiyun#include <linux/linkage.h>
8*4882a593Smuzhiyun#include <asm/assembler.h>
9*4882a593Smuzhiyun
10*4882a593Smuzhiyun/*
11*4882a593Smuzhiyun * Note: Yes, part of the following code is located into the .data section.
12*4882a593Smuzhiyun *       This is to allow jumpaddr to be accessed with a relative load
13*4882a593Smuzhiyun *       while we can't rely on any MMU translation.  We could have put
14*4882a593Smuzhiyun *       sleep_save_sp in the .text section as well, but some setups might
15*4882a593Smuzhiyun *       insist on it to be truly read-only.
16*4882a593Smuzhiyun */
17*4882a593Smuzhiyun	.data
18*4882a593Smuzhiyun	.align	2
19*4882a593SmuzhiyunENTRY(mioa701_bootstrap)
20*4882a593Smuzhiyun0:
21*4882a593Smuzhiyun	b	1f
22*4882a593SmuzhiyunENTRY(mioa701_jumpaddr)
23*4882a593Smuzhiyun	.word	0x40f00008		@ PSPR in no-MMU mode
24*4882a593Smuzhiyun1:
25*4882a593Smuzhiyun	mov	r0,     #0xa0000000	@ Don't suppose memory access works
26*4882a593Smuzhiyun	orr	r0, r0, #0x00200000	@ even if it's supposed to
27*4882a593Smuzhiyun	orr	r0, r0, #0x0000b000
28*4882a593Smuzhiyun	mov	r1, #0
29*4882a593Smuzhiyun	str	r1, [r0]		@ Early disable resume for next boot
30*4882a593Smuzhiyun	ldr	r0, mioa701_jumpaddr	@ (Murphy's Law)
31*4882a593Smuzhiyun	ldr	r0, [r0]
32*4882a593Smuzhiyun	ret	r0
33*4882a593Smuzhiyun2:
34*4882a593Smuzhiyun
35*4882a593SmuzhiyunENTRY(mioa701_bootstrap_lg)
36*4882a593Smuzhiyun	.data
37*4882a593Smuzhiyun	.align	2
38*4882a593Smuzhiyun	.word	2b-0b
39