x86: mp_init: Set up the CPU numbers at the start
At present each CPU is given a number when it starts itself up. While this saves a tiny amount of time by doing the device-tree read in parallel, it is confusing that the numbering happens on the fly. Move this code into mp_init() and do it at the start. Signed-off-by: Simon Glass <sjg@chromium.org> Reviewed-by: Wolfgang Wallner <wolfgang.wallner@br-automation.com> Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
This commit is contained in:
		
							parent
							
								
									36c184bd0a
								
							
						
					
					
						commit
						77a5e2d3bc
					
				|  | @ -444,12 +444,6 @@ static int mp_init_cpu(struct udevice *cpu, void *unused) | ||||||
| { | { | ||||||
| 	struct cpu_platdata *plat = dev_get_parent_platdata(cpu); | 	struct cpu_platdata *plat = dev_get_parent_platdata(cpu); | ||||||
| 
 | 
 | ||||||
| 	/*
 |  | ||||||
| 	 * Multiple APs are brought up simultaneously and they may get the same |  | ||||||
| 	 * seq num in the uclass_resolve_seq() during device_probe(). To avoid |  | ||||||
| 	 * this, set req_seq to the reg number in the device tree in advance. |  | ||||||
| 	 */ |  | ||||||
| 	cpu->req_seq = dev_read_u32_default(cpu, "reg", -1); |  | ||||||
| 	plat->ucode_version = microcode_read_rev(); | 	plat->ucode_version = microcode_read_rev(); | ||||||
| 	plat->device_id = gd->arch.x86_device; | 	plat->device_id = gd->arch.x86_device; | ||||||
| 
 | 
 | ||||||
|  | @ -465,13 +459,8 @@ int mp_init(void) | ||||||
| 	int num_aps, num_cpus; | 	int num_aps, num_cpus; | ||||||
| 	atomic_t *ap_count; | 	atomic_t *ap_count; | ||||||
| 	struct udevice *cpu; | 	struct udevice *cpu; | ||||||
| 	int ret; |  | ||||||
| 
 |  | ||||||
| 	/* This will cause the CPUs devices to be bound */ |  | ||||||
| 	struct uclass *uc; | 	struct uclass *uc; | ||||||
| 	ret = uclass_get(UCLASS_CPU, &uc); | 	int ret; | ||||||
| 	if (ret) |  | ||||||
| 		return ret; |  | ||||||
| 
 | 
 | ||||||
| 	if (IS_ENABLED(CONFIG_QFW)) { | 	if (IS_ENABLED(CONFIG_QFW)) { | ||||||
| 		ret = qemu_cpu_fixup(); | 		ret = qemu_cpu_fixup(); | ||||||
|  | @ -479,6 +468,14 @@ int mp_init(void) | ||||||
| 			return ret; | 			return ret; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | 	/*
 | ||||||
|  | 	 * Multiple APs are brought up simultaneously and they may get the same | ||||||
|  | 	 * seq num in the uclass_resolve_seq() during device_probe(). To avoid | ||||||
|  | 	 * this, set req_seq to the reg number in the device tree in advance. | ||||||
|  | 	 */ | ||||||
|  | 	uclass_id_foreach_dev(UCLASS_CPU, cpu, uc) | ||||||
|  | 		cpu->req_seq = dev_read_u32_default(cpu, "reg", -1); | ||||||
|  | 
 | ||||||
| 	ret = init_bsp(&cpu); | 	ret = init_bsp(&cpu); | ||||||
| 	if (ret) { | 	if (ret) { | ||||||
| 		debug("Cannot init boot CPU: err=%d\n", ret); | 		debug("Cannot init boot CPU: err=%d\n", ret); | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue