Commit 1c27f8fbfead8f5ff12da6946436fe35c6adcac4
1 parent
1192dad8
PowerPC hardware reset vector is now considered as part of the exception model.
Use it at CPU initialisation time. git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@3332 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
2 changed files
with
31 additions
and
137 deletions
target-ppc/helper.c
| @@ -2792,11 +2792,7 @@ void cpu_ppc_reset (void *opaque) | @@ -2792,11 +2792,7 @@ void cpu_ppc_reset (void *opaque) | ||
| 2792 | msr_fp = 1; /* Allow floating point exceptions */ | 2792 | msr_fp = 1; /* Allow floating point exceptions */ |
| 2793 | msr_pr = 1; | 2793 | msr_pr = 1; |
| 2794 | #else | 2794 | #else |
| 2795 | -#if defined(TARGET_PPC64) | ||
| 2796 | - env->nip = 0x00000100; | ||
| 2797 | -#else | ||
| 2798 | - env->nip = 0xFFFFFFFC; | ||
| 2799 | -#endif | 2795 | + env->nip = env->hreset_vector | env->excp_prefix; |
| 2800 | ppc_tlb_invalidate_all(env); | 2796 | ppc_tlb_invalidate_all(env); |
| 2801 | #endif | 2797 | #endif |
| 2802 | do_compute_hflags(env); | 2798 | do_compute_hflags(env); |
target-ppc/translate_init.c
| @@ -2235,6 +2235,8 @@ static void init_excp_4xx_real (CPUPPCState *env) | @@ -2235,6 +2235,8 @@ static void init_excp_4xx_real (CPUPPCState *env) | ||
| 2235 | env->excp_prefix = 0x00000000; | 2235 | env->excp_prefix = 0x00000000; |
| 2236 | env->ivor_mask = 0x0000FFF0; | 2236 | env->ivor_mask = 0x0000FFF0; |
| 2237 | env->ivpr_mask = 0xFFFF0000; | 2237 | env->ivpr_mask = 0xFFFF0000; |
| 2238 | + /* Hardware reset vector */ | ||
| 2239 | + env->hreset_vector = 0xFFFFFFFCUL; | ||
| 2238 | #endif | 2240 | #endif |
| 2239 | } | 2241 | } |
| 2240 | 2242 | ||
| @@ -2258,6 +2260,8 @@ static void init_excp_4xx_softmmu (CPUPPCState *env) | @@ -2258,6 +2260,8 @@ static void init_excp_4xx_softmmu (CPUPPCState *env) | ||
| 2258 | env->excp_prefix = 0x00000000; | 2260 | env->excp_prefix = 0x00000000; |
| 2259 | env->ivor_mask = 0x0000FFF0; | 2261 | env->ivor_mask = 0x0000FFF0; |
| 2260 | env->ivpr_mask = 0xFFFF0000; | 2262 | env->ivpr_mask = 0xFFFF0000; |
| 2263 | + /* Hardware reset vector */ | ||
| 2264 | + env->hreset_vector = 0xFFFFFFFCUL; | ||
| 2261 | #endif | 2265 | #endif |
| 2262 | } | 2266 | } |
| 2263 | 2267 | ||
| @@ -2283,6 +2287,8 @@ static void init_excp_BookE (CPUPPCState *env) | @@ -2283,6 +2287,8 @@ static void init_excp_BookE (CPUPPCState *env) | ||
| 2283 | env->excp_prefix = 0x00000000; | 2287 | env->excp_prefix = 0x00000000; |
| 2284 | env->ivor_mask = 0x0000FFE0; | 2288 | env->ivor_mask = 0x0000FFE0; |
| 2285 | env->ivpr_mask = 0xFFFF0000; | 2289 | env->ivpr_mask = 0xFFFF0000; |
| 2290 | + /* Hardware reset vector */ | ||
| 2291 | + env->hreset_vector = 0xFFFFFFFCUL; | ||
| 2286 | #endif | 2292 | #endif |
| 2287 | } | 2293 | } |
| 2288 | 2294 | ||
| @@ -2302,6 +2308,8 @@ static void init_excp_601 (CPUPPCState *env) | @@ -2302,6 +2308,8 @@ static void init_excp_601 (CPUPPCState *env) | ||
| 2302 | env->excp_vectors[POWERPC_EXCP_SYSCALL] = 0x00000C00; | 2308 | env->excp_vectors[POWERPC_EXCP_SYSCALL] = 0x00000C00; |
| 2303 | env->excp_vectors[POWERPC_EXCP_RUNM] = 0x00002000; | 2309 | env->excp_vectors[POWERPC_EXCP_RUNM] = 0x00002000; |
| 2304 | env->excp_prefix = 0xFFF00000; | 2310 | env->excp_prefix = 0xFFF00000; |
| 2311 | + /* Hardware reset vector */ | ||
| 2312 | + env->hreset_vector = 0xFFFFFFFCUL; | ||
| 2305 | #endif | 2313 | #endif |
| 2306 | } | 2314 | } |
| 2307 | 2315 | ||
| @@ -2328,6 +2336,8 @@ static void init_excp_602 (CPUPPCState *env) | @@ -2328,6 +2336,8 @@ static void init_excp_602 (CPUPPCState *env) | ||
| 2328 | env->excp_vectors[POWERPC_EXCP_WDT] = 0x00001500; | 2336 | env->excp_vectors[POWERPC_EXCP_WDT] = 0x00001500; |
| 2329 | env->excp_vectors[POWERPC_EXCP_EMUL] = 0x00001600; | 2337 | env->excp_vectors[POWERPC_EXCP_EMUL] = 0x00001600; |
| 2330 | env->excp_prefix = 0xFFF00000; | 2338 | env->excp_prefix = 0xFFF00000; |
| 2339 | + /* Hardware reset vector */ | ||
| 2340 | + env->hreset_vector = 0xFFFFFFFCUL; | ||
| 2331 | #endif | 2341 | #endif |
| 2332 | } | 2342 | } |
| 2333 | 2343 | ||
| @@ -2350,6 +2360,8 @@ static void init_excp_603 (CPUPPCState *env) | @@ -2350,6 +2360,8 @@ static void init_excp_603 (CPUPPCState *env) | ||
| 2350 | env->excp_vectors[POWERPC_EXCP_DSTLB] = 0x00001200; | 2360 | env->excp_vectors[POWERPC_EXCP_DSTLB] = 0x00001200; |
| 2351 | env->excp_vectors[POWERPC_EXCP_IABR] = 0x00001300; | 2361 | env->excp_vectors[POWERPC_EXCP_IABR] = 0x00001300; |
| 2352 | env->excp_vectors[POWERPC_EXCP_SMI] = 0x00001400; | 2362 | env->excp_vectors[POWERPC_EXCP_SMI] = 0x00001400; |
| 2363 | + /* Hardware reset vector */ | ||
| 2364 | + env->hreset_vector = 0xFFFFFFFCUL; | ||
| 2353 | #endif | 2365 | #endif |
| 2354 | } | 2366 | } |
| 2355 | 2367 | ||
| @@ -2373,6 +2385,8 @@ static void init_excp_G2 (CPUPPCState *env) | @@ -2373,6 +2385,8 @@ static void init_excp_G2 (CPUPPCState *env) | ||
| 2373 | env->excp_vectors[POWERPC_EXCP_DSTLB] = 0x00001200; | 2385 | env->excp_vectors[POWERPC_EXCP_DSTLB] = 0x00001200; |
| 2374 | env->excp_vectors[POWERPC_EXCP_IABR] = 0x00001300; | 2386 | env->excp_vectors[POWERPC_EXCP_IABR] = 0x00001300; |
| 2375 | env->excp_vectors[POWERPC_EXCP_SMI] = 0x00001400; | 2387 | env->excp_vectors[POWERPC_EXCP_SMI] = 0x00001400; |
| 2388 | + /* Hardware reset vector */ | ||
| 2389 | + env->hreset_vector = 0xFFFFFFFCUL; | ||
| 2376 | #endif | 2390 | #endif |
| 2377 | } | 2391 | } |
| 2378 | 2392 | ||
| @@ -2393,6 +2407,8 @@ static void init_excp_604 (CPUPPCState *env) | @@ -2393,6 +2407,8 @@ static void init_excp_604 (CPUPPCState *env) | ||
| 2393 | env->excp_vectors[POWERPC_EXCP_PERFM] = 0x00000F00; | 2407 | env->excp_vectors[POWERPC_EXCP_PERFM] = 0x00000F00; |
| 2394 | env->excp_vectors[POWERPC_EXCP_IABR] = 0x00001300; | 2408 | env->excp_vectors[POWERPC_EXCP_IABR] = 0x00001300; |
| 2395 | env->excp_vectors[POWERPC_EXCP_SMI] = 0x00001400; | 2409 | env->excp_vectors[POWERPC_EXCP_SMI] = 0x00001400; |
| 2410 | + /* Hardware reset vector */ | ||
| 2411 | + env->hreset_vector = 0xFFFFFFFCUL; | ||
| 2396 | #endif | 2412 | #endif |
| 2397 | } | 2413 | } |
| 2398 | 2414 | ||
| @@ -2415,6 +2431,8 @@ static void init_excp_620 (CPUPPCState *env) | @@ -2415,6 +2431,8 @@ static void init_excp_620 (CPUPPCState *env) | ||
| 2415 | env->excp_vectors[POWERPC_EXCP_PERFM] = 0x00000F00; | 2431 | env->excp_vectors[POWERPC_EXCP_PERFM] = 0x00000F00; |
| 2416 | env->excp_vectors[POWERPC_EXCP_IABR] = 0x00001300; | 2432 | env->excp_vectors[POWERPC_EXCP_IABR] = 0x00001300; |
| 2417 | env->excp_vectors[POWERPC_EXCP_SMI] = 0x00001400; | 2433 | env->excp_vectors[POWERPC_EXCP_SMI] = 0x00001400; |
| 2434 | + /* Hardware reset vector */ | ||
| 2435 | + env->hreset_vector = 0x0000000000000100ULL; /* ? */ | ||
| 2418 | #endif | 2436 | #endif |
| 2419 | } | 2437 | } |
| 2420 | #endif /* defined(TARGET_PPC64) */ | 2438 | #endif /* defined(TARGET_PPC64) */ |
| @@ -2436,6 +2454,8 @@ static void init_excp_7x0 (CPUPPCState *env) | @@ -2436,6 +2454,8 @@ static void init_excp_7x0 (CPUPPCState *env) | ||
| 2436 | env->excp_vectors[POWERPC_EXCP_PERFM] = 0x00000F00; | 2454 | env->excp_vectors[POWERPC_EXCP_PERFM] = 0x00000F00; |
| 2437 | env->excp_vectors[POWERPC_EXCP_IABR] = 0x00001300; | 2455 | env->excp_vectors[POWERPC_EXCP_IABR] = 0x00001300; |
| 2438 | env->excp_vectors[POWERPC_EXCP_THERM] = 0x00001700; | 2456 | env->excp_vectors[POWERPC_EXCP_THERM] = 0x00001700; |
| 2457 | + /* Hardware reset vector */ | ||
| 2458 | + env->hreset_vector = 0xFFFFFFFCUL; | ||
| 2439 | #endif | 2459 | #endif |
| 2440 | } | 2460 | } |
| 2441 | 2461 | ||
| @@ -2457,6 +2477,8 @@ static void init_excp_750FX (CPUPPCState *env) | @@ -2457,6 +2477,8 @@ static void init_excp_750FX (CPUPPCState *env) | ||
| 2457 | env->excp_vectors[POWERPC_EXCP_IABR] = 0x00001300; | 2477 | env->excp_vectors[POWERPC_EXCP_IABR] = 0x00001300; |
| 2458 | env->excp_vectors[POWERPC_EXCP_SMI] = 0x00001400; | 2478 | env->excp_vectors[POWERPC_EXCP_SMI] = 0x00001400; |
| 2459 | env->excp_vectors[POWERPC_EXCP_THERM] = 0x00001700; | 2479 | env->excp_vectors[POWERPC_EXCP_THERM] = 0x00001700; |
| 2480 | + /* Hardware reset vector */ | ||
| 2481 | + env->hreset_vector = 0xFFFFFFFCUL; | ||
| 2460 | #endif | 2482 | #endif |
| 2461 | } | 2483 | } |
| 2462 | 2484 | ||
| @@ -2480,6 +2502,8 @@ static void init_excp_7400 (CPUPPCState *env) | @@ -2480,6 +2502,8 @@ static void init_excp_7400 (CPUPPCState *env) | ||
| 2480 | env->excp_vectors[POWERPC_EXCP_SMI] = 0x00001400; | 2502 | env->excp_vectors[POWERPC_EXCP_SMI] = 0x00001400; |
| 2481 | env->excp_vectors[POWERPC_EXCP_VPUA] = 0x00001600; | 2503 | env->excp_vectors[POWERPC_EXCP_VPUA] = 0x00001600; |
| 2482 | env->excp_vectors[POWERPC_EXCP_THERM] = 0x00001700; | 2504 | env->excp_vectors[POWERPC_EXCP_THERM] = 0x00001700; |
| 2505 | + /* Hardware reset vector */ | ||
| 2506 | + env->hreset_vector = 0xFFFFFFFCUL; | ||
| 2483 | #endif | 2507 | #endif |
| 2484 | } | 2508 | } |
| 2485 | 2509 | ||
| @@ -2505,6 +2529,8 @@ static void init_excp_7450 (CPUPPCState *env) | @@ -2505,6 +2529,8 @@ static void init_excp_7450 (CPUPPCState *env) | ||
| 2505 | env->excp_vectors[POWERPC_EXCP_IABR] = 0x00001300; | 2529 | env->excp_vectors[POWERPC_EXCP_IABR] = 0x00001300; |
| 2506 | env->excp_vectors[POWERPC_EXCP_SMI] = 0x00001400; | 2530 | env->excp_vectors[POWERPC_EXCP_SMI] = 0x00001400; |
| 2507 | env->excp_vectors[POWERPC_EXCP_VPUA] = 0x00001600; | 2531 | env->excp_vectors[POWERPC_EXCP_VPUA] = 0x00001600; |
| 2532 | + /* Hardware reset vector */ | ||
| 2533 | + env->hreset_vector = 0xFFFFFFFCUL; | ||
| 2508 | #endif | 2534 | #endif |
| 2509 | } | 2535 | } |
| 2510 | 2536 | ||
| @@ -2534,6 +2560,8 @@ static void init_excp_970 (CPUPPCState *env) | @@ -2534,6 +2560,8 @@ static void init_excp_970 (CPUPPCState *env) | ||
| 2534 | env->excp_vectors[POWERPC_EXCP_MAINT] = 0x00001600; | 2560 | env->excp_vectors[POWERPC_EXCP_MAINT] = 0x00001600; |
| 2535 | env->excp_vectors[POWERPC_EXCP_VPUA] = 0x00001700; | 2561 | env->excp_vectors[POWERPC_EXCP_VPUA] = 0x00001700; |
| 2536 | env->excp_vectors[POWERPC_EXCP_THERM] = 0x00001800; | 2562 | env->excp_vectors[POWERPC_EXCP_THERM] = 0x00001800; |
| 2563 | + /* Hardware reset vector */ | ||
| 2564 | + env->hreset_vector = 0x0000000000000100ULL; | ||
| 2537 | #endif | 2565 | #endif |
| 2538 | } | 2566 | } |
| 2539 | #endif | 2567 | #endif |
| @@ -2564,10 +2592,6 @@ static void init_proc_401 (CPUPPCState *env) | @@ -2564,10 +2592,6 @@ static void init_proc_401 (CPUPPCState *env) | ||
| 2564 | env->icache_line_size = 32; | 2592 | env->icache_line_size = 32; |
| 2565 | /* Allocate hardware IRQ controller */ | 2593 | /* Allocate hardware IRQ controller */ |
| 2566 | ppc40x_irq_init(env); | 2594 | ppc40x_irq_init(env); |
| 2567 | -#if !defined(CONFIG_USER_ONLY) | ||
| 2568 | - /* Hardware reset vector */ | ||
| 2569 | - env->hreset_vector = 0xFFFFFFFCUL; | ||
| 2570 | -#endif | ||
| 2571 | } | 2595 | } |
| 2572 | 2596 | ||
| 2573 | /* PowerPC 401x2 */ | 2597 | /* PowerPC 401x2 */ |
| @@ -2597,10 +2621,6 @@ static void init_proc_401x2 (CPUPPCState *env) | @@ -2597,10 +2621,6 @@ static void init_proc_401x2 (CPUPPCState *env) | ||
| 2597 | env->icache_line_size = 32; | 2621 | env->icache_line_size = 32; |
| 2598 | /* Allocate hardware IRQ controller */ | 2622 | /* Allocate hardware IRQ controller */ |
| 2599 | ppc40x_irq_init(env); | 2623 | ppc40x_irq_init(env); |
| 2600 | -#if !defined(CONFIG_USER_ONLY) | ||
| 2601 | - /* Hardware reset vector */ | ||
| 2602 | - env->hreset_vector = 0xFFFFFFFCUL; | ||
| 2603 | -#endif | ||
| 2604 | } | 2624 | } |
| 2605 | 2625 | ||
| 2606 | /* PowerPC 401x3 */ | 2626 | /* PowerPC 401x3 */ |
| @@ -2628,10 +2648,6 @@ static void init_proc_401x3 (CPUPPCState *env) | @@ -2628,10 +2648,6 @@ static void init_proc_401x3 (CPUPPCState *env) | ||
| 2628 | env->icache_line_size = 32; | 2648 | env->icache_line_size = 32; |
| 2629 | /* Allocate hardware IRQ controller */ | 2649 | /* Allocate hardware IRQ controller */ |
| 2630 | ppc40x_irq_init(env); | 2650 | ppc40x_irq_init(env); |
| 2631 | -#if !defined(CONFIG_USER_ONLY) | ||
| 2632 | - /* Hardware reset vector */ | ||
| 2633 | - env->hreset_vector = 0xFFFFFFFCUL; | ||
| 2634 | -#endif | ||
| 2635 | } | 2651 | } |
| 2636 | 2652 | ||
| 2637 | /* IOP480 */ | 2653 | /* IOP480 */ |
| @@ -2661,10 +2677,6 @@ static void init_proc_IOP480 (CPUPPCState *env) | @@ -2661,10 +2677,6 @@ static void init_proc_IOP480 (CPUPPCState *env) | ||
| 2661 | env->icache_line_size = 32; | 2677 | env->icache_line_size = 32; |
| 2662 | /* Allocate hardware IRQ controller */ | 2678 | /* Allocate hardware IRQ controller */ |
| 2663 | ppc40x_irq_init(env); | 2679 | ppc40x_irq_init(env); |
| 2664 | -#if !defined(CONFIG_USER_ONLY) | ||
| 2665 | - /* Hardware reset vector */ | ||
| 2666 | - env->hreset_vector = 0xFFFFFFFCUL; | ||
| 2667 | -#endif | ||
| 2668 | } | 2680 | } |
| 2669 | 2681 | ||
| 2670 | /* PowerPC 403 */ | 2682 | /* PowerPC 403 */ |
| @@ -2733,10 +2745,6 @@ static void init_proc_403GCX (CPUPPCState *env) | @@ -2733,10 +2745,6 @@ static void init_proc_403GCX (CPUPPCState *env) | ||
| 2733 | env->icache_line_size = 32; | 2745 | env->icache_line_size = 32; |
| 2734 | /* Allocate hardware IRQ controller */ | 2746 | /* Allocate hardware IRQ controller */ |
| 2735 | ppc40x_irq_init(env); | 2747 | ppc40x_irq_init(env); |
| 2736 | -#if !defined(CONFIG_USER_ONLY) | ||
| 2737 | - /* Hardware reset vector */ | ||
| 2738 | - env->hreset_vector = 0xFFFFFFFCUL; | ||
| 2739 | -#endif | ||
| 2740 | } | 2748 | } |
| 2741 | 2749 | ||
| 2742 | /* PowerPC 405 */ | 2750 | /* PowerPC 405 */ |
| @@ -2777,10 +2785,6 @@ static void init_proc_405 (CPUPPCState *env) | @@ -2777,10 +2785,6 @@ static void init_proc_405 (CPUPPCState *env) | ||
| 2777 | env->icache_line_size = 32; | 2785 | env->icache_line_size = 32; |
| 2778 | /* Allocate hardware IRQ controller */ | 2786 | /* Allocate hardware IRQ controller */ |
| 2779 | ppc40x_irq_init(env); | 2787 | ppc40x_irq_init(env); |
| 2780 | -#if !defined(CONFIG_USER_ONLY) | ||
| 2781 | - /* Hardware reset vector */ | ||
| 2782 | - env->hreset_vector = 0xFFFFFFFCUL; | ||
| 2783 | -#endif | ||
| 2784 | } | 2788 | } |
| 2785 | 2789 | ||
| 2786 | /* PowerPC 440 EP */ | 2790 | /* PowerPC 440 EP */ |
| @@ -2826,10 +2830,6 @@ static void init_proc_440EP (CPUPPCState *env) | @@ -2826,10 +2830,6 @@ static void init_proc_440EP (CPUPPCState *env) | ||
| 2826 | env->dcache_line_size = 32; | 2830 | env->dcache_line_size = 32; |
| 2827 | env->icache_line_size = 32; | 2831 | env->icache_line_size = 32; |
| 2828 | /* XXX: TODO: allocate internal IRQ controller */ | 2832 | /* XXX: TODO: allocate internal IRQ controller */ |
| 2829 | -#if !defined(CONFIG_USER_ONLY) | ||
| 2830 | - /* Hardware reset vector */ | ||
| 2831 | - env->hreset_vector = 0xFFFFFFFCUL; | ||
| 2832 | -#endif | ||
| 2833 | } | 2833 | } |
| 2834 | 2834 | ||
| 2835 | /* PowerPC 440 GP */ | 2835 | /* PowerPC 440 GP */ |
| @@ -2857,10 +2857,6 @@ static void init_proc_440GP (CPUPPCState *env) | @@ -2857,10 +2857,6 @@ static void init_proc_440GP (CPUPPCState *env) | ||
| 2857 | env->dcache_line_size = 32; | 2857 | env->dcache_line_size = 32; |
| 2858 | env->icache_line_size = 32; | 2858 | env->icache_line_size = 32; |
| 2859 | /* XXX: TODO: allocate internal IRQ controller */ | 2859 | /* XXX: TODO: allocate internal IRQ controller */ |
| 2860 | -#if !defined(CONFIG_USER_ONLY) | ||
| 2861 | - /* Hardware reset vector */ | ||
| 2862 | - env->hreset_vector = 0xFFFFFFFCUL; | ||
| 2863 | -#endif | ||
| 2864 | } | 2860 | } |
| 2865 | 2861 | ||
| 2866 | /* PowerPC 440x4 */ | 2862 | /* PowerPC 440x4 */ |
| @@ -2889,10 +2885,6 @@ static void init_proc_440x4 (CPUPPCState *env) | @@ -2889,10 +2885,6 @@ static void init_proc_440x4 (CPUPPCState *env) | ||
| 2889 | env->dcache_line_size = 32; | 2885 | env->dcache_line_size = 32; |
| 2890 | env->icache_line_size = 32; | 2886 | env->icache_line_size = 32; |
| 2891 | /* XXX: TODO: allocate internal IRQ controller */ | 2887 | /* XXX: TODO: allocate internal IRQ controller */ |
| 2892 | -#if !defined(CONFIG_USER_ONLY) | ||
| 2893 | - /* Hardware reset vector */ | ||
| 2894 | - env->hreset_vector = 0xFFFFFFFCUL; | ||
| 2895 | -#endif | ||
| 2896 | } | 2888 | } |
| 2897 | 2889 | ||
| 2898 | /* PowerPC 440x5 */ | 2890 | /* PowerPC 440x5 */ |
| @@ -2938,10 +2930,6 @@ static void init_proc_440x5 (CPUPPCState *env) | @@ -2938,10 +2930,6 @@ static void init_proc_440x5 (CPUPPCState *env) | ||
| 2938 | env->dcache_line_size = 32; | 2930 | env->dcache_line_size = 32; |
| 2939 | env->icache_line_size = 32; | 2931 | env->icache_line_size = 32; |
| 2940 | /* XXX: TODO: allocate internal IRQ controller */ | 2932 | /* XXX: TODO: allocate internal IRQ controller */ |
| 2941 | -#if !defined(CONFIG_USER_ONLY) | ||
| 2942 | - /* Hardware reset vector */ | ||
| 2943 | - env->hreset_vector = 0xFFFFFFFCUL; | ||
| 2944 | -#endif | ||
| 2945 | } | 2933 | } |
| 2946 | 2934 | ||
| 2947 | /* PowerPC 460 (guessed) */ | 2935 | /* PowerPC 460 (guessed) */ |
| @@ -2993,10 +2981,6 @@ static void init_proc_460 (CPUPPCState *env) | @@ -2993,10 +2981,6 @@ static void init_proc_460 (CPUPPCState *env) | ||
| 2993 | env->dcache_line_size = 32; | 2981 | env->dcache_line_size = 32; |
| 2994 | env->icache_line_size = 32; | 2982 | env->icache_line_size = 32; |
| 2995 | /* XXX: TODO: allocate internal IRQ controller */ | 2983 | /* XXX: TODO: allocate internal IRQ controller */ |
| 2996 | -#if !defined(CONFIG_USER_ONLY) | ||
| 2997 | - /* Hardware reset vector */ | ||
| 2998 | - env->hreset_vector = 0xFFFFFFFCUL; | ||
| 2999 | -#endif | ||
| 3000 | } | 2984 | } |
| 3001 | 2985 | ||
| 3002 | /* PowerPC 460F (guessed) */ | 2986 | /* PowerPC 460F (guessed) */ |
| @@ -3051,10 +3035,6 @@ static void init_proc_460F (CPUPPCState *env) | @@ -3051,10 +3035,6 @@ static void init_proc_460F (CPUPPCState *env) | ||
| 3051 | env->dcache_line_size = 32; | 3035 | env->dcache_line_size = 32; |
| 3052 | env->icache_line_size = 32; | 3036 | env->icache_line_size = 32; |
| 3053 | /* XXX: TODO: allocate internal IRQ controller */ | 3037 | /* XXX: TODO: allocate internal IRQ controller */ |
| 3054 | -#if !defined(CONFIG_USER_ONLY) | ||
| 3055 | - /* Hardware reset vector */ | ||
| 3056 | - env->hreset_vector = 0xFFFFFFFCUL; | ||
| 3057 | -#endif | ||
| 3058 | } | 3038 | } |
| 3059 | 3039 | ||
| 3060 | /* Generic BookE PowerPC */ | 3040 | /* Generic BookE PowerPC */ |
| @@ -3077,10 +3057,6 @@ static void init_proc_BookE (CPUPPCState *env) | @@ -3077,10 +3057,6 @@ static void init_proc_BookE (CPUPPCState *env) | ||
| 3077 | init_excp_BookE(env); | 3057 | init_excp_BookE(env); |
| 3078 | env->dcache_line_size = 32; | 3058 | env->dcache_line_size = 32; |
| 3079 | env->icache_line_size = 32; | 3059 | env->icache_line_size = 32; |
| 3080 | -#if !defined(CONFIG_USER_ONLY) | ||
| 3081 | - /* Hardware reset vector */ | ||
| 3082 | - env->hreset_vector = 0xFFFFFFFCUL; | ||
| 3083 | -#endif | ||
| 3084 | } | 3060 | } |
| 3085 | 3061 | ||
| 3086 | /* e200 core */ | 3062 | /* e200 core */ |
| @@ -3112,10 +3088,6 @@ static void init_proc_e500 (CPUPPCState *env) | @@ -3112,10 +3088,6 @@ static void init_proc_e500 (CPUPPCState *env) | ||
| 3112 | env->dcache_line_size = 32; | 3088 | env->dcache_line_size = 32; |
| 3113 | env->icache_line_size = 32; | 3089 | env->icache_line_size = 32; |
| 3114 | /* XXX: TODO: allocate internal IRQ controller */ | 3090 | /* XXX: TODO: allocate internal IRQ controller */ |
| 3115 | -#if !defined(CONFIG_USER_ONLY) | ||
| 3116 | - /* Hardware reset vector */ | ||
| 3117 | - env->hreset_vector = 0xFFFFFFFCUL; | ||
| 3118 | -#endif | ||
| 3119 | } | 3091 | } |
| 3120 | 3092 | ||
| 3121 | /* e600 core */ | 3093 | /* e600 core */ |
| @@ -3185,10 +3157,6 @@ static void init_proc_601 (CPUPPCState *env) | @@ -3185,10 +3157,6 @@ static void init_proc_601 (CPUPPCState *env) | ||
| 3185 | env->dcache_line_size = 64; | 3157 | env->dcache_line_size = 64; |
| 3186 | env->icache_line_size = 64; | 3158 | env->icache_line_size = 64; |
| 3187 | /* XXX: TODO: allocate internal IRQ controller */ | 3159 | /* XXX: TODO: allocate internal IRQ controller */ |
| 3188 | -#if !defined(CONFIG_USER_ONLY) | ||
| 3189 | - /* Hardware reset vector */ | ||
| 3190 | - env->hreset_vector = 0xFFFFFFFCUL; | ||
| 3191 | -#endif | ||
| 3192 | } | 3160 | } |
| 3193 | 3161 | ||
| 3194 | /* PowerPC 602 */ | 3162 | /* PowerPC 602 */ |
| @@ -3228,10 +3196,6 @@ static void init_proc_602 (CPUPPCState *env) | @@ -3228,10 +3196,6 @@ static void init_proc_602 (CPUPPCState *env) | ||
| 3228 | env->icache_line_size = 32; | 3196 | env->icache_line_size = 32; |
| 3229 | /* Allocate hardware IRQ controller */ | 3197 | /* Allocate hardware IRQ controller */ |
| 3230 | ppc6xx_irq_init(env); | 3198 | ppc6xx_irq_init(env); |
| 3231 | -#if !defined(CONFIG_USER_ONLY) | ||
| 3232 | - /* Hardware reset vector */ | ||
| 3233 | - env->hreset_vector = 0xFFFFFFFCUL; | ||
| 3234 | -#endif | ||
| 3235 | } | 3199 | } |
| 3236 | 3200 | ||
| 3237 | /* PowerPC 603 */ | 3201 | /* PowerPC 603 */ |
| @@ -3267,10 +3231,6 @@ static void init_proc_603 (CPUPPCState *env) | @@ -3267,10 +3231,6 @@ static void init_proc_603 (CPUPPCState *env) | ||
| 3267 | env->icache_line_size = 32; | 3231 | env->icache_line_size = 32; |
| 3268 | /* Allocate hardware IRQ controller */ | 3232 | /* Allocate hardware IRQ controller */ |
| 3269 | ppc6xx_irq_init(env); | 3233 | ppc6xx_irq_init(env); |
| 3270 | -#if !defined(CONFIG_USER_ONLY) | ||
| 3271 | - /* Hardware reset vector */ | ||
| 3272 | - env->hreset_vector = 0xFFFFFFFCUL; | ||
| 3273 | -#endif | ||
| 3274 | } | 3234 | } |
| 3275 | 3235 | ||
| 3276 | /* PowerPC 603e */ | 3236 | /* PowerPC 603e */ |
| @@ -3311,10 +3271,6 @@ static void init_proc_603E (CPUPPCState *env) | @@ -3311,10 +3271,6 @@ static void init_proc_603E (CPUPPCState *env) | ||
| 3311 | env->icache_line_size = 32; | 3271 | env->icache_line_size = 32; |
| 3312 | /* Allocate hardware IRQ controller */ | 3272 | /* Allocate hardware IRQ controller */ |
| 3313 | ppc6xx_irq_init(env); | 3273 | ppc6xx_irq_init(env); |
| 3314 | -#if !defined(CONFIG_USER_ONLY) | ||
| 3315 | - /* Hardware reset vector */ | ||
| 3316 | - env->hreset_vector = 0xFFFFFFFCUL; | ||
| 3317 | -#endif | ||
| 3318 | } | 3274 | } |
| 3319 | 3275 | ||
| 3320 | /* PowerPC G2 */ | 3276 | /* PowerPC G2 */ |
| @@ -3357,10 +3313,6 @@ static void init_proc_G2 (CPUPPCState *env) | @@ -3357,10 +3313,6 @@ static void init_proc_G2 (CPUPPCState *env) | ||
| 3357 | env->icache_line_size = 32; | 3313 | env->icache_line_size = 32; |
| 3358 | /* Allocate hardware IRQ controller */ | 3314 | /* Allocate hardware IRQ controller */ |
| 3359 | ppc6xx_irq_init(env); | 3315 | ppc6xx_irq_init(env); |
| 3360 | -#if !defined(CONFIG_USER_ONLY) | ||
| 3361 | - /* Hardware reset vector */ | ||
| 3362 | - env->hreset_vector = 0xFFFFFFFCUL; | ||
| 3363 | -#endif | ||
| 3364 | } | 3316 | } |
| 3365 | 3317 | ||
| 3366 | /* PowerPC G2LE */ | 3318 | /* PowerPC G2LE */ |
| @@ -3403,10 +3355,6 @@ static void init_proc_G2LE (CPUPPCState *env) | @@ -3403,10 +3355,6 @@ static void init_proc_G2LE (CPUPPCState *env) | ||
| 3403 | env->icache_line_size = 32; | 3355 | env->icache_line_size = 32; |
| 3404 | /* Allocate hardware IRQ controller */ | 3356 | /* Allocate hardware IRQ controller */ |
| 3405 | ppc6xx_irq_init(env); | 3357 | ppc6xx_irq_init(env); |
| 3406 | -#if !defined(CONFIG_USER_ONLY) | ||
| 3407 | - /* Hardware reset vector */ | ||
| 3408 | - env->hreset_vector = 0xFFFFFFFCUL; | ||
| 3409 | -#endif | ||
| 3410 | } | 3358 | } |
| 3411 | 3359 | ||
| 3412 | /* PowerPC 604 */ | 3360 | /* PowerPC 604 */ |
| @@ -3441,10 +3389,6 @@ static void init_proc_604 (CPUPPCState *env) | @@ -3441,10 +3389,6 @@ static void init_proc_604 (CPUPPCState *env) | ||
| 3441 | env->icache_line_size = 32; | 3389 | env->icache_line_size = 32; |
| 3442 | /* Allocate hardware IRQ controller */ | 3390 | /* Allocate hardware IRQ controller */ |
| 3443 | ppc6xx_irq_init(env); | 3391 | ppc6xx_irq_init(env); |
| 3444 | -#if !defined(CONFIG_USER_ONLY) | ||
| 3445 | - /* Hardware reset vector */ | ||
| 3446 | - env->hreset_vector = 0xFFFFFFFCUL; | ||
| 3447 | -#endif | ||
| 3448 | } | 3392 | } |
| 3449 | 3393 | ||
| 3450 | /* PowerPC 740/750 (aka G3) */ | 3394 | /* PowerPC 740/750 (aka G3) */ |
| @@ -3481,10 +3425,6 @@ static void init_proc_7x0 (CPUPPCState *env) | @@ -3481,10 +3425,6 @@ static void init_proc_7x0 (CPUPPCState *env) | ||
| 3481 | env->icache_line_size = 32; | 3425 | env->icache_line_size = 32; |
| 3482 | /* Allocate hardware IRQ controller */ | 3426 | /* Allocate hardware IRQ controller */ |
| 3483 | ppc6xx_irq_init(env); | 3427 | ppc6xx_irq_init(env); |
| 3484 | -#if !defined(CONFIG_USER_ONLY) | ||
| 3485 | - /* Hardware reset vector */ | ||
| 3486 | - env->hreset_vector = 0xFFFFFFFCUL; | ||
| 3487 | -#endif | ||
| 3488 | } | 3428 | } |
| 3489 | 3429 | ||
| 3490 | /* PowerPC 750FX/GX */ | 3430 | /* PowerPC 750FX/GX */ |
| @@ -3528,10 +3468,6 @@ static void init_proc_750fx (CPUPPCState *env) | @@ -3528,10 +3468,6 @@ static void init_proc_750fx (CPUPPCState *env) | ||
| 3528 | env->icache_line_size = 32; | 3468 | env->icache_line_size = 32; |
| 3529 | /* Allocate hardware IRQ controller */ | 3469 | /* Allocate hardware IRQ controller */ |
| 3530 | ppc6xx_irq_init(env); | 3470 | ppc6xx_irq_init(env); |
| 3531 | -#if !defined(CONFIG_USER_ONLY) | ||
| 3532 | - /* Hardware reset vector */ | ||
| 3533 | - env->hreset_vector = 0xFFFFFFFCUL; | ||
| 3534 | -#endif | ||
| 3535 | } | 3471 | } |
| 3536 | 3472 | ||
| 3537 | /* PowerPC 745/755 */ | 3473 | /* PowerPC 745/755 */ |
| @@ -3579,6 +3515,7 @@ static void init_proc_7x5 (CPUPPCState *env) | @@ -3579,6 +3515,7 @@ static void init_proc_7x5 (CPUPPCState *env) | ||
| 3579 | gen_low_BATs(env); | 3515 | gen_low_BATs(env); |
| 3580 | gen_high_BATs(env); | 3516 | gen_high_BATs(env); |
| 3581 | gen_6xx_7xx_soft_tlb(env, 64, 2); | 3517 | gen_6xx_7xx_soft_tlb(env, 64, 2); |
| 3518 | + /* XXX: exception vectors ? */ | ||
| 3582 | env->dcache_line_size = 32; | 3519 | env->dcache_line_size = 32; |
| 3583 | env->icache_line_size = 32; | 3520 | env->icache_line_size = 32; |
| 3584 | /* Allocate hardware IRQ controller */ | 3521 | /* Allocate hardware IRQ controller */ |
| @@ -3616,10 +3553,6 @@ static void init_proc_7400 (CPUPPCState *env) | @@ -3616,10 +3553,6 @@ static void init_proc_7400 (CPUPPCState *env) | ||
| 3616 | env->icache_line_size = 32; | 3553 | env->icache_line_size = 32; |
| 3617 | /* Allocate hardware IRQ controller */ | 3554 | /* Allocate hardware IRQ controller */ |
| 3618 | ppc6xx_irq_init(env); | 3555 | ppc6xx_irq_init(env); |
| 3619 | -#if !defined(CONFIG_USER_ONLY) | ||
| 3620 | - /* Hardware reset vector */ | ||
| 3621 | - env->hreset_vector = 0xFFFFFFFCUL; | ||
| 3622 | -#endif | ||
| 3623 | } | 3556 | } |
| 3624 | 3557 | ||
| 3625 | /* PowerPC 7410 (aka G4) */ | 3558 | /* PowerPC 7410 (aka G4) */ |
| @@ -3661,10 +3594,6 @@ static void init_proc_7410 (CPUPPCState *env) | @@ -3661,10 +3594,6 @@ static void init_proc_7410 (CPUPPCState *env) | ||
| 3661 | env->icache_line_size = 32; | 3594 | env->icache_line_size = 32; |
| 3662 | /* Allocate hardware IRQ controller */ | 3595 | /* Allocate hardware IRQ controller */ |
| 3663 | ppc6xx_irq_init(env); | 3596 | ppc6xx_irq_init(env); |
| 3664 | -#if !defined(CONFIG_USER_ONLY) | ||
| 3665 | - /* Hardware reset vector */ | ||
| 3666 | - env->hreset_vector = 0xFFFFFFFCUL; | ||
| 3667 | -#endif | ||
| 3668 | } | 3597 | } |
| 3669 | 3598 | ||
| 3670 | /* PowerPC 7440 (aka G4) */ | 3599 | /* PowerPC 7440 (aka G4) */ |
| @@ -3728,14 +3657,11 @@ static void init_proc_7440 (CPUPPCState *env) | @@ -3728,14 +3657,11 @@ static void init_proc_7440 (CPUPPCState *env) | ||
| 3728 | /* Memory management */ | 3657 | /* Memory management */ |
| 3729 | gen_low_BATs(env); | 3658 | gen_low_BATs(env); |
| 3730 | gen_74xx_soft_tlb(env, 128, 2); | 3659 | gen_74xx_soft_tlb(env, 128, 2); |
| 3660 | + init_excp_7450(env); | ||
| 3731 | env->dcache_line_size = 32; | 3661 | env->dcache_line_size = 32; |
| 3732 | env->icache_line_size = 32; | 3662 | env->icache_line_size = 32; |
| 3733 | /* Allocate hardware IRQ controller */ | 3663 | /* Allocate hardware IRQ controller */ |
| 3734 | ppc6xx_irq_init(env); | 3664 | ppc6xx_irq_init(env); |
| 3735 | -#if !defined(CONFIG_USER_ONLY) | ||
| 3736 | - /* Hardware reset vector */ | ||
| 3737 | - env->hreset_vector = 0xFFFFFFFCUL; | ||
| 3738 | -#endif | ||
| 3739 | } | 3665 | } |
| 3740 | 3666 | ||
| 3741 | /* PowerPC 7450 (aka G4) */ | 3667 | /* PowerPC 7450 (aka G4) */ |
| @@ -3806,10 +3732,6 @@ static void init_proc_7450 (CPUPPCState *env) | @@ -3806,10 +3732,6 @@ static void init_proc_7450 (CPUPPCState *env) | ||
| 3806 | env->icache_line_size = 32; | 3732 | env->icache_line_size = 32; |
| 3807 | /* Allocate hardware IRQ controller */ | 3733 | /* Allocate hardware IRQ controller */ |
| 3808 | ppc6xx_irq_init(env); | 3734 | ppc6xx_irq_init(env); |
| 3809 | -#if !defined(CONFIG_USER_ONLY) | ||
| 3810 | - /* Hardware reset vector */ | ||
| 3811 | - env->hreset_vector = 0xFFFFFFFCUL; | ||
| 3812 | -#endif | ||
| 3813 | } | 3735 | } |
| 3814 | 3736 | ||
| 3815 | /* PowerPC 7445 (aka G4) */ | 3737 | /* PowerPC 7445 (aka G4) */ |
| @@ -3912,10 +3834,6 @@ static void init_proc_7445 (CPUPPCState *env) | @@ -3912,10 +3834,6 @@ static void init_proc_7445 (CPUPPCState *env) | ||
| 3912 | env->icache_line_size = 32; | 3834 | env->icache_line_size = 32; |
| 3913 | /* Allocate hardware IRQ controller */ | 3835 | /* Allocate hardware IRQ controller */ |
| 3914 | ppc6xx_irq_init(env); | 3836 | ppc6xx_irq_init(env); |
| 3915 | -#if !defined(CONFIG_USER_ONLY) | ||
| 3916 | - /* Hardware reset vector */ | ||
| 3917 | - env->hreset_vector = 0xFFFFFFFCUL; | ||
| 3918 | -#endif | ||
| 3919 | } | 3837 | } |
| 3920 | 3838 | ||
| 3921 | /* PowerPC 7455 (aka G4) */ | 3839 | /* PowerPC 7455 (aka G4) */ |
| @@ -4020,10 +3938,6 @@ static void init_proc_7455 (CPUPPCState *env) | @@ -4020,10 +3938,6 @@ static void init_proc_7455 (CPUPPCState *env) | ||
| 4020 | env->icache_line_size = 32; | 3938 | env->icache_line_size = 32; |
| 4021 | /* Allocate hardware IRQ controller */ | 3939 | /* Allocate hardware IRQ controller */ |
| 4022 | ppc6xx_irq_init(env); | 3940 | ppc6xx_irq_init(env); |
| 4023 | -#if !defined(CONFIG_USER_ONLY) | ||
| 4024 | - /* Hardware reset vector */ | ||
| 4025 | - env->hreset_vector = 0xFFFFFFFCUL; | ||
| 4026 | -#endif | ||
| 4027 | } | 3941 | } |
| 4028 | 3942 | ||
| 4029 | #if defined (TARGET_PPC64) | 3943 | #if defined (TARGET_PPC64) |
| @@ -4084,10 +3998,6 @@ static void init_proc_970 (CPUPPCState *env) | @@ -4084,10 +3998,6 @@ static void init_proc_970 (CPUPPCState *env) | ||
| 4084 | env->icache_line_size = 128; | 3998 | env->icache_line_size = 128; |
| 4085 | /* Allocate hardware IRQ controller */ | 3999 | /* Allocate hardware IRQ controller */ |
| 4086 | ppc970_irq_init(env); | 4000 | ppc970_irq_init(env); |
| 4087 | -#if !defined(CONFIG_USER_ONLY) | ||
| 4088 | - /* Hardware reset vector */ | ||
| 4089 | - env->hreset_vector = 0x0000000000000100ULL; | ||
| 4090 | -#endif | ||
| 4091 | } | 4001 | } |
| 4092 | 4002 | ||
| 4093 | /* PowerPC 970FX (aka G5) */ | 4003 | /* PowerPC 970FX (aka G5) */ |
| @@ -4143,10 +4053,6 @@ static void init_proc_970FX (CPUPPCState *env) | @@ -4143,10 +4053,6 @@ static void init_proc_970FX (CPUPPCState *env) | ||
| 4143 | env->icache_line_size = 128; | 4053 | env->icache_line_size = 128; |
| 4144 | /* Allocate hardware IRQ controller */ | 4054 | /* Allocate hardware IRQ controller */ |
| 4145 | ppc970_irq_init(env); | 4055 | ppc970_irq_init(env); |
| 4146 | -#if !defined(CONFIG_USER_ONLY) | ||
| 4147 | - /* Hardware reset vector */ | ||
| 4148 | - env->hreset_vector = 0x0000000000000100ULL; | ||
| 4149 | -#endif | ||
| 4150 | } | 4056 | } |
| 4151 | 4057 | ||
| 4152 | /* PowerPC 970 GX */ | 4058 | /* PowerPC 970 GX */ |
| @@ -4202,10 +4108,6 @@ static void init_proc_970GX (CPUPPCState *env) | @@ -4202,10 +4108,6 @@ static void init_proc_970GX (CPUPPCState *env) | ||
| 4202 | env->icache_line_size = 128; | 4108 | env->icache_line_size = 128; |
| 4203 | /* Allocate hardware IRQ controller */ | 4109 | /* Allocate hardware IRQ controller */ |
| 4204 | ppc970_irq_init(env); | 4110 | ppc970_irq_init(env); |
| 4205 | -#if !defined(CONFIG_USER_ONLY) | ||
| 4206 | - /* Hardware reset vector */ | ||
| 4207 | - env->hreset_vector = 0x0000000000000100ULL; | ||
| 4208 | -#endif | ||
| 4209 | } | 4111 | } |
| 4210 | 4112 | ||
| 4211 | /* PowerPC 620 */ | 4113 | /* PowerPC 620 */ |
| @@ -4237,10 +4139,6 @@ static void init_proc_620 (CPUPPCState *env) | @@ -4237,10 +4139,6 @@ static void init_proc_620 (CPUPPCState *env) | ||
| 4237 | env->dcache_line_size = 64; | 4139 | env->dcache_line_size = 64; |
| 4238 | env->icache_line_size = 64; | 4140 | env->icache_line_size = 64; |
| 4239 | /* XXX: TODO: initialize internal interrupt controller */ | 4141 | /* XXX: TODO: initialize internal interrupt controller */ |
| 4240 | -#if !defined(CONFIG_USER_ONLY) | ||
| 4241 | - /* Hardware reset vector */ | ||
| 4242 | - env->hreset_vector = 0x0000000000000100ULL; /* ? */ | ||
| 4243 | -#endif | ||
| 4244 | } | 4142 | } |
| 4245 | #endif /* defined (TARGET_PPC64) */ | 4143 | #endif /* defined (TARGET_PPC64) */ |
| 4246 | 4144 |