Commit 4e7774427dcc596225dbb6dc720a4bf637aba8d8

Authored by j_mayer
1 parent 8ccc2ace

Fix PowerPC 74xx definitions.


git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@3798 c046a42c-6fe2-441c-8c8c-71466251a162
target-ppc/cpu.h
@@ -1235,7 +1235,7 @@ static inline int cpu_mmu_index (CPUState *env) @@ -1235,7 +1235,7 @@ static inline int cpu_mmu_index (CPUState *env)
1235 #define SPR_40x_EVPR (0x3D6) 1235 #define SPR_40x_EVPR (0x3D6)
1236 #define SPR_L3PM (0x3D7) 1236 #define SPR_L3PM (0x3D7)
1237 #define SPR_403_CDBCR (0x3D7) 1237 #define SPR_403_CDBCR (0x3D7)
1238 -#define SPR_L3OHCR (0x3D8) 1238 +#define SPR_L3ITCR0 (0x3D8)
1239 #define SPR_TCR (0x3D8) 1239 #define SPR_TCR (0x3D8)
1240 #define SPR_40x_TSR (0x3D8) 1240 #define SPR_40x_TSR (0x3D8)
1241 #define SPR_IBR (0x3DA) 1241 #define SPR_IBR (0x3DA)
@@ -1248,7 +1248,7 @@ static inline int cpu_mmu_index (CPUState *env) @@ -1248,7 +1248,7 @@ static inline int cpu_mmu_index (CPUState *env)
1248 #define SPR_40x_SRR2 (0x3DE) 1248 #define SPR_40x_SRR2 (0x3DE)
1249 #define SPR_SER (0x3DF) 1249 #define SPR_SER (0x3DF)
1250 #define SPR_40x_SRR3 (0x3DF) 1250 #define SPR_40x_SRR3 (0x3DF)
1251 -#define SPR_L3ITCR0 (0x3E8) 1251 +#define SPR_L3OHCR (0x3E8)
1252 #define SPR_L3ITCR1 (0x3E9) 1252 #define SPR_L3ITCR1 (0x3E9)
1253 #define SPR_L3ITCR2 (0x3EA) 1253 #define SPR_L3ITCR2 (0x3EA)
1254 #define SPR_L3ITCR3 (0x3EB) 1254 #define SPR_L3ITCR3 (0x3EB)
@@ -1277,6 +1277,7 @@ static inline int cpu_mmu_index (CPUState *env) @@ -1277,6 +1277,7 @@ static inline int cpu_mmu_index (CPUState *env)
1277 #define SPR_MSSCR0 (0x3F6) 1277 #define SPR_MSSCR0 (0x3F6)
1278 #define SPR_970_HID5 (0x3F6) 1278 #define SPR_970_HID5 (0x3F6)
1279 #define SPR_MSSSR0 (0x3F7) 1279 #define SPR_MSSSR0 (0x3F7)
  1280 +#define SPR_MSSCR1 (0x3F7)
