[PATCH] lib: sbi: Fix version dependency for Sscofpmf

Samuel Holland samuel at sholland.org
Thu Jun 16 22:19:37 PDT 2022


On 6/16/22 11:56 PM, Anup Patel wrote:
> On Fri, Jun 17, 2022 at 9:58 AM Samuel Holland <samuel at sholland.org> wrote:
>>
>> Hi Anup,
>>
>> On 6/16/22 11:12 PM, Anup Patel wrote:
>>> On Mon, Jun 13, 2022 at 6:08 AM Samuel Holland <samuel at sholland.org> wrote:
>>>>
>>>> mcounteren was added in the privileged spec v1.10 and mcountinhibit was
>>>> added in v1.11. Sscofpmf does not depend on anything in v1.12, so the
>>>> minimum privileged spec version should have been v1.11.
>>>>
>>>> Fixes: d4b563c881d6 ("lib: sbi: Remove MCOUNTEREN and SCOUNTEREN hart features")
>>>> Signed-off-by: Samuel Holland <samuel at sholland.org>
>>>
>>> I think there is some confusion here.
>>>
>>> The mcounteren and mcountinhibit are not part of the Sscofpmf extension and
>>> OpenSBI PMU implementation does support platforms without Sscofpmf.
>>
>> I am aware of that. I am referencing the comment on the previous line, and the
>> code that was changed by the referenced commit. The code, as originally written,
>> attempted to optimize out the Sscofpmf check based on the presence of those two
>> CSRs.
>>
>> When the hart features were refactored, the CSR feature was replaced by the
>> wrong version, i.e. the behavior was accidentally changed by the refactoring.
>>
>> This patch only attempts to restore the behavior from before the refactoring. If
>> that behavior was wrong to start with, that is a different matter.
> 
> I agree there is nothing in Sscofpmf which prevents a Priv v1.11 HART from
> implementing it so this now becomes a strange choice on the OpenSBI side.
> 
> IMO, the previous behaviour of detecting and using Sscofpmf irrespective
> of the Priv spec version was wrong because Sscofpmf is defined assuming
> Priv v1.12 spec. In fact, that's why Sscofpmf defines bits for filtering events
> in VS/VU modes.
> 
> Is there a case where we would need Sscofpmf for a Priv v1.11 HART ?

I was attempting to add C906 PMU support as an errata on top of the standard
extension, which is when I noticed this check. (C906 supports v1.11). However, I
realized C906's custom overflow handling is different enough from Sscofpmf that
I should implement it separately.

So I do not know if a v1.11+Sscofpmf case does or should exist. Maybe the check
is correct now, in which case the comment is a bit misleading.

Regards,
Samuel

>>>> ---
>>>>
>>>>  lib/sbi/sbi_hart.c | 2 +-
>>>>  1 file changed, 1 insertion(+), 1 deletion(-)
>>>>
>>>> diff --git a/lib/sbi/sbi_hart.c b/lib/sbi/sbi_hart.c
>>>> index de86fee..5bc6d52 100644
>>>> --- a/lib/sbi/sbi_hart.c
>>>> +++ b/lib/sbi/sbi_hart.c
>>>> @@ -645,7 +645,7 @@ __mhpm_skip:
>>>>                 hfeatures->priv_version = SBI_HART_PRIV_VER_1_12;
>>>>
>>>>         /* Counter overflow/filtering is not useful without mcounter/inhibit */
>>>> -       if (hfeatures->priv_version >= SBI_HART_PRIV_VER_1_12) {
>>>> +       if (hfeatures->priv_version >= SBI_HART_PRIV_VER_1_11) {
>>>>                 /* Detect if hart supports sscofpmf */
>>>>                 csr_read_allowed(CSR_SCOUNTOVF, (unsigned long)&trap);
>>>>                 if (!trap.cause)
>>>> --
>>>> 2.35.1
>>>>
>>>>
>>>> --
>>>> opensbi mailing list
>>>> opensbi at lists.infradead.org
>>>> http://lists.infradead.org/mailman/listinfo/opensbi
>>




More information about the opensbi mailing list