[PATCH 3/6] arm64/sysreg: Allow enumerations to be declared as signed

Mark Brown broonie at kernel.org
Thu Dec 8 08:03:24 PST 2022


Most of our enumerations follow a standard scheme where the values can be
treated as signed however there are some where the value must be treated
as signed. Provide a new SignedEnum which allows this to be specified in
the sysreg definition and emit a REG_FIELD_SIGN define for all enumerations
which is a boolean corresponding to our current FTR_UNSIGNED and FTR_SIGNED
macros.

Signed-off-by: Mark Brown <broonie at kernel.org>
---
 arch/arm64/tools/gen-sysreg.awk | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

diff --git a/arch/arm64/tools/gen-sysreg.awk b/arch/arm64/tools/gen-sysreg.awk
index c350164a3955..e105d6fc66a4 100755
--- a/arch/arm64/tools/gen-sysreg.awk
+++ b/arch/arm64/tools/gen-sysreg.awk
@@ -44,6 +44,11 @@ function define_field(reg, field, msb, lsb) {
 	define(reg "_" field "_WIDTH", msb - lsb + 1)
 }
 
+# Print a field _SIGNED definition for a field
+function define_field_sign(reg, field, sign) {
+	define(reg "_" field "_SIGN", sign)
+}
+
 # Parse a "<msb>[:<lsb>]" string into the global variables @msb and @lsb
 function parse_bitdef(reg, field, bitdef, _bits)
 {
@@ -233,6 +238,18 @@ END {
 	next
 }
 
+/^SignedEnum/ {
+	change_block("Enum<", "Sysreg", "Enum")
+	expect_fields(3)
+	field = $3
+	parse_bitdef(reg, field, $2)
+
+	define_field(reg, field, msb, lsb)
+	define_field_sign(reg, field, "true")
+
+	next
+}
+
 /^Enum/ {
 	change_block("Enum", "Sysreg", "Enum")
 	expect_fields(3)
@@ -240,6 +257,7 @@ END {
 	parse_bitdef(reg, field, $2)
 
 	define_field(reg, field, msb, lsb)
+	define_field_sign(reg, field, "false")
 
 	next
 }

-- 
2.30.2



More information about the linux-arm-kernel mailing list