Revision f2e63a42

b/target-ppc/cpu.h
495 495
    int access_type; /* when a memory exception occurs, the access
496 496
                        type is stored here */
497 497

  
498
    /* MMU context */
498
    /* MMU context - only relevant for full system emulation */
499
#if !defined(CONFIG_USER_ONLY)
500
#if defined(TARGET_PPC64)
499 501
    /* Address space register */
500 502
    target_ulong asr;
503
    /* PowerPC 64 SLB area */
504
    int slb_nr;
505
#endif
501 506
    /* segment registers */
502 507
    target_ulong sdr1;
503 508
    target_ulong sr[16];
......
505 510
    int nb_BATs;
506 511
    target_ulong DBAT[2][8];
507 512
    target_ulong IBAT[2][8];
513
    /* PowerPC TLB registers (for 4xx and 60x software driven TLBs) */
514
    int nb_tlb;      /* Total number of TLB                                  */
515
    int tlb_per_way; /* Speed-up helper: used to avoid divisions at run time */
516
    int nb_ways;     /* Number of ways in the TLB set                        */
517
    int last_way;    /* Last used way used to allocate TLB in a LRU way      */
518
    int id_tlbs;     /* If 1, MMU has separated TLBs for instructions & data */
519
    int nb_pids;     /* Number of available PID registers                    */
520
    ppc_tlb_t *tlb;  /* TLB is optional. Allocate them only if needed        */
521
    /* 403 dedicated access protection registers */
522
    target_ulong pb[4];
523
#endif
508 524

  
509 525
    /* Other registers */
510 526
    /* Special purpose registers */
511 527
    target_ulong spr[1024];
528
    ppc_spr_t spr_cb[1024];
512 529
    /* Altivec registers */
513 530
    ppc_avr_t avr[32];
514 531
    uint32_t vscr;
532
#if defined(TARGET_PPCEMB)
515 533
    /* SPE registers */
516 534
    ppc_gpr_t spe_acc;
517 535
    float_status spe_status;
518 536
    uint32_t spe_fscr;
537
#endif
519 538

  
520 539
    /* Internal devices resources */
521 540
    /* Time base and decrementer */
......
523 542
    /* Device control registers */
524 543
    ppc_dcr_t *dcr_env;
525 544

  
526
    /* PowerPC TLB registers (for 4xx and 60x software driven TLBs) */
527
    int nb_tlb;      /* Total number of TLB                                  */
528
    int tlb_per_way; /* Speed-up helper: used to avoid divisions at run time */
529
    int nb_ways;     /* Number of ways in the TLB set                        */
530
    int last_way;    /* Last used way used to allocate TLB in a LRU way      */
531
    int id_tlbs;     /* If 1, MMU has separated TLBs for instructions & data */
532
    int nb_pids;     /* Number of available PID registers                    */
533
    ppc_tlb_t *tlb;  /* TLB is optional. Allocate them only if needed        */
534
    /* 403 dedicated access protection registers */
535
    target_ulong pb[4];
536
    /* PowerPC 64 SLB area */
537
    int slb_nr;
538

  
539 545
    int dcache_line_size;
540 546
    int icache_line_size;
541 547

  
......
570 576
    /* Those resources are used only during code translation */
571 577
    /* Next instruction pointer */
572 578
    target_ulong nip;
573
    /* SPR translation callbacks */
574
    ppc_spr_t spr_cb[1024];
579

  
575 580
    /* opcode handlers */
576 581
    opc_handler_t *opcodes[0x40];
577 582

  
b/target-ppc/translate.c
6448 6448
        if ((i & (RFPL - 1)) == (RFPL - 1))
6449 6449
            cpu_fprintf(f, "\n");
6450 6450
    }
6451
#if !defined(CONFIG_USER_ONLY)
6451 6452
    cpu_fprintf(f, "SRR0 " REGX " SRR1 " REGX "         " FILL FILL FILL
6452 6453
                "SDR1 " REGX "\n",
6453 6454
                env->spr[SPR_SRR0], env->spr[SPR_SRR1], env->sdr1);
