Commit 363be49c86af1ebe423df4087c7b021459ecd8cc

Authored by j_mayer
1 parent 47103572

Fix / update PowerPC BookE definitions.


git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@2543 c046a42c-6fe2-441c-8c8c-71466251a162
target-ppc/cpu.h
@@ -514,10 +514,8 @@ enum { @@ -514,10 +514,8 @@ enum {
514 /* Default PowerPC will be 604/970 */ 514 /* Default PowerPC will be 604/970 */
515 #define PPC_INSNS_PPC32 PPC_INSNS_604 515 #define PPC_INSNS_PPC32 PPC_INSNS_604
516 #define PPC_FLAGS_PPC32 PPC_FLAGS_604 516 #define PPC_FLAGS_PPC32 PPC_FLAGS_604
517 -#if 1  
518 #define PPC_INSNS_PPC64 PPC_INSNS_970 517 #define PPC_INSNS_PPC64 PPC_INSNS_970
519 #define PPC_FLAGS_PPC64 PPC_FLAGS_970 518 #define PPC_FLAGS_PPC64 PPC_FLAGS_970
520 -#endif  
521 #define PPC_INSNS_DEFAULT PPC_INSNS_604 519 #define PPC_INSNS_DEFAULT PPC_INSNS_604
522 #define PPC_FLAGS_DEFAULT PPC_FLAGS_604 520 #define PPC_FLAGS_DEFAULT PPC_FLAGS_604
523 typedef struct ppc_def_t ppc_def_t; 521 typedef struct ppc_def_t ppc_def_t;
@@ -562,9 +560,11 @@ struct ppc_tlb_t { @@ -562,9 +560,11 @@ struct ppc_tlb_t {
562 #define MSR_SF 63 /* Sixty-four-bit mode hflags */ 560 #define MSR_SF 63 /* Sixty-four-bit mode hflags */
563 #define MSR_ISF 61 /* Sixty-four-bit interrupt mode on 630 */ 561 #define MSR_ISF 61 /* Sixty-four-bit interrupt mode on 630 */
564 #define MSR_HV 60 /* hypervisor state hflags */ 562 #define MSR_HV 60 /* hypervisor state hflags */
565 -#define MSR_UCLE 26 /* User-mode cache lock enable on e500 */ 563 +#define MSR_CM 31 /* Computation mode for BookE hflags */
  564 +#define MSR_ICM 30 /* Interrupt computation mode for BookE */
  565 +#define MSR_UCLE 26 /* User-mode cache lock enable for BookE */
566 #define MSR_VR 25 /* altivec available hflags */ 566 #define MSR_VR 25 /* altivec available hflags */
567 -#define MSR_SPE 25 /* SPE enable on e500 hflags */ 567 +#define MSR_SPE 25 /* SPE enable for BookE hflags */
568 #define MSR_AP 23 /* Access privilege state on 602 hflags */ 568 #define MSR_AP 23 /* Access privilege state on 602 hflags */
569 #define MSR_SA 22 /* Supervisor access mode on 602 hflags */ 569 #define MSR_SA 22 /* Supervisor access mode on 602 hflags */
570 #define MSR_KEY 19 /* key bit on 603e */ 570 #define MSR_KEY 19 /* key bit on 603e */
@@ -600,6 +600,8 @@ struct ppc_tlb_t { @@ -600,6 +600,8 @@ struct ppc_tlb_t {
600 #define msr_sf env->msr[MSR_SF] 600 #define msr_sf env->msr[MSR_SF]
601 #define msr_isf env->msr[MSR_ISF] 601 #define msr_isf env->msr[MSR_ISF]
602 #define msr_hv env->msr[MSR_HV] 602 #define msr_hv env->msr[MSR_HV]
  603 +#define msr_cm env->msr[MSR_CM]
  604 +#define msr_icm env->msr[MSR_ICM]
603 #define msr_ucle env->msr[MSR_UCLE] 605 #define msr_ucle env->msr[MSR_UCLE]
604 #define msr_vr env->msr[MSR_VR] 606 #define msr_vr env->msr[MSR_VR]
605 #define msr_spe env->msr[MSR_SPE] 607 #define msr_spe env->msr[MSR_SPE]
@@ -724,6 +726,7 @@ struct CPUPPCState { @@ -724,6 +726,7 @@ struct CPUPPCState {
724 int nb_ways; /* Number of ways in the TLB set */ 726 int nb_ways; /* Number of ways in the TLB set */
725 int last_way; /* Last used way used to allocate TLB in a LRU way */ 727 int last_way; /* Last used way used to allocate TLB in a LRU way */
726 int id_tlbs; /* If 1, MMU has separated TLBs for instructions & data */ 728 int id_tlbs; /* If 1, MMU has separated TLBs for instructions & data */
  729 + int nb_pids; /* Number of available PID registers */
727 ppc_tlb_t *tlb; /* TLB is optional. Allocate them only if needed */ 730 ppc_tlb_t *tlb; /* TLB is optional. Allocate them only if needed */
728 /* Callbacks for specific checks on some implementations */ 731 /* Callbacks for specific checks on some implementations */
729 int (*tlb_check_more)(CPUPPCState *env, struct ppc_tlb_t *tlb, int *prot, 732 int (*tlb_check_more)(CPUPPCState *env, struct ppc_tlb_t *tlb, int *prot,
@@ -874,11 +877,11 @@ void store_booke_tsr (CPUPPCState *env, target_ulong val); @@ -874,11 +877,11 @@ void store_booke_tsr (CPUPPCState *env, target_ulong val);
874 #define SPR_SRR1 (0x01B) 877 #define SPR_SRR1 (0x01B)
875 #define SPR_BOOKE_PID (0x030) 878 #define SPR_BOOKE_PID (0x030)
876 #define SPR_BOOKE_DECAR (0x036) 879 #define SPR_BOOKE_DECAR (0x036)
877 -#define SPR_CSRR0 (0x03A)  
878 -#define SPR_CSRR1 (0x03B) 880 +#define SPR_BOOKE_CSRR0 (0x03A)
  881 +#define SPR_BOOKE_CSRR1 (0x03B)
879 #define SPR_BOOKE_DEAR (0x03D) 882 #define SPR_BOOKE_DEAR (0x03D)
880 #define SPR_BOOKE_ESR (0x03E) 883 #define SPR_BOOKE_ESR (0x03E)
881 -#define SPR_BOOKE_EVPR (0x03F) 884 +#define SPR_BOOKE_IVPR (0x03F)
882 #define SPR_8xx_EIE (0x050) 885 #define SPR_8xx_EIE (0x050)
883 #define SPR_8xx_EID (0x051) 886 #define SPR_8xx_EID (0x051)
884 #define SPR_8xx_NRE (0x052) 887 #define SPR_8xx_NRE (0x052)
@@ -900,6 +903,9 @@ void store_booke_tsr (CPUPPCState *env, target_ulong val); @@ -900,6 +903,9 @@ void store_booke_tsr (CPUPPCState *env, target_ulong val);
900 #define SPR_58x_BAR (0x09F) 903 #define SPR_58x_BAR (0x09F)
901 #define SPR_VRSAVE (0x100) 904 #define SPR_VRSAVE (0x100)
902 #define SPR_USPRG0 (0x100) 905 #define SPR_USPRG0 (0x100)
  906 +#define SPR_USPRG1 (0x101)
  907 +#define SPR_USPRG2 (0x102)
  908 +#define SPR_USPRG3 (0x103)
903 #define SPR_USPRG4 (0x104) 909 #define SPR_USPRG4 (0x104)
904 #define SPR_USPRG5 (0x105) 910 #define SPR_USPRG5 (0x105)
905 #define SPR_USPRG6 (0x106) 911 #define SPR_USPRG6 (0x106)
@@ -973,16 +979,18 @@ void store_booke_tsr (CPUPPCState *env, target_ulong val); @@ -973,16 +979,18 @@ void store_booke_tsr (CPUPPCState *env, target_ulong val);
973 #define SPR_BOOKE_ATBL (0x20E) 979 #define SPR_BOOKE_ATBL (0x20E)
974 #define SPR_BOOKE_ATBU (0x20F) 980 #define SPR_BOOKE_ATBU (0x20F)
975 #define SPR_IBAT0U (0x210) 981 #define SPR_IBAT0U (0x210)
976 -#define SPR_E500_IVOR32 (0x210) 982 +#define SPR_BOOKE_IVOR32 (0x210)
977 #define SPR_IBAT0L (0x211) 983 #define SPR_IBAT0L (0x211)
978 -#define SPR_E500_IVOR33 (0x211) 984 +#define SPR_BOOKE_IVOR33 (0x211)
979 #define SPR_IBAT1U (0x212) 985 #define SPR_IBAT1U (0x212)
980 -#define SPR_E500_IVOR34 (0x212) 986 +#define SPR_BOOKE_IVOR34 (0x212)
981 #define SPR_IBAT1L (0x213) 987 #define SPR_IBAT1L (0x213)
982 -#define SPR_E500_IVOR35 (0x213) 988 +#define SPR_BOOKE_IVOR35 (0x213)
983 #define SPR_IBAT2U (0x214) 989 #define SPR_IBAT2U (0x214)
  990 +#define SPR_BOOKE_IVOR36 (0x214)
984 #define SPR_IBAT2L (0x215) 991 #define SPR_IBAT2L (0x215)
985 #define SPR_E500_L1CFG0 (0x215) 992 #define SPR_E500_L1CFG0 (0x215)
  993 +#define SPR_BOOKE_IVOR37 (0x215)
986 #define SPR_IBAT3U (0x216) 994 #define SPR_IBAT3U (0x216)
987 #define SPR_E500_L1CFG1 (0x216) 995 #define SPR_E500_L1CFG1 (0x216)
988 #define SPR_IBAT3L (0x217) 996 #define SPR_IBAT3L (0x217)
@@ -1005,25 +1013,32 @@ void store_booke_tsr (CPUPPCState *env, target_ulong val); @@ -1005,25 +1013,32 @@ void store_booke_tsr (CPUPPCState *env, target_ulong val);
1005 #define SPR_DBAT4U (0x238) 1013 #define SPR_DBAT4U (0x238)
1006 #define SPR_DBAT4L (0x239) 1014 #define SPR_DBAT4L (0x239)
1007 #define SPR_DBAT5U (0x23A) 1015 #define SPR_DBAT5U (0x23A)
1008 -#define SPR_E500_MCSRR0 (0x23A) 1016 +#define SPR_BOOKE_MCSRR0 (0x23A)
1009 #define SPR_DBAT5L (0x23B) 1017 #define SPR_DBAT5L (0x23B)
1010 -#define SPR_E500_MCSRR1 (0x23B) 1018 +#define SPR_BOOKE_MCSRR1 (0x23B)
1011 #define SPR_DBAT6U (0x23C) 1019 #define SPR_DBAT6U (0x23C)
1012 -#define SPR_E500_MCSR (0x23C) 1020 +#define SPR_BOOKE_MCSR (0x23C)
1013 #define SPR_DBAT6L (0x23D) 1021 #define SPR_DBAT6L (0x23D)
1014 #define SPR_E500_MCAR (0x23D) 1022 #define SPR_E500_MCAR (0x23D)
1015 #define SPR_DBAT7U (0x23E) 1023 #define SPR_DBAT7U (0x23E)
  1024 +#define SPR_BOOKE_DSRR0 (0x23E)
1016 #define SPR_DBAT7L (0x23F) 1025 #define SPR_DBAT7L (0x23F)
1017 -#define SPR_E500_MAS0 (0x270)  
1018 -#define SPR_E500_MAS1 (0x271)  
1019 -#define SPR_E500_MAS2 (0x272)  
1020 -#define SPR_E500_MAS3 (0x273)  
1021 -#define SPR_E500_MAS4 (0x274)  
1022 -#define SPR_E500_MAS6 (0x276)  
1023 -#define SPR_E500_PID1 (0x279)  
1024 -#define SPR_E500_PID2 (0x27A)  
1025 -#define SPR_E500_TLB0CFG (0x2B0)  
1026 -#define SPR_E500_TLB1CFG (0x2B1) 1026 +#define SPR_BOOKE_DSRR1 (0x23F)
  1027 +#define SPR_BOOKE_SPRG8 (0x25C)
  1028 +#define SPR_BOOKE_SPRG9 (0x25D)
  1029 +#define SPR_BOOKE_MAS0 (0x270)
  1030 +#define SPR_BOOKE_MAS1 (0x271)
  1031 +#define SPR_BOOKE_MAS2 (0x272)
  1032 +#define SPR_BOOKE_MAS3 (0x273)
  1033 +#define SPR_BOOKE_MAS4 (0x274)
  1034 +#define SPR_BOOKE_MAS6 (0x276)
  1035 +#define SPR_BOOKE_PID1 (0x279)
  1036 +#define SPR_BOOKE_PID2 (0x27A)
  1037 +#define SPR_BOOKE_TLB0CFG (0x2B0)
  1038 +#define SPR_BOOKE_TLB1CFG (0x2B1)
  1039 +#define SPR_BOOKE_TLB2CFG (0x2B2)
  1040 +#define SPR_BOOKE_TLB3CFG (0x2B3)
  1041 +#define SPR_BOOKE_EPR (0x2BE)
1027 #define SPR_440_INV0 (0x370) 1042 #define SPR_440_INV0 (0x370)
1028 #define SPR_440_INV1 (0x371) 1043 #define SPR_440_INV1 (0x371)
1029 #define SPR_440_INV2 (0x372) 1044 #define SPR_440_INV2 (0x372)
@@ -1043,10 +1058,10 @@ void store_booke_tsr (CPUPPCState *env, target_ulong val); @@ -1043,10 +1058,10 @@ void store_booke_tsr (CPUPPCState *env, target_ulong val);
1043 #define SPR_440_DVLIM (0x398) 1058 #define SPR_440_DVLIM (0x398)
1044 #define SPR_440_IVLIM (0x399) 1059 #define SPR_440_IVLIM (0x399)
1045 #define SPR_440_RSTCFG (0x39B) 1060 #define SPR_440_RSTCFG (0x39B)
1046 -#define SPR_440_DCBTRL (0x39C)  
1047 -#define SPR_440_DCBTRH (0x39D)  
1048 -#define SPR_440_ICBTRL (0x39E)  
1049 -#define SPR_440_ICBTRH (0x39F) 1061 +#define SPR_BOOKE_DCBTRL (0x39C)
  1062 +#define SPR_BOOKE_DCBTRH (0x39D)
  1063 +#define SPR_BOOKE_ICBTRL (0x39E)
  1064 +#define SPR_BOOKE_ICBTRH (0x39F)
1050 #define SPR_UMMCR0 (0x3A8) 1065 #define SPR_UMMCR0 (0x3A8)
1051 #define SPR_UPMC1 (0x3A9) 1066 #define SPR_UPMC1 (0x3A9)
1052 #define SPR_UPMC2 (0x3AA) 1067 #define SPR_UPMC2 (0x3AA)
@@ -1056,11 +1071,13 @@ void store_booke_tsr (CPUPPCState *env, target_ulong val); @@ -1056,11 +1071,13 @@ void store_booke_tsr (CPUPPCState *env, target_ulong val);
1056 #define SPR_UPMC4 (0x3AE) 1071 #define SPR_UPMC4 (0x3AE)
1057 #define SPR_USDA (0x3AF) 1072 #define SPR_USDA (0x3AF)
1058 #define SPR_40x_ZPR (0x3B0) 1073 #define SPR_40x_ZPR (0x3B0)
1059 -#define SPR_E500_MAS7 (0x3B0) 1074 +#define SPR_BOOKE_MAS7 (0x3B0)
1060 #define SPR_40x_PID (0x3B1) 1075 #define SPR_40x_PID (0x3B1)
1061 #define SPR_440_MMUCR (0x3B2) 1076 #define SPR_440_MMUCR (0x3B2)
1062 #define SPR_4xx_CCR0 (0x3B3) 1077 #define SPR_4xx_CCR0 (0x3B3)
  1078 +#define SPR_BOOKE_EPLC (0x3B3)
1063 #define SPR_405_IAC3 (0x3B4) 1079 #define SPR_405_IAC3 (0x3B4)
  1080 +#define SPR_BOOKE_EPSC (0x3B4)
1064 #define SPR_405_IAC4 (0x3B5) 1081 #define SPR_405_IAC4 (0x3B5)
1065 #define SPR_405_DVC1 (0x3B6) 1082 #define SPR_405_DVC1 (0x3B6)
1066 #define SPR_405_DVC2 (0x3B7) 1083 #define SPR_405_DVC2 (0x3B7)
@@ -1083,7 +1100,7 @@ void store_booke_tsr (CPUPPCState *env, target_ulong val); @@ -1083,7 +1100,7 @@ void store_booke_tsr (CPUPPCState *env, target_ulong val);
1083 #define SPR_DCMP (0x3D1) 1100 #define SPR_DCMP (0x3D1)
1084 #define SPR_HASH1 (0x3D2) 1101 #define SPR_HASH1 (0x3D2)
1085 #define SPR_HASH2 (0x3D3) 1102 #define SPR_HASH2 (0x3D3)
1086 -#define SPR_4xx_ICDBDR (0x3D3) 1103 +#define SPR_BOOKE_ICBDR (0x3D3)
1087 #define SPR_IMISS (0x3D4) 1104 #define SPR_IMISS (0x3D4)
1088 #define SPR_40x_ESR (0x3D4) 1105 #define SPR_40x_ESR (0x3D4)
1089 #define SPR_ICMP (0x3D5) 1106 #define SPR_ICMP (0x3D5)
@@ -1114,7 +1131,7 @@ void store_booke_tsr (CPUPPCState *env, target_ulong val); @@ -1114,7 +1131,7 @@ void store_booke_tsr (CPUPPCState *env, target_ulong val);
1114 #define SPR_E500_L1CSR1 (0x3F3) 1131 #define SPR_E500_L1CSR1 (0x3F3)
1115 #define SPR_440_DBDR (0x3F3) 1132 #define SPR_440_DBDR (0x3F3)
1116 #define SPR_40x_IAC1 (0x3F4) 1133 #define SPR_40x_IAC1 (0x3F4)
1117 -#define SPR_E500_MMUCSR0 (0x3F4) 1134 +#define SPR_BOOKE_MMUCSR0 (0x3F4)
1118 #define SPR_DABR (0x3F5) 1135 #define SPR_DABR (0x3F5)
1119 #define DABR_MASK (~(target_ulong)0x7) 1136 #define DABR_MASK (~(target_ulong)0x7)
1120 #define SPR_E500_BUCSR (0x3F5) 1137 #define SPR_E500_BUCSR (0x3F5)
@@ -1122,7 +1139,7 @@ void store_booke_tsr (CPUPPCState *env, target_ulong val); @@ -1122,7 +1139,7 @@ void store_booke_tsr (CPUPPCState *env, target_ulong val);
1122 #define SPR_601_HID5 (0x3F5) 1139 #define SPR_601_HID5 (0x3F5)
1123 #define SPR_40x_DAC1 (0x3F6) 1140 #define SPR_40x_DAC1 (0x3F6)
1124 #define SPR_40x_DAC2 (0x3F7) 1141 #define SPR_40x_DAC2 (0x3F7)
1125 -#define SPR_E500_MMUCFG (0x3F7) 1142 +#define SPR_BOOKE_MMUCFG (0x3F7)
1126 #define SPR_L2PM (0x3F8) 1143 #define SPR_L2PM (0x3F8)
1127 #define SPR_750_HID2 (0x3F8) 1144 #define SPR_750_HID2 (0x3F8)
1128 #define SPR_L2CR (0x3F9) 1145 #define SPR_L2CR (0x3F9)
target-ppc/translate_init.c
@@ -893,11 +893,11 @@ static void gen_spr_G2 (CPUPPCState *env) @@ -893,11 +893,11 @@ static void gen_spr_G2 (CPUPPCState *env)
893 &spr_read_generic, SPR_NOACCESS, 893 &spr_read_generic, SPR_NOACCESS,
894 0x00000000); 894 0x00000000);
895 /* Exception processing */ 895 /* Exception processing */
896 - spr_register(env, SPR_CSRR0, "CSRR0", 896 + spr_register(env, SPR_BOOKE_CSRR0, "CSRR0",
897 SPR_NOACCESS, SPR_NOACCESS, 897 SPR_NOACCESS, SPR_NOACCESS,
898 &spr_read_generic, &spr_write_generic, 898 &spr_read_generic, &spr_write_generic,
899 0x00000000); 899 0x00000000);
900 - spr_register(env, SPR_CSRR1, "CSRR1", 900 + spr_register(env, SPR_BOOKE_CSRR1, "CSRR1",
901 SPR_NOACCESS, SPR_NOACCESS, 901 SPR_NOACCESS, SPR_NOACCESS,
902 &spr_read_generic, &spr_write_generic, 902 &spr_read_generic, &spr_write_generic,
903 0x00000000); 903 0x00000000);
@@ -1060,11 +1060,27 @@ static void gen_spr_BookE (CPUPPCState *env) @@ -1060,11 +1060,27 @@ static void gen_spr_BookE (CPUPPCState *env)
1060 &spr_read_generic, &spr_write_pir, 1060 &spr_read_generic, &spr_write_pir,
1061 0x00000000); 1061 0x00000000);
1062 /* Interrupt processing */ 1062 /* Interrupt processing */
1063 - spr_register(env, SPR_CSRR0, "CSRR0", 1063 + spr_register(env, SPR_BOOKE_CSRR0, "CSRR0",
1064 SPR_NOACCESS, SPR_NOACCESS, 1064 SPR_NOACCESS, SPR_NOACCESS,
1065 &spr_read_generic, &spr_write_generic, 1065 &spr_read_generic, &spr_write_generic,
1066 0x00000000); 1066 0x00000000);
1067 - spr_register(env, SPR_CSRR1, "CSRR1", 1067 + spr_register(env, SPR_BOOKE_CSRR1, "CSRR1",
  1068 + SPR_NOACCESS, SPR_NOACCESS,
  1069 + &spr_read_generic, &spr_write_generic,
  1070 + 0x00000000);
  1071 + spr_register(env, SPR_BOOKE_DSRR0, "DSRR0",
  1072 + SPR_NOACCESS, SPR_NOACCESS,
  1073 + &spr_read_generic, &spr_write_generic,
  1074 + 0x00000000);
  1075 + spr_register(env, SPR_BOOKE_DSRR1, "DSRR1",
  1076 + SPR_NOACCESS, SPR_NOACCESS,
  1077 + &spr_read_generic, &spr_write_generic,
  1078 + 0x00000000);
  1079 + spr_register(env, SPR_BOOKE_MCSRR0, "MCSRR0",
  1080 + SPR_NOACCESS, SPR_NOACCESS,
  1081 + &spr_read_generic, &spr_write_generic,
  1082 + 0x00000000);
  1083 + spr_register(env, SPR_BOOKE_MCSRR1, "MCSRR1",
1068 SPR_NOACCESS, SPR_NOACCESS, 1084 SPR_NOACCESS, SPR_NOACCESS,
1069 &spr_read_generic, &spr_write_generic, 1085 &spr_read_generic, &spr_write_generic,
1070 0x00000000); 1086 0x00000000);
@@ -1137,7 +1153,12 @@ static void gen_spr_BookE (CPUPPCState *env) @@ -1137,7 +1153,12 @@ static void gen_spr_BookE (CPUPPCState *env)
1137 SPR_NOACCESS, SPR_NOACCESS, 1153 SPR_NOACCESS, SPR_NOACCESS,
1138 &spr_read_generic, &spr_write_generic, 1154 &spr_read_generic, &spr_write_generic,
1139 0x00000000); 1155 0x00000000);
1140 - spr_register(env, SPR_BOOKE_EVPR, "EVPR", 1156 + spr_register(env, SPR_BOOKE_IVPR, "IVPR",
  1157 + SPR_NOACCESS, SPR_NOACCESS,
  1158 + &spr_read_generic, &spr_write_generic,
  1159 + 0x00000000);
  1160 + /* Exception vectors */
  1161 + spr_register(env, SPR_BOOKE_IVPR, "IVPR",
1141 SPR_NOACCESS, SPR_NOACCESS, 1162 SPR_NOACCESS, SPR_NOACCESS,
1142 &spr_read_generic, &spr_write_generic, 1163 &spr_read_generic, &spr_write_generic,
1143 0x00000000); 1164 0x00000000);
@@ -1205,6 +1226,30 @@ static void gen_spr_BookE (CPUPPCState *env) @@ -1205,6 +1226,30 @@ static void gen_spr_BookE (CPUPPCState *env)
1205 SPR_NOACCESS, SPR_NOACCESS, 1226 SPR_NOACCESS, SPR_NOACCESS,
1206 &spr_read_generic, &spr_write_generic, 1227 &spr_read_generic, &spr_write_generic,
1207 0x00000000); 1228 0x00000000);
  1229 + spr_register(env, SPR_BOOKE_IVOR32, "IVOR32",
  1230 + SPR_NOACCESS, SPR_NOACCESS,
  1231 + &spr_read_generic, &spr_write_generic,
  1232 + 0x00000000);
  1233 + spr_register(env, SPR_BOOKE_IVOR33, "IVOR33",
  1234 + SPR_NOACCESS, SPR_NOACCESS,
  1235 + &spr_read_generic, &spr_write_generic,
  1236 + 0x00000000);
  1237 + spr_register(env, SPR_BOOKE_IVOR34, "IVOR34",
  1238 + SPR_NOACCESS, SPR_NOACCESS,
  1239 + &spr_read_generic, &spr_write_generic,
  1240 + 0x00000000);
  1241 + spr_register(env, SPR_BOOKE_IVOR35, "IVOR35",
  1242 + SPR_NOACCESS, SPR_NOACCESS,
  1243 + &spr_read_generic, &spr_write_generic,
  1244 + 0x00000000);
  1245 + spr_register(env, SPR_BOOKE_IVOR36, "IVOR36",
  1246 + SPR_NOACCESS, SPR_NOACCESS,
  1247 + &spr_read_generic, &spr_write_generic,
  1248 + 0x00000000);
  1249 + spr_register(env, SPR_BOOKE_IVOR37, "IVOR37",
  1250 + SPR_NOACCESS, SPR_NOACCESS,
  1251 + &spr_read_generic, &spr_write_generic,
  1252 + 0x00000000);
1208 spr_register(env, SPR_BOOKE_PID, "PID", 1253 spr_register(env, SPR_BOOKE_PID, "PID",
1209 SPR_NOACCESS, SPR_NOACCESS, 1254 SPR_NOACCESS, SPR_NOACCESS,
1210 &spr_read_generic, &spr_write_generic, 1255 &spr_read_generic, &spr_write_generic,
@@ -1265,6 +1310,89 @@ static void gen_spr_BookE (CPUPPCState *env) @@ -1265,6 +1310,89 @@ static void gen_spr_BookE (CPUPPCState *env)
1265 0x00000000); 1310 0x00000000);
1266 } 1311 }
1267 1312
  1313 +/* FSL storage control registers */
  1314 +static void gen_spr_BookE_FSL (CPUPPCState *env)
  1315 +{
  1316 + /* TLB assist registers */
  1317 + spr_register(env, SPR_BOOKE_MAS0, "MAS0",
  1318 + SPR_NOACCESS, SPR_NOACCESS,
  1319 + &spr_read_generic, &spr_write_generic,
  1320 + 0x00000000);
  1321 + spr_register(env, SPR_BOOKE_MAS1, "MAS2",
  1322 + SPR_NOACCESS, SPR_NOACCESS,
  1323 + &spr_read_generic, &spr_write_generic,
  1324 + 0x00000000);
  1325 + spr_register(env, SPR_BOOKE_MAS2, "MAS3",
  1326 + SPR_NOACCESS, SPR_NOACCESS,
  1327 + &spr_read_generic, &spr_write_generic,
  1328 + 0x00000000);
  1329 + spr_register(env, SPR_BOOKE_MAS3, "MAS4",
  1330 + SPR_NOACCESS, SPR_NOACCESS,
  1331 + &spr_read_generic, &spr_write_generic,
  1332 + 0x00000000);
  1333 + spr_register(env, SPR_BOOKE_MAS4, "MAS5",
  1334 + SPR_NOACCESS, SPR_NOACCESS,
  1335 + &spr_read_generic, &spr_write_generic,
  1336 + 0x00000000);
  1337 + spr_register(env, SPR_BOOKE_MAS6, "MAS6",
  1338 + SPR_NOACCESS, SPR_NOACCESS,
  1339 + &spr_read_generic, &spr_write_generic,
  1340 + 0x00000000);
  1341 + spr_register(env, SPR_BOOKE_MAS7, "MAS7",
  1342 + SPR_NOACCESS, SPR_NOACCESS,
  1343 + &spr_read_generic, &spr_write_generic,
  1344 + 0x00000000);
  1345 + if (env->nb_pids > 1) {
  1346 + spr_register(env, SPR_BOOKE_PID1, "PID1",
  1347 + SPR_NOACCESS, SPR_NOACCESS,
  1348 + &spr_read_generic, &spr_write_generic,
  1349 + 0x00000000);
  1350 + }
  1351 + if (env->nb_pids > 2) {
  1352 + spr_register(env, SPR_BOOKE_PID2, "PID2",
  1353 + SPR_NOACCESS, SPR_NOACCESS,
  1354 + &spr_read_generic, &spr_write_generic,
  1355 + 0x00000000);
  1356 + }
  1357 + spr_register(env, SPR_BOOKE_MMUCFG, "MMUCFG",
  1358 + SPR_NOACCESS, SPR_NOACCESS,
  1359 + &spr_read_generic, SPR_NOACCESS,
  1360 + 0x00000000); /* TOFIX */
  1361 + spr_register(env, SPR_BOOKE_MMUCSR0, "MMUCSR0",
  1362 + SPR_NOACCESS, SPR_NOACCESS,
  1363 + &spr_read_generic, &spr_write_generic,
  1364 + 0x00000000); /* TOFIX */
  1365 + switch (env->nb_ways) {
  1366 + case 4:
  1367 + spr_register(env, SPR_BOOKE_TLB3CFG, "TLB3CFG",
  1368 + SPR_NOACCESS, SPR_NOACCESS,
  1369 + &spr_read_generic, SPR_NOACCESS,
  1370 + 0x00000000); /* TOFIX */
  1371 + /* Fallthru */
  1372 + case 3:
  1373 + spr_register(env, SPR_BOOKE_TLB2CFG, "TLB2CFG",
  1374 + SPR_NOACCESS, SPR_NOACCESS,
  1375 + &spr_read_generic, SPR_NOACCESS,
  1376 + 0x00000000); /* TOFIX */
  1377 + /* Fallthru */
  1378 + case 2:
  1379 + spr_register(env, SPR_BOOKE_TLB1CFG, "TLB1CFG",
  1380 + SPR_NOACCESS, SPR_NOACCESS,
  1381 + &spr_read_generic, SPR_NOACCESS,
  1382 + 0x00000000); /* TOFIX */
  1383 + /* Fallthru */
  1384 + case 1:
  1385 + spr_register(env, SPR_BOOKE_TLB0CFG, "TLB0CFG",
  1386 + SPR_NOACCESS, SPR_NOACCESS,
  1387 + &spr_read_generic, SPR_NOACCESS,
  1388 + 0x00000000); /* TOFIX */
  1389 + /* Fallthru */
  1390 + case 0:
  1391 + default:
  1392 + break;
  1393 + }
  1394 +}
  1395 +
