[PATCH 08/22] x86: mp_init: Adjust bsp_init() to return more information

Wolfgang Wallner wolfgang.wallner at br-automation.com
Wed Jun 10 15:26:24 CEST 2020


Hi Simon,

-----"Simon Glass" <sjg at 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 <sjg at 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.wallner at br-automation.com>


More information about the U-Boot mailing list