Linux 5.7.6
[linux/fpc-iii.git] / arch / parisc / boot / compressed / head.S
blobe8b798fd0cf038d5b596d5d988a3c9e83e073a09
1 /*
2  * Startup glue code to uncompress the kernel
3  *
4  *   (C) 2017 Helge Deller <deller@gmx.de>
5  */
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"
16 #define BOOTADDR(x)     (x)
18 #ifndef CONFIG_64BIT
19         .import $global$                /* forward declaration */
20 #endif /*!CONFIG_64BIT*/
22         __HEAD
24 ENTRY(startup)
25          .level PA_ASM_LEVEL
27 #define PSW_W_SM        0x200
28 #define PSW_W_BIT       36
30         ;! nuke the W bit, saving original value
31         .level 2.0
32         rsm     PSW_W_SM, %r1
34         .level 1.1
35         extrw,u %r1, PSW_W_BIT-32, 1, %r1
36         copy    %r1, %arg0
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
44         /* Clear BSS */
46         .import _bss,data
47         .import _ebss,data
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)
56         /* Initialize the global data pointer */
57         loadgp
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
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)
73 startup_continue:
74 #ifdef CONFIG_64BIT
75         .level PA_ASM_LEVEL
76         rsm     PSW_W_SM, %r0           /* clear W-bit */
77 #endif
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 */
84         bv,n    0(%ret0)
85 END(startup)