head.S 12.7 KB
Newer Older
L
Linus Torvalds 已提交
1
/*
2
 * Copyright IBM Corp. 1999, 2010
3 4 5 6 7
 *
 *    Author(s): Hartmut Penner <hp@de.ibm.com>
 *		 Martin Schwidefsky <schwidefsky@de.ibm.com>
 *		 Rob van der Heij <rvdhei@iae.nl>
 *		 Heiko Carstens <heiko.carstens@de.ibm.com>
L
Linus Torvalds 已提交
8 9 10 11 12 13 14 15 16 17 18 19 20
 *
 * There are 5 different IPL methods
 *  1) load the image directly into ram at address 0 and do an PSW restart
 *  2) linload will load the image from address 0x10000 to memory 0x10000
 *     and start the code thru LPSW 0x0008000080010000 (VM only, deprecated)
 *  3) generate the tape ipl header, store the generated image on a tape
 *     and ipl from it
 *     In case of SL tape you need to IPL 5 times to get past VOL1 etc
 *  4) generate the vm reader ipl header, move the generated image to the
 *     VM reader (use option NOH!) and do a ipl from reader (VM only)
 *  5) direct call of start by the SALIPL loader
 *  We use the cpuid to distinguish between VM and native ipl
 *  params for kernel are pushed to 0x10400 (see setup.h)
21
 *
L
Linus Torvalds 已提交
22 23
 */

24
#include <linux/init.h>
25
#include <linux/linkage.h>
26
#include <asm/asm-offsets.h>
L
Linus Torvalds 已提交
27 28 29
#include <asm/thread_info.h>
#include <asm/page.h>

30
#ifdef CONFIG_64BIT
31 32 33 34 35
#define ARCH_OFFSET	4
#else
#define ARCH_OFFSET	0
#endif

36
__HEAD
L
Linus Torvalds 已提交
37

H
Heiko Carstens 已提交
38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
#define IPL_BS	0x730
	.org	0
	.long	0x00080000,0x80000000+iplstart	# The first 24 bytes are loaded
	.long	0x02000018,0x60000050		# by ipl to addresses 0-23.
	.long	0x02000068,0x60000050		# (a PSW and two CCWs).
	.fill	80-24,1,0x40			# bytes 24-79 are discarded !!
	.long	0x020000f0,0x60000050		# The next 160 byte are loaded
	.long	0x02000140,0x60000050		# to addresses 0x18-0xb7
	.long	0x02000190,0x60000050		# They form the continuation
	.long	0x020001e0,0x60000050		# of the CCW program started
	.long	0x02000230,0x60000050		# by ipl and load the range
	.long	0x02000280,0x60000050		# 0x0f0-0x730 from the image
	.long	0x020002d0,0x60000050		# to the range 0x0f0-0x730
	.long	0x02000320,0x60000050		# in memory. At the end of
	.long	0x02000370,0x60000050		# the channel program the PSW
	.long	0x020003c0,0x60000050		# at location 0 is loaded.
	.long	0x02000410,0x60000050		# Initial processing starts
55
	.long	0x02000460,0x60000050		# at 0x200 = iplstart.
H
Heiko Carstens 已提交
56 57 58 59 60 61 62 63
	.long	0x020004b0,0x60000050
	.long	0x02000500,0x60000050
	.long	0x02000550,0x60000050
	.long	0x020005a0,0x60000050
	.long	0x020005f0,0x60000050
	.long	0x02000640,0x60000050
	.long	0x02000690,0x60000050
	.long	0x020006e0,0x20000050
L
Linus Torvalds 已提交
64

65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107
	.org	0x200
#
# subroutine to set architecture mode
#
.Lsetmode:
#ifdef CONFIG_64BIT
	mvi	__LC_AR_MODE_ID,1	# set esame flag
	slr	%r0,%r0 		# set cpuid to zero
	lhi	%r1,2			# mode 2 = esame (dump)
	sigp	%r1,%r0,0x12		# switch to esame mode
	bras	%r13,0f
	.fill	16,4,0x0
0:	lmh	%r0,%r15,0(%r13)	# clear high-order half of gprs
	sam31				# switch to 31 bit addressing mode
#else
	mvi	__LC_AR_MODE_ID,0	# set ESA flag (mode 0)
#endif
	br	%r14

