diff options
Diffstat (limited to 'arch/powerpc/kernel/head_fsl_booke.S')
-rw-r--r-- | arch/powerpc/kernel/head_fsl_booke.S | 46 |
1 files changed, 32 insertions, 14 deletions
diff --git a/arch/powerpc/kernel/head_fsl_booke.S b/arch/powerpc/kernel/head_fsl_booke.S index 0f59863c3ade..6f62a737f607 100644 --- a/arch/powerpc/kernel/head_fsl_booke.S +++ b/arch/powerpc/kernel/head_fsl_booke.S | |||
@@ -895,15 +895,11 @@ _GLOBAL(__setup_e500mc_ivors) | |||
895 | mtspr SPRN_IVOR36,r3 | 895 | mtspr SPRN_IVOR36,r3 |
896 | li r3,CriticalDoorbell@l | 896 | li r3,CriticalDoorbell@l |
897 | mtspr SPRN_IVOR37,r3 | 897 | mtspr SPRN_IVOR37,r3 |
898 | sync | ||
899 | blr | ||
898 | 900 | ||
899 | /* | 901 | /* setup ehv ivors for */ |
900 | * We only want to touch IVOR38-41 if we're running on hardware | 902 | _GLOBAL(__setup_ehv_ivors) |
901 | * that supports category E.HV. The architectural way to determine | ||
902 | * this is MMUCFG[LPIDSIZE]. | ||
903 | */ | ||
904 | mfspr r3, SPRN_MMUCFG | ||
905 | andis. r3, r3, MMUCFG_LPIDSIZE@h | ||
906 | beq no_hv | ||
907 | li r3,GuestDoorbell@l | 903 | li r3,GuestDoorbell@l |
908 | mtspr SPRN_IVOR38,r3 | 904 | mtspr SPRN_IVOR38,r3 |
909 | li r3,CriticalGuestDoorbell@l | 905 | li r3,CriticalGuestDoorbell@l |
@@ -912,14 +908,8 @@ _GLOBAL(__setup_e500mc_ivors) | |||
912 | mtspr SPRN_IVOR40,r3 | 908 | mtspr SPRN_IVOR40,r3 |
913 | li r3,Ehvpriv@l | 909 | li r3,Ehvpriv@l |
914 | mtspr SPRN_IVOR41,r3 | 910 | mtspr SPRN_IVOR41,r3 |
915 | skip_hv_ivors: | ||
916 | sync | 911 | sync |
917 | blr | 912 | blr |
918 | no_hv: | ||
919 | lwz r3, CPU_SPEC_FEATURES(r5) | ||
920 | rlwinm r3, r3, 0, ~CPU_FTR_EMB_HV | ||
921 | stw r3, CPU_SPEC_FEATURES(r5) | ||
922 | b skip_hv_ivors | ||
923 | 913 | ||
924 | #ifdef CONFIG_SPE | 914 | #ifdef CONFIG_SPE |
925 | /* | 915 | /* |
@@ -1043,6 +1033,34 @@ _GLOBAL(flush_dcache_L1) | |||
1043 | 1033 | ||
1044 | blr | 1034 | blr |
1045 | 1035 | ||
1036 | /* Flush L1 d-cache, invalidate and disable d-cache and i-cache */ | ||
1037 | _GLOBAL(__flush_disable_L1) | ||
1038 | mflr r10 | ||
1039 | bl flush_dcache_L1 /* Flush L1 d-cache */ | ||
1040 | mtlr r10 | ||
1041 | |||
1042 | mfspr r4, SPRN_L1CSR0 /* Invalidate and disable d-cache */ | ||
1043 | li r5, 2 | ||
1044 | rlwimi r4, r5, 0, 3 | ||
1045 | |||
1046 | msync | ||
1047 | isync | ||
1048 | mtspr SPRN_L1CSR0, r4 | ||
1049 | isync | ||
1050 | |||
1051 | 1: mfspr r4, SPRN_L1CSR0 /* Wait for the invalidate to finish */ | ||
1052 | andi. r4, r4, 2 | ||
1053 | bne 1b | ||
1054 | |||
1055 | mfspr r4, SPRN_L1CSR1 /* Invalidate and disable i-cache */ | ||
1056 | li r5, 2 | ||
1057 | rlwimi r4, r5, 0, 3 | ||
1058 | |||
1059 | mtspr SPRN_L1CSR1, r4 | ||
1060 | isync | ||
1061 | |||
1062 | blr | ||
1063 | |||
1046 | #ifdef CONFIG_SMP | 1064 | #ifdef CONFIG_SMP |
1047 | /* When we get here, r24 needs to hold the CPU # */ | 1065 | /* When we get here, r24 needs to hold the CPU # */ |
1048 | .globl __secondary_start | 1066 | .globl __secondary_start |