1 /* SPDX-License-Identifier: GPL-2.0 */ 2 /* 3 * Copyright IBM Corp. 2005 4 * 5 * Author(s): Rolf Adelsberger 6 * 7 */ 8 9 #include <linux/linkage.h> 10 #include <asm/page.h> 11 #include <asm/sigp.h> 12 13 /* 14 * moves the new kernel to its destination... 15 * %r2 = pointer to first kimage_entry_t 16 * %r3 = start address - where to jump to afte 17 * %r4 = subcode 18 * 19 * %r5 will be used as temp. storage 20 * %r6 holds the destination address 21 * %r7 = PAGE_SIZE 22 * %r8 holds the source address 23 * %r9 = PAGE_SIZE 24 * 25 * 0xf000 is a page_mask 26 */ 27 28 .text 29 SYM_CODE_START(relocate_kernel) 30 basr %r13,0 # base address 31 .base: 32 lghi %r7,PAGE_SIZE # load PAGE_SI 33 lghi %r9,PAGE_SIZE # load PAGE_SI 34 lg %r5,0(%r2) # read another 35 aghi %r2,8 # increment po 36 tml %r5,0x1 # is it a dest 37 je .indir_check # NO, goto "in 38 lgr %r6,%r5 # r6 = r5 39 nill %r6,0xf000 # mask it out 40 j .base # ...next iter 41 .indir_check: 42 tml %r5,0x2 # is it a indi 43 je .done_test # NO, goto "do 44 nill %r5,0xf000 # YES, mask ou 45 lgr %r2,%r5 # move it into 46 j .base # and read nex 47 .done_test: 48 tml %r5,0x4 # is it the do 49 je .source_test # NO! Well, th 50 j .done # ok, lets fin 51 .source_test: 52 tml %r5,0x8 # it should be 53 je .base # NO, ignore i 54 lgr %r8,%r5 # r8 = r5 55 nill %r8,0xf000 # masking 56 0: mvcle %r6,%r8,0x0 # copy PAGE_SI 57 jo 0b 58 j .base 59 .done: 60 lgr %r0,%r4 # subcode 61 cghi %r3,0 62 je .diag 63 la %r4,load_psw-.base(%r13) 64 o %r3,4(%r4) # or load addr 65 st %r3,4(%r4) 66 mvc 0(8,%r0),0(%r4) # copy psw to 67 .diag: 68 diag %r0,%r0,0x308 69 SYM_CODE_END(relocate_kernel) 70 71 .balign 8 72 SYM_DATA_START_LOCAL(load_psw) 73 .long 0x00080000,0x80000000 74 SYM_DATA_END_LABEL(load_psw, SYM_L_LOCAL, relo 75 .balign 8 76 SYM_DATA(relocate_kernel_len, .quad relocate_k
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.