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