[linux-yocto] [PATCH 43/87] LSI axm55xx: Add ability to parse specific core numbers in the DTB
Paul Butler
butler.paul at gmail.com
Mon May 27 09:56:14 PDT 2013
From: David Mercado <david.mercado at windriver.com>
Modified arch/arm/mach-axxia/platsmp.c to be able to parse the "cpu"
entries in the DTB and boot the specified core numbers.
Signed-off-by: David Mercado <david.mercado at windriver.com>
Signed-off-by: Paul Butler <paul.butler at windriver.com>
---
arch/arm/mach-axxia/platsmp.c | 53 +++++++++++++------------------------------
1 file changed, 16 insertions(+), 37 deletions(-)
diff --git a/arch/arm/mach-axxia/platsmp.c b/arch/arm/mach-axxia/platsmp.c
index af344b9..3b202b9 100644
--- a/arch/arm/mach-axxia/platsmp.c
+++ b/arch/arm/mach-axxia/platsmp.c
@@ -14,6 +14,7 @@
#include <linux/device.h>
#include <linux/io.h>
#include <linux/jiffies.h>
+#include <linux/of.h>
#include <linux/of_fdt.h>
#include <asm/smp_plat.h>
#include <asm/cacheflush.h>
@@ -125,53 +126,31 @@ int __cpuinit boot_secondary(unsigned int cpu, struct task_struct *idle)
return pen_release != -1 ? -ENOSYS : 0;
}
-static int __init axxia_dt_cpus_num(unsigned long node, const char *uname,
- int depth, void *data)
-{
- static int prev_depth = -1;
- static int nr_cpus = -1;
-
- if (prev_depth > depth && nr_cpus > 0)
- return nr_cpus;
-
- if (nr_cpus < 0 && strcmp(uname, "cpus") == 0)
- nr_cpus = 0;
-
- if (nr_cpus >= 0) {
- const char *device_type = of_get_flat_dt_prop(node,
- "device_type", NULL);
-
- if (device_type && strcmp(device_type, "cpu") == 0)
- nr_cpus++;
- }
-
- prev_depth = depth;
-
- return 0;
-}
-
/*
* Initialise the CPU possible map early - this describes the CPUs
* which may be present or become present in the system.
*/
void __init smp_init_cpus(void)
{
- int ncores = 0, i;
-
- ncores = of_scan_flat_dt(axxia_dt_cpus_num, NULL);
+ int ncores = 0;
+ struct device_node *np;
+ u32 cpu_num;
- if (ncores < 2)
- return;
-
- if (ncores > nr_cpu_ids) {
- pr_warn("SMP: %u cores greater than maximum (%u), clipping\n",
+ for_each_node_by_name(np, "cpu") {
+ if (++ncores > nr_cpu_ids) {
+ pr_warn("SMP: More cores (%u) in DTB than max (%u)\n",
ncores, nr_cpu_ids);
- ncores = nr_cpu_ids;
+ break;
+ }
+ if (!of_property_read_u32(np, "reg", &cpu_num)) {
+ if (cpu_num >= 0 && cpu_num < 16)
+ set_cpu_possible(cpu_num, true);
+ else
+ pr_warn("SMP: Invalid cpu number (%u)\n",
+ cpu_num);
+ }
}
- for (i = 0; i < ncores; ++i)
- set_cpu_possible(i, true);
-
set_smp_cross_call(axxia_gic_raise_softirq);
}
--
1.8.3
More information about the linux-yocto
mailing list