aboutsummaryrefslogtreecommitdiff
path: root/src/mainboard/emulation/qemu-q35/memmap.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mainboard/emulation/qemu-q35/memmap.c')
-rw-r--r--src/mainboard/emulation/qemu-q35/memmap.c23
1 files changed, 23 insertions, 0 deletions
diff --git a/src/mainboard/emulation/qemu-q35/memmap.c b/src/mainboard/emulation/qemu-q35/memmap.c
index 10b35d7fe2..f3ce42c485 100644
--- a/src/mainboard/emulation/qemu-q35/memmap.c
+++ b/src/mainboard/emulation/qemu-q35/memmap.c
@@ -2,6 +2,7 @@
#define __SIMPLE_DEVICE__
+#include <assert.h>
#include <console/console.h>
#include <cpu/x86/smm.h>
#include <device/pci_ops.h>
@@ -10,6 +11,28 @@
#include "q35.h"
+static uint32_t encode_pciexbar_length(void)
+{
+ switch (CONFIG_MMCONF_BUS_NUMBER) {
+ case 256: return 0 << 1;
+ case 128: return 1 << 1;
+ case 64: return 2 << 1;
+ default: return dead_code_t(uint32_t);
+ }
+}
+
+uint32_t make_pciexbar(void)
+{
+ return CONFIG_MMCONF_BASE_ADDRESS | encode_pciexbar_length() | 1;
+}
+
+/* Check that MCFG is active. If it's not, QEMU was started for machine PC */
+void mainboard_machine_check(void)
+{
+ if (pci_read_config32(HOST_BRIDGE, D0F0_PCIEXBAR_LO) != make_pciexbar())
+ die("You must run qemu for machine Q35 (-M q35)");
+}
+
/* QEMU-specific register */
#define EXT_TSEG_MBYTES 0x50