~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/arch/sh/boot/compressed/head_32.S

Version: ~ [ linux-6.11.5 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.58 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.114 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.169 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.228 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.284 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.322 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.9 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  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
 14 startup:
 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
 31 3:
 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
 60 1:      .long   1b
 61 2:      .long   clear_bss
 62 text_start_addr:
 63         .long   startup
 64 
 65         /* Clear BSS */
 66 clear_bss:
 67         mov.l   end_addr, r1
 68         mov.l   bss_start_addr, r2
 69         mov     #0, r0
 70 l1:
 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
 90 bss_start_addr:
 91         .long   __bss_start
 92 end_addr:
 93         .long   _end
 94 init_sr:
 95         .long   0x500000F0      /* Privileged mode, Bank=0, Block=1, IMASK=0xF */
 96 kexec_magic:
 97         .long   0x400000F0      /* magic used by kexec to parse zImage format */
 98 init_stack_addr:
 99         .long   stack_start
100 decompress_kernel_addr:
101         .long   decompress_kernel
102 kernel_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
110 fake_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

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php