amd/stoneyridge: Add early MTRR setup for new callouts
Enable the two ranges to be used for the new callouts, AgesaHeapRebase and AgesaGetHeapBaseInDram. TEST=Boot grunt w/experimental blob, try different addresses BUG=b:74518368 Change-Id: Ic7716794dc7d75f849e6e062865d6efbeb4292df Signed-off-by: Marshall Dawson <marshalldawson3rd@gmail.com> Reviewed-on: https://review.coreboot.org/26147 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Martin Roth <martinroth@google.com>
This commit is contained in:
parent
c150a57d29
commit
c4be175bdc
|
@ -32,7 +32,14 @@
|
||||||
#include <timestamp.h>
|
#include <timestamp.h>
|
||||||
#include <halt.h>
|
#include <halt.h>
|
||||||
|
|
||||||
/* Set the MMIO Configuration Base Address and Bus Range. */
|
#if CONFIG_PI_AGESA_TEMP_RAM_BASE < 0x100000
|
||||||
|
#error "Error: CONFIG_PI_AGESA_TEMP_RAM_BASE must be >= 1MB"
|
||||||
|
#endif
|
||||||
|
#if CONFIG_PI_AGESA_CAR_HEAP_BASE < 0x100000
|
||||||
|
#error "Error: CONFIG_PI_AGESA_CAR_HEAP_BASE must be >= 1MB"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Set the MMIO Configuration Base Address, Bus Range, and misc MTRRs. */
|
||||||
static void amd_initmmio(void)
|
static void amd_initmmio(void)
|
||||||
{
|
{
|
||||||
msr_t mmconf;
|
msr_t mmconf;
|
||||||
|
@ -47,9 +54,23 @@ static void amd_initmmio(void)
|
||||||
/*
|
/*
|
||||||
* todo: AGESA currently writes variable MTRRs. Once that is
|
* todo: AGESA currently writes variable MTRRs. Once that is
|
||||||
* corrected, un-hardcode this MTRR.
|
* corrected, un-hardcode this MTRR.
|
||||||
|
*
|
||||||
|
* Be careful not to use get_free_var_mtrr/set_var_mtrr pairs
|
||||||
|
* where all cores execute the path. Both cores within a compute
|
||||||
|
* unit share MTRRs. Programming core0 has the appearance of
|
||||||
|
* modifying core1 too. Using the pair again will create
|
||||||
|
* duplicate copies.
|
||||||
*/
|
*/
|
||||||
mtrr = (mtrr_cap.lo & MTRR_CAP_VCNT) - SOC_EARLY_VMTRR_FLASH;
|
mtrr = (mtrr_cap.lo & MTRR_CAP_VCNT) - SOC_EARLY_VMTRR_FLASH;
|
||||||
set_var_mtrr(mtrr, FLASH_BASE_ADDR, CONFIG_ROM_SIZE, MTRR_TYPE_WRPROT);
|
set_var_mtrr(mtrr, FLASH_BASE_ADDR, CONFIG_ROM_SIZE, MTRR_TYPE_WRPROT);
|
||||||
|
|
||||||
|
mtrr = (mtrr_cap.lo & MTRR_CAP_VCNT) - SOC_EARLY_VMTRR_CAR_HEAP;
|
||||||
|
set_var_mtrr(mtrr, CONFIG_PI_AGESA_CAR_HEAP_BASE,
|
||||||
|
CONFIG_PI_AGESA_HEAP_SIZE, MTRR_TYPE_WRBACK);
|
||||||
|
|
||||||
|
mtrr = (mtrr_cap.lo & MTRR_CAP_VCNT) - SOC_EARLY_VMTRR_TEMPRAM;
|
||||||
|
set_var_mtrr(mtrr, CONFIG_PI_AGESA_TEMP_RAM_BASE,
|
||||||
|
CONFIG_PI_AGESA_HEAP_SIZE, MTRR_TYPE_UNCACHEABLE);
|
||||||
}
|
}
|
||||||
|
|
||||||
asmlinkage void bootblock_c_entry(uint64_t base_timestamp)
|
asmlinkage void bootblock_c_entry(uint64_t base_timestamp)
|
||||||
|
|
|
@ -25,7 +25,9 @@
|
||||||
*
|
*
|
||||||
* todo: Revisit this once AGESA no longer programs MTRRs.
|
* todo: Revisit this once AGESA no longer programs MTRRs.
|
||||||
*/
|
*/
|
||||||
#define SOC_EARLY_VMTRR_FLASH 2
|
#define SOC_EARLY_VMTRR_FLASH 1
|
||||||
|
#define SOC_EARLY_VMTRR_CAR_HEAP 2
|
||||||
|
#define SOC_EARLY_VMTRR_TEMPRAM 3
|
||||||
|
|
||||||
void stoney_init_cpus(struct device *dev);
|
void stoney_init_cpus(struct device *dev);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue