Subversion Repositories HelenOS-historic

Compare Revisions

Ignore whitespace Rev 1166 → Rev 1395

/boot/trunk/arch/ppc64/loader/asm.S
106,12 → 106,19
# r3 = bootinfo (pa)
# r4 = bootinfo_size
# r5 = trans (pa)
# r6 = kernel size
# r7 = framebuffer (pa)
# r8 = real_mode (pa)
# r6 = bytes to copy
# r7 = real_mode (pa)
mtspr srr0, r8
# disable interrupts
mfmsr r31
rlwinm r31, r31, 0, 17, 15
mtmsr r31
# set real_mode meeting point address
mtspr srr0, r7
# jumps to real_mode
mfmsr r31
124,7 → 131,7
isync
rfid
 
.section REALMODE
.section REALMODE, "ax"
.align PAGE_WIDTH
.global real_mode
 
133,8 → 140,7
# copy kernel to proper location
#
# r5 = trans (pa)
# r6 = kernel size
# r7 = framebuffer (pa)
# r6 = bytes to copy
li r31, PAGE_SIZE >> 2
li r30, 0
168,74 → 174,23
copy_end:
# invalidate segment registers
# initially fill segment registers
 
li r31, 16
mtctr r31
li r31, 0
li r30, 0
li r30, 0x2000
 
seg_fill:
mtsrin r30, r31
addi r30, r30, 0x111
addis r31, r31, 0x1000 # move to next SR
bdnz seg_fill
# invalidate block address translation registers
mtspr ibat0u, r30
mtspr ibat0l, r30
mtspr ibat1u, r30
mtspr ibat1l, r30
mtspr ibat2u, r30
mtspr ibat2l, r30
mtspr ibat3u, r30
mtspr ibat3l, r30
mtspr dbat0u, r30
mtspr dbat0l, r30
mtspr dbat1u, r30
mtspr dbat1l, r30
mtspr dbat2u, r30
mtspr dbat2l, r30
mtspr dbat3u, r30
mtspr dbat3l, r30
# create identity mapping
# FIXME: map exactly the size of RAM
lis r31, 0x8000
ori r31, r31, 0x0ffe
lis r30, 0x0000
ori r30, r30, 0x0002
mtspr ibat0u, r31
mtspr ibat0l, r30
mtspr dbat0u, r31
mtspr dbat0l, r30
# FIXME: temporal framebuffer mapping
lis r31, 0xf000
ori r31, r31, 0x0ffe
mr r30, r7
ori r30, r30, 0x0002
mtspr dbat1u, r31
mtspr dbat1l, r30
tlbia
tlbsync
# start the kernel
#