Commit 363be49c86af1ebe423df4087c7b021459ecd8cc
1 parent
47103572
Fix / update PowerPC BookE definitions.
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@2543 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
2 changed files
with
189 additions
and
43 deletions
target-ppc/cpu.h
... | ... | @@ -514,10 +514,8 @@ enum { |
514 | 514 | /* Default PowerPC will be 604/970 */ |
515 | 515 | #define PPC_INSNS_PPC32 PPC_INSNS_604 |
516 | 516 | #define PPC_FLAGS_PPC32 PPC_FLAGS_604 |
517 | -#if 1 | |
518 | 517 | #define PPC_INSNS_PPC64 PPC_INSNS_970 |
519 | 518 | #define PPC_FLAGS_PPC64 PPC_FLAGS_970 |
520 | -#endif | |
521 | 519 | #define PPC_INSNS_DEFAULT PPC_INSNS_604 |
522 | 520 | #define PPC_FLAGS_DEFAULT PPC_FLAGS_604 |
523 | 521 | typedef struct ppc_def_t ppc_def_t; |
... | ... | @@ -562,9 +560,11 @@ struct ppc_tlb_t { |
562 | 560 | #define MSR_SF 63 /* Sixty-four-bit mode hflags */ |
563 | 561 | #define MSR_ISF 61 /* Sixty-four-bit interrupt mode on 630 */ |
564 | 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 | 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 | 568 | #define MSR_AP 23 /* Access privilege state on 602 hflags */ |
569 | 569 | #define MSR_SA 22 /* Supervisor access mode on 602 hflags */ |
570 | 570 | #define MSR_KEY 19 /* key bit on 603e */ |
... | ... | @@ -600,6 +600,8 @@ struct ppc_tlb_t { |
600 | 600 | #define msr_sf env->msr[MSR_SF] |
601 | 601 | #define msr_isf env->msr[MSR_ISF] |
602 | 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 | 605 | #define msr_ucle env->msr[MSR_UCLE] |
604 | 606 | #define msr_vr env->msr[MSR_VR] |
605 | 607 | #define msr_spe env->msr[MSR_SPE] |
... | ... | @@ -724,6 +726,7 @@ struct CPUPPCState { |
724 | 726 | int nb_ways; /* Number of ways in the TLB set */ |
725 | 727 | int last_way; /* Last used way used to allocate TLB in a LRU way */ |
726 | 728 | int id_tlbs; /* If 1, MMU has separated TLBs for instructions & data */ |
729 | + int nb_pids; /* Number of available PID registers */ | |
727 | 730 | ppc_tlb_t *tlb; /* TLB is optional. Allocate them only if needed */ |
728 | 731 | /* Callbacks for specific checks on some implementations */ |
729 | 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 | 877 | #define SPR_SRR1 (0x01B) |
875 | 878 | #define SPR_BOOKE_PID (0x030) |
876 | 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 | 882 | #define SPR_BOOKE_DEAR (0x03D) |
880 | 883 | #define SPR_BOOKE_ESR (0x03E) |
881 | -#define SPR_BOOKE_EVPR (0x03F) | |
884 | +#define SPR_BOOKE_IVPR (0x03F) | |
882 | 885 | #define SPR_8xx_EIE (0x050) |
883 | 886 | #define SPR_8xx_EID (0x051) |
884 | 887 | #define SPR_8xx_NRE (0x052) |
... | ... | @@ -900,6 +903,9 @@ void store_booke_tsr (CPUPPCState *env, target_ulong val); |
900 | 903 | #define SPR_58x_BAR (0x09F) |
901 | 904 | #define SPR_VRSAVE (0x100) |
902 | 905 | #define SPR_USPRG0 (0x100) |
906 | +#define SPR_USPRG1 (0x101) | |
907 | +#define SPR_USPRG2 (0x102) | |
908 | +#define SPR_USPRG3 (0x103) | |
903 | 909 | #define SPR_USPRG4 (0x104) |
904 | 910 | #define SPR_USPRG5 (0x105) |
905 | 911 | #define SPR_USPRG6 (0x106) |
... | ... | @@ -973,16 +979,18 @@ void store_booke_tsr (CPUPPCState *env, target_ulong val); |
973 | 979 | #define SPR_BOOKE_ATBL (0x20E) |
974 | 980 | #define SPR_BOOKE_ATBU (0x20F) |
975 | 981 | #define SPR_IBAT0U (0x210) |
976 | -#define SPR_E500_IVOR32 (0x210) | |
982 | +#define SPR_BOOKE_IVOR32 (0x210) | |
977 | 983 | #define SPR_IBAT0L (0x211) |
978 | -#define SPR_E500_IVOR33 (0x211) | |
984 | +#define SPR_BOOKE_IVOR33 (0x211) | |
979 | 985 | #define SPR_IBAT1U (0x212) |
980 | -#define SPR_E500_IVOR34 (0x212) | |
986 | +#define SPR_BOOKE_IVOR34 (0x212) | |
981 | 987 | #define SPR_IBAT1L (0x213) |
982 | -#define SPR_E500_IVOR35 (0x213) | |
988 | +#define SPR_BOOKE_IVOR35 (0x213) | |
983 | 989 | #define SPR_IBAT2U (0x214) |
990 | +#define SPR_BOOKE_IVOR36 (0x214) | |
984 | 991 | #define SPR_IBAT2L (0x215) |
985 | 992 | #define SPR_E500_L1CFG0 (0x215) |
993 | +#define SPR_BOOKE_IVOR37 (0x215) | |
986 | 994 | #define SPR_IBAT3U (0x216) |
987 | 995 | #define SPR_E500_L1CFG1 (0x216) |
988 | 996 | #define SPR_IBAT3L (0x217) |
... | ... | @@ -1005,25 +1013,32 @@ void store_booke_tsr (CPUPPCState *env, target_ulong val); |
1005 | 1013 | #define SPR_DBAT4U (0x238) |
1006 | 1014 | #define SPR_DBAT4L (0x239) |
1007 | 1015 | #define SPR_DBAT5U (0x23A) |
1008 | -#define SPR_E500_MCSRR0 (0x23A) | |
1016 | +#define SPR_BOOKE_MCSRR0 (0x23A) | |
1009 | 1017 | #define SPR_DBAT5L (0x23B) |
1010 | -#define SPR_E500_MCSRR1 (0x23B) | |
1018 | +#define SPR_BOOKE_MCSRR1 (0x23B) | |
1011 | 1019 | #define SPR_DBAT6U (0x23C) |
1012 | -#define SPR_E500_MCSR (0x23C) | |
1020 | +#define SPR_BOOKE_MCSR (0x23C) | |
1013 | 1021 | #define SPR_DBAT6L (0x23D) |
1014 | 1022 | #define SPR_E500_MCAR (0x23D) |
1015 | 1023 | #define SPR_DBAT7U (0x23E) |
1024 | +#define SPR_BOOKE_DSRR0 (0x23E) | |
1016 | 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 | 1042 | #define SPR_440_INV0 (0x370) |
1028 | 1043 | #define SPR_440_INV1 (0x371) |
1029 | 1044 | #define SPR_440_INV2 (0x372) |
... | ... | @@ -1043,10 +1058,10 @@ void store_booke_tsr (CPUPPCState *env, target_ulong val); |
1043 | 1058 | #define SPR_440_DVLIM (0x398) |
1044 | 1059 | #define SPR_440_IVLIM (0x399) |
1045 | 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 | 1065 | #define SPR_UMMCR0 (0x3A8) |
1051 | 1066 | #define SPR_UPMC1 (0x3A9) |
1052 | 1067 | #define SPR_UPMC2 (0x3AA) |
... | ... | @@ -1056,11 +1071,13 @@ void store_booke_tsr (CPUPPCState *env, target_ulong val); |
1056 | 1071 | #define SPR_UPMC4 (0x3AE) |
1057 | 1072 | #define SPR_USDA (0x3AF) |
1058 | 1073 | #define SPR_40x_ZPR (0x3B0) |
1059 | -#define SPR_E500_MAS7 (0x3B0) | |
1074 | +#define SPR_BOOKE_MAS7 (0x3B0) | |
1060 | 1075 | #define SPR_40x_PID (0x3B1) |
1061 | 1076 | #define SPR_440_MMUCR (0x3B2) |
1062 | 1077 | #define SPR_4xx_CCR0 (0x3B3) |
1078 | +#define SPR_BOOKE_EPLC (0x3B3) | |
1063 | 1079 | #define SPR_405_IAC3 (0x3B4) |
1080 | +#define SPR_BOOKE_EPSC (0x3B4) | |
1064 | 1081 | #define SPR_405_IAC4 (0x3B5) |
1065 | 1082 | #define SPR_405_DVC1 (0x3B6) |
1066 | 1083 | #define SPR_405_DVC2 (0x3B7) |
... | ... | @@ -1083,7 +1100,7 @@ void store_booke_tsr (CPUPPCState *env, target_ulong val); |
1083 | 1100 | #define SPR_DCMP (0x3D1) |
1084 | 1101 | #define SPR_HASH1 (0x3D2) |
1085 | 1102 | #define SPR_HASH2 (0x3D3) |
1086 | -#define SPR_4xx_ICDBDR (0x3D3) | |
1103 | +#define SPR_BOOKE_ICBDR (0x3D3) | |
1087 | 1104 | #define SPR_IMISS (0x3D4) |
1088 | 1105 | #define SPR_40x_ESR (0x3D4) |
1089 | 1106 | #define SPR_ICMP (0x3D5) |
... | ... | @@ -1114,7 +1131,7 @@ void store_booke_tsr (CPUPPCState *env, target_ulong val); |
1114 | 1131 | #define SPR_E500_L1CSR1 (0x3F3) |
1115 | 1132 | #define SPR_440_DBDR (0x3F3) |
1116 | 1133 | #define SPR_40x_IAC1 (0x3F4) |
1117 | -#define SPR_E500_MMUCSR0 (0x3F4) | |
1134 | +#define SPR_BOOKE_MMUCSR0 (0x3F4) | |
1118 | 1135 | #define SPR_DABR (0x3F5) |
1119 | 1136 | #define DABR_MASK (~(target_ulong)0x7) |
1120 | 1137 | #define SPR_E500_BUCSR (0x3F5) |
... | ... | @@ -1122,7 +1139,7 @@ void store_booke_tsr (CPUPPCState *env, target_ulong val); |
1122 | 1139 | #define SPR_601_HID5 (0x3F5) |
1123 | 1140 | #define SPR_40x_DAC1 (0x3F6) |
1124 | 1141 | #define SPR_40x_DAC2 (0x3F7) |
1125 | -#define SPR_E500_MMUCFG (0x3F7) | |
1142 | +#define SPR_BOOKE_MMUCFG (0x3F7) | |
1126 | 1143 | #define SPR_L2PM (0x3F8) |
1127 | 1144 | #define SPR_750_HID2 (0x3F8) |
1128 | 1145 | #define SPR_L2CR (0x3F9) | ... | ... |
target-ppc/translate_init.c
... | ... | @@ -893,11 +893,11 @@ static void gen_spr_G2 (CPUPPCState *env) |
893 | 893 | &spr_read_generic, SPR_NOACCESS, |
894 | 894 | 0x00000000); |
895 | 895 | /* Exception processing */ |
896 | - spr_register(env, SPR_CSRR0, "CSRR0", | |
896 | + spr_register(env, SPR_BOOKE_CSRR0, "CSRR0", | |
897 | 897 | SPR_NOACCESS, SPR_NOACCESS, |
898 | 898 | &spr_read_generic, &spr_write_generic, |
899 | 899 | 0x00000000); |
900 | - spr_register(env, SPR_CSRR1, "CSRR1", | |
900 | + spr_register(env, SPR_BOOKE_CSRR1, "CSRR1", | |
901 | 901 | SPR_NOACCESS, SPR_NOACCESS, |
902 | 902 | &spr_read_generic, &spr_write_generic, |
903 | 903 | 0x00000000); |
... | ... | @@ -1060,11 +1060,27 @@ static void gen_spr_BookE (CPUPPCState *env) |
1060 | 1060 | &spr_read_generic, &spr_write_pir, |
1061 | 1061 | 0x00000000); |
1062 | 1062 | /* Interrupt processing */ |
1063 | - spr_register(env, SPR_CSRR0, "CSRR0", | |
1063 | + spr_register(env, SPR_BOOKE_CSRR0, "CSRR0", | |
1064 | 1064 | SPR_NOACCESS, SPR_NOACCESS, |
1065 | 1065 | &spr_read_generic, &spr_write_generic, |
1066 | 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 | 1084 | SPR_NOACCESS, SPR_NOACCESS, |
1069 | 1085 | &spr_read_generic, &spr_write_generic, |
1070 | 1086 | 0x00000000); |
... | ... | @@ -1137,7 +1153,12 @@ static void gen_spr_BookE (CPUPPCState *env) |
1137 | 1153 | SPR_NOACCESS, SPR_NOACCESS, |
1138 | 1154 | &spr_read_generic, &spr_write_generic, |
1139 | 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 | 1162 | SPR_NOACCESS, SPR_NOACCESS, |
1142 | 1163 | &spr_read_generic, &spr_write_generic, |
1143 | 1164 | 0x00000000); |
... | ... | @@ -1205,6 +1226,30 @@ static void gen_spr_BookE (CPUPPCState *env) |
1205 | 1226 | SPR_NOACCESS, SPR_NOACCESS, |
1206 | 1227 | &spr_read_generic, &spr_write_generic, |
1207 | 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 | 1253 | spr_register(env, SPR_BOOKE_PID, "PID", |
1209 | 1254 | SPR_NOACCESS, SPR_NOACCESS, |
1210 | 1255 | &spr_read_generic, &spr_write_generic, |
... | ... | @@ -1265,6 +1310,89 @@ static void gen_spr_BookE (CPUPPCState *env) |
1265 | 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 | 1396 | /* SPR specific to PowerPC 440 implementation */ |
1269 | 1397 | static void gen_spr_440 (CPUPPCState *env) |
1270 | 1398 | { |
... | ... | @@ -1361,27 +1489,27 @@ static void gen_spr_440 (CPUPPCState *env) |
1361 | 1489 | 0x00000000); |
1362 | 1490 | /* Cache debug */ |
1363 | 1491 | /* XXX : not implemented */ |
1364 | - spr_register(env, SPR_440_DCBTRH, "DCBTRH", | |
1492 | + spr_register(env, SPR_BOOKE_DCBTRH, "DCBTRH", | |
1365 | 1493 | SPR_NOACCESS, SPR_NOACCESS, |
1366 | 1494 | &spr_read_generic, SPR_NOACCESS, |
1367 | 1495 | 0x00000000); |
1368 | 1496 | /* XXX : not implemented */ |
1369 | - spr_register(env, SPR_440_DCBTRL, "DCBTRL", | |
1497 | + spr_register(env, SPR_BOOKE_DCBTRL, "DCBTRL", | |
1370 | 1498 | SPR_NOACCESS, SPR_NOACCESS, |
1371 | 1499 | &spr_read_generic, SPR_NOACCESS, |
1372 | 1500 | 0x00000000); |
1373 | 1501 | /* XXX : not implemented */ |
1374 | - spr_register(env, SPR_4xx_ICDBDR, "ICDBDR", | |
1502 | + spr_register(env, SPR_BOOKE_ICBDR, "ICBDR", | |
1375 | 1503 | SPR_NOACCESS, SPR_NOACCESS, |
1376 | 1504 | &spr_read_generic, SPR_NOACCESS, |
1377 | 1505 | 0x00000000); |
1378 | 1506 | /* XXX : not implemented */ |
1379 | - spr_register(env, SPR_440_ICBTRH, "ICBTRH", | |
1507 | + spr_register(env, SPR_BOOKE_ICBTRH, "ICBTRH", | |
1380 | 1508 | SPR_NOACCESS, SPR_NOACCESS, |
1381 | 1509 | &spr_read_generic, SPR_NOACCESS, |
1382 | 1510 | 0x00000000); |
1383 | 1511 | /* XXX : not implemented */ |
1384 | - spr_register(env, SPR_440_ICBTRL, "ICBTRL", | |
1512 | + spr_register(env, SPR_BOOKE_ICBTRL, "ICBTRL", | |
1385 | 1513 | SPR_NOACCESS, SPR_NOACCESS, |
1386 | 1514 | &spr_read_generic, SPR_NOACCESS, |
1387 | 1515 | 0x00000000); |
... | ... | @@ -1426,7 +1554,7 @@ static void gen_spr_40x (CPUPPCState *env) |
1426 | 1554 | &spr_read_generic, &spr_write_generic, |
1427 | 1555 | 0x00000000); |
1428 | 1556 | /* XXX : not implemented */ |
1429 | - spr_register(env, SPR_4xx_ICDBDR, "ICDBDR", | |
1557 | + spr_register(env, SPR_BOOKE_ICBDR, "ICBDR", | |
1430 | 1558 | SPR_NOACCESS, SPR_NOACCESS, |
1431 | 1559 | &spr_read_generic, SPR_NOACCESS, |
1432 | 1560 | 0x00000000); |
... | ... | @@ -1861,6 +1989,7 @@ static void init_ppc_proc (CPUPPCState *env, ppc_def_t *def) |
1861 | 1989 | /* Time base */ |
1862 | 1990 | gen_tbl(env); |
1863 | 1991 | gen_spr_BookE(env); |
1992 | + gen_spr_BookE_FSL(env); | |
1864 | 1993 | env->nb_BATs = 0; |
1865 | 1994 | env->nb_tlb = 64; |
1866 | 1995 | env->nb_ways = 1; | ... | ... |