Hi Simon, -----"Simon Glass" <s...@chromium.org> schrieb: ----- > Betreff: [PATCH 08/22] x86: mp_init: Adjust bsp_init() to return more > information > > This function is misnamed since it does not actually init the BSP. Also > it is convenient to adjust it to return a little more information. > > Rename and update the function, to allow it to return the BSP CPU device > and number, as well as the total number of CPUs. > > Signed-off-by: Simon Glass <s...@chromium.org> > --- > > arch/x86/cpu/mp_init.c | 35 ++++++++++++++++++++++------------- > include/dm/uclass.h | 2 +- > 2 files changed, 23 insertions(+), 14 deletions(-) > > diff --git a/arch/x86/cpu/mp_init.c b/arch/x86/cpu/mp_init.c > index 8b4c72bbcf2..ccb68b8b89b 100644 > --- a/arch/x86/cpu/mp_init.c > +++ b/arch/x86/cpu/mp_init.c > @@ -408,9 +408,17 @@ static int bsp_do_flight_plan(struct udevice *cpu, > struct mp_flight_plan *plan, > return ret; > } > > -static int init_bsp(struct udevice **devp) > +/** > + * get_bsp() - Get information about the bootstrap processor > + * > + * @devp: If non-NULL, returns CPU device corresponding to the BSP > + * @cpu_countp: If non-NULL, returns the total number of CPUs > + * @return CPU number of the BSP
Nit: As it could also return an error, I would add ", -ve on error" > + */ > +static int get_bsp(struct udevice **devp, int *cpu_countp) > { > char processor_name[CPU_MAX_NAME_LEN]; > + struct udevice *dev; > int apic_id; > int ret; > > @@ -418,13 +426,20 @@ static int init_bsp(struct udevice **devp) > debug("CPU: %s\n", processor_name); > > apic_id = lapicid(); > - ret = find_cpu_by_apic_id(apic_id, devp); > - if (ret) { > + ret = find_cpu_by_apic_id(apic_id, &dev); > + if (ret < 0) { > printf("Cannot find boot CPU, APIC ID %d\n", apic_id); > return ret; > } > + ret = cpu_get_count(dev); > + if (ret < 0) > + return log_msg_ret("count", ret); > + if (devp) > + *devp = dev; > + if (cpu_countp) > + *cpu_countp = ret; > > - return 0; > + return dev->req_seq; > } > > static int mp_init_cpu(struct udevice *cpu, void *unused) > @@ -463,24 +478,18 @@ int mp_init(void) > uclass_id_foreach_dev(UCLASS_CPU, cpu, uc) > cpu->req_seq = dev_read_u32_default(cpu, "reg", -1); > > - ret = init_bsp(&cpu); > - if (ret) { > + ret = get_bsp(&cpu, &num_cpus); > + if (ret < 0) { > debug("Cannot init boot CPU: err=%d\n", ret); > return ret; > } > > - num_cpus = cpu_get_count(cpu); > - if (num_cpus < 0) { > - debug("Cannot get number of CPUs: err=%d\n", num_cpus); > - return num_cpus; > - } > - > if (num_cpus < 2) > debug("Warning: Only 1 CPU is detected\n"); > > ret = check_cpu_devices(num_cpus); > if (ret) > - debug("Warning: Device tree does not describe all CPUs. Extra > ones will not be started correctly\n"); > + log_warning("Warning: Device tree does not describe all CPUs. > Extra ones will not be started correctly\n"); > > /* Copy needed parameters so that APs have a reference to the plan */ > mp_info.num_records = ARRAY_SIZE(mp_steps); > diff --git a/include/dm/uclass.h b/include/dm/uclass.h > index 70fca79b449..67ff7466c86 100644 > --- a/include/dm/uclass.h > +++ b/include/dm/uclass.h > @@ -390,7 +390,7 @@ int uclass_resolve_seq(struct udevice *dev); > * @id: enum uclass_id ID to use > * @pos: struct udevice * to hold the current device. Set to NULL when there > * are no more devices. > - * @uc: temporary uclass variable (struct udevice *) > + * @uc: temporary uclass variable (struct uclass *) > */ > #define uclass_id_foreach_dev(id, pos, uc) \ > if (!uclass_get(id, &uc)) \ > -- > 2.27.0.rc0.183.gde8f92d652-goog Reviewed-by: Wolfgang Wallner <wolfgang.wall...@br-automation.com>