From cba669cd959299f2f4fe44f9adee6a8ddaebd448 Mon Sep 17 00:00:00 2001 From: Angel Pons Date: Thu, 28 Jan 2021 11:56:45 +0100 Subject: mb/emulation/qemu-q35: Define and use MMCONF_BUS_NUMBER Also refactor the machine type checks to avoid code duplication. Tested, still boots to payload with 256, 128 and 64 busses. Change-Id: Ib394ba605bbfeee75aa645e989c23034cceff348 Signed-off-by: Angel Pons Reviewed-on: https://review.coreboot.org/c/coreboot/+/50025 Reviewed-by: Nico Huber Reviewed-by: Arthur Heymans Tested-by: build bot (Jenkins) --- src/mainboard/emulation/qemu-q35/memmap.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) (limited to 'src/mainboard/emulation/qemu-q35/memmap.c') 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 #include #include #include @@ -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 -- cgit v1.2.3