6455
#endif
6454 6456

  
6455 6457
#undef RGPL
6456 6458
#undef RFPL
b/target-ppc/translate_init.c
533 533
/* BATs 0-3 */
534 534
static void gen_low_BATs (CPUPPCState *env)
535 535
{
536
#if !defined(CONFIG_USER_ONLY)
536 537
    spr_register(env, SPR_IBAT0U, "IBAT0U",
537 538
                 SPR_NOACCESS, SPR_NOACCESS,
538 539
                 &spr_read_ibat, &spr_write_ibatu,
......
598 599
                 &spr_read_dbat, &spr_write_dbatl,
599 600
                 0x00000000);
600 601
    env->nb_BATs += 4;
602
#endif
601 603
}
602 604

  
603 605
/* BATs 4-7 */
604 606
static void gen_high_BATs (CPUPPCState *env)
605 607
{
608
#if !defined(CONFIG_USER_ONLY)
606 609
    spr_register(env, SPR_IBAT4U, "IBAT4U",
607 610
                 SPR_NOACCESS, SPR_NOACCESS,
608 611
                 &spr_read_ibat_h, &spr_write_ibatu_h,
......
668 671
                 &spr_read_dbat_h, &spr_write_dbatl_h,
669 672
                 0x00000000);
670 673
    env->nb_BATs += 4;
674
#endif
671 675
}
672 676

  
673 677
/* Generic PowerPC time base */
......
694 698
/* Softare table search registers */
695 699
static void gen_6xx_7xx_soft_tlb (CPUPPCState *env, int nb_tlbs, int nb_ways)
696 700
{
701
#if !defined(CONFIG_USER_ONLY)
697 702
    env->nb_tlb = nb_tlbs;
698 703
    env->nb_ways = nb_ways;
699 704
    env->id_tlbs = 1;
......
725 730
                 SPR_NOACCESS, SPR_NOACCESS,
726 731
                 &spr_read_generic, &spr_write_generic,
727 732
                 0x00000000);
733
#endif
728 734
}
729 735

  
730 736
/* SPR common to MPC755 and G2 */
......
1105 1111
                 &spr_read_generic, &spr_write_generic,
1106 1112
                 0x00000000);
1107 1113
    /* Memory management */
1114
#if !defined(CONFIG_USER_ONLY)
1108 1115
    spr_register(env, SPR_IBAT0U, "IBAT0U",
1109 1116
                 SPR_NOACCESS, SPR_NOACCESS,
1110 1117
                 &spr_read_601_ubat, &spr_write_601_ubatu,
......
1138 1145
                 &spr_read_601_ubat, &spr_write_601_ubatl,
1139 1146
                 0x00000000);
1140 1147
    env->nb_BATs = 4;
1148
#endif
1141 1149
}
1142 1150

  
1143 1151
static void gen_spr_74xx (CPUPPCState *env)
......
1238 1246

  
1239 1247
static void gen_74xx_soft_tlb (CPUPPCState *env, int nb_tlbs, int nb_ways)
1240 1248
{
1249
#if !defined(CONFIG_USER_ONLY)
1241 1250
    env->nb_tlb = nb_tlbs;
1242 1251
    env->nb_ways = nb_ways;
1243 1252
    env->id_tlbs = 1;
......
1256 1265
                 SPR_NOACCESS, SPR_NOACCESS,
1257 1266
                 &spr_read_generic, &spr_write_generic,
1258 1267
                 0x00000000);
1268
#endif
1259 1269
}
1260 1270

  
1261 1271
/* PowerPC BookE SPR */
......
1512 1522
/* FSL storage control registers */
1513 1523
static void gen_spr_BookE_FSL (CPUPPCState *env)
1514 1524
{
1525
#if !defined(CONFIG_USER_ONLY)
1515 1526
    /* TLB assist registers */
1516 1527
    /* XXX : not implemented */
1517 1528
    spr_register(env, SPR_BOOKE_MAS0, "MAS0",
......
1605 1616
    default:
1606 1617
        break;
1607 1618
    }
1619
#endif
1608 1620
}
1609 1621

  
1610 1622
/* SPR specific to PowerPC 440 implementation */
......
2616 2628
    gen_spr_401x2(env);
2617 2629
    gen_spr_compress(env);
2618 2630
    /* Memory management */
2631
#if !defined(CONFIG_USER_ONLY)
2619 2632
    env->nb_tlb = 64;
2620 2633
    env->nb_ways = 1;
2621 2634
    env->id_tlbs = 0;
2635
#endif
2622 2636
    init_excp_4xx_softmmu(env);
2623 2637
    env->dcache_line_size = 32;
2624 2638
    env->icache_line_size = 32;
......
2674 2688
    gen_spr_401x2(env);
2675 2689
    gen_spr_compress(env);
2676 2690
    /* Memory management */
2691
#if !defined(CONFIG_USER_ONLY)
2677 2692
    env->nb_tlb = 64;
2678 2693
    env->nb_ways = 1;
2679 2694
    env->id_tlbs = 0;
2695
#endif
2680 2696
    init_excp_4xx_softmmu(env);
2681 2697
    env->dcache_line_size = 32;
2682 2698
    env->icache_line_size = 32;
......
2744 2760
                 &spr_read_generic, &spr_write_generic,
2745 2761
                 0x00000000);
2746 2762
    /* Memory management */
2763
#if !defined(CONFIG_USER_ONLY)
2747 2764
    env->nb_tlb = 64;
2748 2765
    env->nb_ways = 1;
2749 2766
    env->id_tlbs = 0;
2767
#endif
2750 2768
    init_excp_4xx_softmmu(env);
2751 2769
    env->dcache_line_size = 32;
2752 2770
    env->icache_line_size = 32;
......
2785 2803
                 &spr_read_generic, &spr_write_generic,
2786 2804
                 0x00000000);
2787 2805
    /* Memory management */
2806
#if !defined(CONFIG_USER_ONLY)
2788 2807
    env->nb_tlb = 64;
2789 2808
    env->nb_ways = 1;
2790 2809
    env->id_tlbs = 0;
2810
#endif
2791 2811
    init_excp_4xx_softmmu(env);
2792 2812
    env->dcache_line_size = 32;
2793 2813
    env->icache_line_size = 32;
......
2832 2852
                 &spr_read_generic, &spr_write_generic,
2833 2853
                 0x00000000);
2834 2854
    /* Memory management */
2855
#if !defined(CONFIG_USER_ONLY)
2835 2856
    env->nb_tlb = 64;
2836 2857
    env->nb_ways = 1;
2837 2858
    env->id_tlbs = 0;
2859
#endif
2838 2860
    init_excp_BookE(env);
2839 2861
    env->dcache_line_size = 32;
2840 2862
    env->icache_line_size = 32;
......
2860 2882
    gen_spr_BookE(env);
2861 2883
    gen_spr_440(env);
2862 2884
    /* Memory management */
2885
#if !defined(CONFIG_USER_ONLY)
2863 2886
    env->nb_tlb = 64;
2864 2887
    env->nb_ways = 1;
2865 2888
    env->id_tlbs = 0;
2889
#endif
2866 2890
    init_excp_BookE(env);
2867 2891
    env->dcache_line_size = 32;
2868 2892
    env->icache_line_size = 32;
......
2889 2913
    gen_spr_BookE(env);
2890 2914
    gen_spr_440(env);
2891 2915
    /* Memory management */
2916
#if !defined(CONFIG_USER_ONLY)
2892 2917
    env->nb_tlb = 64;
2893 2918
    env->nb_ways = 1;
2894 2919
    env->id_tlbs = 0;
2920
#endif
2895 2921
    init_excp_BookE(env);
2896 2922
    env->dcache_line_size = 32;
2897 2923
    env->icache_line_size = 32;
......
2935 2961
                 &spr_read_generic, &spr_write_generic,
2936 2962
                 0x00000000);
2937 2963
    /* Memory management */
2964
#if !defined(CONFIG_USER_ONLY)
2938 2965
    env->nb_tlb = 64;
2939 2966
    env->nb_ways = 1;
2940 2967
    env->id_tlbs = 0;
2968
#endif
2941 2969
    init_excp_BookE(env);
2942 2970
    env->dcache_line_size = 32;
2943 2971
    env->icache_line_size = 32;
......
2987 3015
                 &spr_read_generic, &spr_write_generic,
2988 3016
                 0x00000000);
2989 3017
    /* Memory management */
3018
#if !defined(CONFIG_USER_ONLY)
2990 3019
    env->nb_tlb = 64;
2991 3020
    env->nb_ways = 1;
2992 3021
    env->id_tlbs = 0;
3022
#endif
2993 3023
    init_excp_BookE(env);
2994 3024
    env->dcache_line_size = 32;
2995 3025
    env->icache_line_size = 32;
......
3042 3072
                 &spr_read_generic, &spr_write_generic,
3043 3073
                 0x00000000);
3044 3074
    /* Memory management */
3075
#if !defined(CONFIG_USER_ONLY)
3045 3076
    env->nb_tlb = 64;
3046 3077
    env->nb_ways = 1;
3047 3078
    env->id_tlbs = 0;
3079
#endif
3048 3080
    init_excp_BookE(env);
3049 3081
    env->dcache_line_size = 32;
3050 3082
    env->icache_line_size = 32;
......
3097 3129
    gen_spr_BookE(env);
3098 3130
    /* Memory management */
3099 3131
    gen_spr_BookE_FSL(env);
