On 27.07.21 11:38, Dongjiu Geng wrote: > Jan Kiszka <[email protected]> 于2021年7月26日周一 下午10:29写道: >> >> On 26.07.21 14:45, Dongjiu Geng wrote: >>> Jan Kiszka <[email protected]> 于2021年7月26日周一 下午6:22写道: >>>> >>>> On 26.07.21 12:05, Dongjiu Geng wrote: >>>>> According to spec, the {I}PS should be never larger >>>>> than the CPU hardware implemented physical address >>>>> size(ID_AA64MMFR0_EL1.PARange). Otherwise, it >>>>> may lead to some unexpected issues. >>>>> >>>>> we can refer to DDI0487G_a_armv8_arm's description below: >>>>> If {I}PS is programmed to a value larger than the >>>>> implemented PA size, then the PE behaves as if programmed >>>>> with the implemented PA size, but software must not rely >>>>> on this behavior. That is, the output address size is never >>>>> largerthan the implemented PA size. >>>>> >>>>> Signed-off-by: Dongjiu Geng <[email protected]> >>>>> --- >>>>> DDI0487G_a_armv8_arm: Physical address size implementation options >>>>> ID_AA64MMFR0_EL1.PARange Total PA size PA address size >>>>> 0000 4GB 32 bits, PA[31:0] >>>>> 0001 64GB 36 bits, PA[35:0] >>>>> 0010 1TB 40 bits, PA[39:0] >>>>> 0011 4TB 42 bits, PA[41:0] >>>>> 0100 16TB 44 bits, PA[43:0] >>>>> 0101 256TB 48 bits, PA[47:0] >>>>> 0110 4PB 52 bits, PA[51:0] >>>>> --- >>>>> hypervisor/arch/arm64/entry.S | 14 +++++++++++++- >>>>> hypervisor/arch/arm64/include/asm/paging.h | 5 +++++ >>>>> 2 files changed, 18 insertions(+), 1 deletion(-) >>>>> >>>>> diff --git a/hypervisor/arch/arm64/entry.S b/hypervisor/arch/arm64/entry.S >>>>> index 3f4ee871..99738f28 100644 >>>>> --- a/hypervisor/arch/arm64/entry.S >>>>> +++ b/hypervisor/arch/arm64/entry.S >>>>> @@ -388,6 +388,16 @@ el1_trap: >>>>> isb >>>>> .endm >>>>> >>>>> +/* >>>>> + * set TCR.(I)PS to the highest supported ID_AA64MMFR0_EL1.PARange value >>>>> + */ >>>>> +.macro tcr_compute_pa_size, tcr >>>>> + mrs x9, id_aa64mmfr0_el1 >>>>> + // Narrow PARange to fit the PS field in TCR_ELx >>>>> + ubfx x9, x9, #ID_AA64MMFR0_PARANGE_SHIFT, #3 >>>>> + bfi \tcr, x9, #TCR_PS_SHIFT, #3 >>>>> +.endm >>>>> + >>>> >>>> Why a macro, why not inlined? >>> >>> Thanks very much for your point out, yes, It's best to inline rather >>> than macro definitions >>> >>>> >>>>> /* >>>>> * These are the default vectors. They are used on early startup and if >>>>> no >>>>> * Spectre v2 mitigation is available. >>>>> @@ -460,8 +470,10 @@ enable_mmu_el2: >>>>> ldr x1, =(T0SZ(48) | (TCR_RGN_WB_WA << TCR_IRGN0_SHIFT) \ >>>>> | (TCR_RGN_WB_WA << TCR_ORGN0_SHIFT) \ >>>>> | (TCR_INNER_SHAREABLE << TCR_SH0_SHIFT) \ >>>>> - | (PARANGE_48B << TCR_PS_SHIFT) \ >>>>> | TCR_EL2_RES1) >>>>> + >>>>> + tcr_compute_pa_size x1 >>>>> + >>>> >>>> So this is aiming at devices that have less than 48 bits parange, right? >>>> Did you stumble over such a hardware? Or is this rather about devices >>>> having more than 48 bits? Sorry, still trying to understand the details. >>> >>> Yes, I have a board with ARMv8 Cortex-A53 CPU, the Cortex-A53 CPU only >>> supports 40 bits[1], >>> not 48 bits。 And even some ARMv8 CPU support 53 bits parange, also not 48 >>> bits. >>> >> >> But the problem is around parange < 48, right? >> >>> >>> [1] >>> https://montcs.bloomu.edu/Information/RaspberryPi-ARMv8/technical-reference-manual.DDI0500J_cortex_a53_trm.pdf >>> Table 4-56 ID_AA64MMFR0_EL1 bit assignments >>> >>> [3:0] PARange Physical address range supported: >>> 0b0010 40 bits, 1 TB. >>> >> >> OK - but the raspi was apparently still working, although out of spec. >> Or did you see something breaking? Looking for a classification of this >> issue ("ugly, but we were lucky so far" vs. "never worked with X / when >> doing Y"). > > ugly, but we were lucky so far, it was still working, The reason is > that the CPU will ignore this configured value if this configured > value is larger than the CPU supported, but software must not rely. > We can refer to Linux kernel code that sets the TCR.{I}PS according > to ID_AA64MMFR0_EL1.PARange. > > I found this mismatch issue when I was debugging, and think it is > better not using hard coded to set it, so change it. >
I don't disagree. Awaiting v2 of your patch. Thanks, Jan -- Siemens AG, T RDA IOT Corporate Competence Center Embedded Linux -- You received this message because you are subscribed to the Google Groups "Jailhouse" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/jailhouse-dev/417abc6d-42e5-61ff-1b7f-cdcf8775b609%40siemens.com.
