#include <asm/reg.h>
#include <asm/ppc_asm.h>
#include <asm/processor.h>
.text
_GLOBAL(mpc52xx_deep_sleep)
mpc52xx_deep_sleep:
mfmsr r7
ori r7, r7, 0x8000
mtmsr r7
sync; isync;
li r10, 0
lwz r8, 0x14(r6)
ori r8, r8, 0x1
xori r8, r8, 0x1
stw r8, 0x14(r6)
sync
li r8, 0x1
stw r8, 0x40(r6)
sync
1:
cmpi cr0, r10, 1
bne cr0, 1b
mfspr r10, SPRN_HID0
ori r10, r10, 0x2000
sync; isync;
mtspr SPRN_HID0, r10
sync; isync;
mflr r9
mtlr r3
blrl
mtlr r9
mfspr r10, SPRN_HID0
ori r10, r10, 0x2000
xori r10, r10, 0x2000
sync; isync;
mtspr SPRN_HID0, r10
sync; isync;
blr
_GLOBAL(mpc52xx_ds_sram)
mpc52xx_ds_sram:
lwz r8, 0x4(r4)
oris r8, r8, 0x8000
stw r8, 0x4(r4)
sync
ori r8, r8, 0x0002
stw r8, 0x4(r4)
sync
xori r8, r8, 0x0002
xoris r8, r8, 0x8000
stw r8, 0x4(r4)
sync
oris r8, r8, 0x5000
xoris r8, r8, 0x4000
stw r8, 0x4(r4)
sync
lwz r8, 0x14(r5)
ori r8, r8, 0x0008
xori r8, r8, 0x0008
stw r8, 0x14(r5)
sync
mfmsr r10
oris r10, r10, 0x0004
sync; isync;
mtmsr r10
sync; isync;
lwz r8, 0x14(r5)
ori r8, r8, 0x0008
stw r8, 0x14(r5)
sync
lwz r8, 0x4(r4)
oris r8, r8, 0x5000
stw r8, 0x4(r4)
sync
blr
_GLOBAL(mpc52xx_ds_sram_size)
mpc52xx_ds_sram_size:
.long $-mpc52xx_ds_sram
_GLOBAL(mpc52xx_ds_cached)
mpc52xx_ds_cached:
mtspr SPRN_SPRG0, r7
mtspr SPRN_SPRG1, r8
mfspr r7, 311
addi r7, r7, 0x540
li r8, 0
stw r8, 0(r7)
sync
dcbf 0, r7
mfspr r7, 311
addi r7, r7, 0x524
lwz r8, 0(r7)
ori r8, r8, 0x0400
stw r8, 0(r7)
sync
dcbf 0, r7
li r10, 1
mfspr r8, SPRN_SPRG1
mfspr r7, SPRN_SPRG0
rfi
_GLOBAL(mpc52xx_ds_cached_size)
mpc52xx_ds_cached_size:
.long $-mpc52xx_ds_cached