• Mark Rutland's avatar
    arm64/sysreg: allow *Enum blocks in SysregFields blocks · 013ecd44
    Mark Rutland authored
    We'd like to support Enum/SignedEnum/UnsignedEnum blocks within
    SysregFields blocks, so that we can define enumerations for sets of
    registers. This isn't currently supported by gen-sysreg.awk due to the
    way we track the active block, which can't handle more than a single
    layer of nesting, which imposes an awkward requirement that when ending
    a block we know what the parent block is when calling change_block()
    
    Make this nicer by using a stack of active blocks, with block_push() to
    start a block, and block_pop() to end a block. Doing so means that we
    only need to check the active block at the start of parsing a line: for
    the start of a block we can check the parent is valid, and for the end
    of a block we check that the active block is valid.
    
    This structure makes the block parsing simpler and makes it easy to
    permit a block to live under several potential parents (e.g. by
    permitting Enum to start when the active block is Sysreg or
    SysregFields). It also permits further nesting, if we need that in
    future.
    
    To aid debugging, the stack of active blocks is reported for fatal
    errors, and an error is raised if the file is terminated without ending
    the active block. For clarity I've renamed the top-level element from
    "None" to "Root".
    
    The Fields element it intended only for use within Sysreg blocks, and
    does not make sense within SysregFields blocks, and so remains forbidden
    within a SysregFields block.
    
    I've verified using sha1sum that this patch does not change the
    current generated contents of <asm/sysreg-defs.h>.
    Signed-off-by: default avatarMark Rutland <mark.rutland@arm.com>
    Cc: Anshuman Khandual <anshuman.khandual@arm.com>
    Cc: Catalin Marinas <catalin.marinas@arm.com>
    Cc: Marc Zyngier <maz@kernel.org>
    Cc: Mark Brown <broonie@kernel.org>
    Cc: Will Deacon <will@kernel.org>
    Reviewed-by: default avatarAnshuman Khandual <anshuman.khandual@arm.com>
    Reviewed-by: default avatarMark Brown <broonie@kernel.org>
    Link: https://lore.kernel.org/r/20230306114836.2575432-1-mark.rutland@arm.comSigned-off-by: default avatarWill Deacon <will@kernel.org>
    013ecd44
gen-sysreg.awk 6.53 KB