[PATCH v4 10/10] cmd: riscv: Add 'startharts' command to start multiple harts
Uros Stajic
uros.stajic at htecgroup.com
Tue Jan 13 09:20:08 CET 2026
On 9. 10. 25. 13:43, Yao Zi wrote:
> CAUTION: This email originated from outside of the organization. Do not click links or open attachments unless you recognize the sender and know the content is safe.
>
>
> On Tue, Aug 19, 2025 at 10:34:39AM +0000, Uros Stajic wrote:
>> From: Chao-ying Fu <cfu at mips.com>
>>
>> Introduce the 'startharts' command for RISC-V targets, which prints
>> or executes commands to power up and reset all harts and jump to
>> 0x80000000. The command supports optional cluster/core count and
>> immediate execution via the 'g' argument.
>>
>> Signed-off-by: Chao-ying Fu <cfu at mips.com>
>> Signed-off-by: Uros Stajic <uros.stajic at htecgroup.com>
>
> I noticed in OpenSBI, P8700 already implements HSM extension[1], which
> means it's usually unnecessary to take care of SMP stuff in U-Boot. Do
> you still want the new startharts command?
>
> In summary, there are two possible solutions to support SMP for RISC-V
> systems with U-Boot and OpenSBI with minimal effort, where SPL runs in M
> mode and proper U-Boot runs in S mode,
>
> 1. Release all the HARTs in SPL stage. With SMP enabled in U-Boot SPL, a
> core is randomly picked to run the main part of U-Boot SPL, and the
> others simply spin and wait.
>
> When all the initialization and load are finished, an IPI message is
> sent to each spinning HART, releasing them to the next-level
> firmware's entry (OpenSBI here), see smp_call_function called in
> spl_opensbi.c.
>
> This is usually more appropriate when your platform releases all
> HARTs when powered up, in which case you could omit the code of
> releasing all HARTs to U-Boot SPL. This requires a proper
> implementation of IPI, and proper description of all HARTs in
> devicetree.
>
> 2. Implement SMP bring-up code totally in OpenSBI. U-Boot itself is
> expected to run in single thread, so it's unnecessary to bring up any
> cores in U-Boot.
>
> RISC-V SBI defines a HART-State-Management extension (HSM). You could
> implement HART bring-up code in OpenSBI, and expecting kernel (maybe
> Linux) brings up the rest HARTs through the extension.
>
> Looking through the startharts command, P8700 does require manual steps
> to release non-boot cores, which makes option 1 less appropriate since
> it introduces more platform-specific code to U-Boot, while it has been
> already implemented in OpenSBI, becoming some duplicated code.
>
> I suggest moving to HSM extension entirely and avoiding introducing any
> SMP code in U-Boot for your port. Or, if you still prefer to implement
> it in U-Boot, please re-use the existing framework of bring up HARTs
> (smp_call_function, proper IPI, etc.). This could definitely helps
> code review and future maintenance.
>
> Best regards,
> Yao Zi
>
> [1]: https://github.com/riscv-software-src/opensbi/commit/66ab965e54017292d530033ffaae127389c45458
Hi Yao Zi,
Thank you for the detailed explanation and the reference! The startharts
command was removed in v5 and secondary harts bring-up will be handled
by OpenSBI.
Best regards,
Uros
More information about the U-Boot
mailing list