Commit 72aea393 authored by Will Deacon's avatar Will Deacon Committed by Catalin Marinas

arm64: smp: honour #address-size when parsing CPU reg property

For systems where the top 32-bits of the MPIDR are all zero, we should
allow the device-tree to specify an #address-size of 0x1 for the CPU reg
property and then zero extend the value there.

Without this patch, kvmtool breaks with the recent mpidr parsing code
introduced in 4c7aa002 ("arm64: kernel: initialise cpu_logical_map
from the DT").
Acked-by: default avatarJavi Merino <javi.merino@arm.com>
Acked-by: default avatarLorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Signed-off-by: default avatarWill Deacon <will.deacon@arm.com>
Signed-off-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
parent a84b086b
...@@ -270,6 +270,7 @@ void __init smp_init_cpus(void) ...@@ -270,6 +270,7 @@ void __init smp_init_cpus(void)
bool bootcpu_valid = false; bool bootcpu_valid = false;
while ((dn = of_find_node_by_type(dn, "cpu"))) { while ((dn = of_find_node_by_type(dn, "cpu"))) {
const u32 *cell;
u64 hwid; u64 hwid;
/* /*
...@@ -277,10 +278,12 @@ void __init smp_init_cpus(void) ...@@ -277,10 +278,12 @@ void __init smp_init_cpus(void)
* considered invalid to build a cpu_logical_map * considered invalid to build a cpu_logical_map
* entry. * entry.
*/ */
if (of_property_read_u64(dn, "reg", &hwid)) { cell = of_get_property(dn, "reg", NULL);
if (!cell) {
pr_err("%s: missing reg property\n", dn->full_name); pr_err("%s: missing reg property\n", dn->full_name);
goto next; goto next;
} }
hwid = of_read_number(cell, of_n_addr_cells(dn));
/* /*
* Non affinity bits must be set to 0 in the DT * Non affinity bits must be set to 0 in the DT
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment