[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