#
# subroutine to wait for end I/O
#
.Lirqwait:
#ifdef CONFIG_64BIT
	mvc	0x1f0(16),.Lnewpsw	# set up IO interrupt psw
	lpsw	.Lwaitpsw
.Lioint:
	br	%r14
	.align	8
.Lnewpsw:
	.quad	0x0000000080000000,.Lioint
#else
	mvc	0x78(8),.Lnewpsw	# set up IO interrupt psw
	lpsw	.Lwaitpsw
.Lioint:
	br	%r14
	.align	8
.Lnewpsw:
	.long	0x00080000,0x80000000+.Lioint
#endif
.Lwaitpsw:
	.long	0x020a0000,0x80000000+.Lioint

L
Linus Torvalds 已提交
108 109 110
#
# subroutine for loading cards from the reader
#
H
Heiko Carstens 已提交
111
.Lloader:
112
	la	%r4,0(%r14)
H
Heiko Carstens 已提交
113 114 115 116
	la	%r3,.Lorb		# r2 = address of orb into r2
	la	%r5,.Lirb		# r4 = address of irb
	la	%r6,.Lccws
	la	%r7,20
L
Linus Torvalds 已提交
117
.Linit:
H
Heiko Carstens 已提交
118 119 120 121
	st	%r2,4(%r6)		# initialize CCW data addresses
	la	%r2,0x50(%r2)
	la	%r6,8(%r6)
	bct	7,.Linit
L
Linus Torvalds 已提交
122

H
Heiko Carstens 已提交
123 124
	lctl	%c6,%c6,.Lcr6		# set IO subclass mask
	slr	%r2,%r2
L
Linus Torvalds 已提交
125
.Lldlp:
H
Heiko Carstens 已提交
126 127
	ssch	0(%r3)			# load chunk of 1600 bytes
	bnz	.Llderr
L
Linus Torvalds 已提交
128
.Lwait4irq:
129
	bas	%r14,.Lirqwait
H
Heiko Carstens 已提交
130 131 132
	c	%r1,0xb8		# compare subchannel number
	bne	.Lwait4irq
	tsch	0(%r5)
L
Linus Torvalds 已提交
133

H
Heiko Carstens 已提交
134 135 136 137 138 139
	slr	%r0,%r0
	ic	%r0,8(%r5)		# get device status
	chi	%r0,8			# channel end ?
	be	.Lcont
	chi	%r0,12			# channel end + device end ?
	be	.Lcont
L
Linus Torvalds 已提交
140

H
Heiko Carstens 已提交
141 142 143 144 145 146 147
	l	%r0,4(%r5)
	s	%r0,8(%r3)		# r0/8 = number of ccws executed
	mhi	%r0,10			# *10 = number of bytes in ccws
	lh	%r3,10(%r5)		# get residual count
	sr	%r0,%r3 		# #ccws*80-residual=#bytes read
	ar	%r2,%r0

148
	br	%r4			# r2 contains the total size
L
Linus Torvalds 已提交
149 150

.Lcont:
H
Heiko Carstens 已提交
151 152 153
	ahi	%r2,0x640		# add 0x640 to total size
	la	%r6,.Lccws
	la	%r7,20
L
Linus Torvalds 已提交
154
.Lincr:
H
Heiko Carstens 已提交
155 156 157 158 159
	l	%r0,4(%r6)		# update CCW data addresses
	ahi	%r0,0x640
	st	%r0,4(%r6)
	ahi	%r6,8
	bct	7,.Lincr
L
Linus Torvalds 已提交
160

H
Heiko Carstens 已提交
161
	b	.Lldlp
L
Linus Torvalds 已提交
162
.Llderr:
H
Heiko Carstens 已提交
163
	lpsw	.Lcrash
L
Linus Torvalds 已提交
164

H
Heiko Carstens 已提交
165 166 167 168 169 170 171
	.align	8
.Lorb:	.long	0x00000000,0x0080ff00,.Lccws
.Lirb:	.long	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
.Lcr6:	.long	0xff000000
.Lloadp:.long	0,0
	.align	8
.Lcrash:.long	0x000a0000,0x00000000
L
Linus Torvalds 已提交
172

H
Heiko Carstens 已提交
173 174 175 176 177
	.align	8
.Lccws: .rept	19
	.long	0x02600050,0x00000000
	.endr
	.long	0x02200050,0x00000000
L
Linus Torvalds 已提交
178 179

iplstart:
180
	bas	%r14,.Lsetmode		# Immediately switch to 64 bit mode
H
Heiko Carstens 已提交
181 182 183 184 185 186 187
	lh	%r1,0xb8		# test if subchannel number
	bct	%r1,.Lnoload		#  is valid
	l	%r1,0xb8		# load ipl subchannel number
	la	%r2,IPL_BS		# load start address
	bas	%r14,.Lloader		# load rest of ipl image
	l	%r12,.Lparm		# pointer to parameter area
	st	%r1,IPL_DEVICE+ARCH_OFFSET-PARMAREA(%r12) # save ipl device number
L
Linus Torvalds 已提交
188 189 190 191 192

#
# load parameter file from ipl device
#
.Lagain1:
H
Heiko Carstens 已提交
193 194 195 196 197 198 199
	l	%r2,.Linitrd		# ramdisk loc. is temp
	bas	%r14,.Lloader		# load parameter file
	ltr	%r2,%r2 		# got anything ?
	bz	.Lnopf
	chi	%r2,895
	bnh	.Lnotrunc
	la	%r2,895
L
Linus Torvalds 已提交
200
.Lnotrunc:
H
Heiko Carstens 已提交
201 202 203 204 205 206 207
	l	%r4,.Linitrd
	clc	0(3,%r4),.L_hdr		# if it is HDRx
	bz	.Lagain1		# skip dataset header
	clc	0(3,%r4),.L_eof		# if it is EOFx
	bz	.Lagain1		# skip dateset trailer
	la	%r5,0(%r4,%r2)
	lr	%r3,%r2
208
	la	%r3,COMMAND_LINE-PARMAREA(%r12) # load adr. of command line
H
Heiko Carstens 已提交
209 210 211 212 213 214
	mvc	0(256,%r3),0(%r4)
	mvc	256(256,%r3),256(%r4)
	mvc	512(256,%r3),512(%r4)
	mvc	768(122,%r3),768(%r4)
	slr	%r0,%r0
	b	.Lcntlp
L
Linus Torvalds 已提交
215
.Ldelspc:
H
Heiko Carstens 已提交
216 217 218 219 220
	ic	%r0,0(%r2,%r3)
	chi	%r0,0x20		# is it a space ?
	be	.Lcntlp
	ahi	%r2,1
	b	.Leolp
L
Linus Torvalds 已提交
221
.Lcntlp:
H
Heiko Carstens 已提交
222
	brct	%r2,.Ldelspc
L
Linus Torvalds 已提交
223
.Leolp:
H
Heiko Carstens 已提交
224 225
	slr	%r0,%r0
	stc	%r0,0(%r2,%r3)		# terminate buffer
L
Linus Torvalds 已提交
226 227 228 229
.Lnopf:

#
# load ramdisk from ipl device
H
Heiko Carstens 已提交
230
#
L
Linus Torvalds 已提交
231
.Lagain2:
H
Heiko Carstens 已提交
232 233 234 235 236 237 238
	l	%r2,.Linitrd		# addr of ramdisk
	st	%r2,INITRD_START+ARCH_OFFSET-PARMAREA(%r12)
	bas	%r14,.Lloader		# load ramdisk
	st	%r2,INITRD_SIZE+ARCH_OFFSET-PARMAREA(%r12) # store size of rd
	ltr	%r2,%r2
	bnz	.Lrdcont
	st	%r2,INITRD_START+ARCH_OFFSET-PARMAREA(%r12) # no ramdisk found
L
Linus Torvalds 已提交
239
.Lrdcont:
H
Heiko Carstens 已提交
240
	l	%r2,.Linitrd
L
Linus Torvalds 已提交
241

H
Heiko Carstens 已提交
242 243 244 245
	clc	0(3,%r2),.L_hdr		# skip HDRx and EOFx
	bz	.Lagain2
	clc	0(3,%r2),.L_eof
	bz	.Lagain2
L
Linus Torvalds 已提交
246 247 248 249

#
# reset files in VM reader
#
250 251
	stidp	.Lcpuid			# store cpuid
	tm	.Lcpuid,0xff		# running VM ?
