diff --git a/src/cpu/qemu-x86/Kconfig b/src/cpu/qemu-x86/Kconfig index f564d700662..6a34687d3d2 100644 --- a/src/cpu/qemu-x86/Kconfig +++ b/src/cpu/qemu-x86/Kconfig @@ -6,7 +6,6 @@ config CPU_QEMU_X86 select HAVE_X86_64_SUPPORT select UDELAY_TSC select TSC_MONOTONIC_TIMER - select UNKNOWN_TSC_RATE select NEED_SMALL_2MB_PAGE_TABLES # QEMU doesn't support 1GB pages select IDT_IN_EVERY_STAGE diff --git a/src/mainboard/emulation/qemu-q35/Makefile.mk b/src/mainboard/emulation/qemu-q35/Makefile.mk index c1619f5edec..8a5749d349e 100644 --- a/src/mainboard/emulation/qemu-q35/Makefile.mk +++ b/src/mainboard/emulation/qemu-q35/Makefile.mk @@ -2,19 +2,23 @@ bootblock-y += bootblock.c bootblock-y += memmap.c +bootblock-y += timer.c romstage-y += ../qemu-i440fx/memmap.c romstage-y += memmap.c +romstage-y += timer.c postcar-y += ../qemu-i440fx/memmap.c postcar-y += ../qemu-i440fx/exit_car.S postcar-y += memmap.c +postcar-y += timer.c ramstage-y += ../qemu-i440fx/memmap.c ramstage-y += ../qemu-i440fx/northbridge.c ramstage-y += ../qemu-i440fx/rom_media.c ramstage-y += memmap.c ramstage-y += cpu.c +ramstage-y += timer.c all-y += ../qemu-i440fx/fw_cfg.c all-y += ../qemu-i440fx/bootmode.c diff --git a/src/mainboard/emulation/qemu-q35/timer.c b/src/mainboard/emulation/qemu-q35/timer.c new file mode 100644 index 00000000000..52b1111e9b2 --- /dev/null +++ b/src/mainboard/emulation/qemu-q35/timer.c @@ -0,0 +1,15 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ + +#define __SIMPLE_DEVICE__ + +#include +#include +#include + +unsigned long tsc_freq_mhz(void) +{ + /* Mimics implementation of acpi_fill_fadt() in southbridge/intel/i82801ix/fadt.c. */ + u16 pmbase = pci_read_config16(PCI_DEV(0, 0x1f, 0), 0x40) & 0xfffe; + u16 pm_tmr_blk = pmbase + PM1_TMR; + return inl(pm_tmr_blk); +}