1280 #define SPR_DABRX (0x3F7) 1281 #define SPR_DABRX (0x3F7)
1281 #define SPR_40x_DAC2 (0x3F7) 1282 #define SPR_40x_DAC2 (0x3F7)
1282 #define SPR_MMUCFG (0x3F7) 1283 #define SPR_MMUCFG (0x3F7)
target-ppc/translate_init.c
@@ -1149,11 +1149,6 @@ static void gen_spr_74xx (CPUPPCState *env) @@ -1149,11 +1149,6 @@ static void gen_spr_74xx (CPUPPCState *env)
1149 &spr_read_generic, &spr_write_generic, 1149 &spr_read_generic, &spr_write_generic,
1150 0x00000000); 1150 0x00000000);
1151 /* XXX : not implemented */ 1151 /* XXX : not implemented */
1152 - spr_register(env, SPR_UBAMR, "UBAMR",  
1153 - &spr_read_ureg, SPR_NOACCESS,  
1154 - &spr_read_ureg, SPR_NOACCESS,  
1155 - 0x00000000);  
1156 - /* XXX : not implemented */  
1157 spr_register(env, SPR_MSSCR0, "MSSCR0", 1152 spr_register(env, SPR_MSSCR0, "MSSCR0",
1158 SPR_NOACCESS, SPR_NOACCESS, 1153 SPR_NOACCESS, SPR_NOACCESS,
1159 &spr_read_generic, &spr_write_generic, 1154 &spr_read_generic, &spr_write_generic,
@@ -1195,30 +1190,6 @@ static void gen_l3_ctrl (CPUPPCState *env) @@ -1195,30 +1190,6 @@ static void gen_l3_ctrl (CPUPPCState *env)
1195 SPR_NOACCESS, SPR_NOACCESS, 1190 SPR_NOACCESS, SPR_NOACCESS,
1196 &spr_read_generic, &spr_write_generic, 1191 &spr_read_generic, &spr_write_generic,
1197 0x00000000); 1192 0x00000000);
1198 - /* L3ITCR1 */  
1199 - /* XXX : not implemented */  
1200 - spr_register(env, SPR_L3ITCR1, "L3ITCR1",  
1201 - SPR_NOACCESS, SPR_NOACCESS,  
1202 - &spr_read_generic, &spr_write_generic,  
1203 - 0x00000000);  
1204 - /* L3ITCR2 */  
1205 - /* XXX : not implemented */  
1206 - spr_register(env, SPR_L3ITCR2, "L3ITCR2",  
1207 - SPR_NOACCESS, SPR_NOACCESS,  
1208 - &spr_read_generic, &spr_write_generic,  
1209 - 0x00000000);  
1210 - /* L3ITCR3 */  
1211 - /* XXX : not implemented */  
1212 - spr_register(env, SPR_L3ITCR3, "L3ITCR3",  
1213 - SPR_NOACCESS, SPR_NOACCESS,  
1214 - &spr_read_generic, &spr_write_generic,  
1215 - 0x00000000);  
1216 - /* L3OHCR */  
1217 - /* XXX : not implemented */  
1218 - spr_register(env, SPR_L3OHCR, "L3OHCR",  
1219 - SPR_NOACCESS, SPR_NOACCESS,  
1220 - &spr_read_generic, &spr_write_generic,  
1221 - 0x00000000);  
1222 /* L3PM */ 1193 /* L3PM */
1223 /* XXX : not implemented */ 1194 /* XXX : not implemented */
1224 spr_register(env, SPR_L3PM, "L3PM", 1195 spr_register(env, SPR_L3PM, "L3PM",
@@ -3052,6 +3023,14 @@ static int check_pow_hid0 (CPUPPCState *env) @@ -3052,6 +3023,14 @@ static int check_pow_hid0 (CPUPPCState *env)
3052 return 0; 3023 return 0;
3053 } 3024 }
3054 3025
  3026 +static int check_pow_hid0_74xx (CPUPPCState *env)
  3027 +{
  3028 + if (env->spr[SPR_HID0] & 0x00600000)
  3029 + return 1;
  3030 +
  3031 + return 0;
  3032 +}
  3033 +
3055 /*****************************************************************************/ 3034 /*****************************************************************************/
3056 /* PowerPC implementations definitions */ 3035 /* PowerPC implementations definitions */
3057 3036
@@ -4829,6 +4808,7 @@ static void init_proc_750cl (CPUPPCState *env) @@ -4829,6 +4808,7 @@ static void init_proc_750cl (CPUPPCState *env)
4829 ppc6xx_irq_init(env); 4808 ppc6xx_irq_init(env);
4830 } 4809 }
4831 4810
  4811 +/* PowerPC 750CX */
4832 #define POWERPC_INSNS_750cx (PPC_INSNS_BASE | PPC_STRING | PPC_MFTB | \ 4812 #define POWERPC_INSNS_750cx (PPC_INSNS_BASE | PPC_STRING | PPC_MFTB | \
4833 PPC_FLOAT | PPC_FLOAT_FSEL | PPC_FLOAT_FRES | \ 4813 PPC_FLOAT | PPC_FLOAT_FSEL | PPC_FLOAT_FRES | \
4834 PPC_FLOAT_FRSQRTE | PPC_FLOAT_STFIWX | \ 4814 PPC_FLOAT_FRSQRTE | PPC_FLOAT_STFIWX | \
@@ -4876,9 +4856,8 @@ static void init_proc_750cx (CPUPPCState *env) @@ -4876,9 +4856,8 @@ static void init_proc_750cx (CPUPPCState *env)
4876 0x00000000); 4856 0x00000000);
4877 /* Memory management */ 4857 /* Memory management */
4878 gen_low_BATs(env); 4858 gen_low_BATs(env);
4879 - /* XXX: high BATs are also present but are known to be bugged on  
4880 - * die version 1.x  
4881 - */ 4859 + /* PowerPC 750cx has 8 DBATs and 8 IBATs */
  4860 + gen_high_BATs(env);
