[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v3 05/17] target/arm: Pass outputsize down to check_s2_mmu_setup
From: |
Richard Henderson |
Subject: |
[PATCH v3 05/17] target/arm: Pass outputsize down to check_s2_mmu_setup |
Date: |
Wed, 23 Feb 2022 12:31:25 -1000 |
Pass down the width of the output address from translation.
For now this is still just PAMax, but a subsequent patch will
compute the correct value from TCR_ELx.{I}PS.
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
target/arm/helper.c | 21 ++++++++++-----------
1 file changed, 10 insertions(+), 11 deletions(-)
diff --git a/target/arm/helper.c b/target/arm/helper.c
index 71e575f352..431b0c1405 100644
--- a/target/arm/helper.c
+++ b/target/arm/helper.c
@@ -11065,7 +11065,7 @@ do_fault:
* false otherwise.
*/
static bool check_s2_mmu_setup(ARMCPU *cpu, bool is_aa64, int level,
- int inputsize, int stride)
+ int inputsize, int stride, int outputsize)
{
const int grainsize = stride + 3;
int startsizecheck;
@@ -11081,22 +11081,19 @@ static bool check_s2_mmu_setup(ARMCPU *cpu, bool
is_aa64, int level,
}
if (is_aa64) {
- CPUARMState *env = &cpu->env;
- unsigned int pamax = arm_pamax(cpu);
-
switch (stride) {
case 13: /* 64KB Pages. */
- if (level == 0 || (level == 1 && pamax <= 42)) {
+ if (level == 0 || (level == 1 && outputsize <= 42)) {
return false;
}
break;
case 11: /* 16KB Pages. */
- if (level == 0 || (level == 1 && pamax <= 40)) {
+ if (level == 0 || (level == 1 && outputsize <= 40)) {
return false;
}
break;
case 9: /* 4KB Pages. */
- if (level == 0 && pamax <= 42) {
+ if (level == 0 && outputsize <= 42) {
return false;
}
break;
@@ -11105,8 +11102,8 @@ static bool check_s2_mmu_setup(ARMCPU *cpu, bool
is_aa64, int level,
}
/* Inputsize checks. */
- if (inputsize > pamax &&
- (arm_el_is_aa64(env, 1) || inputsize > 40)) {
+ if (inputsize > outputsize &&
+ (arm_el_is_aa64(&cpu->env, 1) || inputsize > 40)) {
/* This is CONSTRAINED UNPREDICTABLE and we choose to fault. */
return false;
}
@@ -11392,7 +11389,7 @@ static bool get_phys_addr_lpae(CPUARMState *env,
uint64_t address,
target_ulong page_size;
uint32_t attrs;
int32_t stride;
- int addrsize, inputsize;
+ int addrsize, inputsize, outputsize;
TCR *tcr = regime_tcr(env, mmu_idx);
int ap, ns, xn, pxn;
uint32_t el = regime_el(env, mmu_idx);
@@ -11422,11 +11419,13 @@ static bool get_phys_addr_lpae(CPUARMState *env,
uint64_t address,
addrsize = 64 - 8 * param.tbi;
inputsize = 64 - param.tsz;
+ outputsize = arm_pamax(cpu);
} else {
param = aa32_va_parameters(env, address, mmu_idx);
level = 1;
addrsize = (mmu_idx == ARMMMUIdx_Stage2 ? 40 : 32);
inputsize = addrsize - param.tsz;
+ outputsize = 40;
}
/*
@@ -11511,7 +11510,7 @@ static bool get_phys_addr_lpae(CPUARMState *env,
uint64_t address,
/* Check that the starting level is valid. */
ok = check_s2_mmu_setup(cpu, aarch64, startlevel,
- inputsize, stride);
+ inputsize, stride, outputsize);
if (!ok) {
fault_type = ARMFault_Translation;
goto do_fault;
--
2.25.1
- [PATCH v3 00/17] target/arm: Implement LVA, LPA, LPA2 features, Richard Henderson, 2022/02/23
- [PATCH v3 01/17] hw/registerfields: Add FIELD_SEX<N> and FIELD_SDP<N>, Richard Henderson, 2022/02/23
- [PATCH v3 02/17] target/arm: Set TCR_EL1.TSZ for user-only, Richard Henderson, 2022/02/23
- [PATCH v3 03/17] target/arm: Fault on invalid TCR_ELx.TxSZ, Richard Henderson, 2022/02/23
- [PATCH v3 04/17] target/arm: Move arm_pamax out of line, Richard Henderson, 2022/02/23
- [PATCH v3 05/17] target/arm: Pass outputsize down to check_s2_mmu_setup,
Richard Henderson <=
- [PATCH v3 06/17] target/arm: Use MAKE_64BIT_MASK to compute indexmask, Richard Henderson, 2022/02/23
- [PATCH v3 07/17] target/arm: Honor TCR_ELx.{I}PS, Richard Henderson, 2022/02/23
- [PATCH v3 08/17] target/arm: Prepare DBGBVR and DBGWVR for FEAT_LVA, Richard Henderson, 2022/02/23
- [PATCH v3 12/17] target/arm: Introduce tlbi_aa64_get_range, Richard Henderson, 2022/02/23
- [PATCH v3 09/17] target/arm: Implement FEAT_LVA, Richard Henderson, 2022/02/23
- [PATCH v3 10/17] target/arm: Implement FEAT_LPA, Richard Henderson, 2022/02/23
- [PATCH v3 14/17] target/arm: Validate tlbi TG matches translation granule in use, Richard Henderson, 2022/02/23
- [PATCH v3 11/17] target/arm: Extend arm_fi_to_lfsc to level -1, Richard Henderson, 2022/02/23
- [PATCH v3 13/17] target/arm: Fix TLBIRange.base for 16k and 64k pages, Richard Henderson, 2022/02/23
- [PATCH v3 15/17] target/arm: Advertise all page sizes for -cpu max, Richard Henderson, 2022/02/23