On 07/04/2025 16:34, Luca Fancellu wrote:
>
>
> Hi Ayan,
>
>
>> On 7 Apr 2025, at 15:29, Ayan Kumar Halder <ayank...@amd.com> wrote:
>>
>> Hi Luca,
>>
>> On 04/04/2025 10:06, Luca Fancellu wrote:
>>> Hi Ayan,
>>>
>>>> On 3 Apr 2025, at 18:12, Ayan Kumar Halder <ayan.kumar.hal...@amd.com>
>>>> wrote:
>>>>
>>>> Added a new file prepare_xen_region.inc to hold the common earlyboot MPU
>>>> regions
>>>> configurations across arm64 and arm32.
>>>>
>>>> prepare_xen_region, fail_insufficient_regions() will be used by both arm32
>>>> and
>>>> arm64. Thus, they have been moved to prepare_xen_region.inc.
>>>>
>>>> enable_secondary_cpu_mm() is a stub which is moved to
>>>> prepare_xen_region.inc as
>>>> SMP is currently not supported for MPU.
>>>>
>>>> *_PRBAR are moved to arm64/sysregs.h.
>>>> *_PRLAR are moved to prepare_xen_region.inc as they are common between
>>>> arm32
>>>> and arm64.
>>>>
>>>> Introduce WRITE_SYSREG_ASM to write to the system registers from the
>>>> common asm
>>>> file.
>>>>
>>>> Signed-off-by: Ayan Kumar Halder <ayan.kumar.hal...@amd.com>
>>>> ---
>>> The split for the common code seems ok to me, but this patch is introducing
>>> an issue for the arm64 compilation,
>> Sorry, I moved something at the last moment without testing. :(
>>> I’ve done an experiment and with these changes I’m able to compile both,
>>> but feel free to ignore if it’s no what you
>>> had in mind.
>> The change looks good. However, ...
>>>
>>> diff --git a/xen/arch/arm/include/asm/arm32/sysregs.h
>>> b/xen/arch/arm/include/asm/arm32/sysregs.h
>>> index 22871999afb3..a90d1610a155 100644
>>> --- a/xen/arch/arm/include/asm/arm32/sysregs.h
>>> +++ b/xen/arch/arm/include/asm/arm32/sysregs.h
>>> @@ -20,6 +20,13 @@
>>> * uses r0 as a placeholder register. */
>>> #define CMD_CP32(name...) "mcr " __stringify(CP32(r0, name)) ";"
>>> +#define REGION_TEXT_PRBAR 0x18 /* SH=11 AP=10 XN=0 */
>>> +#define REGION_RO_PRBAR 0x1D /* SH=11 AP=10 XN=1 */
>>> +#define REGION_DATA_PRBAR 0x19 /* SH=11 AP=00 XN=1 */
>>> +#define REGION_DEVICE_PRBAR 0x11 /* SH=10 AP=00 XN=1 */
>>> +
>>> +#define WRITE_SYSREG_ASM(v, name) mcr CP32(v, name)
>>> +
>>> #ifndef __ASSEMBLY__
>>> /* C wrappers */
>>> diff --git a/xen/arch/arm/include/asm/cpregs.h
>>> b/xen/arch/arm/include/asm/cpregs.h
>>> index 6019a2cbdd89..b909adc102a5 100644
>>> --- a/xen/arch/arm/include/asm/cpregs.h
>>> +++ b/xen/arch/arm/include/asm/cpregs.h
>>> @@ -1,10 +1,6 @@
>>> #ifndef __ASM_ARM_CPREGS_H
>>> #define __ASM_ARM_CPREGS_H
>>> -#ifdef CONFIG_MPU
>>> -#include <asm/mpu/cpregs.h>
>>> -#endif
>>> -
>>> /*
>>> * AArch32 Co-processor registers.
>>> *
>>> @@ -502,6 +498,12 @@
>>> #define MVFR0_EL1 MVFR0
>>> #define MVFR1_EL1 MVFR1
>>> #define MVFR2_EL1 MVFR2
>>> +#define HMPUIR p15,4,c0,c0,4
>>> +#define HPRSELR p15,4,c6,c2,1
>>> +#define PRBAR_EL2 p15,4,c6,c3,0
>>> +#define PRLAR_EL2 p15,4,c6,c8,1
>>> +#define MPUIR_EL2 HMPUIR
>>> +#define PRSELR_EL2 HPRSELR
>>
>> Considering that there will be lots of arm32 MPU specific registers, do you
>> want to move them to mpu/cpregs.h ?
>>
>> That would be my style preference.
>
> I don’t have any strong opinion so it’s fine if you want them in cpregs.h.
If there are really a lot of new additions and the movement improves
readability, I'm ok with them being stored in mpu/cpregs.h
~Michal