target/arm: Move arm_pamax, pamax_map into ptw.c
Signed-off-by: Richard Henderson <richard.henderson@linaro.org> Message-id: 20220604040607.269301-19-richard.henderson@linaro.org Reviewed-by: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
parent
cd6bc4d517
commit
1c73d84807
@ -10814,31 +10814,6 @@ bool check_s2_mmu_setup(ARMCPU *cpu, bool is_aa64, int level,
|
|||||||
}
|
}
|
||||||
#endif /* !CONFIG_USER_ONLY */
|
#endif /* !CONFIG_USER_ONLY */
|
||||||
|
|
||||||
/* This mapping is common between ID_AA64MMFR0.PARANGE and TCR_ELx.{I}PS. */
|
|
||||||
const uint8_t pamax_map[] = {
|
|
||||||
[0] = 32,
|
|
||||||
[1] = 36,
|
|
||||||
[2] = 40,
|
|
||||||
[3] = 42,
|
|
||||||
[4] = 44,
|
|
||||||
[5] = 48,
|
|
||||||
[6] = 52,
|
|
||||||
};
|
|
||||||
|
|
||||||
/* The cpu-specific constant value of PAMax; also used by hw/arm/virt. */
|
|
||||||
unsigned int arm_pamax(ARMCPU *cpu)
|
|
||||||
{
|
|
||||||
unsigned int parange =
|
|
||||||
FIELD_EX64(cpu->isar.id_aa64mmfr0, ID_AA64MMFR0, PARANGE);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* id_aa64mmfr0 is a read-only register so values outside of the
|
|
||||||
* supported mappings can be considered an implementation error.
|
|
||||||
*/
|
|
||||||
assert(parange < ARRAY_SIZE(pamax_map));
|
|
||||||
return pamax_map[parange];
|
|
||||||
}
|
|
||||||
|
|
||||||
int aa64_va_parameter_tbi(uint64_t tcr, ARMMMUIdx mmu_idx)
|
int aa64_va_parameter_tbi(uint64_t tcr, ARMMMUIdx mmu_idx)
|
||||||
{
|
{
|
||||||
if (regime_has_2_ranges(mmu_idx)) {
|
if (regime_has_2_ranges(mmu_idx)) {
|
||||||
|
@ -23,6 +23,31 @@ static bool get_phys_addr_lpae(CPUARMState *env, uint64_t address,
|
|||||||
ARMMMUFaultInfo *fi, ARMCacheAttrs *cacheattrs)
|
ARMMMUFaultInfo *fi, ARMCacheAttrs *cacheattrs)
|
||||||
__attribute__((nonnull));
|
__attribute__((nonnull));
|
||||||
|
|
||||||
|
/* This mapping is common between ID_AA64MMFR0.PARANGE and TCR_ELx.{I}PS. */
|
||||||
|
static const uint8_t pamax_map[] = {
|
||||||
|
[0] = 32,
|
||||||
|
[1] = 36,
|
||||||
|
[2] = 40,
|
||||||
|
[3] = 42,
|
||||||
|
[4] = 44,
|
||||||
|
[5] = 48,
|
||||||
|
[6] = 52,
|
||||||
|
};
|
||||||
|
|
||||||
|
/* The cpu-specific constant value of PAMax; also used by hw/arm/virt. */
|
||||||
|
unsigned int arm_pamax(ARMCPU *cpu)
|
||||||
|
{
|
||||||
|
unsigned int parange =
|
||||||
|
FIELD_EX64(cpu->isar.id_aa64mmfr0, ID_AA64MMFR0, PARANGE);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* id_aa64mmfr0 is a read-only register so values outside of the
|
||||||
|
* supported mappings can be considered an implementation error.
|
||||||
|
*/
|
||||||
|
assert(parange < ARRAY_SIZE(pamax_map));
|
||||||
|
return pamax_map[parange];
|
||||||
|
}
|
||||||
|
|
||||||
static bool regime_translation_big_endian(CPUARMState *env, ARMMMUIdx mmu_idx)
|
static bool regime_translation_big_endian(CPUARMState *env, ARMMMUIdx mmu_idx)
|
||||||
{
|
{
|
||||||
return (regime_sctlr(env, mmu_idx) & SCTLR_EE) != 0;
|
return (regime_sctlr(env, mmu_idx) & SCTLR_EE) != 0;
|
||||||
|
@ -11,8 +11,6 @@
|
|||||||
|
|
||||||
#ifndef CONFIG_USER_ONLY
|
#ifndef CONFIG_USER_ONLY
|
||||||
|
|
||||||
extern const uint8_t pamax_map[7];
|
|
||||||
|
|
||||||
bool regime_is_user(CPUARMState *env, ARMMMUIdx mmu_idx);
|
bool regime_is_user(CPUARMState *env, ARMMMUIdx mmu_idx);
|
||||||
bool regime_translation_disabled(CPUARMState *env, ARMMMUIdx mmu_idx);
|
bool regime_translation_disabled(CPUARMState *env, ARMMMUIdx mmu_idx);
|
||||||
uint64_t regime_ttbr(CPUARMState *env, ARMMMUIdx mmu_idx, int ttbrn);
|
uint64_t regime_ttbr(CPUARMState *env, ARMMMUIdx mmu_idx, int ttbrn);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user