#include <asm/processor.h>
#include <asm/page.h>
#include <asm/cputable.h>
#include <asm/ppc_asm.h>
#include <asm/asm-offsets.h>
#include <asm/cache.h>
_GLOBAL(__cpu_preinit_ppc970)
mfmsr r0
rldicl. r0,r0,4,63
beqlr
li r0,0
mfspr r3,SPRN_HID4
rldimi r3,r0,40,23
rldimi r3,r0,2,61
sync
mtspr SPRN_HID4,r3
isync
sync
mfspr r3,SPRN_HID5
rldimi r3,r0,6,56
sync
mtspr SPRN_HID5,r3
isync
sync
mfspr r0,SPRN_HID1
li r3,0x1200
sldi r3,r3,44
or r0,r0,r3
mtspr SPRN_HID1,r0
mtspr SPRN_HID1,r0
isync
li r0,0
sync
mtspr SPRN_HIOR,0
isync
blr
#define CS_HID0 0
#define CS_HID1 8
#define CS_HID4 16
#define CS_HID5 24
#define CS_SIZE 32
.data
.balign L1_CACHE_BYTES,0
cpu_state_storage:
.space CS_SIZE
.balign L1_CACHE_BYTES,0
.text
_GLOBAL(__setup_cpu_ppc970)
mfmsr r0
rldicl. r0,r0,4,63
beq no_hv_mode
mfspr r0,SPRN_HID0
li r11,5
rldimi r0,r11,52,8
li r11,0
rldimi r0,r11,32,31
b load_hids
_GLOBAL(__setup_cpu_ppc970MP)
mfmsr r0
rldicl. r0,r0,4,63
beq no_hv_mode
mfspr r0,SPRN_HID0
li r11,0x15
rldimi r0,r11,52,6
li r11,0
rldimi r0,r11,32,31
load_hids:
mtspr SPRN_HID0,r0
mfspr r0,SPRN_HID0
mfspr r0,SPRN_HID0
mfspr r0,SPRN_HID0
mfspr r0,SPRN_HID0
mfspr r0,SPRN_HID0
mfspr r0,SPRN_HID0
sync
isync
mfspr r0,SPRN_HID4
clrldi r0,r0,1
ori r0,r0,HID4_LPES1
sync
mtspr SPRN_HID4,r0
isync
LOAD_REG_ADDR(r5,cpu_state_storage)
mfspr r3,SPRN_HID0
std r3,CS_HID0(r5)
mfspr r3,SPRN_HID1
std r3,CS_HID1(r5)
mfspr r4,SPRN_HID4
std r4,CS_HID4(r5)
mfspr r3,SPRN_HID5
std r3,CS_HID5(r5)
andi. r4,r4,HID4_LPES1
bnelr
no_hv_mode:
ld r5,CPU_SPEC_FEATURES(r4)
LOAD_REG_IMMEDIATE(r6,CPU_FTR_HVMODE)
andc r5,r5,r6
std r5,CPU_SPEC_FEATURES(r4)
blr
_GLOBAL(__restore_cpu_ppc970)
mfmsr r0
rldicl. r0,r0,4,63
beqlr
LOAD_REG_ADDR(r5,cpu_state_storage)
li r0,0
mfspr r3,SPRN_HID4
rldimi r3,r0,40,23
sync
mtspr SPRN_HID4,r3
isync
sync
li r0,0
sync
mtspr SPRN_HIOR,0
isync
ld r3,CS_HID0(r5)
sync
isync
mtspr SPRN_HID0,r3
mfspr r3,SPRN_HID0
mfspr r3,SPRN_HID0
mfspr r3,SPRN_HID0
mfspr r3,SPRN_HID0
mfspr r3,SPRN_HID0
mfspr r3,SPRN_HID0
sync
isync
ld r3,CS_HID1(r5)
sync
isync
mtspr SPRN_HID1,r3
mtspr SPRN_HID1,r3
sync
isync
ld r3,CS_HID4(r5)
sync
isync
mtspr SPRN_HID4,r3
sync
isync
ld r3,CS_HID5(r5)
sync
isync
mtspr SPRN_HID5,r3
sync
isync
blr