1/* SPDX-License-Identifier: GPL-2.0 */ 2/* 3 * linux/arch/sh/boot/compressed/head.S 4 * 5 * Copyright (C) 1999 Stuart Menefy 6 * Copyright (C) 2003 SUGIOKA Toshinobu 7 */ 8 9.text 10 11#include <asm/page.h> 12 13 .global startup 14startup: 15 /* Load initial status register */ 16 mov.l init_sr, r1 17 ldc r1, sr 18 19 /* Move myself to proper location if necessary */ 20 mova 1f, r0 21 mov.l 1f, r2 22 cmp/eq r2, r0 23 bt clear_bss 24 sub r0, r2 25 mov.l bss_start_addr, r0 26 mov #0xffffffe0, r1 27 and r1, r0 ! align cache line 28 mov.l text_start_addr, r3 29 mov r0, r1 30 sub r2, r1 313: 32 mov.l @r1, r4 33 mov.l @(4,r1), r5 34 mov.l @(8,r1), r6 35 mov.l @(12,r1), r7 36 mov.l @(16,r1), r8 37 mov.l @(20,r1), r9 38 mov.l @(24,r1), r10 39 mov.l @(28,r1), r11 40 mov.l r4, @r0 41 mov.l r5, @(4,r0) 42 mov.l r6, @(8,r0) 43 mov.l r7, @(12,r0) 44 mov.l r8, @(16,r0) 45 mov.l r9, @(20,r0) 46 mov.l r10, @(24,r0) 47 mov.l r11, @(28,r0) 48#ifdef CONFIG_CPU_SH4 49 ocbwb @r0 50#endif 51 cmp/hi r3, r0 52 add #-32, r0 53 bt/s 3b 54 add #-32, r1 55 mov.l 2f, r0 56 jmp @r0 57 nop 58 59 .align 2 601: .long 1b 612: .long clear_bss 62text_start_addr: 63 .long startup 64 65 /* Clear BSS */ 66clear_bss: 67 mov.l end_addr, r1 68 mov.l bss_start_addr, r2 69 mov #0, r0 70l1: 71 mov.l r0, @-r1 72 cmp/eq r1,r2 73 bf l1 74 75 /* Set the initial pointer. */ 76 mov.l init_stack_addr, r0 77 mov.l @r0, r15 78 79 /* Decompress the kernel */ 80 mov.l decompress_kernel_addr, r0 81 jsr @r0 82 nop 83 84 /* Jump to the start of the decompressed kernel */ 85 mov.l kernel_start_addr, r0 86 jmp @r0 87 nop 88 89 .align 2 90bss_start_addr: 91 .long __bss_start 92end_addr: 93 .long _end 94init_sr: 95 .long 0x500000F0 /* Privileged mode, Bank=0, Block=1, IMASK=0xF */ 96kexec_magic: 97 .long 0x400000F0 /* magic used by kexec to parse zImage format */ 98init_stack_addr: 99 .long stack_start 100decompress_kernel_addr: 101 .long decompress_kernel 102kernel_start_addr: 103#ifdef CONFIG_32BIT 104 .long ___pa(_text+PAGE_SIZE) 105#else 106 .long _text+PAGE_SIZE 107#endif 108 109 .align 9 110fake_headers_as_bzImage: 111 .word 0 112 .ascii "HdrS" ! header signature 113 .word 0x0202 ! header version number (>= 0x0105) 114 ! or else old loadlin-1.5 will fail) 115 .word 0 ! default_switch 116 .word 0 ! SETUPSEG 117 .word 0x1000 118 .word 0 ! pointing to kernel version string 119 .byte 0 ! = 0, old one (LILO, Loadlin, 120 ! 0xTV: T=0 for LILO 121 ! V = version 122 .byte 1 ! Load flags bzImage=1 123 .word 0x8000 ! size to move, when setup is not 124 .long 0x100000 ! 0x100000 = default for big kernel 125 .long 0 ! address of loaded ramdisk image 126 .long 0 # its size in bytes 127