4882 init_excp_750cx(env); 4861 init_excp_750cx(env);
4883 env->dcache_line_size = 32; 4862 env->dcache_line_size = 32;
4884 env->icache_line_size = 32; 4863 env->icache_line_size = 32;
@@ -5147,7 +5126,7 @@ static void init_proc_755 (CPUPPCState *env) @@ -5147,7 +5126,7 @@ static void init_proc_755 (CPUPPCState *env)
5147 #define POWERPC_FLAG_7400 (POWERPC_FLAG_VRE | POWERPC_FLAG_SE | \ 5126 #define POWERPC_FLAG_7400 (POWERPC_FLAG_VRE | POWERPC_FLAG_SE | \
5148 POWERPC_FLAG_BE | POWERPC_FLAG_PMM | \ 5127 POWERPC_FLAG_BE | POWERPC_FLAG_PMM | \
5149 POWERPC_FLAG_BUS_CLK) 5128 POWERPC_FLAG_BUS_CLK)
5150 -#define check_pow_7400 check_pow_hid0 5129 +#define check_pow_7400 check_pow_hid0_74xx
5151 5130
5152 static void init_proc_7400 (CPUPPCState *env) 5131 static void init_proc_7400 (CPUPPCState *env)
5153 { 5132 {
@@ -5157,6 +5136,17 @@ static void init_proc_7400 (CPUPPCState *env) @@ -5157,6 +5136,17 @@ static void init_proc_7400 (CPUPPCState *env)
5157 gen_tbl(env); 5136 gen_tbl(env);
5158 /* 74xx specific SPR */ 5137 /* 74xx specific SPR */
5159 gen_spr_74xx(env); 5138 gen_spr_74xx(env);
  5139 + /* XXX : not implemented */
  5140 + spr_register(env, SPR_UBAMR, "UBAMR",
  5141 + &spr_read_ureg, SPR_NOACCESS,
  5142 + &spr_read_ureg, SPR_NOACCESS,
  5143 + 0x00000000);
  5144 + /* XXX: this seems not implemented on all revisions. */
  5145 + /* XXX : not implemented */
  5146 + spr_register(env, SPR_MSSCR1, "MSSCR1",
  5147 + SPR_NOACCESS, SPR_NOACCESS,
  5148 + &spr_read_generic, &spr_write_generic,
  5149 + 0x00000000);
5160 /* Thermal management */ 5150 /* Thermal management */
5161 gen_spr_thrm(env); 5151 gen_spr_thrm(env);
5162 /* Memory management */ 5152 /* Memory management */
@@ -5188,7 +5178,7 @@ static void init_proc_7400 (CPUPPCState *env) @@ -5188,7 +5178,7 @@ static void init_proc_7400 (CPUPPCState *env)
5188 #define POWERPC_FLAG_7410 (POWERPC_FLAG_VRE | POWERPC_FLAG_SE | \ 5178 #define POWERPC_FLAG_7410 (POWERPC_FLAG_VRE | POWERPC_FLAG_SE | \
5189 POWERPC_FLAG_BE | POWERPC_FLAG_PMM | \ 5179 POWERPC_FLAG_BE | POWERPC_FLAG_PMM | \
5190 POWERPC_FLAG_BUS_CLK) 5180 POWERPC_FLAG_BUS_CLK)
5191 -#define check_pow_7410 check_pow_hid0 5181 +#define check_pow_7410 check_pow_hid0_74xx
5192 5182
5193 static void init_proc_7410 (CPUPPCState *env) 5183 static void init_proc_7410 (CPUPPCState *env)
5194 { 5184 {
@@ -5198,6 +5188,11 @@ static void init_proc_7410 (CPUPPCState *env) @@ -5198,6 +5188,11 @@ static void init_proc_7410 (CPUPPCState *env)
5198 gen_tbl(env); 5188 gen_tbl(env);
5199 /* 74xx specific SPR */ 5189 /* 74xx specific SPR */
5200 gen_spr_74xx(env); 5190 gen_spr_74xx(env);
  5191 + /* XXX : not implemented */
  5192 + spr_register(env, SPR_UBAMR, "UBAMR",
  5193 + &spr_read_ureg, SPR_NOACCESS,
  5194 + &spr_read_ureg, SPR_NOACCESS,
  5195 + 0x00000000);
5201 /* Thermal management */ 5196 /* Thermal management */
5202 gen_spr_thrm(env); 5197 gen_spr_thrm(env);
5203 /* L2PMCR */ 5198 /* L2PMCR */
@@ -5241,7 +5236,7 @@ static void init_proc_7410 (CPUPPCState *env) @@ -5241,7 +5236,7 @@ static void init_proc_7410 (CPUPPCState *env)
5241 #define POWERPC_FLAG_7440 (POWERPC_FLAG_VRE | POWERPC_FLAG_SE | \ 5236 #define POWERPC_FLAG_7440 (POWERPC_FLAG_VRE | POWERPC_FLAG_SE | \
5242 POWERPC_FLAG_BE | POWERPC_FLAG_PMM | \ 5237 POWERPC_FLAG_BE | POWERPC_FLAG_PMM | \
5243 POWERPC_FLAG_BUS_CLK) 5238 POWERPC_FLAG_BUS_CLK)
5244 -#define check_pow_7440 check_pow_hid0 5239 +#define check_pow_7440 check_pow_hid0_74xx
5245 5240
5246 __attribute__ (( unused )) 5241 __attribute__ (( unused ))
5247 static void init_proc_7440 (CPUPPCState *env) 5242 static void init_proc_7440 (CPUPPCState *env)
@@ -5252,6 +5247,11 @@ static void init_proc_7440 (CPUPPCState *env) @@ -5252,6 +5247,11 @@ static void init_proc_7440 (CPUPPCState *env)
5252 gen_tbl(env); 5247 gen_tbl(env);
5253 /* 74xx specific SPR */ 5248 /* 74xx specific SPR */
5254 gen_spr_74xx(env); 5249 gen_spr_74xx(env);
  5250 + /* XXX : not implemented */
  5251 + spr_register(env, SPR_UBAMR, "UBAMR",
  5252 + &spr_read_ureg, SPR_NOACCESS,
  5253 + &spr_read_ureg, SPR_NOACCESS,
  5254 + 0x00000000);
5255 /* LDSTCR */ 5255 /* LDSTCR */
5256 /* XXX : not implemented */ 5256 /* XXX : not implemented */
5257 spr_register(env, SPR_LDSTCR, "LDSTCR", 5257 spr_register(env, SPR_LDSTCR, "LDSTCR",
@@ -5321,7 +5321,7 @@ static void init_proc_7440 (CPUPPCState *env) @@ -5321,7 +5321,7 @@ static void init_proc_7440 (CPUPPCState *env)
5321 #define POWERPC_FLAG_7450 (POWERPC_FLAG_VRE | POWERPC_FLAG_SE | \ 5321 #define POWERPC_FLAG_7450 (POWERPC_FLAG_VRE | POWERPC_FLAG_SE | \
5322 POWERPC_FLAG_BE | POWERPC_FLAG_PMM | \ 5322 POWERPC_FLAG_BE | POWERPC_FLAG_PMM | \
5323 POWERPC_FLAG_BUS_CLK) 5323 POWERPC_FLAG_BUS_CLK)
5324 -#define check_pow_7450 check_pow_hid0 5324 +#define check_pow_7450 check_pow_hid0_74xx
5325 5325
5326 __attribute__ (( unused )) 5326 __attribute__ (( unused ))
5327 static void init_proc_7450 (CPUPPCState *env) 5327 static void init_proc_7450 (CPUPPCState *env)
@@ -5334,6 +5334,35 @@ static void init_proc_7450 (CPUPPCState *env) @@ -5334,6 +5334,35 @@ static void init_proc_7450 (CPUPPCState *env)
5334 gen_spr_74xx(env); 5334 gen_spr_74xx(env);
5335 /* Level 3 cache control */ 5335 /* Level 3 cache control */
5336 gen_l3_ctrl(env); 5336 gen_l3_ctrl(env);
  5337 + /* L3ITCR1 */
  5338 + /* XXX : not implemented */
  5339 + spr_register(env, SPR_L3ITCR1, "L3ITCR1",
  5340 + SPR_NOACCESS, SPR_NOACCESS,
  5341 + &spr_read_generic, &spr_write_generic,
  5342 + 0x00000000);
  5343 + /* L3ITCR2 */
  5344 + /* XXX : not implemented */
  5345 + spr_register(env, SPR_L3ITCR2, "L3ITCR2",
  5346 + SPR_NOACCESS, SPR_NOACCESS,
  5347 + &spr_read_generic, &spr_write_generic,
  5348 + 0x00000000);
  5349 + /* L3ITCR3 */
  5350 + /* XXX : not implemented */
  5351 + spr_register(env, SPR_L3ITCR3, "L3ITCR3",
  5352 + SPR_NOACCESS, SPR_NOACCESS,
  5353 + &spr_read_generic, &spr_write_generic,
  5354 + 0x00000000);
  5355 + /* L3OHCR */
  5356 + /* XXX : not implemented */
  5357 + spr_register(env, SPR_L3OHCR, "L3OHCR",
  5358 + SPR_NOACCESS, SPR_NOACCESS,
  5359 + &spr_read_generic, &spr_write_generic,
  5360 + 0x00000000);
  5361 + /* XXX : not implemented */
  5362 + spr_register(env, SPR_UBAMR, "UBAMR",
  5363 + &spr_read_ureg, SPR_NOACCESS,
  5364 + &spr_read_ureg, SPR_NOACCESS,
  5365 + 0x00000000);
5337 /* LDSTCR */ 5366 /* LDSTCR */
5338 /* XXX : not implemented */ 5367 /* XXX : not implemented */
5339 spr_register(env, SPR_LDSTCR, "LDSTCR", 5368 spr_register(env, SPR_LDSTCR, "LDSTCR",
@@ -5403,7 +5432,7 @@ static void init_proc_7450 (CPUPPCState *env) @@ -5403,7 +5432,7 @@ static void init_proc_7450 (CPUPPCState *env)
5403 #define POWERPC_FLAG_7445 (POWERPC_FLAG_VRE | POWERPC_FLAG_SE | \ 5432 #define POWERPC_FLAG_7445 (POWERPC_FLAG_VRE | POWERPC_FLAG_SE | \
5404 POWERPC_FLAG_BE | POWERPC_FLAG_PMM | \ 5433 POWERPC_FLAG_BE | POWERPC_FLAG_PMM | \
5405 POWERPC_FLAG_BUS_CLK) 5434 POWERPC_FLAG_BUS_CLK)
5406 -#define check_pow_7445 check_pow_hid0 5435 +#define check_pow_7445 check_pow_hid0_74xx
5407 5436
5408 __attribute__ (( unused )) 5437 __attribute__ (( unused ))
5409 static void init_proc_7445 (CPUPPCState *env) 5438 static void init_proc_7445 (CPUPPCState *env)
@@ -5517,7 +5546,7 @@ static void init_proc_7445 (CPUPPCState *env) @@ -5517,7 +5546,7 @@ static void init_proc_7445 (CPUPPCState *env)
5517 #define POWERPC_FLAG_7455 (POWERPC_FLAG_VRE | POWERPC_FLAG_SE | \ 5546 #define POWERPC_FLAG_7455 (POWERPC_FLAG_VRE | POWERPC_FLAG_SE | \
5518 POWERPC_FLAG_BE | POWERPC_FLAG_PMM | \ 5547 POWERPC_FLAG_BE | POWERPC_FLAG_PMM | \
5519 POWERPC_FLAG_BUS_CLK) 5548 POWERPC_FLAG_BUS_CLK)
5520 -#define check_pow_7455 check_pow_hid0 5549 +#define check_pow_7455 check_pow_hid0_74xx
5521 5550
5522 __attribute__ (( unused )) 5551 __attribute__ (( unused ))
5523 static void init_proc_7455 (CPUPPCState *env) 5552 static void init_proc_7455 (CPUPPCState *env)
@@ -5613,6 +5642,146 @@ static void init_proc_7455 (CPUPPCState *env) @@ -5613,6 +5642,146 @@ static void init_proc_7455 (CPUPPCState *env)
5613 ppc6xx_irq_init(env); 5642 ppc6xx_irq_init(env);
5614 } 5643 }
5615 5644
  5645 +/* PowerPC 7457 (aka G4) */
  5646 +#define POWERPC_INSNS_7457 (PPC_INSNS_BASE | PPC_STRING | PPC_MFTB | \
  5647 + PPC_FLOAT | PPC_FLOAT_FSEL | PPC_FLOAT_FRES | \
  5648 + PPC_FLOAT_FSQRT | PPC_FLOAT_FRSQRTE | \
  5649 + PPC_FLOAT_STFIWX | \
  5650 + PPC_CACHE | PPC_CACHE_ICBI | \
  5651 + PPC_CACHE_DCBA | PPC_CACHE_DCBZ | \
  5652 + PPC_MEM_SYNC | PPC_MEM_EIEIO | \
  5653 + PPC_MEM_TLBIE | PPC_MEM_TLBSYNC | \
  5654 + PPC_MEM_TLBIA | PPC_74xx_TLB | \
  5655 + PPC_SEGMENT | PPC_EXTERN | \
  5656 + PPC_ALTIVEC)
  5657 +#define POWERPC_MSRM_7457 (0x000000000205FF77ULL)
  5658 +#define POWERPC_MMU_7457 (POWERPC_MMU_SOFT_74xx)
  5659 +#define POWERPC_EXCP_7457 (POWERPC_EXCP_74xx)
  5660 +#define POWERPC_INPUT_7457 (PPC_FLAGS_INPUT_6xx)
  5661 +#define POWERPC_BFDM_7457 (bfd_mach_ppc_7400)
  5662 +#define POWERPC_FLAG_7457 (POWERPC_FLAG_VRE | POWERPC_FLAG_SE | \
  5663 + POWERPC_FLAG_BE | POWERPC_FLAG_PMM | \
  5664 + POWERPC_FLAG_BUS_CLK)
  5665 +#define check_pow_7457 check_pow_hid0_74xx
  5666 +
  5667 +__attribute__ (( unused ))
  5668 +static void init_proc_7457 (CPUPPCState *env)
  5669 +{
  5670 + gen_spr_ne_601(env);
  5671 + gen_spr_7xx(env);
  5672 + /* Time base */
  5673 + gen_tbl(env);
  5674 + /* 74xx specific SPR */
  5675 + gen_spr_74xx(env);
  5676 + /* Level 3 cache control */
  5677 + gen_l3_ctrl(env);
  5678 + /* L3ITCR1 */
  5679 + /* XXX : not implemented */
  5680 + spr_register(env, SPR_L3ITCR1, "L3ITCR1",
  5681 + SPR_NOACCESS, SPR_NOACCESS,
  5682 + &spr_read_generic, &spr_write_generic,
  5683 + 0x00000000);
  5684 + /* L3ITCR2 */
  5685 + /* XXX : not implemented */
  5686 + spr_register(env, SPR_L3ITCR2, "L3ITCR2",
  5687 + SPR_NOACCESS, SPR_NOACCESS,
  5688 + &spr_read_generic, &spr_write_generic,
  5689 + 0x00000000);
  5690 + /* L3ITCR3 */
  5691 + /* XXX : not implemented */
  5692 + spr_register(env, SPR_L3ITCR3, "L3ITCR3",
  5693 + SPR_NOACCESS, SPR_NOACCESS,
  5694 + &spr_read_generic, &spr_write_generic,
  5695 + 0x00000000);
  5696 + /* L3OHCR */
  5697 + /* XXX : not implemented */
  5698 + spr_register(env, SPR_L3OHCR, "L3OHCR",
  5699 + SPR_NOACCESS, SPR_NOACCESS,
  5700 + &spr_read_generic, &spr_write_generic,
  5701 + 0x00000000);
  5702 + /* LDSTCR */
  5703 + /* XXX : not implemented */
  5704 + spr_register(env, SPR_LDSTCR, "LDSTCR",
  5705 + SPR_NOACCESS, SPR_NOACCESS,
  5706 + &spr_read_generic, &spr_write_generic,
  5707 + 0x00000000);
  5708 + /* ICTRL */
  5709 + /* XXX : not implemented */
  5710 + spr_register(env, SPR_ICTRL, "ICTRL",
  5711 + SPR_NOACCESS, SPR_NOACCESS,
  5712 + &spr_read_generic, &spr_write_generic,
  5713 + 0x00000000);
  5714 + /* MSSSR0 */
  5715 + /* XXX : not implemented */
  5716 + spr_register(env, SPR_MSSSR0, "MSSSR0",
  5717 + SPR_NOACCESS, SPR_NOACCESS,
  5718 + &spr_read_generic, &spr_write_generic,
  5719 + 0x00000000);
  5720 + /* PMC */
  5721 + /* XXX : not implemented */
  5722 + spr_register(env, SPR_PMC5, "PMC5",
  5723 + SPR_NOACCESS, SPR_NOACCESS,
  5724 + &spr_read_generic, &spr_write_generic,
  5725 + 0x00000000);
  5726 + /* XXX : not implemented */
  5727 + spr_register(env, SPR_UPMC5, "UPMC5",
  5728 + &spr_read_ureg, SPR_NOACCESS,
  5729 + &spr_read_ureg, SPR_NOACCESS,
  5730 + 0x00000000);
  5731 + /* XXX : not implemented */
  5732 + spr_register(env, SPR_PMC6, "PMC6",
  5733 + SPR_NOACCESS, SPR_NOACCESS,
  5734 + &spr_read_generic, &spr_write_generic,
  5735 + 0x00000000);
  5736 + /* XXX : not implemented */
  5737 + spr_register(env, SPR_UPMC6, "UPMC6",
  5738 + &spr_read_ureg, SPR_NOACCESS,
  5739 + &spr_read_ureg, SPR_NOACCESS,
  5740 + 0x00000000);
  5741 + /* SPRGs */
  5742 + spr_register(env, SPR_SPRG4, "SPRG4",
  5743 + SPR_NOACCESS, SPR_NOACCESS,
  5744 + &spr_read_generic, &spr_write_generic,
  5745 + 0x00000000);
  5746 + spr_register(env, SPR_USPRG4, "USPRG4",
  5747 + &spr_read_ureg, SPR_NOACCESS,
  5748 + &spr_read_ureg, SPR_NOACCESS,
  5749 + 0x00000000);
  5750 + spr_register(env, SPR_SPRG5, "SPRG5",
  5751 + SPR_NOACCESS, SPR_NOACCESS,
  5752 + &spr_read_generic, &spr_write_generic,
  5753 + 0x00000000);
  5754 + spr_register(env, SPR_USPRG5, "USPRG5",
  5755 + &spr_read_ureg, SPR_NOACCESS,
  5756 + &spr_read_ureg, SPR_NOACCESS,
  5757 + 0x00000000);
  5758 + spr_register(env, SPR_SPRG6, "SPRG6",
  5759 + SPR_NOACCESS, SPR_NOACCESS,
  5760 + &spr_read_generic, &spr_write_generic,
  5761 + 0x00000000);
  5762 + spr_register(env, SPR_USPRG6, "USPRG6",
  5763 + &spr_read_ureg, SPR_NOACCESS,
  5764 + &spr_read_ureg, SPR_NOACCESS,
  5765 + 0x00000000);
  5766 + spr_register(env, SPR_SPRG7, "SPRG7",
  5767 + SPR_NOACCESS, SPR_NOACCESS,
  5768 + &spr_read_generic, &spr_write_generic,
  5769 + 0x00000000);
  5770 + spr_register(env, SPR_USPRG7, "USPRG7",
  5771 + &spr_read_ureg, SPR_NOACCESS,
  5772 + &spr_read_ureg, SPR_NOACCESS,
  5773 + 0x00000000);
  5774 + /* Memory management */
  5775 + gen_low_BATs(env);
  5776 + gen_high_BATs(env);
  5777 + gen_74xx_soft_tlb(env, 128, 2);
  5778 + init_excp_7450(env);
  5779 + env->dcache_line_size = 32;
  5780 + env->icache_line_size = 32;
  5781 + /* Allocate hardware IRQ controller */
  5782 + ppc6xx_irq_init(env);
  5783 +}
  5784 +
