1 /* 1 /* 2 * Startup glue code to uncompress the kernel !! 2 * This file is subject to the terms and conditions of the GNU General Public >> 3 * License. See the file "COPYING" in the main directory of this archive >> 4 * for more details. 3 * 5 * 4 * (C) 2017 Helge Deller <deller@gmx.de> !! 6 * Copyright (C) 1994, 1995 Waldorf Electronics >> 7 * Written by Ralf Baechle and Andreas Busse >> 8 * Copyright (C) 1995 - 1999 Ralf Baechle >> 9 * Copyright (C) 1996 Paul M. Antoine >> 10 * Modified for DECStation and hence R3000 support by Paul M. Antoine >> 11 * Further modifications by David S. Miller and Harald Koerfgen >> 12 * Copyright (C) 1999 Silicon Graphics, Inc. 5 */ 13 */ 6 14 7 #include <linux/init.h> !! 15 #include <asm/asm.h> 8 #include <linux/linkage.h> !! 16 #include <asm/regdef.h> 9 #include <asm/asm-offsets.h> !! 17 10 #include <asm/page.h> !! 18 LEAF(start) 11 #include <asm/psw.h> !! 19 /* Save boot rom start args */ 12 #include <asm/pdc.h> !! 20 move s0, a0 13 #include <asm/assembly.h> !! 21 move s1, a1 14 #include "sizes.h" !! 22 move s2, a2 15 !! 23 move s3, a3 16 #define BOOTADDR(x) (x) << 17 << 18 #ifndef CONFIG_64BIT << 19 .import $global$ /* for << 20 #endif /*!CONFIG_64BIT*/ << 21 << 22 __HEAD << 23 << 24 ENTRY(startup) << 25 .level PA_ASM_LEVEL << 26 << 27 #define PSW_W_SM 0x200 << 28 #define PSW_W_BIT 36 << 29 << 30 ;! nuke the W bit, saving original val << 31 .level 2.0 << 32 rsm PSW_W_SM, %r1 << 33 << 34 .level 1.1 << 35 extrw,u %r1, PSW_W_BIT-32, 1, %r1 << 36 copy %r1, %arg0 << 37 << 38 /* Make sure sr4-sr7 are set to zero f << 39 mtsp %r0,%sr4 << 40 mtsp %r0,%sr5 << 41 mtsp %r0,%sr6 << 42 mtsp %r0,%sr7 << 43 24 44 /* Clear BSS */ 25 /* Clear BSS */ >> 26 PTR_LA a0, _edata >> 27 PTR_LA a2, _end >> 28 1: PTR_S zero, 0(a0) >> 29 PTR_ADDIU a0, a0, PTRSIZE >> 30 bne a2, a0, 1b >> 31 >> 32 PTR_LA a0, (.heap) /* heap address */ >> 33 PTR_LA sp, (.stack + 8192) /* stack address */ >> 34 >> 35 PTR_LA t9, decompress_kernel >> 36 jalr t9 >> 37 >> 38 2: >> 39 move a0, s0 >> 40 move a1, s1 >> 41 move a2, s2 >> 42 move a3, s3 >> 43 PTR_LI t9, KERNEL_ENTRY >> 44 jalr t9 45 45 46 .import _bss,data !! 46 3: 47 .import _ebss,data !! 47 b 3b 48 48 49 load32 BOOTADDR(_bss),%r3 !! 49 END(start) 50 load32 BOOTADDR(_ebss),%r4 << 51 ldo FRAME_SIZE(%r4),%sp /* sta << 52 $bss_loop: << 53 cmpb,<<,n %r3,%r4,$bss_loop << 54 stw,ma %r0,4(%r3) << 55 << 56 /* Initialize the global data pointer << 57 loadgp << 58 << 59 /* arg0..arg4 were set by palo. */ << 60 copy %arg1, %r6 /* com << 61 copy %arg2, %r7 /* rd- << 62 copy %arg3, %r8 /* rd- << 63 load32 BOOTADDR(decompress_kernel),%r << 64 << 65 #ifdef CONFIG_64BIT << 66 .level PA_ASM_LEVEL << 67 ssm PSW_W_SM, %r0 /* set << 68 depdi 0, 31, 32, %r3 << 69 #endif << 70 load32 BOOTADDR(startup_continue), %r << 71 bv,n 0(%r3) << 72 << 73 startup_continue: << 74 #ifdef CONFIG_64BIT << 75 .level PA_ASM_LEVEL << 76 rsm PSW_W_SM, %r0 /* cle << 77 #endif << 78 << 79 load32 KERNEL_BINARY_TEXT_START, %arg << 80 copy %r6, %arg1 /* com << 81 copy %r7, %arg2 /* rd- << 82 copy %r8, %arg3 /* rd- << 83 50 84 bv,n 0(%ret0) !! 51 .comm .heap,BOOT_HEAP_SIZE,4 85 END(startup) !! 52 .comm .stack,4096*2,4
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.