powerpc/prom: early_init_dt_scan_cpus() updates cpu features only once
All our cpu feature updates were done for every CPU in the device-tree, thus overwriting the cputable bits over and over again. Instead do them only for the boot CPU. Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
This commit is contained in:
parent
36ae37e343
commit
7222f779ac
|
@ -347,33 +347,34 @@ static int __init early_init_dt_scan_cpus(unsigned long node,
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
if (found >= 0) {
|
/* Not the boot CPU */
|
||||||
DBG("boot cpu: logical %d physical %d\n", found,
|
if (found < 0)
|
||||||
be32_to_cpu(intserv[found_thread]));
|
return 0;
|
||||||
boot_cpuid = found;
|
|
||||||
set_hard_smp_processor_id(found,
|
|
||||||
be32_to_cpu(intserv[found_thread]));
|
|
||||||
|
|
||||||
/*
|
DBG("boot cpu: logical %d physical %d\n", found,
|
||||||
* PAPR defines "logical" PVR values for cpus that
|
be32_to_cpu(intserv[found_thread]));
|
||||||
* meet various levels of the architecture:
|
boot_cpuid = found;
|
||||||
* 0x0f000001 Architecture version 2.04
|
set_hard_smp_processor_id(found, be32_to_cpu(intserv[found_thread]));
|
||||||
* 0x0f000002 Architecture version 2.05
|
|
||||||
* If the cpu-version property in the cpu node contains
|
|
||||||
* such a value, we call identify_cpu again with the
|
|
||||||
* logical PVR value in order to use the cpu feature
|
|
||||||
* bits appropriate for the architecture level.
|
|
||||||
*
|
|
||||||
* A POWER6 partition in "POWER6 architected" mode
|
|
||||||
* uses the 0x0f000002 PVR value; in POWER5+ mode
|
|
||||||
* it uses 0x0f000001.
|
|
||||||
*/
|
|
||||||
prop = of_get_flat_dt_prop(node, "cpu-version", NULL);
|
|
||||||
if (prop && (be32_to_cpup(prop) & 0xff000000) == 0x0f000000)
|
|
||||||
identify_cpu(0, be32_to_cpup(prop));
|
|
||||||
|
|
||||||
identical_pvr_fixup(node);
|
/*
|
||||||
}
|
* PAPR defines "logical" PVR values for cpus that
|
||||||
|
* meet various levels of the architecture:
|
||||||
|
* 0x0f000001 Architecture version 2.04
|
||||||
|
* 0x0f000002 Architecture version 2.05
|
||||||
|
* If the cpu-version property in the cpu node contains
|
||||||
|
* such a value, we call identify_cpu again with the
|
||||||
|
* logical PVR value in order to use the cpu feature
|
||||||
|
* bits appropriate for the architecture level.
|
||||||
|
*
|
||||||
|
* A POWER6 partition in "POWER6 architected" mode
|
||||||
|
* uses the 0x0f000002 PVR value; in POWER5+ mode
|
||||||
|
* it uses 0x0f000001.
|
||||||
|
*/
|
||||||
|
prop = of_get_flat_dt_prop(node, "cpu-version", NULL);
|
||||||
|
if (prop && (be32_to_cpup(prop) & 0xff000000) == 0x0f000000)
|
||||||
|
identify_cpu(0, be32_to_cpup(prop));
|
||||||
|
|
||||||
|
identical_pvr_fixup(node);
|
||||||
|
|
||||||
check_cpu_feature_properties(node);
|
check_cpu_feature_properties(node);
|
||||||
check_cpu_pa_features(node);
|
check_cpu_pa_features(node);
|
||||||
|
@ -385,7 +386,6 @@ static int __init early_init_dt_scan_cpus(unsigned long node,
|
||||||
else
|
else
|
||||||
cur_cpu_spec->cpu_features &= ~CPU_FTR_SMT;
|
cur_cpu_spec->cpu_features &= ~CPU_FTR_SMT;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue