mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-09 02:24:58 -06:00
target/arm: Decode TBID from TCR
Use TBID in aa64_va_parameters depending on the data parameter. This automatically updates all existing users of the function. Signed-off-by: Richard Henderson <richard.henderson@linaro.org> Reviewed-by: Peter Maydell <peter.maydell@linaro.org> Message-id: 20190108223129.5570-23-richard.henderson@linaro.org Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
parent
e737ed2ad8
commit
8220af7e4d
2 changed files with 12 additions and 3 deletions
|
@ -9749,7 +9749,7 @@ ARMVAParameters aa64_va_parameters_both(CPUARMState *env, uint64_t va,
|
||||||
{
|
{
|
||||||
uint64_t tcr = regime_tcr(env, mmu_idx)->raw_tcr;
|
uint64_t tcr = regime_tcr(env, mmu_idx)->raw_tcr;
|
||||||
uint32_t el = regime_el(env, mmu_idx);
|
uint32_t el = regime_el(env, mmu_idx);
|
||||||
bool tbi, epd, hpd, using16k, using64k;
|
bool tbi, tbid, epd, hpd, using16k, using64k;
|
||||||
int select, tsz;
|
int select, tsz;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -9764,10 +9764,11 @@ ARMVAParameters aa64_va_parameters_both(CPUARMState *env, uint64_t va,
|
||||||
using16k = extract32(tcr, 15, 1);
|
using16k = extract32(tcr, 15, 1);
|
||||||
if (mmu_idx == ARMMMUIdx_S2NS) {
|
if (mmu_idx == ARMMMUIdx_S2NS) {
|
||||||
/* VTCR_EL2 */
|
/* VTCR_EL2 */
|
||||||
tbi = hpd = false;
|
tbi = tbid = hpd = false;
|
||||||
} else {
|
} else {
|
||||||
tbi = extract32(tcr, 20, 1);
|
tbi = extract32(tcr, 20, 1);
|
||||||
hpd = extract32(tcr, 24, 1);
|
hpd = extract32(tcr, 24, 1);
|
||||||
|
tbid = extract32(tcr, 29, 1);
|
||||||
}
|
}
|
||||||
epd = false;
|
epd = false;
|
||||||
} else if (!select) {
|
} else if (!select) {
|
||||||
|
@ -9777,6 +9778,7 @@ ARMVAParameters aa64_va_parameters_both(CPUARMState *env, uint64_t va,
|
||||||
using16k = extract32(tcr, 15, 1);
|
using16k = extract32(tcr, 15, 1);
|
||||||
tbi = extract64(tcr, 37, 1);
|
tbi = extract64(tcr, 37, 1);
|
||||||
hpd = extract64(tcr, 41, 1);
|
hpd = extract64(tcr, 41, 1);
|
||||||
|
tbid = extract64(tcr, 51, 1);
|
||||||
} else {
|
} else {
|
||||||
int tg = extract32(tcr, 30, 2);
|
int tg = extract32(tcr, 30, 2);
|
||||||
using16k = tg == 1;
|
using16k = tg == 1;
|
||||||
|
@ -9785,6 +9787,7 @@ ARMVAParameters aa64_va_parameters_both(CPUARMState *env, uint64_t va,
|
||||||
epd = extract32(tcr, 23, 1);
|
epd = extract32(tcr, 23, 1);
|
||||||
tbi = extract64(tcr, 38, 1);
|
tbi = extract64(tcr, 38, 1);
|
||||||
hpd = extract64(tcr, 42, 1);
|
hpd = extract64(tcr, 42, 1);
|
||||||
|
tbid = extract64(tcr, 52, 1);
|
||||||
}
|
}
|
||||||
tsz = MIN(tsz, 39); /* TODO: ARMv8.4-TTST */
|
tsz = MIN(tsz, 39); /* TODO: ARMv8.4-TTST */
|
||||||
tsz = MAX(tsz, 16); /* TODO: ARMv8.2-LVA */
|
tsz = MAX(tsz, 16); /* TODO: ARMv8.2-LVA */
|
||||||
|
@ -9793,6 +9796,7 @@ ARMVAParameters aa64_va_parameters_both(CPUARMState *env, uint64_t va,
|
||||||
.tsz = tsz,
|
.tsz = tsz,
|
||||||
.select = select,
|
.select = select,
|
||||||
.tbi = tbi,
|
.tbi = tbi,
|
||||||
|
.tbid = tbid,
|
||||||
.epd = epd,
|
.epd = epd,
|
||||||
.hpd = hpd,
|
.hpd = hpd,
|
||||||
.using16k = using16k,
|
.using16k = using16k,
|
||||||
|
@ -9803,7 +9807,11 @@ ARMVAParameters aa64_va_parameters_both(CPUARMState *env, uint64_t va,
|
||||||
ARMVAParameters aa64_va_parameters(CPUARMState *env, uint64_t va,
|
ARMVAParameters aa64_va_parameters(CPUARMState *env, uint64_t va,
|
||||||
ARMMMUIdx mmu_idx, bool data)
|
ARMMMUIdx mmu_idx, bool data)
|
||||||
{
|
{
|
||||||
return aa64_va_parameters_both(env, va, mmu_idx);
|
ARMVAParameters ret = aa64_va_parameters_both(env, va, mmu_idx);
|
||||||
|
|
||||||
|
/* Present TBI as a composite with TBID. */
|
||||||
|
ret.tbi &= (data || !ret.tbid);
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static ARMVAParameters aa32_va_parameters(CPUARMState *env, uint32_t va,
|
static ARMVAParameters aa32_va_parameters(CPUARMState *env, uint32_t va,
|
||||||
|
|
|
@ -950,6 +950,7 @@ typedef struct ARMVAParameters {
|
||||||
unsigned tsz : 8;
|
unsigned tsz : 8;
|
||||||
unsigned select : 1;
|
unsigned select : 1;
|
||||||
bool tbi : 1;
|
bool tbi : 1;
|
||||||
|
bool tbid : 1;
|
||||||
bool epd : 1;
|
bool epd : 1;
|
||||||
bool hpd : 1;
|
bool hpd : 1;
|
||||||
bool using16k : 1;
|
bool using16k : 1;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue