/*1* Startup glue code to uncompress the kernel2*3* (C) 2017 Helge Deller <[email protected]>4*/56#include <linux/init.h>7#include <linux/linkage.h>8#include <asm/asm-offsets.h>9#include <asm/page.h>10#include <asm/psw.h>11#include <asm/pdc.h>12#include <asm/assembly.h>13#include "sizes.h"1415#define BOOTADDR(x) (x)1617#ifndef CONFIG_64BIT18.import $global$ /* forward declaration */19#endif /*!CONFIG_64BIT*/2021__HEAD2223ENTRY(startup)24.level PA_ASM_LEVEL2526#define PSW_W_SM 0x20027#define PSW_W_BIT 362829;! nuke the W bit, saving original value30.level 2.031rsm PSW_W_SM, %r13233.level 1.134extrw,u %r1, PSW_W_BIT-32, 1, %r135copy %r1, %arg03637/* Make sure sr4-sr7 are set to zero for the kernel address space */38mtsp %r0,%sr439mtsp %r0,%sr540mtsp %r0,%sr641mtsp %r0,%sr74243/* Clear BSS */4445.import _bss,data46.import _ebss,data4748load32 BOOTADDR(_bss),%r349load32 BOOTADDR(_ebss),%r450ldo FRAME_SIZE(%r4),%sp /* stack at end of bss */51$bss_loop:52cmpb,<<,n %r3,%r4,$bss_loop53stw,ma %r0,4(%r3)5455/* Initialize the global data pointer */56loadgp5758/* arg0..arg4 were set by palo. */59copy %arg1, %r6 /* command line */60copy %arg2, %r7 /* rd-start */61copy %arg3, %r8 /* rd-end */62load32 BOOTADDR(decompress_kernel),%r36364#ifdef CONFIG_64BIT65.level PA_ASM_LEVEL66ssm PSW_W_SM, %r0 /* set W-bit */67depdi 0, 31, 32, %r368#endif69load32 BOOTADDR(startup_continue), %r270bv,n 0(%r3)7172startup_continue:73#ifdef CONFIG_64BIT74.level PA_ASM_LEVEL75rsm PSW_W_SM, %r0 /* clear W-bit */76#endif7778load32 KERNEL_BINARY_TEXT_START, %arg0 /* free mem */79copy %r6, %arg1 /* command line */80copy %r7, %arg2 /* rd-start */81copy %r8, %arg3 /* rd-end */8283bv,n 0(%ret0)84END(startup)858687