Revision c19148bd target-sparc/helper.c

b/target-sparc/helper.c
48 48
    uint32_t mmu_trcr_mask;
49 49
    uint32_t features;
50 50
    uint32_t nwindows;
51
    uint32_t maxtl;
51 52
};
52 53

  
53 54
static int cpu_sparc_find_by_name(sparc_def_t *cpu_def, const char *cpu_model);
......
738 739
    }
739 740
#endif
740 741
#if !defined(CONFIG_USER_ONLY)
741
    if (env->tl == MAXTL) {
742
        cpu_abort(env, "Trap 0x%04x while trap level is MAXTL, Error state",
743
                  env->exception_index);
742
    if (env->tl >= env->maxtl) {
743
        cpu_abort(env, "Trap 0x%04x while trap level (%d) >= MAXTL (%d),"
744
                  " Error state", env->exception_index, env->tl, env->maxtl);
744 745
        return;
745 746
    }
746 747
#endif
747
    if (env->tl < MAXTL - 1) {
748
    if (env->tl < env->maxtl - 1) {
748 749
        env->tl++;
749 750
    } else {
750 751
        env->pstate |= PS_RED;
751
        if (env->tl != MAXTL)
752
        if (env->tl < env->maxtl)
752 753
            env->tl++;
753 754
    }
754
    env->tsptr = &env->ts[env->tl];
755
    env->tsptr = &env->ts[env->tl & MAXTL_MASK];
755 756
    env->tsptr->tstate = ((uint64_t)GET_CCR(env) << 32) |
756 757
        ((env->asi & 0xff) << 24) | ((env->pstate & 0xf3f) << 8) |
757 758
        GET_CWP64(env);
......
918 919
    env->pstate = PS_PRIV;
919 920
    env->hpstate = HS_PRIV;
920 921
    env->pc = 0x1fff0000020ULL; // XXX should be different for system_reset
921
    env->tsptr = &env->ts[env->tl];
922
    env->tsptr = &env->ts[env->tl & MAXTL_MASK];
922 923
#else
923 924
    env->pc = 0;
924 925
    env->mmuregs[0] &= ~(MMU_E | MMU_NF);
......
950 951
    cpu_sparc_set_id(env, 0);
951 952
#else
952 953
    env->mmu_version = def->mmu_version;
954
    env->maxtl = def->maxtl;
955
    env->version |= def->maxtl << 8;
953 956
    env->version |= def->nwindows - 1;
954 957
#endif
955 958
    return 0;
......
991 994
#ifdef TARGET_SPARC64
992 995
    {
993 996
        .name = "Fujitsu Sparc64",
994
        .iu_version = ((0x04ULL << 48) | (0x02ULL << 32) | (0ULL << 24)
995
                       | (MAXTL << 8)),
997
        .iu_version = ((0x04ULL << 48) | (0x02ULL << 32) | (0ULL << 24)),
996 998
        .fpu_version = 0x00000000,
997 999
        .mmu_version = mmu_us_12,
998 1000
        .nwindows = 4,
1001
        .maxtl = 4,
999 1002
        .features = CPU_DEFAULT_FEATURES,
1000 1003
    },
1001 1004
    {
1002 1005
        .name = "Fujitsu Sparc64 III",
1003
        .iu_version = ((0x04ULL << 48) | (0x03ULL << 32) | (0ULL << 24)
1004
                       | (MAXTL << 8)),
1006
        .iu_version = ((0x04ULL << 48) | (0x03ULL << 32) | (0ULL << 24)),
1005 1007
        .fpu_version = 0x00000000,
1006 1008
        .mmu_version = mmu_us_12,
1007 1009
        .nwindows = 5,
1010
        .maxtl = 4,
1008 1011
        .features = CPU_DEFAULT_FEATURES,
1009 1012
    },
1010 1013
    {
1011 1014
        .name = "Fujitsu Sparc64 IV",
1012
        .iu_version = ((0x04ULL << 48) | (0x04ULL << 32) | (0ULL << 24)
1013
                       | (MAXTL << 8)),
1015
        .iu_version = ((0x04ULL << 48) | (0x04ULL << 32) | (0ULL << 24)),
1014 1016
        .fpu_version = 0x00000000,
1015 1017
        .mmu_version = mmu_us_12,
1016 1018
        .nwindows = 8,
1019
        .maxtl = 5,
1017 1020
        .features = CPU_DEFAULT_FEATURES,
1018 1021
    },
1019 1022
    {
1020 1023
        .name = "Fujitsu Sparc64 V",
1021
        .iu_version = ((0x04ULL << 48) | (0x05ULL << 32) | (0x51ULL << 24)
1022
                       | (MAXTL << 8)),
1024
        .iu_version = ((0x04ULL << 48) | (0x05ULL << 32) | (0x51ULL << 24)),
1023 1025
        .fpu_version = 0x00000000,
1024 1026
        .mmu_version = mmu_us_12,
1025 1027
        .nwindows = 8,
1028
        .maxtl = 5,
1026 1029
        .features = CPU_DEFAULT_FEATURES,
1027 1030
    },
1028 1031
    {
1029 1032
        .name = "TI UltraSparc I",
1030
        .iu_version = ((0x17ULL << 48) | (0x10ULL << 32) | (0x40ULL << 24)
1031
                       | (MAXTL << 8)),
1033
        .iu_version = ((0x17ULL << 48) | (0x10ULL << 32) | (0x40ULL << 24)),
1032 1034
        .fpu_version = 0x00000000,
1033 1035
        .mmu_version = mmu_us_12,
1034 1036
        .nwindows = 8,
1037
        .maxtl = 5,
1035 1038
        .features = CPU_DEFAULT_FEATURES,
1036 1039
    },
1037 1040
    {
1038 1041
        .name = "TI UltraSparc II",
1039
        .iu_version = ((0x17ULL << 48) | (0x11ULL << 32) | (0x20ULL << 24)
1040
                       | (MAXTL << 8)),
1042
        .iu_version = ((0x17ULL << 48) | (0x11ULL << 32) | (0x20ULL << 24)),
1041 1043
        .fpu_version = 0x00000000,
1042 1044
        .mmu_version = mmu_us_12,
1043 1045
        .nwindows = 8,
1046
        .maxtl = 5,
1044 1047
        .features = CPU_DEFAULT_FEATURES,
1045 1048
    },
1046 1049
    {
1047 1050
        .name = "TI UltraSparc IIi",
1048
        .iu_version = ((0x17ULL << 48) | (0x12ULL << 32) | (0x91ULL << 24)
1049
                       | (MAXTL << 8)),
1051
        .iu_version = ((0x17ULL << 48) | (0x12ULL << 32) | (0x91ULL << 24)),
1050 1052
        .fpu_version = 0x00000000,
1051 1053
        .mmu_version = mmu_us_12,
1052 1054
        .nwindows = 8,
1055
        .maxtl = 5,
1053 1056
        .features = CPU_DEFAULT_FEATURES,
1054 1057
    },
1055 1058
    {
1056 1059
        .name = "TI UltraSparc IIe",
1057
        .iu_version = ((0x17ULL << 48) | (0x13ULL << 32) | (0x14ULL << 24)
1058
                       | (MAXTL << 8)),
1060
        .iu_version = ((0x17ULL << 48) | (0x13ULL << 32) | (0x14ULL << 24)),
1059 1061
        .fpu_version = 0x00000000,
1060 1062
        .mmu_version = mmu_us_12,
1061 1063
        .nwindows = 8,
1064
        .maxtl = 5,
1062 1065
        .features = CPU_DEFAULT_FEATURES,
1063 1066
    },
1064 1067
    {
1065 1068
        .name = "Sun UltraSparc III",
1066
        .iu_version = ((0x3eULL << 48) | (0x14ULL << 32) | (0x34ULL << 24)
1067
                       | (MAXTL << 8)),
1069
        .iu_version = ((0x3eULL << 48) | (0x14ULL << 32) | (0x34ULL << 24)),
1068 1070
        .fpu_version = 0x00000000,
1069 1071
        .mmu_version = mmu_us_12,
1070 1072
        .nwindows = 8,
1073
        .maxtl = 5,
1071 1074
        .features = CPU_DEFAULT_FEATURES,
1072 1075
    },
1073 1076
    {
1074 1077
        .name = "Sun UltraSparc III Cu",
1075
        .iu_version = ((0x3eULL << 48) | (0x15ULL << 32) | (0x41ULL << 24)
1076
                       | (MAXTL << 8)),
1078
        .iu_version = ((0x3eULL << 48) | (0x15ULL << 32) | (0x41ULL << 24)),
1077 1079
        .fpu_version = 0x00000000,
1078 1080
        .mmu_version = mmu_us_3,
1079 1081
        .nwindows = 8,
1082
        .maxtl = 5,
1080 1083
        .features = CPU_DEFAULT_FEATURES,
1081 1084
    },
1082 1085
    {
1083 1086
        .name = "Sun UltraSparc IIIi",
1084
        .iu_version = ((0x3eULL << 48) | (0x16ULL << 32) | (0x34ULL << 24)
1085
                       | (MAXTL << 8)),
1087
        .iu_version = ((0x3eULL << 48) | (0x16ULL << 32) | (0x34ULL << 24)),
1086 1088
        .fpu_version = 0x00000000,
1087 1089
        .mmu_version = mmu_us_12,
1088 1090
        .nwindows = 8,
1091
        .maxtl = 5,
1089 1092
        .features = CPU_DEFAULT_FEATURES,
1090 1093
    },
1091 1094
    {
1092 1095
        .name = "Sun UltraSparc IV",
1093
        .iu_version = ((0x3eULL << 48) | (0x18ULL << 32) | (0x31ULL << 24)
1094
                       | (MAXTL << 8)),
1096
        .iu_version = ((0x3eULL << 48) | (0x18ULL << 32) | (0x31ULL << 24)),
1095 1097
        .fpu_version = 0x00000000,
1096 1098
        .mmu_version = mmu_us_4,
1097 1099
        .nwindows = 8,
1100
        .maxtl = 5,
1098 1101
        .features = CPU_DEFAULT_FEATURES,
1099 1102
    },
1100 1103
    {
1101 1104
        .name = "Sun UltraSparc IV+",
1102
        .iu_version = ((0x3eULL << 48) | (0x19ULL << 32) | (0x22ULL << 24)
1103
                       | (MAXTL << 8)),
1105
        .iu_version = ((0x3eULL << 48) | (0x19ULL << 32) | (0x22ULL << 24)),
1104 1106
        .fpu_version = 0x00000000,
1105 1107
        .mmu_version = mmu_us_12,
1106 1108
        .nwindows = 8,
1109
        .maxtl = 5,
1107 1110
        .features = CPU_DEFAULT_FEATURES | CPU_FEATURE_CMT,
1108 1111
    },
1109 1112
    {
1110 1113
        .name = "Sun UltraSparc IIIi+",
1111
        .iu_version = ((0x3eULL << 48) | (0x22ULL << 32) | (0ULL << 24)
1112
                       | (MAXTL << 8)),
1114
        .iu_version = ((0x3eULL << 48) | (0x22ULL << 32) | (0ULL << 24)),
1113 1115
        .fpu_version = 0x00000000,
1114 1116
        .mmu_version = mmu_us_3,
1115 1117
        .nwindows = 8,
1118
        .maxtl = 5,
1116 1119
        .features = CPU_DEFAULT_FEATURES,
1117 1120
    },
1118 1121
    {
1119 1122
        .name = "Sun UltraSparc T1",
1120 1123
        // defined in sparc_ifu_fdp.v and ctu.h
1121
        .iu_version = ((0x3eULL << 48) | (0x23ULL << 32) | (0x02ULL << 24)
1122
                       | (MAXTL << 8)),
1124
        .iu_version = ((0x3eULL << 48) | (0x23ULL << 32) | (0x02ULL << 24)),
1123 1125
        .fpu_version = 0x00000000,
1124 1126
        .mmu_version = mmu_sun4v,
1125 1127
        .nwindows = 8,
1128
        .maxtl = 6,
1126 1129
        .features = CPU_DEFAULT_FEATURES | CPU_FEATURE_HYPV | CPU_FEATURE_CMT
1127 1130
        | CPU_FEATURE_GL,
1128 1131
    },
1129 1132
    {
1130 1133
        .name = "Sun UltraSparc T2",
1131 1134
        // defined in tlu_asi_ctl.v and n2_revid_cust.v
1132
        .iu_version = ((0x3eULL << 48) | (0x24ULL << 32) | (0x02ULL << 24)
1133
                       | (MAXTL << 8)),
1135
        .iu_version = ((0x3eULL << 48) | (0x24ULL << 32) | (0x02ULL << 24)),
1134 1136
        .fpu_version = 0x00000000,
1135 1137
        .mmu_version = mmu_sun4v,
1136 1138
        .nwindows = 8,
1139
        .maxtl = 6,
1137 1140
        .features = CPU_DEFAULT_FEATURES | CPU_FEATURE_HYPV | CPU_FEATURE_CMT
1138 1141
        | CPU_FEATURE_GL,
1139 1142
    },
1140 1143
    {
1141 1144
        .name = "NEC UltraSparc I",
1142
        .iu_version = ((0x22ULL << 48) | (0x10ULL << 32) | (0x40ULL << 24)
1143
                       | (MAXTL << 8)),
1145
        .iu_version = ((0x22ULL << 48) | (0x10ULL << 32) | (0x40ULL << 24)),
1144 1146
        .fpu_version = 0x00000000,
1145 1147
        .mmu_version = mmu_us_12,
1146 1148
        .nwindows = 8,
1149
        .maxtl = 5,
1147 1150
        .features = CPU_DEFAULT_FEATURES,
1148 1151
    },
1149 1152
#else

Also available in: Unified diff