On 12/9/19 5:41 AM, Peter Maydell wrote: >> case 1: >> - mmu_idx = secure ? ARMMMUIdx_SE1 : ARMMMUIdx_Stage1_E1; >> + if (ri->crm == 9 && (env->uncached_cpsr & CPSR_PAN)) { >> + mmu_idx = secure ? ARMMMUIdx_SE1_PAN : >> ARMMMUIdx_Stage1_E1_PAN; >> + } else { >> + mmu_idx = secure ? ARMMMUIdx_SE1 : ARMMMUIdx_Stage1_E1; >> + } > > This way of writing it is fine, but just to check my understanding: > if the CPSR_PAN bit isn't set, then will a lookup via Idx_SE1_PAN > and a lookup via Idx_SE1 return the same results?
No. > Or do we guarantee that we only use the _PAN versions of the indexes > if the PAN bit is actually active? Yes. We enforce the PAN behaviour based on *_PAN deep within a get_phys_addr_lpae subroutine. See patch 8. r~