x86: dm: Clean up cpu drivers
This commit does the following to clean up x86 cpu dm drivers: - Move cpu_x86 driver codes from arch/x86/cpu/cpu.c to a dedicated file arch/x86/cpu/cpu_x86.c - Rename x86_cpu_get_desc() to cpu_x86_get_desc() to keep consistent naming with other dm drivers - Add a new cpu_x86_bind() in the cpu_x86 driver which does exactly the same as the one in the intel baytrail cpu driver - Update intel baytrail cpu driver to use cpu_x86_get_desc() and cpu_x86_bind() Signed-off-by: Bin Meng <bmeng.cn@gmail.com> Acked-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
cb5cbfd503
commit
be3f06bcc4
|
@ -10,7 +10,7 @@
|
||||||
|
|
||||||
extra-y = start.o
|
extra-y = start.o
|
||||||
obj-$(CONFIG_X86_RESET_VECTOR) += resetvec.o start16.o
|
obj-$(CONFIG_X86_RESET_VECTOR) += resetvec.o start16.o
|
||||||
obj-y += interrupts.o cpu.o call64.o
|
obj-y += interrupts.o cpu.o cpu_x86.o call64.o
|
||||||
|
|
||||||
obj-$(CONFIG_INTEL_BAYTRAIL) += baytrail/
|
obj-$(CONFIG_INTEL_BAYTRAIL) += baytrail/
|
||||||
obj-$(CONFIG_SYS_COREBOOT) += coreboot/
|
obj-$(CONFIG_SYS_COREBOOT) += coreboot/
|
||||||
|
|
|
@ -10,6 +10,7 @@
|
||||||
#include <cpu.h>
|
#include <cpu.h>
|
||||||
#include <dm.h>
|
#include <dm.h>
|
||||||
#include <asm/cpu.h>
|
#include <asm/cpu.h>
|
||||||
|
#include <asm/cpu_x86.h>
|
||||||
#include <asm/lapic.h>
|
#include <asm/lapic.h>
|
||||||
#include <asm/mp.h>
|
#include <asm/mp.h>
|
||||||
#include <asm/msr.h>
|
#include <asm/msr.h>
|
||||||
|
@ -175,18 +176,8 @@ static int baytrail_get_info(struct udevice *dev, struct cpu_info *info)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int cpu_x86_baytrail_bind(struct udevice *dev)
|
|
||||||
{
|
|
||||||
struct cpu_platdata *plat = dev_get_parent_platdata(dev);
|
|
||||||
|
|
||||||
plat->cpu_id = fdtdec_get_int(gd->fdt_blob, dev->of_offset,
|
|
||||||
"intel,apic-id", -1);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static const struct cpu_ops cpu_x86_baytrail_ops = {
|
static const struct cpu_ops cpu_x86_baytrail_ops = {
|
||||||
.get_desc = x86_cpu_get_desc,
|
.get_desc = cpu_x86_get_desc,
|
||||||
.get_info = baytrail_get_info,
|
.get_info = baytrail_get_info,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -199,7 +190,7 @@ U_BOOT_DRIVER(cpu_x86_baytrail_drv) = {
|
||||||
.name = "cpu_x86_baytrail",
|
.name = "cpu_x86_baytrail",
|
||||||
.id = UCLASS_CPU,
|
.id = UCLASS_CPU,
|
||||||
.of_match = cpu_x86_baytrail_ids,
|
.of_match = cpu_x86_baytrail_ids,
|
||||||
.bind = cpu_x86_baytrail_bind,
|
.bind = cpu_x86_bind,
|
||||||
.probe = cpu_x86_baytrail_probe,
|
.probe = cpu_x86_baytrail_probe,
|
||||||
.ops = &cpu_x86_baytrail_ops,
|
.ops = &cpu_x86_baytrail_ops,
|
||||||
};
|
};
|
||||||
|
|
|
@ -21,8 +21,6 @@
|
||||||
|
|
||||||
#include <common.h>
|
#include <common.h>
|
||||||
#include <command.h>
|
#include <command.h>
|
||||||
#include <cpu.h>
|
|
||||||
#include <dm.h>
|
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <malloc.h>
|
#include <malloc.h>
|
||||||
#include <asm/control_regs.h>
|
#include <asm/control_regs.h>
|
||||||
|
@ -540,16 +538,6 @@ char *cpu_get_name(char *name)
|
||||||
return ptr;
|
return ptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
int x86_cpu_get_desc(struct udevice *dev, char *buf, int size)
|
|
||||||
{
|
|
||||||
if (size < CPU_MAX_NAME_LEN)
|
|
||||||
return -ENOSPC;
|
|
||||||
|
|
||||||
cpu_get_name(buf);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int default_print_cpuinfo(void)
|
int default_print_cpuinfo(void)
|
||||||
{
|
{
|
||||||
printf("CPU: %s, vendor %s, device %xh\n",
|
printf("CPU: %s, vendor %s, device %xh\n",
|
||||||
|
@ -642,19 +630,3 @@ int cpu_init_r(void)
|
||||||
{
|
{
|
||||||
return x86_init_cpus();
|
return x86_init_cpus();
|
||||||
}
|
}
|
||||||
|
|
||||||
static const struct cpu_ops cpu_x86_ops = {
|
|
||||||
.get_desc = x86_cpu_get_desc,
|
|
||||||
};
|
|
||||||
|
|
||||||
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,
|
|
||||||
.ops = &cpu_x86_ops,
|
|
||||||
};
|
|
||||||
|
|
|
@ -0,0 +1,48 @@
|
||||||
|
/*
|
||||||
|
* 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>
|
||||||
|
|
||||||
|
int cpu_x86_bind(struct udevice *dev)
|
||||||
|
{
|
||||||
|
struct cpu_platdata *plat = dev_get_parent_platdata(dev);
|
||||||
|
|
||||||
|
plat->cpu_id = fdtdec_get_int(gd->fdt_blob, dev->of_offset,
|
||||||
|
"intel,apic-id", -1);
|
||||||
|
|
||||||
|
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 const struct cpu_ops cpu_x86_ops = {
|
||||||
|
.get_desc = cpu_x86_get_desc,
|
||||||
|
};
|
||||||
|
|
||||||
|
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,
|
||||||
|
};
|
|
@ -196,20 +196,6 @@ const char *cpu_vendor_name(int vendor);
|
||||||
*/
|
*/
|
||||||
char *cpu_get_name(char *name);
|
char *cpu_get_name(char *name);
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* x86_cpu_get_desc() - Get a description string for an x86 CPU
|
|
||||||
*
|
|
||||||
* This uses cpu_get_name() and is suitable to use as the get_desc() method for
|
|
||||||
* the CPU uclass.
|
|
||||||
*
|
|
||||||
* @dev: Device to check (UCLASS_CPU)
|
|
||||||
* @buf: Buffer to place string
|
|
||||||
* @size: Size of string space
|
|
||||||
* @return 0 if OK, -ENOSPC if buffer is too small, other -ve on error
|
|
||||||
*/
|
|
||||||
int x86_cpu_get_desc(struct udevice *dev, char *buf, int size);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* cpu_call64() - Jump to a 64-bit Linux kernel (internal function)
|
* cpu_call64() - Jump to a 64-bit Linux kernel (internal function)
|
||||||
*
|
*
|
||||||
|
|
|
@ -0,0 +1,34 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2015, Bin Meng <bmeng.cn@gmail.com>
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: GPL-2.0+
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _ASM_CPU_X86_H
|
||||||
|
#define _ASM_CPU_X86_H
|
||||||
|
|
||||||
|
/**
|
||||||
|
* cpu_x86_bind() - Bind an x86 CPU with the driver
|
||||||
|
*
|
||||||
|
* This updates cpu device's platform data with information from device tree,
|
||||||
|
* like the processor local apic id.
|
||||||
|
*
|
||||||
|
* @dev: Device to check (UCLASS_CPU)
|
||||||
|
* @return 0 always
|
||||||
|
*/
|
||||||
|
int cpu_x86_bind(struct udevice *dev);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* cpu_x86_get_desc() - Get a description string for an x86 CPU
|
||||||
|
*
|
||||||
|
* This uses cpu_get_name() and is suitable to use as the get_desc() method for
|
||||||
|
* the CPU uclass.
|
||||||
|
*
|
||||||
|
* @dev: Device to check (UCLASS_CPU)
|
||||||
|
* @buf: Buffer to place string
|
||||||
|
* @size: Size of string space
|
||||||
|
* @return: 0 if OK, -ENOSPC if buffer is too small, other -ve on error
|
||||||
|
*/
|
||||||
|
int cpu_x86_get_desc(struct udevice *dev, char *buf, int size);
|
||||||
|
|
||||||
|
#endif /* _ASM_CPU_X86_H */
|
Loading…
Reference in New Issue