summaryrefslogtreecommitdiff
path: root/arch/x86/cpu/cpu_x86.c
diff options
context:
space:
mode:
authorBin Meng <bmeng.cn@gmail.com>2015-06-17 11:15:36 +0800
committerSimon Glass <sjg@chromium.org>2015-07-14 18:03:16 -0600
commit6e6f4ce4f82501e35301322872152fe28846d743 (patch)
treefdd640b83dca49b9468abed45a648284b44ecf96 /arch/x86/cpu/cpu_x86.c
parent946c2b5259823ca6935a62e1a68b6e29a74e33f0 (diff)
downloadu-boot-imx-6e6f4ce4f82501e35301322872152fe28846d743.zip
u-boot-imx-6e6f4ce4f82501e35301322872152fe28846d743.tar.gz
u-boot-imx-6e6f4ce4f82501e35301322872152fe28846d743.tar.bz2
x86: Move MP initialization codes into a common place
Most of the MP initialization codes in arch/x86/cpu/baytrail/cpu.c is common to all x86 processors, except detect_num_cpus() which varies from cpu to cpu. Move these to arch/x86/cpu/cpu.c and implement the new 'get_count' method for baytrail and cpu_x86 drivers. Now we call cpu_get_count() in mp_init() to get the number of CPUs. Signed-off-by: Bin Meng <bmeng.cn@gmail.com> Acked-by: Simon Glass <sjg@chromium.org>
Diffstat (limited to 'arch/x86/cpu/cpu_x86.c')
-rw-r--r--arch/x86/cpu/cpu_x86.c28
1 files changed, 28 insertions, 0 deletions
diff --git a/arch/x86/cpu/cpu_x86.c b/arch/x86/cpu/cpu_x86.c
index d32ba66..0941041 100644
--- a/arch/x86/cpu/cpu_x86.c
+++ b/arch/x86/cpu/cpu_x86.c
@@ -10,6 +10,8 @@
#include <errno.h>
#include <asm/cpu.h>
+DECLARE_GLOBAL_DATA_PTR;
+
int cpu_x86_bind(struct udevice *dev)
{
struct cpu_platdata *plat = dev_get_parent_platdata(dev);
@@ -30,8 +32,34 @@ int cpu_x86_get_desc(struct udevice *dev, char *buf, int size)
return 0;
}
+static int cpu_x86_get_count(struct udevice *dev)
+{
+ int node, cpu;
+ int num = 0;
+
+ node = fdt_path_offset(gd->fdt_blob, "/cpus");
+ if (node < 0)
+ return -ENOENT;
+
+ for (cpu = fdt_first_subnode(gd->fdt_blob, node);
+ cpu >= 0;
+ cpu = fdt_next_subnode(gd->fdt_blob, cpu)) {
+ const char *device_type;
+
+ device_type = fdt_getprop(gd->fdt_blob, cpu,
+ "device_type", NULL);
+ if (!device_type)
+ continue;
+ if (strcmp(device_type, "cpu") == 0)
+ num++;
+ }
+
+ return num;
+}
+
static const struct cpu_ops cpu_x86_ops = {
.get_desc = cpu_x86_get_desc,
+ .get_count = cpu_x86_get_count,
};
static const struct udevice_id cpu_x86_ids[] = {