diff mbox series

[kvm-unit-tests,v1,2/2] arm64: Define name for the bits used in SCTLR_EL1_RES1

Message ID 20230719031926.752931-3-shahuang@redhat.com (mailing list archive)
State New, archived
Headers show
Series arm64: Define name for the original RES1 bit but now functinal bit | expand

Commit Message

Shaoqin Huang July 19, 2023, 3:19 a.m. UTC
Currently some fields in SCTLR_EL1 don't define a name and directly used
in the SCTLR_EL1_RES1, that's not good now since these fields have been
functional and have a name.

According to the ARM DDI 0487J.a, define the name related to these
fields.

Suggested-by: Alexandru Elisei <alexandru.elisei@arm.com>
Signed-off-by: Shaoqin Huang <shahuang@redhat.com>
---
 lib/arm64/asm/sysreg.h | 13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)

Comments

Nadav Amit July 19, 2023, 5:45 a.m. UTC | #1
> On Jul 18, 2023, at 8:19 PM, Shaoqin Huang <shahuang@redhat.com> wrote:
> 
> Currently some fields in SCTLR_EL1 don't define a name and directly used
> in the SCTLR_EL1_RES1, that's not good now since these fields have been
> functional and have a name.
> 
> According to the ARM DDI 0487J.a, define the name related to these
> fields.
> 
> Suggested-by: Alexandru Elisei <alexandru.elisei@arm.com>
> Signed-off-by: Shaoqin Huang <shahuang@redhat.com>

Thanks for doing that!

While I debugged my SCTLR issue on EFI, I did try to grep “SPAN", and this
patch would’ve certainly helped.
Eric Auger July 19, 2023, 5:46 p.m. UTC | #2
Hi Shaoqin,

On 7/19/23 05:19, Shaoqin Huang wrote:
> Currently some fields in SCTLR_EL1 don't define a name and directly used
> in the SCTLR_EL1_RES1, that's not good now since these fields have been
> functional and have a name.
>
> According to the ARM DDI 0487J.a, define the name related to these
> fields.
>
> Suggested-by: Alexandru Elisei <alexandru.elisei@arm.com>
> Signed-off-by: Shaoqin Huang <shahuang@redhat.com>
> ---
>  lib/arm64/asm/sysreg.h | 13 +++++++++++--
>  1 file changed, 11 insertions(+), 2 deletions(-)
>
> diff --git a/lib/arm64/asm/sysreg.h b/lib/arm64/asm/sysreg.h
> index c7f529d..9c68698 100644
> --- a/lib/arm64/asm/sysreg.h
> +++ b/lib/arm64/asm/sysreg.h
> @@ -80,17 +80,26 @@ asm(
>  #define ICC_GRPEN1_EL1			sys_reg(3, 0, 12, 12, 7)
>  
>  /* System Control Register (SCTLR_EL1) bits */
> +#define SCTLR_EL1_LSMAOE	_BITUL(29)
> +#define SCTLR_EL1_NTLSMD	_BITUL(28)
>  #define SCTLR_EL1_EE		_BITUL(25)
> +#define SCTLR_EL1_SPAN		_BITUL(23)
> +#define SCTLR_EL1_EIS		_BITUL(22)
> +#define SCTLR_EL1_TSCXT		_BITUL(20)
>  #define SCTLR_EL1_WXN		_BITUL(19)
>  #define SCTLR_EL1_I		_BITUL(12)
> +#define SCTLR_EL1_EOS		_BITUL(11)
> +#define SCTLR_EL1_SED		_BITUL(8)
> +#define SCTLR_EL1_ITD		_BITUL(7)
>  #define SCTLR_EL1_SA0		_BITUL(4)
>  #define SCTLR_EL1_SA		_BITUL(3)
>  #define SCTLR_EL1_C		_BITUL(2)
>  #define SCTLR_EL1_A		_BITUL(1)
>  #define SCTLR_EL1_M		_BITUL(0)
>  
> -#define SCTLR_EL1_RES1	(_BITUL(7) | _BITUL(8) | _BITUL(11) | _BITUL(20) | \
> -			 _BITUL(22) | _BITUL(23) | _BITUL(28) | _BITUL(29))
> +#define SCTLR_EL1_RES1	(SCTLR_EL1_ITD | SCTLR_EL1_SED | SCTLR_EL1_EOS | \
> +			 SCTLR_EL1_TSCXT | SCTLR_EL1_EIS | SCTLR_EL1_SPAN | \
> +			 SCTLR_EL1_NTLSMD | SCTLR_EL1_LSMAOE)
>  #define INIT_SCTLR_EL1_MMU_OFF	\
>  			SCTLR_EL1_RES1
>  
The change looks good to me (although _BITULL remark still holds).

Independently on this patch the _RES1 terminology looks odd to me. For
example ESO bit is RES1 only if FEAT_ExS is not implemented. Maybe I
misunderstand why it was named that way but to me RES1 means another
thing. If confirmed we could simply drop SCTLR_EL1_RES1 which is not
used elsewhere and directly define INIT_SCTLR_EL1_MMU_OF.

Thanks

Eric
Shaoqin Huang July 20, 2023, 11:58 a.m. UTC | #3
Hi Eric,

