| |
| |
| |
| |
| |
| |
| #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$ |
| #endif |
| |
| <------>__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 |
| |
| <------> |
| <------>mtsp %r0,%sr4 |
| <------>mtsp %r0,%sr5 |
| <------>mtsp %r0,%sr6 |
| <------>mtsp %r0,%sr7 |
| |
| <------> |
| |
| <------>.import _bss,data |
| <------>.import _ebss,data |
| |
| <------>load32 BOOTADDR(_bss),%r3 |
| <------>load32 BOOTADDR(_ebss),%r4 |
| <------>ldo FRAME_SIZE(%r4),%sp |
| $bss_loop: |
| <------>cmpb,<<,n %r3,%r4,$bss_loop |
| <------>stw,ma %r0,4(%r3) |
| |
| <------> |
| <------>loadgp |
| |
| <------> |
| <------>copy %arg1, %r6 |
| <------>copy %arg2, %r7 |
| <------>copy %arg3, %r8 |
| <------>load32 BOOTADDR(decompress_kernel),%r3 |
| |
| #ifdef CONFIG_64BIT |
| <------>.level PA_ASM_LEVEL |
| <------>ssm PSW_W_SM, %r0 |
| <------>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 |
| #endif |
| |
| <------>load32 KERNEL_BINARY_TEXT_START, %arg0 |
| <------>copy %r6, %arg1 |
| <------>copy %r7, %arg2 |
| <------>copy %r8, %arg3 |
| |
| <------>bv,n 0(%ret0) |
| END(startup) |
| |
| |