H
Heiko Carstens 已提交
252 253 254 255 256 257 258 259 260 261
	bno	.Lnoreset
	la	%r2,.Lreset
	lhi	%r3,26
	diag	%r2,%r3,8
	la	%r5,.Lirb
	stsch	0(%r5)			# check if irq is pending
	tm	30(%r5),0x0f		# by verifying if any of the
	bnz	.Lwaitforirq		# activity or status control
	tm	31(%r5),0xff		# bits is set in the schib
	bz	.Lnoreset
262
.Lwaitforirq:
263
	bas	%r14,.Lirqwait		# wait for IO interrupt
H
Heiko Carstens 已提交
264
	c	%r1,0xb8		# compare subchannel number
265
	bne	.Lwaitforirq
H
Heiko Carstens 已提交
266 267
	la	%r5,.Lirb
	tsch	0(%r5)
L
Linus Torvalds 已提交
268
.Lnoreset:
H
Heiko Carstens 已提交
269
	b	.Lnoload
270

L
Linus Torvalds 已提交
271 272 273 274
#
# everything loaded, go for it
#
.Lnoload:
H
Heiko Carstens 已提交
275 276
	l	%r1,.Lstartup
	br	%r1
L
Linus Torvalds 已提交
277

278
.Linitrd:.long _end			# default address of initrd
L
Linus Torvalds 已提交
279 280
.Lparm:	.long  PARMAREA
.Lstartup: .long startup
H
Heiko Carstens 已提交
281 282 283 284 285
.Lreset:.byte	0xc3,0xc8,0xc1,0xd5,0xc7,0xc5,0x40,0xd9,0xc4,0xd9,0x40
	.byte	0xc1,0xd3,0xd3,0x40,0xd2,0xc5,0xc5,0xd7,0x40,0xd5,0xd6
	.byte	0xc8,0xd6,0xd3,0xc4	# "change rdr all keep nohold"
.L_eof: .long	0xc5d6c600	 /* C'EOF' */
.L_hdr: .long	0xc8c4d900	 /* C'HDR' */
286 287
	.align	8
.Lcpuid:.fill	8,1,0
L
Linus Torvalds 已提交
288 289 290 291 292 293

#
# SALIPL loader support. Based on a patch by Rob van der Heij.
# This entry point is called directly from the SALIPL loader and
# doesn't need a builtin ipl record.
#
H
Heiko Carstens 已提交
294
	.org	0x800
295
ENTRY(start)
H
Heiko Carstens 已提交
296
	stm	%r0,%r15,0x07b0		# store registers
297
	bas	%r14,.Lsetmode		# Immediately switch to 64 bit mode
H
Heiko Carstens 已提交
298
	basr	%r12,%r0
L
Linus Torvalds 已提交
299
.base:
H
Heiko Carstens 已提交
300 301
	l	%r11,.parm
	l	%r8,.cmd		# pointer to command buffer
L
Linus Torvalds 已提交
302

H
Heiko Carstens 已提交
303 304
	ltr	%r9,%r9			# do we have SALIPL parameters?
	bp	.sk8x8
L
Linus Torvalds 已提交
305

H
Heiko Carstens 已提交
306 307 308 309
	mvc	0(64,%r8),0x00b0	# copy saved registers
	xc	64(240-64,%r8),0(%r8)	# remainder of buffer
	tr	0(64,%r8),.lowcase
	b	.gotr
L
Linus Torvalds 已提交
310
.sk8x8:
H
Heiko Carstens 已提交
311
	mvc	0(240,%r8),0(%r9)	# copy iplparms into buffer
L
Linus Torvalds 已提交
312
.gotr:
H
Heiko Carstens 已提交
313 314 315 316 317 318
	slr	%r0,%r0
	st	%r0,INITRD_SIZE+ARCH_OFFSET-PARMAREA(%r11)
	st	%r0,INITRD_START+ARCH_OFFSET-PARMAREA(%r11)
	j	startup 		# continue with startup
.cmd:	.long	COMMAND_LINE		# address of command line buffer
.parm:	.long	PARMAREA
L
Linus Torvalds 已提交
319
.lowcase:
H
Heiko Carstens 已提交
320
	.byte 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07
L
Linus Torvalds 已提交
321
	.byte 0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f
H
Heiko Carstens 已提交
322
	.byte 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17
L
Linus Torvalds 已提交
323
	.byte 0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f
H
Heiko Carstens 已提交
324
	.byte 0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27
L
Linus Torvalds 已提交
325
	.byte 0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f
