root/arch/parisc/boot/compressed/head.S

/* [<][>][^][v][top][bottom][index][help] */
   1 /*
   2  * Startup glue code to uncompress the kernel
   3  *
   4  *   (C) 2017 Helge Deller <deller@gmx.de>
   5  */
   6 
   7 #include <linux/init.h>
   8 #include <linux/linkage.h>
   9 #include <asm/asm-offsets.h>
  10 #include <asm/page.h>
  11 #include <asm/psw.h>
  12 #include <asm/pdc.h>
  13 #include <asm/assembly.h>
  14 #include "sizes.h"
  15 
  16 #define BOOTADDR(x)     (x)
  17 
  18 #ifndef CONFIG_64BIT
  19         .import $global$                /* forward declaration */
  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 value
  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 for the kernel address space */
  39         mtsp    %r0,%sr4
  40         mtsp    %r0,%sr5
  41         mtsp    %r0,%sr6
  42         mtsp    %r0,%sr7
  43 
  44         /* Clear BSS */
  45 
  46         .import _bss,data
  47         .import _ebss,data
  48 
  49         load32  BOOTADDR(_bss),%r3
  50         load32  BOOTADDR(_ebss),%r4
  51         ldo     FRAME_SIZE(%r4),%sp     /* stack at end of bss */
  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              /* command line */
  61         copy    %arg2, %r7              /* rd-start */
  62         copy    %arg3, %r8              /* rd-end */
  63         load32  BOOTADDR(decompress_kernel),%r3
  64 
  65 #ifdef CONFIG_64BIT
  66         .level PA_ASM_LEVEL
  67         ssm     PSW_W_SM, %r0           /* set W-bit */
  68         depdi   0, 31, 32, %r3
  69 #endif
  70         load32  BOOTADDR(startup_continue), %r2
  71         bv,n    0(%r3)
  72 
  73 startup_continue:
  74 #ifdef CONFIG_64BIT
  75         .level PA_ASM_LEVEL
  76         rsm     PSW_W_SM, %r0           /* clear W-bit */
  77 #endif
  78 
  79         load32  KERNEL_BINARY_TEXT_START, %arg0 /* free mem */
  80         copy    %r6, %arg1              /* command line */
  81         copy    %r7, %arg2              /* rd-start */
  82         copy    %r8, %arg3              /* rd-end */
  83 
  84         bv,n    0(%ret0)
  85 END(startup)

/* [<][>][^][v][top][bottom][index][help] */