cpu/x86/cache: CLFLUSH programs to memory before running
When cbmem is initialized in romstage and postcar placed in the stage cache + cbmem where it is run, the assumption is made that these are all in UC memory such that calling INVD in postcar is OK. For performance reasons (e.g. postcar decompression) it is desirable to cache cbmem and the stage cache during romstage. Another reason is that AGESA sets up MTRR during romstage to cache all dram, which is currently worked around by using additional MTRR's to make that UC. TESTED on asus/p5ql-em, up/squared on both regular and S3 resume bootpath. Sometimes there are minimal performance improvements when cbmem is cached (few ms). Change-Id: I7ff2a57aee620908b71829457ea0f5a0c410ec5b Signed-off-by: Arthur Heymans <arthur@aheymans.xyz> Reviewed-on: https://review.coreboot.org/c/coreboot/+/37196 Reviewed-by: Lean Sheng Tan <sheng.tan@9elements.com> Reviewed-by: Kapil Porwal <kapilporwal@google.com> Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
This commit is contained in:
committed by
Lean Sheng Tan
parent
4bad919ce4
commit
3134a81525
@ -12,6 +12,8 @@
|
||||
|
||||
#if !defined(__ASSEMBLER__)
|
||||
|
||||
#include <stdbool.h>
|
||||
|
||||
static inline void wbinvd(void)
|
||||
{
|
||||
asm volatile ("wbinvd" ::: "memory");
|
||||
@ -27,6 +29,8 @@ static inline void clflush(void *addr)
|
||||
asm volatile ("clflush (%0)"::"r" (addr));
|
||||
}
|
||||
|
||||
bool clflush_supported(void);
|
||||
|
||||
/* The following functions require the __always_inline due to AMD
|
||||
* function STOP_CAR_AND_CPU that disables cache as
|
||||
* RAM, the cache as RAM stack can no longer be used. Called
|
||||
|
Reference in New Issue
Block a user