Gerd Hoffmann (kraxel@redhat.com) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/3344
-gerrit
commit 26d5b56f46f04e1ed2ef9005657eceb4bb837aed Author: Gerd Hoffmann kraxel@redhat.com Date: Fri May 31 09:23:26 2013 +0200
qemu: add x86 cpu
This patch adds a qemu x86 cpu chip. It has no initialization function as this isn't needed on virtual hardware. A virtual machine can have pretty much any CPU: qemu emulates a wide range of x86 CPUs (try 'qemu -cpu ? for a list), also with 'qemu -cpu host' the guest will see a cpu which is (almost) identical to the one on the host machine. So I've added X86_VENDOR_ANY as wildcard match for the cpu_table.
Change-Id: Ib01210694b09702e41ed806f31d0033e840a863f Signed-off-by: Gerd Hoffmann kraxel@redhat.com --- src/arch/x86/include/arch/cpu.h | 1 + src/arch/x86/lib/cpu.c | 3 +++ src/cpu/Kconfig | 1 + src/cpu/Makefile.inc | 1 + src/cpu/qemu-x86/Kconfig | 22 ++++++++++++++++++++++ src/cpu/qemu-x86/Makefile.inc | 22 ++++++++++++++++++++++ src/cpu/qemu-x86/qemu.c | 37 +++++++++++++++++++++++++++++++++++++ 7 files changed, 87 insertions(+)
diff --git a/src/arch/x86/include/arch/cpu.h b/src/arch/x86/include/arch/cpu.h index 1fe12e5..7363132 100644 --- a/src/arch/x86/include/arch/cpu.h +++ b/src/arch/x86/include/arch/cpu.h @@ -138,6 +138,7 @@ static inline unsigned int cpuid_edx(unsigned int op) #define X86_VENDOR_TRANSMETA 8 #define X86_VENDOR_NSC 9 #define X86_VENDOR_SIS 10 +#define X86_VENDOR_ANY 0xfe #define X86_VENDOR_UNKNOWN 0xff
#if !defined(__PRE_RAM__) && !defined(__SMM__) diff --git a/src/arch/x86/lib/cpu.c b/src/arch/x86/lib/cpu.c index be8e38d..2a855f8 100644 --- a/src/arch/x86/lib/cpu.c +++ b/src/arch/x86/lib/cpu.c @@ -223,6 +223,9 @@ struct cpu_driver *find_cpu_driver(struct device *cpu) { return driver; } + if (X86_VENDOR_ANY == id->vendor) { + return driver; + } } } return NULL; diff --git a/src/cpu/Kconfig b/src/cpu/Kconfig index dd28cb7..d1e5237 100644 --- a/src/cpu/Kconfig +++ b/src/cpu/Kconfig @@ -14,6 +14,7 @@ if ARCH_X86 source src/cpu/amd/Kconfig source src/cpu/intel/Kconfig source src/cpu/via/Kconfig +source src/cpu/qemu-x86/Kconfig source src/cpu/x86/Kconfig
config CACHE_AS_RAM diff --git a/src/cpu/Makefile.inc b/src/cpu/Makefile.inc index 25ef424..8b9d074 100644 --- a/src/cpu/Makefile.inc +++ b/src/cpu/Makefile.inc @@ -8,6 +8,7 @@ subdirs-y += samsung subdirs-y += ti subdirs-y += via subdirs-y += x86 +subdirs-$(CONFIG_CPU_QEMU_X86) += qemu-x86
################################################################################ ## Rules for building the microcode blob in CBFS diff --git a/src/cpu/qemu-x86/Kconfig b/src/cpu/qemu-x86/Kconfig new file mode 100644 index 0000000..127a4c6 --- /dev/null +++ b/src/cpu/qemu-x86/Kconfig @@ -0,0 +1,22 @@ +## +## This file is part of the coreboot project. +## +## Copyright (C) 2010 Keith Hui buurin@gmail.com +## +## This program is free software; you can redistribute it and/or modify +## it under the terms of the GNU General Public License as published by +## the Free Software Foundation; version 2 of the License. +## +## This program is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +## GNU General Public License for more details. +## +## You should have received a copy of the GNU General Public License +## along with this program; if not, write to the Free Software +## Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +## + +config CPU_QEMU_X86 + bool + diff --git a/src/cpu/qemu-x86/Makefile.inc b/src/cpu/qemu-x86/Makefile.inc new file mode 100644 index 0000000..028f5a5 --- /dev/null +++ b/src/cpu/qemu-x86/Makefile.inc @@ -0,0 +1,22 @@ +## +## This file is part of the coreboot project. +## +## This program is free software; you can redistribute it and/or modify +## it under the terms of the GNU General Public License as published by +## the Free Software Foundation; either version 2 of the License, or +## (at your option) any later version. +## +## This program is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +## GNU General Public License for more details. +## +## You should have received a copy of the GNU General Public License +## along with this program; if not, write to the Free Software +## Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +## + +ramstage-y += qemu.c +subdirs-y += ../x86/mtrr +subdirs-y += ../x86/lapic + diff --git a/src/cpu/qemu-x86/qemu.c b/src/cpu/qemu-x86/qemu.c new file mode 100644 index 0000000..c27a1ee --- /dev/null +++ b/src/cpu/qemu-x86/qemu.c @@ -0,0 +1,37 @@ +/* + * This file is part of the coreboot project. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include <cpu/cpu.h> +#include <device/device.h> + +static struct device_operations cpu_dev_ops = { +}; + +static struct cpu_device_id cpu_table[] = { + { X86_VENDOR_ANY, 0 }, + { 0, 0 }, +}; + +static const struct cpu_driver driver __cpu_driver = { + .ops = &cpu_dev_ops, + .id_table = cpu_table, +}; + +struct chip_operations cpu_x86_qemu_ops = { + CHIP_NAME("QEMU x86 CPU") +};