> On 3 Dec 2024, at 15:54, Luca Fancellu <[email protected]> wrote: > > Hi Ayan, > > sorry for the separate message, I've spotted another thing where I’m in doubt > >> On 27 Nov 2024, at 18:39, Ayan Kumar Halder <[email protected]> >> wrote: >> >> CONFIG_EARLY_UART_SIZE is introduced to let user provide physical size of >> early UART. Unlike MMU where we map a page in the virtual address space, >> here we need to know the exact physical size to be mapped. >> As VA == PA in case of MPU, the memory layout follows exactly the hardware >> configuration. As a consequence, we set EARLY_UART_VIRTUAL_ADDRESS as >> physical >> address. >> >> EARLY_UART_BASE_ADDRESS and EARLY_UART_SIZE should be aligned to the minimum >> size of MPU region (ie 64 bits) as per the hardware restrictions. Refer ARM >> DDI 0600A.d ID120821 A1.3 "A minimum protection region size of 64 bytes.". >> >> UART is mapped as nGnRE region (as specified by ATTR=100 , refer G1.3.13, >> MAIR_EL2, "---0100 Device memory nGnRE") and Doc ID - 102670_0101_02_en >> Table 4-3, Armv8 architecture memory types (nGnRE - Corresponds to Device in >> Armv7 architecture). Also, it is mapped as outer shareable, RW at EL2 only >> and execution of instructions from the region is not permitted. >> > > [...] > > >> diff --git a/xen/arch/arm/arm64/mpu/head.S b/xen/arch/arm/arm64/mpu/head.S >> index f692fc7443..86e4019a0c 100644 >> --- a/xen/arch/arm/arm64/mpu/head.S >> +++ b/xen/arch/arm/arm64/mpu/head.S >> @@ -11,8 +11,10 @@ >> #define REGION_TEXT_PRBAR 0x38 /* SH=11 AP=10 XN=00 */ >> #define REGION_RO_PRBAR 0x3A /* SH=11 AP=10 XN=10 */ >> #define REGION_DATA_PRBAR 0x32 /* SH=11 AP=00 XN=10 */ >> +#define REGION_DEVICE_PRBAR 0x22 /* SH=10 AP=00 XN=10 */ >> >> #define REGION_NORMAL_PRLAR 0x0f /* NS=0 ATTR=111 EN=1 */ >> +#define REGION_DEVICE_PRLAR 0x09 /* NS=0 ATTR=100 EN=1 */ > > Should this point to ATTR=0 instead? From what I see on Zephyr, the pl011 is > mapped with nGnRnE, on R82 this works fine because it will treat all device > memory as > nGnRnE, but I’m not sure that this will work well on other Armv8-R aarch64 > platforms. > > I was trying to check how Linux maps pl011 but I’m kind of lost, so maybe if > anyone has > more experience is more than welcome to contribute to the discussion.
Anyway, changing that to 0x01 (ATTR=0 EN=1) is giving me a weird issue in my branch: "Error getting IRQ number for this serial port 0” from create_domUs(), so I’m not sure now if the right value was indeed 0x09
