Hi Ayan,
Apologies but I can’t do a full review yet,
>>> +
>>> +/* MPU normal memory attributes. */
>>> +#define PRBAR_NORMAL_MEM 0x30 /* SH=11 AP=00 XN=00 */
>>> +#define PRLAR_NORMAL_MEM 0x0f /* NS=0 ATTR=111 EN=1 */
>>> +
>>> +.macro write_pr, sel, prbar, prlar
>>> + msr PRSELR_EL2, \sel
>>> + dsb sy
>>
>> I am not sure I understand why this is a dsb rather than isb. Can you
>> clarify?
>
> ISB is not needed here as the memory protection hasn't been activated yet.
> The above instruction just selects the memory region and the below two
> instructions sets the base address and limit for that memory region. After
> the three instructions, we need an ISB so that the memory protection takes
> into affect for further instruction fetches.
>
> However, a DSB is needed here as the below two instructions depend on this.
> So, we definitely want this instruction to complete.
>
> Further, refer to the note in ARM DDI 0600A.d ID120821, C1.7.1 "Protection
> region attributes"
>
> 0.
>
> ```Writes to MPU registers are only guaranteed to be visible
> following a Context synchronization event and DSB operation.```
>
> Thus, I infer that DSB is necessary here.
I think this was a mistake from the author of this patch, in my opinion there
should be an ISB
after setting PRSELR_ELx, to enforce a synchronisation before writing
PR{B,L}AR_ELx which
depends on the value written on PRSELR.
Cheers,
Luca