3132
#if !defined(CONFIG_USER_ONLY)
3100 3133
    env->nb_tlb = 64;
3101 3134
    env->nb_ways = 1;
3102 3135
    env->id_tlbs = 0;
3136
#endif
3103 3137
    init_excp_BookE(env);
3104 3138
    env->dcache_line_size = 32;
3105 3139
    env->icache_line_size = 32;
......
3167 3201
                 &spr_read_generic, &spr_write_generic,
3168 3202
                 0x00000000);
3169 3203
    /* Memory management */
3204
#if !defined(CONFIG_USER_ONLY)
3170 3205
    env->nb_tlb = 64;
3171 3206
    env->nb_ways = 2;
3172 3207
    env->id_tlbs = 0;
3173
    env->id_tlbs = 0;
3208
#endif
3174 3209
    init_excp_601(env);
3175 3210
    env->dcache_line_size = 64;
3176 3211
    env->icache_line_size = 64;
......
4041 4076
#if !defined(CONFIG_USER_ONLY)
4042 4077
    env->excp_prefix = 0xFFF00000;
4043 4078
#endif
4079
#if !defined(CONFIG_USER_ONLY)
4044 4080
    env->slb_nr = 32;
4081
#endif
4045 4082
    init_excp_970(env);
4046 4083
    env->dcache_line_size = 128;
4047 4084
    env->icache_line_size = 128;
......
4112 4149
#if !defined(CONFIG_USER_ONLY)
4113 4150
    env->excp_prefix = 0xFFF00000;
4114 4151
#endif
4152
#if !defined(CONFIG_USER_ONLY)
4115 4153
    env->slb_nr = 32;
4154
#endif
4116 4155
    init_excp_970(env);
4117 4156
    env->dcache_line_size = 128;
4118 4157
    env->icache_line_size = 128;
......
4183 4222
#if !defined(CONFIG_USER_ONLY)
4184 4223
    env->excp_prefix = 0xFFF00000;
4185 4224
#endif
4225
#if !defined(CONFIG_USER_ONLY)
4186 4226
    env->slb_nr = 32;
4227
#endif
4187 4228
    init_excp_970(env);
4188 4229
    env->dcache_line_size = 128;
4189 4230
    env->icache_line_size = 128;
......
5729 5770
    env->excp_prefix = 0x00000000;
5730 5771
    env->ivor_mask = 0x00000000;
5731 5772
    env->ivpr_mask = 0x00000000;
5732
#endif
5733 5773
    /* Default MMU definitions */
5734 5774
    env->nb_BATs = 0;
5735 5775
    env->nb_tlb = 0;
5736 5776
    env->nb_ways = 0;
5777
#endif
5737 5778
    /* Register SPR common to all PowerPC implementations */
5738 5779
    gen_spr_generic(env);
5739 5780
    spr_register(env, SPR_PVR, "PVR",
......
5743 5784
    /* PowerPC implementation specific initialisations (SPRs, timers, ...) */
5744 5785
    (*def->init_proc)(env);
5745 5786
    /* Allocate TLBs buffer when needed */
5787
#if !defined(CONFIG_USER_ONLY)
5746 5788
    if (env->nb_tlb != 0) {
5747 5789
        int nb_tlb = env->nb_tlb;
5748 5790
        if (env->id_tlbs != 0)
......
5751 5793
        /* Pre-compute some useful values */
5752 5794
        env->tlb_per_way = env->nb_tlb / env->nb_ways;
5753 5795
    }
5754
#if !defined(CONFIG_USER_ONLY)
5755 5796
    if (env->irq_inputs == NULL) {
5756 5797
        fprintf(stderr, "WARNING: no internal IRQ controller registered.\n"
5757 5798
                " Attempt Qemu to crash very soon !\n");
......
6171 6212
        printf("PowerPC %-12s : PVR %08x MSR %016" PRIx64 "\n"
6172 6213
               "    MMU model        : %s\n",
6173 6214
               def->name, def->pvr, def->msr_mask, mmu_model);
6215
#if !defined(CONFIG_USER_ONLY)
6174 6216
        if (env->tlb != NULL) {
6175 6217
            printf("                       %d %s TLB in %d ways\n",
6176 6218
                   env->nb_tlb, env->id_tlbs ? "splitted" : "merged",
6177 6219
                   env->nb_ways);
6178 6220
        }
6221
#endif
6179 6222
        printf("    Exceptions model : %s\n"
6180 6223
               "    Bus model        : %s\n",
6181 6224
               excp_model, bus_model);

Also available in: Unified diff