H
Heiko Carstens 已提交
326
	.byte 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37
L
Linus Torvalds 已提交
327
	.byte 0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f
H
Heiko Carstens 已提交
328
	.byte 0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47
L
Linus Torvalds 已提交
329
	.byte 0x48,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f
H
Heiko Carstens 已提交
330
	.byte 0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57
L
Linus Torvalds 已提交
331
	.byte 0x58,0x59,0x5a,0x5b,0x5c,0x5d,0x5e,0x5f
H
Heiko Carstens 已提交
332
	.byte 0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67
L
Linus Torvalds 已提交
333
	.byte 0x68,0x69,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f
H
Heiko Carstens 已提交
334
	.byte 0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77
L
Linus Torvalds 已提交
335 336
	.byte 0x78,0x79,0x7a,0x7b,0x7c,0x7d,0x7e,0x7f

H
Heiko Carstens 已提交
337
	.byte 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87
L
Linus Torvalds 已提交
338
	.byte 0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f
H
Heiko Carstens 已提交
339
	.byte 0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97
L
Linus Torvalds 已提交
340
	.byte 0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f
H
Heiko Carstens 已提交
341
	.byte 0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7
L
Linus Torvalds 已提交
342
	.byte 0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf
H
Heiko Carstens 已提交
343
	.byte 0xb0,0xb1,0xb2,0xb3,0xb4,0xb5,0xb6,0xb7
L
Linus Torvalds 已提交
344
	.byte 0xb8,0xb9,0xba,0xbb,0xbc,0xbd,0xbe,0xbf
H
Heiko Carstens 已提交
345
	.byte 0xc0,0x81,0x82,0x83,0x84,0x85,0x86,0x87	# .abcdefg
L
Linus Torvalds 已提交
346
	.byte 0x88,0x89,0xca,0xcb,0xcc,0xcd,0xce,0xcf	# hi
H
Heiko Carstens 已提交
347
	.byte 0xd0,0x91,0x92,0x93,0x94,0x95,0x96,0x97	# .jklmnop
L
Linus Torvalds 已提交
348 349 350
	.byte 0x98,0x99,0xda,0xdb,0xdc,0xdd,0xde,0xdf	# qr
	.byte 0xe0,0xe1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7	# ..stuvwx
	.byte 0xa8,0xa9,0xea,0xeb,0xec,0xed,0xee,0xef	# yz
H
Heiko Carstens 已提交
351
	.byte 0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7
L
Linus Torvalds 已提交
352 353
	.byte 0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfe,0xff

354 355 356 357 358 359
#
# startup-code at 0x10000, running in absolute addressing mode
# this is called either by the ipl loader or directly by PSW restart
# or linload or SALIPL
#
	.org	0x10000
360
ENTRY(startup)
M
Michael Holzheu 已提交
361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377
	j	.Lep_startup_normal
	.org	0x10008
#
# This is a list of s390 kernel entry points. At address 0x1000f the number of
# valid entry points is stored.
#
# IMPORTANT: Do not change this table, it is s390 kernel ABI!
#
	.ascii	"S390EP"
	.byte	0x00,0x01
#
# kdump startup-code at 0x10010, running in 64 bit absolute addressing mode
#
	.org	0x10010
ENTRY(startup_kdump)
	j	.Lep_startup_kdump
.Lep_startup_normal:
378 379 380 381 382 383 384 385 386 387 388 389
#ifdef CONFIG_64BIT
	mvi	__LC_AR_MODE_ID,1	# set esame flag
	slr	%r0,%r0 		# set cpuid to zero
	lhi	%r1,2			# mode 2 = esame (dump)
	sigp	%r1,%r0,0x12		# switch to esame mode
	bras	%r13,0f
	.fill	16,4,0x0
0:	lmh	%r0,%r15,0(%r13)	# clear high-order half of gprs
	sam31				# switch to 31 bit addressing mode
#else
	mvi	__LC_AR_MODE_ID,0	# set ESA flag (mode 0)
#endif
390
	basr	%r13,0			# get base
391
.LPG0:
M
Martin Schwidefsky 已提交
392 393
	xc	0x200(256),0x200	# partially clear lowcore
	xc	0x300(256),0x300
M
Michael Holzheu 已提交
394
	xc	0xe00(256),0xe00
395 396 397
	stck	__LC_LAST_UPDATE_CLOCK
	spt	5f-.LPG0(%r13)
	mvc	__LC_LAST_UPDATE_TIMER(8),5f-.LPG0(%r13)
398
	xc	__LC_STFL_FAC_LIST(8),__LC_STFL_FAC_LIST
399
#ifndef CONFIG_MARCH_G5
400
	# check capabilities against MARCH_{G5,Z900,Z990,Z9_109,Z10}
401
	.insn	s,0xb2b10000,__LC_STFL_FAC_LIST	# store facility list
402 403 404 405 406 407 408 409 410 411 412 413
	tm	__LC_STFL_FAC_LIST,0x01	# stfle available ?
	jz	0f
	la	%r0,0
	.insn	s,0xb2b00000,__LC_STFL_FAC_LIST	# store facility list extended
0:	l	%r0,__LC_STFL_FAC_LIST
	n	%r0,2f+8-.LPG0(%r13)
	cl	%r0,2f+8-.LPG0(%r13)
	jne	1f
	l	%r0,__LC_STFL_FAC_LIST+4
	n	%r0,2f+12-.LPG0(%r13)
	cl	%r0,2f+12-.LPG0(%r13)
	je	3f
H
Heiko Carstens 已提交
414 415 416 417 418 419 420 421 422 423 424
1:	l	%r15,.Lstack-.LPG0(%r13)
	ahi	%r15,-96
	la	%r2,.Lals_string-.LPG0(%r13)
	l	%r3,.Lsclp_print-.LPG0(%r13)
	basr	%r14,%r3
	lpsw	2f-.LPG0(%r13)		# machine type not good enough, crash
.Lals_string:
	.asciz	"The Linux kernel requires more recent processor hardware"
.Lsclp_print:
	.long	_sclp_print_early
.Lstack:
425
	.long	0x8000 + (1<<(PAGE_SHIFT+THREAD_ORDER))
426
	.align 16
427 428
2:	.long	0x000a0000,0x8badcccc
#if defined(CONFIG_64BIT)
429 430 431
#if defined(CONFIG_MARCH_Z196)
	.long 0xc100efe3, 0xf46c0000
#elif defined(CONFIG_MARCH_Z10)
432 433 434 435 436 437 438 439 440
	.long 0xc100efe3, 0xf0680000
#elif defined(CONFIG_MARCH_Z9_109)
	.long 0xc100efc3, 0x00000000
#elif defined(CONFIG_MARCH_Z990)
	.long 0xc0002000, 0x00000000
#elif defined(CONFIG_MARCH_Z900)
	.long 0xc0000000, 0x00000000
#endif
#else
441 442 443
#if defined(CONFIG_MARCH_Z196)
	.long 0x8100c880, 0x00000000
#elif defined(CONFIG_MARCH_Z10)
444
	.long 0x8100c880, 0x00000000
445
#elif defined(CONFIG_MARCH_Z9_109)
446
	.long 0x8100c880, 0x00000000
447
#elif defined(CONFIG_MARCH_Z990)
448
	.long 0x80002000, 0x00000000
449
#elif defined(CONFIG_MARCH_Z900)
450 451
	.long 0x80000000, 0x00000000
#endif
452
#endif
453
3:
454 455
#endif

456
#ifdef CONFIG_64BIT
457
	/* Continue with 64bit startup code in head64.S */
458 459 460
	sam64				# switch to 64 bit mode
	jg	startup_continue
#else
461
	/* Continue with 31bit startup code in head31.S */
462
	l	%r13,4f-.LPG0(%r13)
463
	b	0(%r13)
464
	.align	8
465
4:	.long	startup_continue
466
#endif
467

468
	.align	8
469
5:	.long	0x7fffffff,0xffffffff
470

M
Michael Holzheu 已提交
471 472
#include "head_kdump.S"

473 474 475 476 477 478 479
#
# params at 10400 (setup.h)
#
	.org	PARMAREA
	.long	0,0			# IPL_DEVICE
	.long	0,0			# INITRD_START
	.long	0,0			# INITRD_SIZE
M
Michael Holzheu 已提交
480 481
	.long	0,0			# OLDMEM_BASE
	.long	0,0			# OLDMEM_SIZE
482 483 484 485 486

	.org	COMMAND_LINE
	.byte	"root=/dev/ram0 ro"
	.byte	0

487
	.org	0x11000