| .. | .. |
|---|
| 60 | 60 | .long 0x02000690,0x60000050 |
|---|
| 61 | 61 | .long 0x020006e0,0x20000050 |
|---|
| 62 | 62 | |
|---|
| 63 | + .org __LC_RST_NEW_PSW # 0x1a0 |
|---|
| 64 | + .quad 0,iplstart |
|---|
| 65 | + .org __LC_PGM_NEW_PSW # 0x1d0 |
|---|
| 66 | + .quad 0x0000000180000000,startup_pgm_check_handler |
|---|
| 67 | + |
|---|
| 63 | 68 | .org 0x200 |
|---|
| 64 | 69 | |
|---|
| 65 | 70 | # |
|---|
| .. | .. |
|---|
| 302 | 307 | xc 0x300(256),0x300 |
|---|
| 303 | 308 | xc 0xe00(256),0xe00 |
|---|
| 304 | 309 | xc 0xf00(256),0xf00 |
|---|
| 305 | | - lctlg %c0,%c15,0x200(%r0) # initialize control registers |
|---|
| 310 | + lctlg %c0,%c15,.Lctl-.LPG0(%r13) # load control registers |
|---|
| 306 | 311 | stcke __LC_BOOT_CLOCK |
|---|
| 307 | 312 | mvc __LC_LAST_UPDATE_CLOCK(8),__LC_BOOT_CLOCK+1 |
|---|
| 308 | 313 | spt 6f-.LPG0(%r13) |
|---|
| 309 | 314 | mvc __LC_LAST_UPDATE_TIMER(8),6f-.LPG0(%r13) |
|---|
| 310 | 315 | l %r15,.Lstack-.LPG0(%r13) |
|---|
| 311 | | - ahi %r15,-STACK_FRAME_OVERHEAD |
|---|
| 312 | 316 | brasl %r14,verify_facilities |
|---|
| 313 | | -#ifdef CONFIG_KERNEL_UNCOMPRESSED |
|---|
| 314 | | - jg startup_continue |
|---|
| 315 | | -#else |
|---|
| 316 | | - jg startup_decompressor |
|---|
| 317 | | -#endif |
|---|
| 317 | + brasl %r14,startup_kernel |
|---|
| 318 | 318 | |
|---|
| 319 | 319 | .Lstack: |
|---|
| 320 | | - .long 0x8000 + (1<<(PAGE_SHIFT+THREAD_SIZE_ORDER)) |
|---|
| 320 | + .long 0x8000 + (1<<(PAGE_SHIFT+BOOT_STACK_ORDER)) - STACK_FRAME_OVERHEAD |
|---|
| 321 | 321 | .align 8 |
|---|
| 322 | 322 | 6: .long 0x7fffffff,0xffffffff |
|---|
| 323 | + |
|---|
| 324 | +.Lctl: .quad 0x04040000 # cr0: AFP registers & secondary space |
|---|
| 325 | + .quad 0 # cr1: primary space segment table |
|---|
| 326 | + .quad .Lduct # cr2: dispatchable unit control table |
|---|
| 327 | + .quad 0 # cr3: instruction authorization |
|---|
| 328 | + .quad 0xffff # cr4: instruction authorization |
|---|
| 329 | + .quad .Lduct # cr5: primary-aste origin |
|---|
| 330 | + .quad 0 # cr6: I/O interrupts |
|---|
| 331 | + .quad 0 # cr7: secondary space segment table |
|---|
| 332 | + .quad 0x0000000000008000 # cr8: access registers translation |
|---|
| 333 | + .quad 0 # cr9: tracing off |
|---|
| 334 | + .quad 0 # cr10: tracing off |
|---|
| 335 | + .quad 0 # cr11: tracing off |
|---|
| 336 | + .quad 0 # cr12: tracing off |
|---|
| 337 | + .quad 0 # cr13: home space segment table |
|---|
| 338 | + .quad 0xc0000000 # cr14: machine check handling off |
|---|
| 339 | + .quad .Llinkage_stack # cr15: linkage stack operations |
|---|
| 340 | + |
|---|
| 341 | + .section .dma.data,"aw",@progbits |
|---|
| 342 | +.Lduct: .long 0,.Laste,.Laste,0,.Lduald,0,0,0 |
|---|
| 343 | + .long 0,0,0,0,0,0,0,0 |
|---|
| 344 | +.Llinkage_stack: |
|---|
| 345 | + .long 0,0,0x89000000,0,0,0,0x8a000000,0 |
|---|
| 346 | + .align 64 |
|---|
| 347 | +.Laste: .quad 0,0xffffffffffffffff,0,0,0,0,0,0 |
|---|
| 348 | + .align 128 |
|---|
| 349 | +.Lduald:.rept 8 |
|---|
| 350 | + .long 0x80000000,0,0,0 # invalid access-list entries |
|---|
| 351 | + .endr |
|---|
| 352 | + .previous |
|---|
| 323 | 353 | |
|---|
| 324 | 354 | #include "head_kdump.S" |
|---|
| 325 | 355 | |
|---|
| 326 | 356 | # |
|---|
| 357 | +# This program check is active immediately after kernel start |
|---|
| 358 | +# and until early_pgm_check_handler is set in kernel/early.c |
|---|
| 359 | +# It simply saves general/control registers and psw in |
|---|
| 360 | +# the save area and does disabled wait with a faulty address. |
|---|
| 361 | +# |
|---|
| 362 | +ENTRY(startup_pgm_check_handler) |
|---|
| 363 | + stmg %r8,%r15,__LC_SAVE_AREA_SYNC |
|---|
| 364 | + la %r8,4095 |
|---|
| 365 | + stctg %c0,%c15,__LC_CREGS_SAVE_AREA-4095(%r8) |
|---|
| 366 | + stmg %r0,%r7,__LC_GPREGS_SAVE_AREA-4095(%r8) |
|---|
| 367 | + mvc __LC_GPREGS_SAVE_AREA-4095+64(64,%r8),__LC_SAVE_AREA_SYNC |
|---|
| 368 | + mvc __LC_PSW_SAVE_AREA-4095(16,%r8),__LC_PGM_OLD_PSW |
|---|
| 369 | + mvc __LC_RETURN_PSW(16),__LC_PGM_OLD_PSW |
|---|
| 370 | + ni __LC_RETURN_PSW,0xfc # remove IO and EX bits |
|---|
| 371 | + ni __LC_RETURN_PSW+1,0xfb # remove MCHK bit |
|---|
| 372 | + oi __LC_RETURN_PSW+1,0x2 # set wait state bit |
|---|
| 373 | + larl %r9,.Lold_psw_disabled_wait |
|---|
| 374 | + stg %r9,__LC_PGM_NEW_PSW+8 |
|---|
| 375 | + l %r15,.Ldump_info_stack-.Lold_psw_disabled_wait(%r9) |
|---|
| 376 | + brasl %r14,print_pgm_check_info |
|---|
| 377 | +.Lold_psw_disabled_wait: |
|---|
| 378 | + la %r8,4095 |
|---|
| 379 | + lmg %r0,%r15,__LC_GPREGS_SAVE_AREA-4095(%r8) |
|---|
| 380 | + lpswe __LC_RETURN_PSW # disabled wait |
|---|
| 381 | +.Ldump_info_stack: |
|---|
| 382 | + .long 0x5000 + PAGE_SIZE - STACK_FRAME_OVERHEAD |
|---|
| 383 | +ENDPROC(startup_pgm_check_handler) |
|---|
| 384 | + |
|---|
| 385 | +# |
|---|
| 327 | 386 | # params at 10400 (setup.h) |
|---|
| 387 | +# Must be keept in sync with struct parmarea in setup.h |
|---|
| 328 | 388 | # |
|---|
| 329 | 389 | .org PARMAREA |
|---|
| 330 | | - .long 0,0 # IPL_DEVICE |
|---|
| 331 | | - .long 0,0 # INITRD_START |
|---|
| 332 | | - .long 0,0 # INITRD_SIZE |
|---|
| 333 | | - .long 0,0 # OLDMEM_BASE |
|---|
| 334 | | - .long 0,0 # OLDMEM_SIZE |
|---|
| 390 | + .quad 0 # IPL_DEVICE |
|---|
| 391 | + .quad 0 # INITRD_START |
|---|
| 392 | + .quad 0 # INITRD_SIZE |
|---|
| 393 | + .quad 0 # OLDMEM_BASE |
|---|
| 394 | + .quad 0 # OLDMEM_SIZE |
|---|
| 395 | + .quad kernel_version # points to kernel version string |
|---|
| 335 | 396 | |
|---|
| 336 | 397 | .org COMMAND_LINE |
|---|
| 337 | 398 | .byte "root=/dev/ram0 ro" |
|---|
| 338 | 399 | .byte 0 |
|---|
| 339 | 400 | |
|---|
| 340 | | - .org 0x11000 |
|---|
| 401 | + .org EARLY_SCCB_OFFSET |
|---|
| 402 | + .fill 4096 |
|---|
| 403 | + |
|---|
| 404 | + .org HEAD_END |
|---|