On 7/20/23 01:46, Eric Auger wrote:
> Hi Shaoqin,
> 
> On 7/19/23 05:19, Shaoqin Huang wrote:
>> Currently some fields in SCTLR_EL1 don't define a name and directly used
>> in the SCTLR_EL1_RES1, that's not good now since these fields have been
>> functional and have a name.
>>
>> According to the ARM DDI 0487J.a, define the name related to these
>> fields.
>>
>> Suggested-by: Alexandru Elisei <alexandru.elisei@arm.com>
>> Signed-off-by: Shaoqin Huang <shahuang@redhat.com>
>> ---
>>   lib/arm64/asm/sysreg.h | 13 +++++++++++--
>>   1 file changed, 11 insertions(+), 2 deletions(-)
>>
>> diff --git a/lib/arm64/asm/sysreg.h b/lib/arm64/asm/sysreg.h
>> index c7f529d..9c68698 100644
>> --- a/lib/arm64/asm/sysreg.h
>> +++ b/lib/arm64/asm/sysreg.h
>> @@ -80,17 +80,26 @@ asm(
>>   #define ICC_GRPEN1_EL1			sys_reg(3, 0, 12, 12, 7)
>>   
>>   /* System Control Register (SCTLR_EL1) bits */
>> +#define SCTLR_EL1_LSMAOE	_BITUL(29)
>> +#define SCTLR_EL1_NTLSMD	_BITUL(28)
>>   #define SCTLR_EL1_EE		_BITUL(25)
>> +#define SCTLR_EL1_SPAN		_BITUL(23)
>> +#define SCTLR_EL1_EIS		_BITUL(22)
>> +#define SCTLR_EL1_TSCXT		_BITUL(20)
>>   #define SCTLR_EL1_WXN		_BITUL(19)
>>   #define SCTLR_EL1_I		_BITUL(12)
>> +#define SCTLR_EL1_EOS		_BITUL(11)
>> +#define SCTLR_EL1_SED		_BITUL(8)
>> +#define SCTLR_EL1_ITD		_BITUL(7)
>>   #define SCTLR_EL1_SA0		_BITUL(4)
>>   #define SCTLR_EL1_SA		_BITUL(3)
>>   #define SCTLR_EL1_C		_BITUL(2)
>>   #define SCTLR_EL1_A		_BITUL(1)
>>   #define SCTLR_EL1_M		_BITUL(0)
>>   
>> -#define SCTLR_EL1_RES1	(_BITUL(7) | _BITUL(8) | _BITUL(11) | _BITUL(20) | \
>> -			 _BITUL(22) | _BITUL(23) | _BITUL(28) | _BITUL(29))
>> +#define SCTLR_EL1_RES1	(SCTLR_EL1_ITD | SCTLR_EL1_SED | SCTLR_EL1_EOS | \
>> +			 SCTLR_EL1_TSCXT | SCTLR_EL1_EIS | SCTLR_EL1_SPAN | \
>> +			 SCTLR_EL1_NTLSMD | SCTLR_EL1_LSMAOE)
>>   #define INIT_SCTLR_EL1_MMU_OFF	\
>>   			SCTLR_EL1_RES1
>>   
> The change looks good to me (although _BITULL remark still holds).
> 
> Independently on this patch the _RES1 terminology looks odd to me. For
> example ESO bit is RES1 only if FEAT_ExS is not implemented. Maybe I
> misunderstand why it was named that way but to me RES1 means another
> thing. If confirmed we could simply drop SCTLR_EL1_RES1 which is not
> used elsewhere and directly define INIT_SCTLR_EL1_MMU_OF.

The SCTLR_EL1_RES1 was originally defined by commit 10b65ce ("arm64: 
Configure SCTLR_EL1 at boot"). It seems at that time the BIT(11), yes 
the EOS bit is undefined, and must be reserved for 1, but now it has a 
definition which is EOS. It should have no effect if set EOS bit to 1 
since its originally res to 1.

SCTLR_EL1_RES1 can simply be dropped since it has no other user.

Thanks,
Shaoqin

> 
> Thanks
> 
> Eric
>
diff mbox series

Patch

diff --git a/lib/arm64/asm/sysreg.h b/lib/arm64/asm/sysreg.h
index c7f529d..9c68698 100644
--- a/lib/arm64/asm/sysreg.h
+++ b/lib/arm64/asm/sysreg.h
@@ -80,17 +80,26 @@  asm(
 #define ICC_GRPEN1_EL1			sys_reg(3, 0, 12, 12, 7)
 
 /* System Control Register (SCTLR_EL1) bits */
+#define SCTLR_EL1_LSMAOE	_BITUL(29)
+#define SCTLR_EL1_NTLSMD	_BITUL(28)
 #define SCTLR_EL1_EE		_BITUL(25)
+#define SCTLR_EL1_SPAN		_BITUL(23)
+#define SCTLR_EL1_EIS		_BITUL(22)
+#define SCTLR_EL1_TSCXT		_BITUL(20)
 #define SCTLR_EL1_WXN		_BITUL(19)
 #define SCTLR_EL1_I		_BITUL(12)
+#define SCTLR_EL1_EOS		_BITUL(11)
+#define SCTLR_EL1_SED		_BITUL(8)
+#define SCTLR_EL1_ITD		_BITUL(7)
 #define SCTLR_EL1_SA0		_BITUL(4)
 #define SCTLR_EL1_SA		_BITUL(3)
 #define SCTLR_EL1_C		_BITUL(2)
 #define SCTLR_EL1_A		_BITUL(1)
 #define SCTLR_EL1_M		_BITUL(0)
 
-#define SCTLR_EL1_RES1	(_BITUL(7) | _BITUL(8) | _BITUL(11) | _BITUL(20) | \
-			 _BITUL(22) | _BITUL(23) | _BITUL(28) | _BITUL(29))
+#define SCTLR_EL1_RES1	(SCTLR_EL1_ITD | SCTLR_EL1_SED | SCTLR_EL1_EOS | \
+			 SCTLR_EL1_TSCXT | SCTLR_EL1_EIS | SCTLR_EL1_SPAN | \
+			 SCTLR_EL1_NTLSMD | SCTLR_EL1_LSMAOE)
 #define INIT_SCTLR_EL1_MMU_OFF	\
 			SCTLR_EL1_RES1