[boot-wrapper] aarch64: Enable access into FEAT_FGT2 registers from EL2 and below

Anshuman Khandual anshuman.khandual at arm.com
Wed Apr 2 20:59:54 PDT 2025



On 3/11/25 11:39, Anshuman Khandual wrote:
> 
> 
> On 2/24/25 18:00, Mark Rutland wrote:
>> On Tue, Jul 30, 2024 at 11:16:43AM +0530, Anshuman Khandual wrote:
>>> FEAT_FGT2 adds system registers HDFGRTR2_EL2, HDFGWTR2_EL2, HFGITR2_EL2,
>>> HFGRTR2_EL2 and HFGWTR2_EL2. But access into these system registers from
>>> EL2 and below exception levels, will trap into EL3 unless SCR_EL3.FGTEN2
>>> is set.
>>>
>>> Enable access to FEAT_FGT2 registers when they are implemented. Given that
>>> these new FEAT_FGT2 trap registers have fields that reset to UNKNOWN values
>>> when resets are taken to EL3, this initialises all registers as cleared.
>>>
>>> Signed-off-by: Anshuman Khandual <anshuman.khandual at arm.com>
>>> ---
>>> This picks up from an earlier discussion regarding [PATCH 2/2].
>>>
>>> https://lore.kernel.org/all/20240404073726.947215-1-anshuman.khandual@arm.com/
>>>
>>>  arch/aarch64/include/asm/cpu.h | 7 +++++++
>>>  arch/aarch64/init.c            | 9 +++++++++
>>>  2 files changed, 16 insertions(+)
>>>
>>> diff --git a/arch/aarch64/include/asm/cpu.h b/arch/aarch64/include/asm/cpu.h
>>> index a5744e1..878d03d 100644
>>> --- a/arch/aarch64/include/asm/cpu.h
>>> +++ b/arch/aarch64/include/asm/cpu.h
>>> @@ -23,6 +23,12 @@
>>>  #define SCTLR2_EL1		s3_0_c1_c0_3
>>>  #define SCTLR2_EL2		s3_4_c1_c0_3
>>>  
>>> +#define HDFGRTR2_EL2		s3_4_c3_c1_0
>>> +#define HDFGWTR2_EL2		s3_4_c3_c1_1
>>> +#define HFGRTR2_EL2		s3_4_c3_c1_2
>>> +#define HFGWTR2_EL2		s3_4_c3_c1_3
>>> +#define HFGITR2_EL2		s3_4_c3_c1_7
>>
>> These all look correct per ARM DDI 0487 L.a, table D23-2.
>>
>>> +
>>>  /*
>>>   * RES1 bit definitions definitions as of ARM DDI 0487G.b
>>>   *
>>> @@ -63,6 +69,7 @@
>>>  #define SCR_EL3_SCTLR2En		BIT(44)
>>>  #define SCR_EL3_PIEN			BIT(45)
>>>  #define SCR_EL3_D128En			BIT(47)
>>> +#define SCR_EL3_FGTEN2			BIT(59)
>>
>> This looks correct per ARM DDI 0487 L.a, section D24.2.163.
>>
>>>  
>>>  #define HCR_EL2_RES1			BIT(1)
>>>  
>>> diff --git a/arch/aarch64/init.c b/arch/aarch64/init.c
>>> index c9fc7f1..b4d64a0 100644
>>> --- a/arch/aarch64/init.c
>>> +++ b/arch/aarch64/init.c
>>> @@ -68,6 +68,15 @@ void cpu_init_el3(void)
>>>  	if (mrs_field(ID_AA64MMFR0_EL1, FGT))
>>>  		scr |= SCR_EL3_FGTEN;
>>>  
>>> +	if (mrs_field(ID_AA64MMFR0_EL1, FGT) >= 2) {
>>> +		scr |= SCR_EL3_FGTEN2;
>>> +		msr(HDFGRTR2_EL2, 0);
>>> +		msr(HDFGWTR2_EL2, 0);
>>> +		msr(HFGITR2_EL2, 0);
>>> +		msr(HFGRTR2_EL2, 0);
>>> +		msr(HFGWTR2_EL2, 0);
>>> +	}
>>
>> Superficially, this looks sane to me. I haven't audited all the bits, but I
>> assume that you have gone through all of the bits and checked that zero is a
>> sensible reset value for all of these.
>>
>> I intend to apply this shortly.
>>
>> As an aside, I think some necssary support is missing on the kernel side -- I'll reply
>> on that front shortly.
> 
> Hello Mark,
> 
> Seems like neither this boot wrapper patch nor the more recent one which sets
> MDCR_EL3.EnPM2 for FEAT_PMUv3p9 registers [1] (as you had pointed out earlier
> on the kernel thread) has been applied.
> 
> [1] https://lore.kernel.org/all/20250227041603.2029058-1-anshuman.khandual@arm.com/
> 
> IIUC both these boot-wrapper patches are necessary for the kernel patch and
> also for existing FEAT_PMUv3p9 feature.
> 
> https://lore.kernel.org/all/20250227035119.2025171-1-anshuman.khandual@arm.com/
> 
> FEAT_PMUv3p9 is the only current user with dependency on FEAT_FGT2 based traps,
> beside upcoming FEAT_Debugv8p9 feature which is still under development.
> 
> Just wondering if there is something else that still needs to be addressed ?
> Please do let me know, will accommodate the changes as required. Thank you.

Hello Mark,

The current mainline kernel with HEAD a1b5bd45d4ee ("Merge tag 'usb-6.15-rc1'
of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb") does not boot
on the latest boot wrapper without this patch. Please consider merging this
patch, otherwise the boot-wrapper based environment will become unavailable
for v6.15-rc1.

- Anshuman



More information about the linux-arm-kernel mailing list