soc/amd/picasso: Enable cache in bootblock
Unlike prior AMD devices, picasso cannot rely on the cache-as-RAM setup code to properly enable MTRRs. Add that capability to the bootblock_c_entry() function. In addition, enable an MTRR to cache (WP) the flash boot device and another for WB of the non-XIP bootblock running in DRAM. BUG=b:147042464 TEST=Boot trembyle to payload and make sure bootblock isn't abnormally slow. Change-Id: I5615ff60ca196e622a939b46276a4a0940076ebe Signed-off-by: Marshall Dawson <marshalldawson3rd@gmail.com> Reviewed-on: https://review.coreboot.org/c/coreboot/+/38691 Reviewed-by: Furquan Shaikh <furquan@google.com> Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
This commit is contained in:
parent
30322785c4
commit
d149f1db69
|
@ -2,14 +2,47 @@
|
||||||
/* This file is part of the coreboot project. */
|
/* This file is part of the coreboot project. */
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
#include <symbols.h>
|
||||||
#include <bootblock_common.h>
|
#include <bootblock_common.h>
|
||||||
#include <console/console.h>
|
#include <console/console.h>
|
||||||
|
#include <cpu/x86/cache.h>
|
||||||
|
#include <cpu/x86/msr.h>
|
||||||
|
#include <cpu/amd/msr.h>
|
||||||
|
#include <cpu/x86/mtrr.h>
|
||||||
|
#include <cpu/amd/mtrr.h>
|
||||||
#include <soc/southbridge.h>
|
#include <soc/southbridge.h>
|
||||||
#include <soc/i2c.h>
|
#include <soc/i2c.h>
|
||||||
#include <amdblocks/amd_pci_mmconf.h>
|
#include <amdblocks/amd_pci_mmconf.h>
|
||||||
|
|
||||||
|
static void set_caching(void)
|
||||||
|
{
|
||||||
|
msr_t deftype = {0, 0};
|
||||||
|
int mtrr;
|
||||||
|
|
||||||
|
/* Disable fixed and variable MTRRs while we setup */
|
||||||
|
wrmsr(MTRR_DEF_TYPE_MSR, deftype);
|
||||||
|
|
||||||
|
clear_all_var_mtrr();
|
||||||
|
|
||||||
|
mtrr = get_free_var_mtrr();
|
||||||
|
if (mtrr >= 0)
|
||||||
|
set_var_mtrr(mtrr, FLASH_BASE_ADDR, CONFIG_ROM_SIZE, MTRR_TYPE_WRPROT);
|
||||||
|
|
||||||
|
mtrr = get_free_var_mtrr();
|
||||||
|
if (mtrr >= 0)
|
||||||
|
set_var_mtrr(mtrr, (unsigned int)_bootblock, REGION_SIZE(bootblock),
|
||||||
|
MTRR_TYPE_WRBACK);
|
||||||
|
|
||||||
|
/* Enable variable MTRRs. Fixed MTRRs are left disabled since they are not used. */
|
||||||
|
deftype.lo |= MTRR_DEF_TYPE_EN | MTRR_TYPE_UNCACHEABLE;
|
||||||
|
wrmsr(MTRR_DEF_TYPE_MSR, deftype);
|
||||||
|
|
||||||
|
enable_cache();
|
||||||
|
}
|
||||||
|
|
||||||
asmlinkage void bootblock_c_entry(uint64_t base_timestamp)
|
asmlinkage void bootblock_c_entry(uint64_t base_timestamp)
|
||||||
{
|
{
|
||||||
|
set_caching();
|
||||||
enable_pci_mmconf();
|
enable_pci_mmconf();
|
||||||
|
|
||||||
bootblock_main_with_basetime(base_timestamp);
|
bootblock_main_with_basetime(base_timestamp);
|
||||||
|
|
Loading…
Reference in New Issue