mirror of
https://github.com/brain-hackers/u-boot-brain
synced 2024-07-15 15:46:16 +09:00
![Alexander Graf](/assets/img/avatar_default.png)
For SMBIOS tables we need to know the CPU family as well as CPU IDs. This patches allocates some space for them in the cpu device and populates it on x86. Signed-off-by: Alexander Graf <agraf@suse.de> Reviewed-by: Simon Glass <sjg@chromium.org> Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
82 lines
1.5 KiB
C
82 lines
1.5 KiB
C
/*
|
|
* Copyright (C) 2015, Bin Meng <bmeng.cn@gmail.com>
|
|
*
|
|
* SPDX-License-Identifier: GPL-2.0+
|
|
*/
|
|
|
|
#include <common.h>
|
|
#include <cpu.h>
|
|
#include <dm.h>
|
|
#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);
|
|
struct cpuid_result res;
|
|
|
|
plat->cpu_id = fdtdec_get_int(gd->fdt_blob, dev->of_offset,
|
|
"intel,apic-id", -1);
|
|
plat->family = gd->arch.x86;
|
|
res = cpuid(1);
|
|
plat->id[0] = res.eax;
|
|
plat->id[1] = res.edx;
|
|
|
|
return 0;
|
|
}
|
|
|
|
int cpu_x86_get_desc(struct udevice *dev, char *buf, int size)
|
|
{
|
|
if (size < CPU_MAX_NAME_LEN)
|
|
return -ENOSPC;
|
|
|
|
cpu_get_name(buf);
|
|
|
|
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[] = {
|
|
{ .compatible = "cpu-x86" },
|
|
{ }
|
|
};
|
|
|
|
U_BOOT_DRIVER(cpu_x86_drv) = {
|
|
.name = "cpu_x86",
|
|
.id = UCLASS_CPU,
|
|
.of_match = cpu_x86_ids,
|
|
.bind = cpu_x86_bind,
|
|
.ops = &cpu_x86_ops,
|
|
};
|