Question regarding "boot-hartid" DT node

Heinrich Schuchardt heinrich.schuchardt at canonical.com
Thu Dec 2 09:04:52 PST 2021


On 12/2/21 17:58, Ard Biesheuvel wrote:
> On Thu, 2 Dec 2021 at 17:53, Heinrich Schuchardt
> <heinrich.schuchardt at canonical.com> wrote:
>>
>> On 12/2/21 17:20, Ard Biesheuvel wrote:
>>> On Thu, 2 Dec 2021 at 16:05, Sunil V L <sunilvl at ventanamicro.com> wrote:
>>>>
>>>> Hi All,
>>>>      I am starting this thread to discuss about the "boot-hartid" DT node
>>>>      that is being used in RISC-V Linux EFI stub.
>>>>
>>>>      As you know, the boot Hart ID is passed in a0 register to the kernel
>>>>      and hence there is actually no need to pass it via DT. However, since
>>>>      EFI stub follows EFI application calling conventions, it needs to
>>>>      know the boot Hart ID so that it can pass it to the proper kernel via
>>>>      a0. For this issue, the solution was to add "/chosen/boot-hartid" in
>>>>      DT. Both EDK2 and u-boot append this node in DT.
>>>>
>>>
>>> I think this was a mistake tbh
>>>
>>>>      But above approach causes issue for ACPI since ACPI initialization
>>>>      happens late in the proper kernel. Same is true even if we pass this
>>>>      information via SMBIOS.
>>>>
>>>
>>> It would be better to define a RISCV specific EFI protocol that the
>>> stub can call to discover the boot-hartid value. That wat, it can pass
>>> it directly, without having to rely on firmware tables.
>>
>> As discovering the current process' hartid is not a UEFI specific task
>> SBI would be a better fit.
>>
> 
> I disagree. The OS<->loader firmware interface is UEFI not SBI. So if
> the EFI stub needs to ask the firmware which boot-hartid it should
> pass in A0, it should use a EFI protocol and nothing else.
> 
> Whether or not the loader/firmware *implements* this EFI protocol by
> calling into SBI is a different matter (and likely the best choice).
> But that does not mean the EFI stub should make SBI calls directly.
>

The EFI stub does not need the boot-hartid. It is the main Linux kernel 
that does. And that kernel already implements SBI calls.

The main kernel could just try to read CSR mhartid which fails in S-mode 
and the SBI could emulate it.

Best regards

Heinrich



More information about the linux-riscv mailing list