Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/arch/parisc/boot/compressed/head.S
26298 views
1
/*
2
* Startup glue code to uncompress the kernel
3
*
4
* (C) 2017 Helge Deller <[email protected]>
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)
86
87