On Fri, Jul 8, 2022 at 3:25 PM Greg Favor <gfavor@...
To add on to Alan's point. These "extension" names were created simply to represent individual line items in the Profiles. In many cases these represent a one or two sentence statement in a Profile about an optional behavior or about a specific parameter value.
The combinatorics of taking every optional behavior, every parameter that can take on a set of possible values, and every WARL field and the allowed range of possibilities, and then creating an "extension" name for every individual possible "key- value" pair are crazy. (This is why people instead use key-value representations.)
For Profiles, these names have been created on an as-needed basis for specific "key-value" pairs, and no further. Their motivation was to simply have acronymic "extension" names for each of these line items.
In contrast, discovery schemes - like Device Tree, ACPI, and RISC-V Unified Discovery - want something distinctly different. Namely standard "key" names for options, parameters, and WARL fields; standard names for the values of a "key"; and a schema for representing a set of key-value pairs.
Any effort to standardize key names and value names across discovery schemes should be kept separate from the acronymic naming in Profiles of specific line items (aka specific key-value pairs).
It's very much the same exercise where the Profile specific options are more narrowly scoped. However, I would imagine the ones created for the Profiles to be a subset of the larger KV space as you named it. If we're going down that road, it would be good to have things consistent.
Lastly, I think everyone would agree that option / parameter / WARL field names, and their associated value names, are not "extensions". And hence should not be mixed up with the "extension" names created and used in Profiles. Any standardization of "key" names and "value" names should simply focus on usage in discovery schemes (i.e. DT, ACPI, UD). This needs to support all possible key-value pairs.
As to whether all these acronymic line items or "key-value" pairs in Profiles are "extensions", there is probably contention, but I would at least say that these are not extensions in the usual sense. And they should exist and arise solely in the context of Profiles (for the intended purpose of giving an extension-like acronymic name to each line item).
If we're going to not call them extensions, I suggest coining something we can use more accurately then. I don't have any great ideas atm.
In short, I would suggest that it is probably best to keep discussion of these two topics separate.
If you're looking at the same thing I was looking at: the "extension names" are not extensions, in the usual sense.
They are names for the values of architectural options of extensions that already exist
(which often, but not always, are the legal set of values of a WARL CSR field which must be implemented).
So these are constraints on the spec'ed options that are required to run SW on the platform.
On Fri, Jul 8, 2022 at 6:41 AM Aaron Durbin <adurbin@...
First off, please redirect me where the most appropriate forum is to discuss this topic. I am casting a fairly wide net, but that's just trying to cover those who are impacted. We can convene on a single list once it's identified.
The current Profiles (https://github.com/riscv/riscv-profiles/blob/main/profiles.adoc
) proposal has coined quite a few new extension names to describe behaviors in the specifications that do not have formal names in the existing specifications. This particular topic came up during our discussion on ACPI bindings for AIA. However, userland, kernel, and firmware specifications are all impacted by this topic so settling on a well understood future direction will reap rewards across the ecosystem.
1. Is this the path we see RISC-V taking for the future? Assigning an identifier to behaviors (and related parameters) within the specifications?
2. If so, where will the official lists of extensions be maintained? Will there be a single source of extension identifiers? Or do people need to look at every potential specification to determine the identifiers?
3. There are some extensions that require parameters besides a binary presence. e.g. Zic64b in the Profile proposal indicates 64 byte cache block sizes for all cache block management, prefetch, and zero operations. That's fine for the Profile, but an implementation that may use different size(s) would need to encode the size in such an identifier. Therefore, I think that we should incorporate these notions more formally when defining identifiers for extension parameters.
I'd love to hear people's thoughts on this topic as it is very important, and I think it could be a good way in formalizing identifiers to all these concepts that can be used throughout the RISC-V ecosystem.