From cbf30736b60c6076a82ff256b1bd5246a6af83c0 Mon Sep 17 00:00:00 2001 From: Gerd Hoffmann Date: Fri, 31 May 2013 09:23:26 +0200 Subject: 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 Reviewed-on: http://review.coreboot.org/3344 Tested-by: build bot (Jenkins) Reviewed-by: Stefan Reinauer --- src/arch/x86/include/arch/cpu.h | 1 + src/arch/x86/lib/cpu.c | 2 ++ src/cpu/Kconfig | 1 + src/cpu/Makefile.inc | 1 + src/cpu/qemu-x86/Kconfig | 21 +++++++++++++++++++++ src/cpu/qemu-x86/Makefile.inc | 21 +++++++++++++++++++++ src/cpu/qemu-x86/qemu.c | 37 +++++++++++++++++++++++++++++++++++++ 7 files changed, 84 insertions(+) create mode 100644 src/cpu/qemu-x86/Kconfig create mode 100644 src/cpu/qemu-x86/Makefile.inc create mode 100644 src/cpu/qemu-x86/qemu.c (limited to 'src') diff --git a/src/arch/x86/include/arch/cpu.h b/src/arch/x86/include/arch/cpu.h index 1fe12e5230..7363132a19 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 be8e38da13..bddfe1ae12 100644 --- a/src/arch/x86/lib/cpu.c +++ b/src/arch/x86/lib/cpu.c @@ -223,6 +223,8 @@ 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 dd28cb7ff8..d1e52376dd 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 25ef424f35..8b9d0747c8 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 0000000000..6c5c3fd4d4 --- /dev/null +++ b/src/cpu/qemu-x86/Kconfig @@ -0,0 +1,21 @@ +## +## This file is part of the coreboot project. +## +## Copyright (C) 2013 Gerd Hoffmann +## +## 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 0000000000..e206b4d72f --- /dev/null +++ b/src/cpu/qemu-x86/Makefile.inc @@ -0,0 +1,21 @@ +## +## 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 0000000000..c27a1eeed7 --- /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 +#include + +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") +}; -- cgit v1.2.3