5616 #if defined (TARGET_PPC64) 5785 #if defined (TARGET_PPC64)
5617 /* PowerPC 970 */ 5786 /* PowerPC 970 */
5618 #define POWERPC_INSNS_970 (PPC_INSNS_BASE | PPC_STRING | PPC_MFTB | \ 5787 #define POWERPC_INSNS_970 (PPC_INSNS_BASE | PPC_STRING | PPC_MFTB | \
@@ -6651,6 +6820,7 @@ enum { @@ -6651,6 +6820,7 @@ enum {
6651 CPU_POWERPC_7400_v10 = 0x000C0100, 6820 CPU_POWERPC_7400_v10 = 0x000C0100,
6652 CPU_POWERPC_7400_v11 = 0x000C0101, 6821 CPU_POWERPC_7400_v11 = 0x000C0101,
6653 CPU_POWERPC_7400_v20 = 0x000C0200, 6822 CPU_POWERPC_7400_v20 = 0x000C0200,
  6823 + CPU_POWERPC_7400_v21 = 0x000C0201,
6654 CPU_POWERPC_7400_v22 = 0x000C0202, 6824 CPU_POWERPC_7400_v22 = 0x000C0202,
6655 CPU_POWERPC_7400_v26 = 0x000C0206, 6825 CPU_POWERPC_7400_v26 = 0x000C0206,
6656 CPU_POWERPC_7400_v27 = 0x000C0207, 6826 CPU_POWERPC_7400_v27 = 0x000C0207,
@@ -6671,10 +6841,12 @@ enum { @@ -6671,10 +6841,12 @@ enum {
6671 CPU_POWERPC_7450_v10 = 0x80000100, 6841 CPU_POWERPC_7450_v10 = 0x80000100,
6672 CPU_POWERPC_7450_v11 = 0x80000101, 6842 CPU_POWERPC_7450_v11 = 0x80000101,
6673 CPU_POWERPC_7450_v12 = 0x80000102, 6843 CPU_POWERPC_7450_v12 = 0x80000102,
6674 - CPU_POWERPC_7450_v20 = 0x80000200, /* aka D: 2.04 */ 6844 + CPU_POWERPC_7450_v20 = 0x80000200, /* aka A, B, C, D: 2.04 */
6675 CPU_POWERPC_7450_v21 = 0x80000201, /* aka E */ 6845 CPU_POWERPC_7450_v21 = 0x80000201, /* aka E */
6676 - CPU_POWERPC_74x1 = 0x80000203,  
6677 - CPU_POWERPC_74x1G = 0x80000210, /* aka G: 2.3 */ 6846 +#define CPU_POWERPC_74x1 CPU_POWERPC_74x1_v23
  6847 + CPU_POWERPC_74x1_v23 = 0x80000203, /* aka G: 2.3 */
  6848 + /* XXX: this entry might be a bug in some documentation */
  6849 + CPU_POWERPC_74x1_v210 = 0x80000210, /* aka G: 2.3 ? */
6678 #define CPU_POWERPC_74x5 CPU_POWERPC_74x5_v32 6850 #define CPU_POWERPC_74x5 CPU_POWERPC_74x5_v32
6679 CPU_POWERPC_74x5_v10 = 0x80010100, 6851 CPU_POWERPC_74x5_v10 = 0x80010100,
6680 /* XXX: missing 0x80010200 */ 6852 /* XXX: missing 0x80010200 */
@@ -8300,6 +8472,8 @@ static const ppc_def_t ppc_defs[] = { @@ -8300,6 +8472,8 @@ static const ppc_def_t ppc_defs[] = {
8300 POWERPC_DEF("7400_v1.1", CPU_POWERPC_7400_v11, 7400), 8472 POWERPC_DEF("7400_v1.1", CPU_POWERPC_7400_v11, 7400),
8301 /* PowerPC 7400 v2.0 (G4) */ 8473 /* PowerPC 7400 v2.0 (G4) */
8302 POWERPC_DEF("7400_v2.0", CPU_POWERPC_7400_v20, 7400), 8474 POWERPC_DEF("7400_v2.0", CPU_POWERPC_7400_v20, 7400),
  8475 + /* PowerPC 7400 v2.1 (G4) */
  8476 + POWERPC_DEF("7400_v2.1", CPU_POWERPC_7400_v21, 7400),
8303 /* PowerPC 7400 v2.2 (G4) */ 8477 /* PowerPC 7400 v2.2 (G4) */
8304 POWERPC_DEF("7400_v2.2", CPU_POWERPC_7400_v22, 7400), 8478 POWERPC_DEF("7400_v2.2", CPU_POWERPC_7400_v22, 7400),
8305 /* PowerPC 7400 v2.6 (G4) */ 8479 /* PowerPC 7400 v2.6 (G4) */
@@ -8352,10 +8526,16 @@ static const ppc_def_t ppc_defs[] = { @@ -8352,10 +8526,16 @@ static const ppc_def_t ppc_defs[] = {
8352 POWERPC_DEF("7441", CPU_POWERPC_74x1, 7440), 8526 POWERPC_DEF("7441", CPU_POWERPC_74x1, 7440),
8353 /* PowerPC 7451 (G4) */ 8527 /* PowerPC 7451 (G4) */
8354 POWERPC_DEF("7451", CPU_POWERPC_74x1, 7450), 8528 POWERPC_DEF("7451", CPU_POWERPC_74x1, 7450),
8355 - /* PowerPC 7441g (G4) */  
8356 - POWERPC_DEF("7441g", CPU_POWERPC_74x1G, 7440),  
8357 - /* PowerPC 7451g (G4) */  
8358 - POWERPC_DEF("7451g", CPU_POWERPC_74x1G, 7450), 8529 + /* PowerPC 7441 v2.1 (G4) */
  8530 + POWERPC_DEF("7441_v2.1", CPU_POWERPC_7450_v21, 7440),
  8531 + /* PowerPC 7441 v2.3 (G4) */
  8532 + POWERPC_DEF("7441_v2.3", CPU_POWERPC_74x1_v23, 7440),
  8533 + /* PowerPC 7451 v2.3 (G4) */
  8534 + POWERPC_DEF("7451_v2.3", CPU_POWERPC_74x1_v23, 7450),
  8535 + /* PowerPC 7441 v2.10 (G4) */
  8536 + POWERPC_DEF("7441_v2.10", CPU_POWERPC_74x1_v210, 7440),
  8537 + /* PowerPC 7451 v2.10 (G4) */
  8538 + POWERPC_DEF("7451_v2.10", CPU_POWERPC_74x1_v210, 7450),
8359 /* PowerPC 7445 (G4) */ 8539 /* PowerPC 7445 (G4) */
8360 POWERPC_DEF("7445", CPU_POWERPC_74x5, 7445), 8540 POWERPC_DEF("7445", CPU_POWERPC_74x5, 7445),
8361 /* PowerPC 7455 (G4) */ 8541 /* PowerPC 7455 (G4) */
@@ -8396,8 +8576,6 @@ static const ppc_def_t ppc_defs[] = { @@ -8396,8 +8576,6 @@ static const ppc_def_t ppc_defs[] = {
8396 POWERPC_DEF("7447_v1.1", CPU_POWERPC_74x7_v11, 7445), 8576 POWERPC_DEF("7447_v1.1", CPU_POWERPC_74x7_v11, 7445),
8397 /* PowerPC 7457 v1.1 (G4) */ 8577 /* PowerPC 7457 v1.1 (G4) */
8398 POWERPC_DEF("7457_v1.1", CPU_POWERPC_74x7_v11, 7455), 8578 POWERPC_DEF("7457_v1.1", CPU_POWERPC_74x7_v11, 7455),
8399 - /* PowerPC 7447 v1.2 (G4) */  
8400 - POWERPC_DEF("7447_v1.2", CPU_POWERPC_74x7_v12, 7445),  
8401 /* PowerPC 7457 v1.2 (G4) */ 8579 /* PowerPC 7457 v1.2 (G4) */
8402 POWERPC_DEF("7457_v1.2", CPU_POWERPC_74x7_v12, 7455), 8580 POWERPC_DEF("7457_v1.2", CPU_POWERPC_74x7_v12, 7455),
8403 /* PowerPC 7447A (G4) */ 8581 /* PowerPC 7447A (G4) */