1*4882a593Smuzhiyun/* SPDX-License-Identifier: GPL-2.0 */ 2*4882a593Smuzhiyun/* 3*4882a593Smuzhiyun * linux/arch/sh/boot/romimage/head.S 4*4882a593Smuzhiyun * 5*4882a593Smuzhiyun * Board specific setup code, executed before zImage loader 6*4882a593Smuzhiyun */ 7*4882a593Smuzhiyun 8*4882a593Smuzhiyun.text 9*4882a593Smuzhiyun #include <asm/page.h> 10*4882a593Smuzhiyun 11*4882a593Smuzhiyun .global romstart 12*4882a593Smuzhiyunromstart: 13*4882a593Smuzhiyun /* include board specific setup code */ 14*4882a593Smuzhiyun#include <mach/romimage.h> 15*4882a593Smuzhiyun 16*4882a593Smuzhiyun#ifdef CONFIG_ROMIMAGE_MMCIF 17*4882a593Smuzhiyun /* load the romImage to above the empty zero page */ 18*4882a593Smuzhiyun mov.l empty_zero_page_dst, r4 19*4882a593Smuzhiyun mov.l empty_zero_page_dst_adj, r5 20*4882a593Smuzhiyun add r5, r4 21*4882a593Smuzhiyun mov.l bytes_to_load, r5 22*4882a593Smuzhiyun mov.l loader_function, r7 23*4882a593Smuzhiyun jsr @r7 24*4882a593Smuzhiyun mov r4, r15 25*4882a593Smuzhiyun 26*4882a593Smuzhiyun mov.l empty_zero_page_dst, r4 27*4882a593Smuzhiyun mov.l empty_zero_page_dst_adj, r5 28*4882a593Smuzhiyun add r5, r4 29*4882a593Smuzhiyun mov.l loaded_code_offs, r5 30*4882a593Smuzhiyun add r5, r4 31*4882a593Smuzhiyun jmp @r4 32*4882a593Smuzhiyun nop 33*4882a593Smuzhiyun 34*4882a593Smuzhiyun .balign 4 35*4882a593Smuzhiyunempty_zero_page_dst_adj: 36*4882a593Smuzhiyun .long PAGE_SIZE 37*4882a593Smuzhiyunbytes_to_load: 38*4882a593Smuzhiyun .long end_data - romstart 39*4882a593Smuzhiyunloader_function: 40*4882a593Smuzhiyun .long mmcif_loader 41*4882a593Smuzhiyunloaded_code_offs: 42*4882a593Smuzhiyun .long loaded_code - romstart 43*4882a593Smuzhiyunloaded_code: 44*4882a593Smuzhiyun#endif /* CONFIG_ROMIMAGE_MMCIF */ 45*4882a593Smuzhiyun 46*4882a593Smuzhiyun /* copy the empty_zero_page contents to where vmlinux expects it */ 47*4882a593Smuzhiyun mova extra_data_pos, r0 48*4882a593Smuzhiyun mov.l extra_data_size, r1 49*4882a593Smuzhiyun add r1, r0 50*4882a593Smuzhiyun mov.l empty_zero_page_dst, r1 51*4882a593Smuzhiyun mov #(PAGE_SHIFT - 4), r4 52*4882a593Smuzhiyun mov #1, r3 53*4882a593Smuzhiyun shld r4, r3 /* r3 = PAGE_SIZE / 16 */ 54*4882a593Smuzhiyun 55*4882a593Smuzhiyun1: 56*4882a593Smuzhiyun mov.l @r0, r4 57*4882a593Smuzhiyun mov.l @(4, r0), r5 58*4882a593Smuzhiyun mov.l @(8, r0), r6 59*4882a593Smuzhiyun mov.l @(12, r0), r7 60*4882a593Smuzhiyun add #16,r0 61*4882a593Smuzhiyun mov.l r4, @r1 62*4882a593Smuzhiyun mov.l r5, @(4, r1) 63*4882a593Smuzhiyun mov.l r6, @(8, r1) 64*4882a593Smuzhiyun mov.l r7, @(12, r1) 65*4882a593Smuzhiyun dt r3 66*4882a593Smuzhiyun add #16,r1 67*4882a593Smuzhiyun bf 1b 68*4882a593Smuzhiyun 69*4882a593Smuzhiyun /* jump to the zImage entry point located after the zero page data */ 70*4882a593Smuzhiyun mov #PAGE_SHIFT, r4 71*4882a593Smuzhiyun mov #1, r1 72*4882a593Smuzhiyun shld r4, r1 73*4882a593Smuzhiyun mova extra_data_pos, r0 74*4882a593Smuzhiyun add r1, r0 75*4882a593Smuzhiyun mov.l extra_data_size, r1 76*4882a593Smuzhiyun add r1, r0 77*4882a593Smuzhiyun jmp @r0 78*4882a593Smuzhiyun nop 79*4882a593Smuzhiyun 80*4882a593Smuzhiyun .align 2 81*4882a593Smuzhiyunempty_zero_page_dst: 82*4882a593Smuzhiyun .long _text 83*4882a593Smuzhiyunextra_data_pos: 84*4882a593Smuzhiyunextra_data_size: 85*4882a593Smuzhiyun .long zero_page_pos - extra_data_pos 86