* [PATCH] riscv: Skip riscv_cpu_setup() when CPU driver is disabled
@ 2026-04-30 11:57 Michal Simek
2026-05-01 8:54 ` Yao Zi
0 siblings, 1 reply; 4+ messages in thread
From: Michal Simek @ 2026-04-30 11:57 UTC (permalink / raw)
To: u-boot, git; +Cc: Leo, Rick Chen, Tom Rini, Yao Zi
Building on commit c64fc632a86a ("riscv: cpu: Use CONFIG_IS_ENABLED(CPU)
instead of plain ifdef"), add an early return in riscv_cpu_setup() when
CONFIG_CPU is not enabled. This allows platforms to save code space in
SPL by disabling CONFIG_SPL_CPU.
The compiler's dead-code elimination combined with --gc-sections
removes the unreachable code and all associated static data,
achieving significant size reduction without preprocessor guards:
spl/u-boot-spl:all -4332 spl/u-boot-spl:rodata -2872
spl/u-boot-spl:text -1460
Signed-off-by: Michal Simek <michal.simek@amd.com>
---
arch/riscv/cpu/cpu.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/arch/riscv/cpu/cpu.c b/arch/riscv/cpu/cpu.c
index bbadd0c9a469..3bec7c7cb6d0 100644
--- a/arch/riscv/cpu/cpu.c
+++ b/arch/riscv/cpu/cpu.c
@@ -638,6 +638,9 @@ int riscv_cpu_setup(void)
const char *isa, **exts;
struct udevice *dev;
+ if (!CONFIG_IS_ENABLED(CPU))
+ return 0;
+
uclass_find_first_device(UCLASS_CPU, &dev);
if (!dev) {
debug("unable to find the RISC-V cpu device\n");
--
2.43.0
base-commit: ab9f3cb4de54c65bde394e31469c75ec89b18d5b
^ permalink raw reply related [flat|nested] 4+ messages in thread* Re: [PATCH] riscv: Skip riscv_cpu_setup() when CPU driver is disabled 2026-04-30 11:57 [PATCH] riscv: Skip riscv_cpu_setup() when CPU driver is disabled Michal Simek @ 2026-05-01 8:54 ` Yao Zi 2026-05-04 9:00 ` Michal Simek 0 siblings, 1 reply; 4+ messages in thread From: Yao Zi @ 2026-05-01 8:54 UTC (permalink / raw) To: Michal Simek, u-boot, git; +Cc: Leo, Rick Chen, Tom Rini On Thu, Apr 30, 2026 at 01:57:51PM +0200, Michal Simek wrote: > Building on commit c64fc632a86a ("riscv: cpu: Use CONFIG_IS_ENABLED(CPU) > instead of plain ifdef"), add an early return in riscv_cpu_setup() when > CONFIG_CPU is not enabled. This allows platforms to save code space in > SPL by disabling CONFIG_SPL_CPU. > > The compiler's dead-code elimination combined with --gc-sections > removes the unreachable code and all associated static data, > achieving significant size reduction without preprocessor guards: > > spl/u-boot-spl:all -4332 spl/u-boot-spl:rodata -2872 > spl/u-boot-spl:text -1460 > > Signed-off-by: Michal Simek <michal.simek@amd.com> > --- > > arch/riscv/cpu/cpu.c | 3 +++ > 1 file changed, 3 insertions(+) > > diff --git a/arch/riscv/cpu/cpu.c b/arch/riscv/cpu/cpu.c > index bbadd0c9a469..3bec7c7cb6d0 100644 > --- a/arch/riscv/cpu/cpu.c > +++ b/arch/riscv/cpu/cpu.c > @@ -638,6 +638,9 @@ int riscv_cpu_setup(void) > const char *isa, **exts; > struct udevice *dev; > > + if (!CONFIG_IS_ENABLED(CPU)) > + return 0; Should we return zero here, or -ENOENT like the original behavior when no UCLASS_CPU device is found? Otherwise the patch looks good to me. Reviewed-by: Yao Zi <me@ziyao.cc> > + > uclass_find_first_device(UCLASS_CPU, &dev); > if (!dev) { > debug("unable to find the RISC-V cpu device\n"); > -- > 2.43.0 > > base-commit: ab9f3cb4de54c65bde394e31469c75ec89b18d5b ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] riscv: Skip riscv_cpu_setup() when CPU driver is disabled 2026-05-01 8:54 ` Yao Zi @ 2026-05-04 9:00 ` Michal Simek 2026-05-04 20:16 ` Yao Zi 0 siblings, 1 reply; 4+ messages in thread From: Michal Simek @ 2026-05-04 9:00 UTC (permalink / raw) To: Yao Zi, u-boot, git; +Cc: Leo, Rick Chen, Tom Rini On 5/1/26 10:54, Yao Zi wrote: > On Thu, Apr 30, 2026 at 01:57:51PM +0200, Michal Simek wrote: >> Building on commit c64fc632a86a ("riscv: cpu: Use CONFIG_IS_ENABLED(CPU) >> instead of plain ifdef"), add an early return in riscv_cpu_setup() when >> CONFIG_CPU is not enabled. This allows platforms to save code space in >> SPL by disabling CONFIG_SPL_CPU. >> >> The compiler's dead-code elimination combined with --gc-sections >> removes the unreachable code and all associated static data, >> achieving significant size reduction without preprocessor guards: >> >> spl/u-boot-spl:all -4332 spl/u-boot-spl:rodata -2872 >> spl/u-boot-spl:text -1460 >> >> Signed-off-by: Michal Simek <michal.simek@amd.com> >> --- >> >> arch/riscv/cpu/cpu.c | 3 +++ >> 1 file changed, 3 insertions(+) >> >> diff --git a/arch/riscv/cpu/cpu.c b/arch/riscv/cpu/cpu.c >> index bbadd0c9a469..3bec7c7cb6d0 100644 >> --- a/arch/riscv/cpu/cpu.c >> +++ b/arch/riscv/cpu/cpu.c >> @@ -638,6 +638,9 @@ int riscv_cpu_setup(void) >> const char *isa, **exts; >> struct udevice *dev; >> >> + if (!CONFIG_IS_ENABLED(CPU)) >> + return 0; > > Should we return zero here, or -ENOENT like the original behavior when > no UCLASS_CPU device is found? if you put there error value then when CONFIG_CPU is disable you get boot hang which is likely what you don't want to see right? initcall_run_f(): initcall initf_dm() failed ### ERROR ### Please RESET the board ### Thanks, Michal ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] riscv: Skip riscv_cpu_setup() when CPU driver is disabled 2026-05-04 9:00 ` Michal Simek @ 2026-05-04 20:16 ` Yao Zi 0 siblings, 0 replies; 4+ messages in thread From: Yao Zi @ 2026-05-04 20:16 UTC (permalink / raw) To: Michal Simek, u-boot, git; +Cc: Leo, Rick Chen, Tom Rini On Mon, May 04, 2026 at 11:00:17AM +0200, Michal Simek wrote: > > > On 5/1/26 10:54, Yao Zi wrote: > > On Thu, Apr 30, 2026 at 01:57:51PM +0200, Michal Simek wrote: > > > Building on commit c64fc632a86a ("riscv: cpu: Use CONFIG_IS_ENABLED(CPU) > > > instead of plain ifdef"), add an early return in riscv_cpu_setup() when > > > CONFIG_CPU is not enabled. This allows platforms to save code space in > > > SPL by disabling CONFIG_SPL_CPU. > > > > > > The compiler's dead-code elimination combined with --gc-sections > > > removes the unreachable code and all associated static data, > > > achieving significant size reduction without preprocessor guards: > > > > > > spl/u-boot-spl:all -4332 spl/u-boot-spl:rodata -2872 > > > spl/u-boot-spl:text -1460 > > > > > > Signed-off-by: Michal Simek <michal.simek@amd.com> > > > --- > > > > > > arch/riscv/cpu/cpu.c | 3 +++ > > > 1 file changed, 3 insertions(+) > > > > > > diff --git a/arch/riscv/cpu/cpu.c b/arch/riscv/cpu/cpu.c > > > index bbadd0c9a469..3bec7c7cb6d0 100644 > > > --- a/arch/riscv/cpu/cpu.c > > > +++ b/arch/riscv/cpu/cpu.c > > > @@ -638,6 +638,9 @@ int riscv_cpu_setup(void) > > > const char *isa, **exts; > > > struct udevice *dev; > > > + if (!CONFIG_IS_ENABLED(CPU)) > > > + return 0; > > > > Should we return zero here, or -ENOENT like the original behavior when > > no UCLASS_CPU device is found? My bad, the original return value when CONFIG_CPU is disabled should be -ENODEV instead of -ENOENT. But in case that CONFIG_CPU is disabled, -EOPNOTSUPP might be a better outcome. I don't have a strong opinion on this. > if you put there error value then when CONFIG_CPU is disable you get boot > hang which is likely what you don't want to see right? > > initcall_run_f(): initcall initf_dm() failed > ### ERROR ### Please RESET the board ### This should be the original behavior, i.e. U-Boot built with CONFIG_CPU=n and CONFIG_EVENT=y is broken without this patch, too, right? int riscv_cpu_setup(void) { int ret = -ENODEV, ext_count, i; const char *isa, **exts; struct udevice *dev; uclass_find_first_device(UCLASS_CPU, &dev); if (!dev) { debug("unable to find the RISC-V cpu device\n"); return ret; } ... } EVENT_SPY_SIMPLE(EVT_DM_POST_INIT_F, riscv_cpu_setup); When CONFIG_CPU is disabled, the call to uclass_find_first_device() would always find no device, and riscv_cpu_setup() would return with -ENODEV, causing the call to event_notify_null() in dm_init_and_scan() to fail. We could fix this by guarding the instantiation of EVENT_SPY_SIMPLE() within #if CONFIG_IS_ENABLED(CPU). I consider returning with error a useful behavior, since there are raw calls to this function (board/[starfive,thead]/*/spl.c), in which cases a correct return value suggests something goes wrong, thus might help debugging, for example, if someone turns off CONFIG_CPU but doesn't expect the side effects. Anyway, whether you agree on the return value or not, it should be mentioned in the commit message that U-Boot built with CONFIG_CPU=n and COFNIG_EVENT=y is broken without the patch. > Thanks, > Michal Best regards, Yao Zi ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2026-05-04 20:17 UTC | newest] Thread overview: 4+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2026-04-30 11:57 [PATCH] riscv: Skip riscv_cpu_setup() when CPU driver is disabled Michal Simek 2026-05-01 8:54 ` Yao Zi 2026-05-04 9:00 ` Michal Simek 2026-05-04 20:16 ` Yao Zi
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.