The x86 timers are a bit of a mess. Cases where different stages use different counters and timestamps use different counters from udelays. The original intention was to only flip TSC_CONSTANT_RATE Kconfig to NOT_CONSTANT_TSC_RATE. The name would be incorrect though, those counters do run with a constant rate but we just lack tsc_freq_mhz() implementation for three platforms. Note that for boards with UNKNOWN_TSC_RATE=y, each stage will have a slow run of calibrate_tsc_with_pit(). This is easy enough to fix with followup implementation of tsc_freq_mhz() for the platforms. Implementations with LAPIC_MONOTONIC_TIMER typically will not have tsc_freq_mhz() implemented and default to UNKNOWN_TSC_RATE. However, as they don't use TSC for udelay() the slow calibrate_tsc_with_pit() is avoided. Because x86/tsc_delay.tsc was using two different guards and nb/via/vx900 claimed UDELAY_TSC, but pulled UDELAY_IO implementation, we also switch that romstage to use UDELAY_TSC. Change-Id: I1690cb80295d6b006b75ed69edea28899b674b68 Signed-off-by: Kyösti Mälkki <kyosti.malkki@gmail.com> Reviewed-on: https://review.coreboot.org/c/coreboot/+/33928 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Aaron Durbin <adurbin@chromium.org>
51 lines
1.1 KiB
Plaintext
51 lines
1.1 KiB
Plaintext
|
|
config CPU_INTEL_HASWELL
|
|
bool
|
|
|
|
if CPU_INTEL_HASWELL
|
|
|
|
config CPU_SPECIFIC_OPTIONS
|
|
def_bool y
|
|
select ARCH_BOOTBLOCK_X86_32
|
|
select ARCH_VERSTAGE_X86_32
|
|
select ARCH_ROMSTAGE_X86_32
|
|
select ARCH_RAMSTAGE_X86_32
|
|
select SMP
|
|
select MMX
|
|
select SSE2
|
|
select UDELAY_TSC
|
|
select TSC_MONOTONIC_TIMER
|
|
select SUPPORT_CPU_UCODE_IN_CBFS
|
|
#select AP_IN_SIPI_WAIT
|
|
select TSC_SYNC_MFENCE
|
|
select CPU_INTEL_FIRMWARE_INTERFACE_TABLE
|
|
select PARALLEL_MP
|
|
select CPU_INTEL_COMMON
|
|
select CPU_INTEL_COMMON_TIMEBASE
|
|
select NO_FIXED_XIP_ROM_SIZE
|
|
|
|
config SMM_TSEG_SIZE
|
|
hex
|
|
default 0x800000
|
|
|
|
config IED_REGION_SIZE
|
|
hex
|
|
default 0x400000
|
|
|
|
config SMM_RESERVED_SIZE
|
|
hex
|
|
default 0x100000
|
|
|
|
config RESET_ON_INVALID_RAMSTAGE_CACHE
|
|
bool "Reset the system on S3 wake when ramstage cache invalid."
|
|
default n
|
|
help
|
|
The haswell romstage code caches the loaded ramstage program
|
|
in SMM space. On S3 wake the romstage will copy over a fresh
|
|
ramstage that was cached in the SMM space. This option determines
|
|
the action to take when the ramstage cache is invalid. If selected
|
|
the system will reset otherwise the ramstage will be reloaded from
|
|
cbfs.
|
|
|
|
endif
|