[bootwrapper PATCH] aarch64: Enable BRBE for the non-secure world

Anshuman Khandual anshuman.khandual at arm.com
Mon Jan 17 02:36:44 PST 2022



On 1/13/22 3:54 PM, Mark Rutland wrote:
> Hi Anshuman,
> 
> This looks fine structurally, I'm just not sure of a couple of details because
> I can't find the relevant documentation -- more on that below.
> 
> On Thu, Jan 13, 2022 at 03:11:08PM +0530, Anshuman Khandual wrote:
>> MDCR_EL3.SBRBE resets to an UNKNOWN value. Configure it to allow the BRBE
>> buffer usage and direct register access in the non-secure world. But just
>> before that, check AA64DFR0_EL1.BRBE and make sure BRBE is implemented. We
>> still continue to reset MDCR_EL3 register to zero with the exception of
>> MDCR_EL3.NSPB, MDCR_EL3.NSTB and MDCR_EL3.SBRBE.
> 
> I'm struggling to find where the BRBE system register fields are documented.
> 
> I looked at the latest ARM ARM (DDI 0487G.b):
> 
>   https://developer.arm.com/documentation/ddi0487/gb/
> 
> ... and the Armv9 supplement (DDI 0608A.a):
> 
>   https://developer.arm.com/documentation/ddi0608/aa/
> 
> ... but AFAICT, neither of those describe the bit-positions of the relevant
> fields, so I can't check that those are correct. The other extensions (at leat
> TME) describe that in the supplement, so this looks like a bug/oversight. 
> 
> Am I looking at the right documents? If this is meant to be in the supplement,
> could you please raise a bug report to get that fixed?

Please find the MDCR_EL3.SBRBE definition here.

https://developer.arm.com/documentation/ddi0601/2021-12/AArch64-Registers/
MDCR-EL3--Monitor-Debug-Configuration-Register--EL3-?lang=en#fieldset_0-33_32-1

> 
>>
>> Signed-off-by: Anshuman Khandual <anshuman.khandual at arm.com>
>> ---
>>  arch/aarch64/boot.S | 8 ++++++++
>>  1 file changed, 8 insertions(+)
>>
>> diff --git a/arch/aarch64/boot.S b/arch/aarch64/boot.S
>> index bfbb6ec..ca1b292 100644
>> --- a/arch/aarch64/boot.S
>> +++ b/arch/aarch64/boot.S
>> @@ -103,6 +103,14 @@ ASM_FUNC(_start)
>>  	ldr	x1, =(0x3 << 24)
>>  	orr	x0, x0, x1
>>  
>> +1:	mrs     x1, id_aa64dfr0_el1
>> +	ubfx    x1, x1, #52, #4
>> +	cbz     x1, 1f
>> +
>> +	// Enable BRBE for the non-secure world.
>> +	ldr     x1, =(0x3 << 32)
>> +	orr     x0, x0, x1
>> +
> 
> I assume this is the `SBRBE` field, which naming-wise sounds like it controls
> Secure rather than Non-Secure (e,g. by way of comparison to `NSPB`). Is that

Right, that is some what counter-intuitive.

> correct? What effect does the value 0x3 have?

As per the definition above.

0b11	 This control does not cause any direct accesses to BRBE registers or
         instruction to be trapped, and does not cause any Exception levels to
	 be a prohibited region.

This basically allows BRBE usage in EL2/EL1.

> 
> Thanks,
> Mark.
> 
>>  1:	msr	mdcr_el3, x0			// Disable traps to EL3
>>  
>>  	mrs	x0, id_aa64pfr0_el1
>> -- 
>> 2.7.4
>>



More information about the linux-arm-kernel mailing list