hc
2024-01-05 071106ecf68c401173c58808b1cf5f68cc50d390
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
/*
 * Startup glue code to uncompress the kernel
 *
 *   (C) 2017 Helge Deller <deller@gmx.de>
 */
 
#include <linux/init.h>
#include <linux/linkage.h>
#include <asm/asm-offsets.h>
#include <asm/page.h>
#include <asm/psw.h>
#include <asm/pdc.h>
#include <asm/assembly.h>
#include "sizes.h"
 
#define BOOTADDR(x)    (x)
 
#ifndef CONFIG_64BIT
   .import    $global$        /* forward declaration */
#endif /*!CONFIG_64BIT*/
 
   __HEAD
 
ENTRY(startup)
    .level PA_ASM_LEVEL
 
#define PSW_W_SM    0x200
#define PSW_W_BIT       36
 
   ;! nuke the W bit, saving original value
   .level 2.0
   rsm    PSW_W_SM, %r1
 
   .level 1.1
   extrw,u    %r1, PSW_W_BIT-32, 1, %r1
   copy    %r1, %arg0
 
   /* Make sure sr4-sr7 are set to zero for the kernel address space */
   mtsp    %r0,%sr4
   mtsp    %r0,%sr5
   mtsp    %r0,%sr6
   mtsp    %r0,%sr7
 
   /* Clear BSS */
 
   .import _bss,data
   .import _ebss,data
 
   load32    BOOTADDR(_bss),%r3
   load32    BOOTADDR(_ebss),%r4
   ldo    FRAME_SIZE(%r4),%sp    /* stack at end of bss */
$bss_loop:
   cmpb,<<,n %r3,%r4,$bss_loop
   stw,ma    %r0,4(%r3)
 
   /* Initialize the global data pointer */
   loadgp
 
   /* arg0..arg4 were set by palo. */
   copy    %arg1, %r6        /* command line */
   copy    %arg2, %r7        /* rd-start */
   copy    %arg3, %r8        /* rd-end */
   load32    BOOTADDR(decompress_kernel),%r3
 
#ifdef CONFIG_64BIT
   .level PA_ASM_LEVEL
   ssm    PSW_W_SM, %r0        /* set W-bit */
   depdi    0, 31, 32, %r3
#endif
   load32    BOOTADDR(startup_continue), %r2
   bv,n    0(%r3)
 
startup_continue:
#ifdef CONFIG_64BIT
   .level PA_ASM_LEVEL
   rsm    PSW_W_SM, %r0        /* clear W-bit */
#endif
 
   load32    KERNEL_BINARY_TEXT_START, %arg0 /* free mem */
   copy    %r6, %arg1        /* command line */
   copy    %r7, %arg2        /* rd-start */
   copy    %r8, %arg3        /* rd-end */
 
   bv,n    0(%ret0)
END(startup)