1*b2441318SGreg Kroah-Hartman/* SPDX-License-Identifier: GPL-2.0 */ 23c928320SMagnus Damm/* 33c928320SMagnus Damm * linux/arch/sh/boot/romimage/head.S 43c928320SMagnus Damm * 53c928320SMagnus Damm * Board specific setup code, executed before zImage loader 63c928320SMagnus Damm */ 73c928320SMagnus Damm 83c928320SMagnus Damm.text 96a5a0b91SMagnus Damm #include <asm/page.h> 106a5a0b91SMagnus Damm 113c928320SMagnus Damm .global romstart 123c928320SMagnus Dammromstart: 136a5a0b91SMagnus Damm /* include board specific setup code */ 142d2bcd31SMagnus Damm#include <mach/romimage.h> 156a5a0b91SMagnus Damm 164705b2e8SMagnus Damm#ifdef CONFIG_ROMIMAGE_MMCIF 174705b2e8SMagnus Damm /* load the romImage to above the empty zero page */ 184705b2e8SMagnus Damm mov.l empty_zero_page_dst, r4 194705b2e8SMagnus Damm mov.l empty_zero_page_dst_adj, r5 204705b2e8SMagnus Damm add r5, r4 214705b2e8SMagnus Damm mov.l bytes_to_load, r5 224705b2e8SMagnus Damm mov.l loader_function, r7 234705b2e8SMagnus Damm jsr @r7 244705b2e8SMagnus Damm mov r4, r15 254705b2e8SMagnus Damm 264705b2e8SMagnus Damm mov.l empty_zero_page_dst, r4 274705b2e8SMagnus Damm mov.l empty_zero_page_dst_adj, r5 284705b2e8SMagnus Damm add r5, r4 294705b2e8SMagnus Damm mov.l loaded_code_offs, r5 304705b2e8SMagnus Damm add r5, r4 314705b2e8SMagnus Damm jmp @r4 324705b2e8SMagnus Damm nop 334705b2e8SMagnus Damm 344705b2e8SMagnus Damm .balign 4 354705b2e8SMagnus Dammempty_zero_page_dst_adj: 364705b2e8SMagnus Damm .long PAGE_SIZE 374705b2e8SMagnus Dammbytes_to_load: 384705b2e8SMagnus Damm .long end_data - romstart 394705b2e8SMagnus Dammloader_function: 404705b2e8SMagnus Damm .long mmcif_loader 414705b2e8SMagnus Dammloaded_code_offs: 424705b2e8SMagnus Damm .long loaded_code - romstart 434705b2e8SMagnus Dammloaded_code: 444705b2e8SMagnus Damm#endif /* CONFIG_ROMIMAGE_MMCIF */ 454705b2e8SMagnus Damm 466a5a0b91SMagnus Damm /* copy the empty_zero_page contents to where vmlinux expects it */ 47b34bce45SMagnus Damm mova extra_data_pos, r0 48b34bce45SMagnus Damm mov.l extra_data_size, r1 49b34bce45SMagnus Damm add r1, r0 506a5a0b91SMagnus Damm mov.l empty_zero_page_dst, r1 516a5a0b91SMagnus Damm mov #(PAGE_SHIFT - 4), r4 526a5a0b91SMagnus Damm mov #1, r3 536a5a0b91SMagnus Damm shld r4, r3 /* r3 = PAGE_SIZE / 16 */ 546a5a0b91SMagnus Damm 556a5a0b91SMagnus Damm1: 566a5a0b91SMagnus Damm mov.l @r0, r4 576a5a0b91SMagnus Damm mov.l @(4, r0), r5 586a5a0b91SMagnus Damm mov.l @(8, r0), r6 596a5a0b91SMagnus Damm mov.l @(12, r0), r7 606a5a0b91SMagnus Damm add #16,r0 616a5a0b91SMagnus Damm mov.l r4, @r1 626a5a0b91SMagnus Damm mov.l r5, @(4, r1) 636a5a0b91SMagnus Damm mov.l r6, @(8, r1) 646a5a0b91SMagnus Damm mov.l r7, @(12, r1) 656a5a0b91SMagnus Damm dt r3 666a5a0b91SMagnus Damm add #16,r1 676a5a0b91SMagnus Damm bf 1b 686a5a0b91SMagnus Damm 696a5a0b91SMagnus Damm /* jump to the zImage entry point located after the zero page data */ 706a5a0b91SMagnus Damm mov #PAGE_SHIFT, r4 716a5a0b91SMagnus Damm mov #1, r1 726a5a0b91SMagnus Damm shld r4, r1 73b34bce45SMagnus Damm mova extra_data_pos, r0 74b34bce45SMagnus Damm add r1, r0 75b34bce45SMagnus Damm mov.l extra_data_size, r1 766a5a0b91SMagnus Damm add r1, r0 776a5a0b91SMagnus Damm jmp @r0 786a5a0b91SMagnus Damm nop 796a5a0b91SMagnus Damm 806a5a0b91SMagnus Damm .align 2 816a5a0b91SMagnus Dammempty_zero_page_dst: 826a5a0b91SMagnus Damm .long _text 83b34bce45SMagnus Dammextra_data_pos: 84b34bce45SMagnus Dammextra_data_size: 85b34bce45SMagnus Damm .long zero_page_pos - extra_data_pos 86