[PATCH v4 4/8] arm64: Add sysreg header generation scripting

Mark Brown broonie at kernel.org
Thu Apr 21 07:50:41 PDT 2022


On Thu, Apr 21, 2022 at 03:16:52PM +0100, Mark Rutland wrote:
> On Thu, Apr 21, 2022 at 02:00:17PM +0100, Mark Brown wrote:

> > > > The script requires that all bits in the register be specified and that
> > > > there be no overlapping fields. This helps the script spot errors in the
> > > > input but means that the few registers which change layout at runtime
> > > > depending on things like virtualisation settings will need some manual
> > > > handling. No actual register conversions are done here but a header for
> > > > the register data with some documention of the format is provided.

> > > It would be good to see an example of how we'd handle one of those, in case
> > > that means we need to play around with naming or structure of the definitions a
> > > bit.

> > My thinking here was that we might not want to handle those registers
> > through the automated stuff at all.  I haven't yet come up with
> > something that seems tasteful and viable for them, if I had a firm idea
> > for what that should look like I'd probably have implemented it.

> Sure, and I'm not expecting that we automate all of that, just that we
> have an idea of how the manual bits would work with the automatic bits.
> If the odd cases looks simple enough, we might be able to get away with
> a couple of small additions to the scripting.

> For example, for ESR_EL{1,2,3} today we define ESR_ELx_field
> definitions rather than duplicate ESR_EL1_field / ESR_EL2_field /
> ESR_EL3_field definitions. If the scripting has a mechanism to handle
> that, then that might be good enough for the other odd cases.

Ah, that's a separate issue to the registers which change layout which
was what was being mentioned above.

> For example, I think we could do something like:

> # Define a set of fields without a specific register encoding, using the
> # name `ESR_ELx`
> SysregFields	ESR_ELx
> 	Res0	63:37
> 	Field	36:32	ISS2
> 	Field	31:26	EC
> 	Field	25	IL
> 	Field	24:0	ISS
> EndSysregFields

Yes, I'd been thinking of something like this - it seemed an obvious
enough extension.

> # This could instead be SysregEncoding
> Sysreg	ESR_EL1		3	0	5	2	0
> 	Comment		"See ESR_ELx for fields"
> 	# Don't create any field definitions for this reg, and don't
> 	# bother with the associated sanity checks
> 	NoFields	
> EndSysreg

I think we're going to end up wanting to still generate the numbered
versions for use in macros so we should probably have that comment and
NoFields be a SharedLayout (or whatever bikeshedded name) statement.
Until we need it that can just be equivalent to a comment, ready to kick
in once someone needs it.  I can update the existing (trivial but meh)
TTBRn register conversion to do that.

> ... and the `SysregFields` `NoFields`, and `Comment` mechanisms might be
> good enough to cover the other odd cases we have (e.g. aliased
> GIC registers, or different "views" for the same register).

> Does that make sense, or have I misunderstood the point you were making?

I was talking about a completely different issue, things like CPTR_EL2
where the register layout changes depending on some runtime
configuration.  You'd need two separate register layouts within a single
Sysreg which isn't too bad until you get to the point of having to name
things like RES0/RES1 and any name collisons in fields (I don't *think*
we have name collisons...).
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 488 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20220421/4af68da1/attachment.sig>


More information about the linux-arm-kernel mailing list