1268 /* SPR specific to PowerPC 440 implementation */ 1396 /* SPR specific to PowerPC 440 implementation */
1269 static void gen_spr_440 (CPUPPCState *env) 1397 static void gen_spr_440 (CPUPPCState *env)
1270 { 1398 {
@@ -1361,27 +1489,27 @@ static void gen_spr_440 (CPUPPCState *env) @@ -1361,27 +1489,27 @@ static void gen_spr_440 (CPUPPCState *env)
1361 0x00000000); 1489 0x00000000);
1362 /* Cache debug */ 1490 /* Cache debug */
1363 /* XXX : not implemented */ 1491 /* XXX : not implemented */
1364 - spr_register(env, SPR_440_DCBTRH, "DCBTRH", 1492 + spr_register(env, SPR_BOOKE_DCBTRH, "DCBTRH",
1365 SPR_NOACCESS, SPR_NOACCESS, 1493 SPR_NOACCESS, SPR_NOACCESS,
1366 &spr_read_generic, SPR_NOACCESS, 1494 &spr_read_generic, SPR_NOACCESS,
1367 0x00000000); 1495 0x00000000);
1368 /* XXX : not implemented */ 1496 /* XXX : not implemented */
1369 - spr_register(env, SPR_440_DCBTRL, "DCBTRL", 1497 + spr_register(env, SPR_BOOKE_DCBTRL, "DCBTRL",
1370 SPR_NOACCESS, SPR_NOACCESS, 1498 SPR_NOACCESS, SPR_NOACCESS,
1371 &spr_read_generic, SPR_NOACCESS, 1499 &spr_read_generic, SPR_NOACCESS,
1372 0x00000000); 1500 0x00000000);
1373 /* XXX : not implemented */ 1501 /* XXX : not implemented */
1374 - spr_register(env, SPR_4xx_ICDBDR, "ICDBDR", 1502 + spr_register(env, SPR_BOOKE_ICBDR, "ICBDR",
1375 SPR_NOACCESS, SPR_NOACCESS, 1503 SPR_NOACCESS, SPR_NOACCESS,
1376 &spr_read_generic, SPR_NOACCESS, 1504 &spr_read_generic, SPR_NOACCESS,
1377 0x00000000); 1505 0x00000000);
1378 /* XXX : not implemented */ 1506 /* XXX : not implemented */
1379 - spr_register(env, SPR_440_ICBTRH, "ICBTRH", 1507 + spr_register(env, SPR_BOOKE_ICBTRH, "ICBTRH",
1380 SPR_NOACCESS, SPR_NOACCESS, 1508 SPR_NOACCESS, SPR_NOACCESS,
1381 &spr_read_generic, SPR_NOACCESS, 1509 &spr_read_generic, SPR_NOACCESS,
1382 0x00000000); 1510 0x00000000);
1383 /* XXX : not implemented */ 1511 /* XXX : not implemented */
1384 - spr_register(env, SPR_440_ICBTRL, "ICBTRL", 1512 + spr_register(env, SPR_BOOKE_ICBTRL, "ICBTRL",
1385 SPR_NOACCESS, SPR_NOACCESS, 1513 SPR_NOACCESS, SPR_NOACCESS,
1386 &spr_read_generic, SPR_NOACCESS, 1514 &spr_read_generic, SPR_NOACCESS,
1387 0x00000000); 1515 0x00000000);
@@ -1426,7 +1554,7 @@ static void gen_spr_40x (CPUPPCState *env) @@ -1426,7 +1554,7 @@ static void gen_spr_40x (CPUPPCState *env)
1426 &spr_read_generic, &spr_write_generic, 1554 &spr_read_generic, &spr_write_generic,
1427 0x00000000); 1555 0x00000000);
1428 /* XXX : not implemented */ 1556 /* XXX : not implemented */
1429 - spr_register(env, SPR_4xx_ICDBDR, "ICDBDR", 1557 + spr_register(env, SPR_BOOKE_ICBDR, "ICBDR",
1430 SPR_NOACCESS, SPR_NOACCESS, 1558 SPR_NOACCESS, SPR_NOACCESS,
1431 &spr_read_generic, SPR_NOACCESS, 1559 &spr_read_generic, SPR_NOACCESS,
1432 0x00000000); 1560 0x00000000);
@@ -1861,6 +1989,7 @@ static void init_ppc_proc (CPUPPCState *env, ppc_def_t *def) @@ -1861,6 +1989,7 @@ static void init_ppc_proc (CPUPPCState *env, ppc_def_t *def)
1861 /* Time base */ 1989 /* Time base */
1862 gen_tbl(env); 1990 gen_tbl(env);
1863 gen_spr_BookE(env); 1991 gen_spr_BookE(env);
  1992 + gen_spr_BookE_FSL(env);
1864 env->nb_BATs = 0; 1993 env->nb_BATs = 0;
1865 env->nb_tlb = 64; 1994 env->nb_tlb = 64;
1866 env->nb_ways = 1; 1995 env->nb_ways = 1;