aboutsummaryrefslogtreecommitdiffstats
path: root/arch/s390/kernel/head.S
diff options
context:
space:
mode:
Diffstat (limited to 'arch/s390/kernel/head.S')
-rw-r--r--arch/s390/kernel/head.S123
1 files changed, 0 insertions, 123 deletions
diff --git a/arch/s390/kernel/head.S b/arch/s390/kernel/head.S
index adccd908ebc7..4939d15375aa 100644
--- a/arch/s390/kernel/head.S
+++ b/arch/s390/kernel/head.S
@@ -34,125 +34,7 @@
34#endif 34#endif
35 35
36__HEAD 36__HEAD
37#ifndef CONFIG_IPL
38 .org 0
39 .long 0x00080000,0x80000000+startup # Just a restart PSW
40#else
41#ifdef CONFIG_IPL_TAPE
42#define IPL_BS 1024
43 .org 0
44 .long 0x00080000,0x80000000+iplstart # The first 24 bytes are loaded
45 .long 0x27000000,0x60000001 # by ipl to addresses 0-23.
46 .long 0x02000000,0x20000000+IPL_BS # (a PSW and two CCWs).
47 .long 0x00000000,0x00000000 # external old psw
48 .long 0x00000000,0x00000000 # svc old psw
49 .long 0x00000000,0x00000000 # program check old psw
50 .long 0x00000000,0x00000000 # machine check old psw
51 .long 0x00000000,0x00000000 # io old psw
52 .long 0x00000000,0x00000000
53 .long 0x00000000,0x00000000
54 .long 0x00000000,0x00000000
55 .long 0x000a0000,0x00000058 # external new psw
56 .long 0x000a0000,0x00000060 # svc new psw
57 .long 0x000a0000,0x00000068 # program check new psw
58 .long 0x000a0000,0x00000070 # machine check new psw
59 .long 0x00080000,0x80000000+.Lioint # io new psw
60 37
61 .org 0x100
62#
63# subroutine for loading from tape
64# Parameters:
65# R1 = device number
66# R2 = load address
67.Lloader:
68 st %r14,.Lldret
69 la %r3,.Lorbread # r3 = address of orb
70 la %r5,.Lirb # r5 = address of irb
71 st %r2,.Lccwread+4 # initialize CCW data addresses
72 lctl %c6,%c6,.Lcr6
73 slr %r2,%r2
74.Lldlp:
75 la %r6,3 # 3 retries
76.Lssch:
77 ssch 0(%r3) # load chunk of IPL_BS bytes
78 bnz .Llderr
79.Lw4end:
80 bas %r14,.Lwait4io
81 tm 8(%r5),0x82 # do we have a problem ?
82 bnz .Lrecov
83 slr %r7,%r7
84 icm %r7,3,10(%r5) # get residual count
85 lcr %r7,%r7
86 la %r7,IPL_BS(%r7) # IPL_BS-residual=#bytes read
87 ar %r2,%r7 # add to total size
88 tm 8(%r5),0x01 # found a tape mark ?
89 bnz .Ldone
90 l %r0,.Lccwread+4 # update CCW data addresses
91 ar %r0,%r7
92 st %r0,.Lccwread+4
93 b .Lldlp
94.Ldone:
95 l %r14,.Lldret
96 br %r14 # r2 contains the total size
97.Lrecov:
98 bas %r14,.Lsense # do the sensing
99 bct %r6,.Lssch # dec. retry count & branch
100 b .Llderr
101#
102# Sense subroutine
103#
104.Lsense:
105 st %r14,.Lsnsret
106 la %r7,.Lorbsense
107 ssch 0(%r7) # start sense command
108 bnz .Llderr
109 bas %r14,.Lwait4io
110 l %r14,.Lsnsret
111 tm 8(%r5),0x82 # do we have a problem ?
112 bnz .Llderr
113 br %r14
114#
115# Wait for interrupt subroutine
116#
117.Lwait4io:
118 lpsw .Lwaitpsw
119.Lioint:
120 c %r1,0xb8 # compare subchannel number
121 bne .Lwait4io
122 tsch 0(%r5)
123 slr %r0,%r0
124 tm 8(%r5),0x82 # do we have a problem ?
125 bnz .Lwtexit
126 tm 8(%r5),0x04 # got device end ?
127 bz .Lwait4io
128.Lwtexit:
129 br %r14
130.Llderr:
131 lpsw .Lcrash
132
133 .align 8
134.Lorbread:
135 .long 0x00000000,0x0080ff00,.Lccwread
136 .align 8
137.Lorbsense:
138 .long 0x00000000,0x0080ff00,.Lccwsense
139 .align 8
140.Lccwread:
141 .long 0x02200000+IPL_BS,0x00000000
142.Lccwsense:
143 .long 0x04200001,0x00000000
144.Lwaitpsw:
145 .long 0x020a0000,0x80000000+.Lioint
146
147.Lirb: .long 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
148.Lcr6: .long 0xff000000
149 .align 8
150.Lcrash:.long 0x000a0000,0x00000000
151.Lldret:.long 0
152.Lsnsret: .long 0
153#endif /* CONFIG_IPL_TAPE */
154
155#ifdef CONFIG_IPL_VM
156#define IPL_BS 0x730 38#define IPL_BS 0x730
157 .org 0 39 .org 0
158 .long 0x00080000,0x80000000+iplstart # The first 24 bytes are loaded 40 .long 0x00080000,0x80000000+iplstart # The first 24 bytes are loaded
@@ -256,7 +138,6 @@ __HEAD
256 .long 0x02600050,0x00000000 138 .long 0x02600050,0x00000000
257 .endr 139 .endr
258 .long 0x02200050,0x00000000 140 .long 0x02200050,0x00000000
259#endif /* CONFIG_IPL_VM */
260 141
261iplstart: 142iplstart:
262 lh %r1,0xb8 # test if subchannel number 143 lh %r1,0xb8 # test if subchannel number
@@ -325,7 +206,6 @@ iplstart:
325 clc 0(3,%r2),.L_eof 206 clc 0(3,%r2),.L_eof
326 bz .Lagain2 207 bz .Lagain2
327 208
328#ifdef CONFIG_IPL_VM
329# 209#
330# reset files in VM reader 210# reset files in VM reader
331# 211#
@@ -358,7 +238,6 @@ iplstart:
358 .long 0x00080000,0x80000000+.Lrdrint 238 .long 0x00080000,0x80000000+.Lrdrint
359.Lrdrwaitpsw: 239.Lrdrwaitpsw:
360 .long 0x020a0000,0x80000000+.Lrdrint 240 .long 0x020a0000,0x80000000+.Lrdrint
361#endif
362 241
363# 242#
364# everything loaded, go for it 243# everything loaded, go for it
@@ -376,8 +255,6 @@ iplstart:
376.L_eof: .long 0xc5d6c600 /* C'EOF' */ 255.L_eof: .long 0xc5d6c600 /* C'EOF' */
377.L_hdr: .long 0xc8c4d900 /* C'HDR' */ 256.L_hdr: .long 0xc8c4d900 /* C'HDR' */
378 257
379#endif /* CONFIG_IPL */
380
381# 258#
382# SALIPL loader support. Based on a patch by Rob van der Heij. 259# SALIPL loader support. Based on a patch by Rob van der Heij.
383# This entry point is called directly from the SALIPL loader and 260# This entry point is called directly from the SALIPL loader and