public inbox for linux-arm-kernel@lists.infradead.org
 help / color / mirror / Atom feed
* [bootwrapper PATCH] aarch64: Enable BRBE for the non-secure world
@ 2022-01-13  9:41 Anshuman Khandual
  2022-01-13 10:24 ` Mark Rutland
  0 siblings, 1 reply; 6+ messages in thread
From: Anshuman Khandual @ 2022-01-13  9:41 UTC (permalink / raw)
  To: linux-arm-kernel
  Cc: mark.rutland, andre.przywara, robin.murphy, Anshuman Khandual

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.

Signed-off-by: Anshuman Khandual <anshuman.khandual@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
+
 1:	msr	mdcr_el3, x0			// Disable traps to EL3
 
 	mrs	x0, id_aa64pfr0_el1
-- 
2.7.4


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [bootwrapper PATCH] aarch64: Enable BRBE for the non-secure world
  2022-01-13  9:41 [bootwrapper PATCH] aarch64: Enable BRBE for the non-secure world Anshuman Khandual
@ 2022-01-13 10:24 ` Mark Rutland
  2022-01-17 10:36   ` Anshuman Khandual
  0 siblings, 1 reply; 6+ messages in thread
From: Mark Rutland @ 2022-01-13 10:24 UTC (permalink / raw)
  To: Anshuman Khandual; +Cc: linux-arm-kernel, andre.przywara, robin.murphy

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?

> 
> Signed-off-by: Anshuman Khandual <anshuman.khandual@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
correct? What effect does the value 0x3 have?

Thanks,
Mark.

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

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [bootwrapper PATCH] aarch64: Enable BRBE for the non-secure world
  2022-01-13 10:24 ` Mark Rutland
@ 2022-01-17 10:36   ` Anshuman Khandual
  2022-01-17 13:25     ` Mark Rutland
  0 siblings, 1 reply; 6+ messages in thread
From: Anshuman Khandual @ 2022-01-17 10:36 UTC (permalink / raw)
  To: Mark Rutland; +Cc: linux-arm-kernel, andre.przywara, robin.murphy



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@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
>>

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [bootwrapper PATCH] aarch64: Enable BRBE for the non-secure world
  2022-01-17 10:36   ` Anshuman Khandual
@ 2022-01-17 13:25     ` Mark Rutland
  2022-01-18  2:42       ` Anshuman Khandual
  0 siblings, 1 reply; 6+ messages in thread
From: Mark Rutland @ 2022-01-17 13:25 UTC (permalink / raw)
  To: Anshuman Khandual; +Cc: linux-arm-kernel, andre.przywara, robin.murphy

On Mon, Jan 17, 2022 at 04:06:44PM +0530, Anshuman Khandual wrote:
> 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@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 for this!

Just to check, my understanding, there's nothing else that we need to
initialize to ensure that BRBE won't start recording unexpectedly
out-of-reset, becuase in BRBCR_EL* the E*BRE bits all warm-reset to 0
and hence prevent recording in any of EL0/EL1/EL2 (and BRBE never
records at EL3). Is that right?

Assuming so, I'll take this as-is.

Thanks,
Mark.

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [bootwrapper PATCH] aarch64: Enable BRBE for the non-secure world
  2022-01-17 13:25     ` Mark Rutland
@ 2022-01-18  2:42       ` Anshuman Khandual
  2022-01-18 10:34         ` Mark Rutland
  0 siblings, 1 reply; 6+ messages in thread
From: Anshuman Khandual @ 2022-01-18  2:42 UTC (permalink / raw)
  To: Mark Rutland; +Cc: linux-arm-kernel, andre.przywara, robin.murphy



On 1/17/22 6:55 PM, Mark Rutland wrote:
> On Mon, Jan 17, 2022 at 04:06:44PM +0530, Anshuman Khandual wrote:
>> 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@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 for this!
> 
> Just to check, my understanding, there's nothing else that we need to
> initialize to ensure that BRBE won't start recording unexpectedly
> out-of-reset, becuase in BRBCR_EL* the E*BRE bits all warm-reset to 0
> and hence prevent recording in any of EL0/EL1/EL2 (and BRBE never
> records at EL3). Is that right?

Right, that is my understanding as well. Those required bits that start
BRBE recording, always warm-reset to 0.

> 
> Assuming so, I'll take this as-is.
> 
> Thanks,
> Mark.
> 

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [bootwrapper PATCH] aarch64: Enable BRBE for the non-secure world
  2022-01-18  2:42       ` Anshuman Khandual
@ 2022-01-18 10:34         ` Mark Rutland
  0 siblings, 0 replies; 6+ messages in thread
From: Mark Rutland @ 2022-01-18 10:34 UTC (permalink / raw)
  To: Anshuman Khandual; +Cc: linux-arm-kernel, andre.przywara, robin.murphy

On Tue, Jan 18, 2022 at 08:12:39AM +0530, Anshuman Khandual wrote:
> On 1/17/22 6:55 PM, Mark Rutland wrote:
> > On Mon, Jan 17, 2022 at 04:06:44PM +0530, Anshuman Khandual wrote:
> >> On 1/13/22 3:54 PM, Mark Rutland wrote:
> >>> On Thu, Jan 13, 2022 at 03:11:08PM +0530, Anshuman Khandual wrote:
> >>>> +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 for this!
> > 
> > Just to check, my understanding, there's nothing else that we need to
> > initialize to ensure that BRBE won't start recording unexpectedly
> > out-of-reset, becuase in BRBCR_EL* the E*BRE bits all warm-reset to 0
> > and hence prevent recording in any of EL0/EL1/EL2 (and BRBE never
> > records at EL3). Is that right?
> 
> Right, that is my understanding as well. Those required bits that start
> BRBE recording, always warm-reset to 0.

Thanks for confirming!

I've applied this and pushed it out.

Mark.

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2022-01-18 10:36 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-01-13  9:41 [bootwrapper PATCH] aarch64: Enable BRBE for the non-secure world Anshuman Khandual
2022-01-13 10:24 ` Mark Rutland
2022-01-17 10:36   ` Anshuman Khandual
2022-01-17 13:25     ` Mark Rutland
2022-01-18  2:42       ` Anshuman Khandual
2022-01-18 10:34         ` Mark Rutland

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox