[PATCH 1/3] RISC-V: Add 'Smstateen' extension and its CSRs
Tsukasa OI
research_trasio@irq.a4lg.com
Fri Feb 25 10:51:03 GMT 2022
On 2022/02/25 15:32, Nelson Chu wrote:
>
> The privileged spec doesn't define these CSRs, they are defined and
> controlled by smstaeen extension. So I think the defined and aborted
> versions of these DECLARE_CSR should be PRIV_SPEC_CLASS_NONE, just
> like other unprivileged CSRs did. In the future, they should be
> controlled by smstaeen extension versions, but for now we don't need
> to care about this.
>
> Thanks
> Nelson
>
>> /* Dropped CSRs. */
>> DECLARE_CSR(mbase, CSR_MBASE, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_1P10)
>> DECLARE_CSR(mbound, CSR_MBOUND, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_1P10)
>> --
>> 2.32.0
>>
>
'Sscofpmf' patch (PATCH 2/3) is modified as per your advise.
For the rest, I noticed that there are hypervisor-related CSRs.
For consistency with CSR_CLASS_I CSRs, I think hypervisor-related CSRs
should be masked with privileged architecture version 1.12. However, if
need_check_version == true (gas/config/tc-riscv.c) for specific CSR
class, there's no option to set PRIV_SPEC_CLASS_NONE because it would
just mean "not supported in any version".
Separating CSR classes (H/non-H) might be an option. However, I felt
this is "too much".
Option A: Set minimum privileged specification to 1.9.1 for non-H CSRs
Option B: Disable version checking on certain conditions
[Option A]
How about this?
- For 'Sscofpmf' (with no hypervisor-related CSRs),
use PRIV_SPEC_CLASS_NONE, PRIV_SPEC_CLASS_NONE
with need_check_version = false (as you recommended).
- For 'Smstateen' and 'Sstc' (with some hypervisor-related CSRs),
need_check_version = true and...
- Use PRIV_SPEC_CLASS_1P12, PRIV_SPEC_CLASS_DRAFT
for hypervisor-related CSRs
(mask with both given extension and Privileged version 1.12)
- Use PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT
for other CSRs
(much like unprivileged counter CSRs like `cycle')
That means my 'Smstateen' patch (PATCH 1/3) will not be modified.
On the other hand, 'Sstc' patch (PATCH 3/3) will be (relax minimum
privileged version from 1.11 to 1.9.1 [minimum supported]).
[Option B]
Another option is to disable version checking if both define_version and
abort_version are PRIV_SPEC_CLASS_NONE (or more simply, if
define_version is PRIV_SPEC_CLASS_NONE). With current design, that
would remove `need_check_version' variable too.
TBH, I see both options look equally good but have their cons.
I would like to hear everyone else's (including your) thoughts.
Thanks,
Tsukasa
More information about the Binutils
mailing list