Save and restore HID2 on 750FX CPUs when sleeping/resuming

parent 4b2131f8
...@@ -248,12 +248,13 @@ END_FTR_SECTION_IFCLR(CPU_FTR_NO_DPM) ...@@ -248,12 +248,13 @@ END_FTR_SECTION_IFCLR(CPU_FTR_NO_DPM)
/* Definitions for the table use to save CPU states */ /* Definitions for the table use to save CPU states */
#define CS_HID0 0 #define CS_HID0 0
#define CS_HID1 4 #define CS_HID1 4
#define CS_MSSCR0 8 #define CS_HID2 8
#define CS_MSSSR0 12 #define CS_MSSCR0 12
#define CS_ICTRL 16 #define CS_MSSSR0 16
#define CS_LDSTCR 20 #define CS_ICTRL 20
#define CS_LDSTDB 24 #define CS_LDSTCR 24
#define CS_SIZE 28 #define CS_LDSTDB 28
#define CS_SIZE 32
.data .data
.balign L1_CACHE_LINE_SIZE .balign L1_CACHE_LINE_SIZE
...@@ -316,6 +317,13 @@ _GLOBAL(__save_cpu_setup) ...@@ -316,6 +317,13 @@ _GLOBAL(__save_cpu_setup)
/* Backup 750FX specific registers */ /* Backup 750FX specific registers */
mfspr r4,SPRN_HID1 mfspr r4,SPRN_HID1
stw r4,CS_HID1(r5) stw r4,CS_HID1(r5)
/* If rev 2.x, backup HID2 */
mfspr r3,PVR
andi. r3,r3,0xff00
cmpi cr0,r3,0x0200
bne 1f
mfspr r4,SPRN_HID2
stw r4,CS_HID2(r5)
1: 1:
mtcr r7 mtcr r7
blr blr
...@@ -395,9 +403,19 @@ _GLOBAL(__restore_cpu_setup) ...@@ -395,9 +403,19 @@ _GLOBAL(__restore_cpu_setup)
sync sync
2: bne cr5,1f 2: bne cr5,1f
/* Restore 750FX specific registers /* Restore 750FX specific registers
* that is restore PLL config & switch * that is restore HID2 on rev 2.x and PLL config & switch
* to PLL 0 * to PLL 0 on all
*/ */
/* If rev 2.x, restore HID2 with low voltage bit cleared */
mfspr r3,PVR
andi. r3,r3,0xff00
cmpi cr0,r3,0x0200
bne 4f
lwz r4,CS_HID2(r5)
rlwinm r4,r4,0,19,17
mtspr SPRN_HID2,r4
sync
4:
lwz r4,CS_HID1(r5) lwz r4,CS_HID1(r5)
rlwinm r5,r4,0,16,14 rlwinm r5,r4,0,16,14
mtspr SPRN_HID1,r5 mtspr SPRN_HID1,r5
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment