xref: /openbmc/linux/arch/sh/boot/romimage/head.S (revision 498495dba268b20e8eadd7fe93c140c68b6cc9d2)
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