
Hi York, Yes, you are right. I have tested it on others SoCs (LS1043a/LS1023a, LS2088a/LS2048a). It works fine.
So, I will remove the config and the #if condition.
Thank you and Prabhakar for the advice.
Best Regards Wenbin Song
-----Original Message----- From: York Sun Sent: Friday, December 01, 2017 1:41 AM To: Wenbin Song wenbin.song@nxp.com; Prabhakar Kushwaha prabhakar.kushwaha@nxp.com; Ran Wang ran.wang_1@nxp.com; Mingkai Hu mingkai.hu@nxp.com; u-boot@lists.denx.de Subject: Re: [PATCH 2/2] armv8: ls1043a: Discard the needless cpu nodes
On 11/29/2017 07:16 PM, Wenbin song wrote:
Using "cpu_pos_mask()" function to detect the real online cpus, and discard the needless cpu nodes on kernel dft.
Signed-off-by: Wenbin Song wenbin.song@nxp.com
arch/arm/cpu/armv8/fsl-layerscape/Kconfig | 4 ++++ arch/arm/cpu/armv8/fsl-layerscape/fdt.c | 32 +++++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+)
diff --git a/arch/arm/cpu/armv8/fsl-layerscape/Kconfig b/arch/arm/cpu/armv8/fsl-layerscape/Kconfig index 47145a2432..971a98c6cc 100644 --- a/arch/arm/cpu/armv8/fsl-layerscape/Kconfig +++ b/arch/arm/cpu/armv8/fsl-layerscape/Kconfig @@ -176,6 +176,10 @@ config HAS_FEATURE_ENHANCED_MSI bool default y if ARCH_LS1043A
+config DISCARD_OFFLINE_CPU_NODES
- bool
- default y if ARCH_LS1043A
menu "Layerscape PPA" config FSL_LS_PPA bool "FSL Layerscape PPA firmware support" diff --git a/arch/arm/cpu/armv8/fsl-layerscape/fdt.c b/arch/arm/cpu/armv8/fsl-layerscape/fdt.c index 33f3e64848..241f0abe18 100644 --- a/arch/arm/cpu/armv8/fsl-layerscape/fdt.c +++ b/arch/arm/cpu/armv8/fsl-layerscape/fdt.c @@ -44,6 +44,38 @@ void ft_fixup_cpu(void *blob) int addr_cells; u64 val, core_id; size_t *boot_code_size = &(__secondary_boot_code_size);
+#if defined(CONFIG_DISCARD_OFFLINE_CPU_NODES)
- u32 mask = cpu_pos_mask();
- int off_prev = -1;
- int pos;
- off = fdt_path_offset(blob, "/cpus");
- if (off < 0) {
puts("couldn't find /cpus node\n");
return;
- }
- fdt_support_default_count_cells(blob, off, &addr_cells, NULL);
- off = fdt_node_offset_by_prop_value(blob, off_prev, "device_type",
"cpu", 4);
- while (off != -FDT_ERR_NOTFOUND) {
reg = (fdt32_t *)fdt_getprop(blob, off, "reg", 0);
if (reg) {
core_id = fdt_read_number(reg, addr_cells);
pos = ((core_id & 0xff00) >> 5) + (core_id & 0xff);
if (!test_bit(pos, &mask)) {
fdt_del_node(blob, off);
off = off_prev;
}
}
off_prev = off;
off = fdt_node_offset_by_prop_value(blob, off_prev,
"device_type", "cpu", 4);
- }
+#endif
#if defined(CONFIG_ARMV8_SEC_FIRMWARE_SUPPORT) && \ defined(CONFIG_SEC_FIRMWARE_ARMV8_PSCI) int node;
Wenbin,
Using topology registers to identify the existence of cores is correct. Do you need the new config option to gate the code? It is a correct operation for all SoCs, isn't it?
York