soc/amd/fsp: Cache smm_region() results
This avoids searching the HOB output multiple times when calling smm_region(). Change-Id: Iad09c3aa3298745ba3ba7012e6bb8cfb8785d525 Signed-off-by: Arthur Heymans <arthur@aheymans.xyz> Reviewed-on: https://review.coreboot.org/c/coreboot/+/65787 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Felix Held <felix-coreboot@felixheld.de>
This commit is contained in:
parent
50a27072d0
commit
7f611018d4
|
@ -37,12 +37,16 @@ const struct memmap_early_dram *memmap_get_early_dram_usage(void)
|
||||||
void smm_region(uintptr_t *start, size_t *size)
|
void smm_region(uintptr_t *start, size_t *size)
|
||||||
{
|
{
|
||||||
static int once;
|
static int once;
|
||||||
struct range_entry tseg;
|
static uintptr_t smm_start;
|
||||||
|
static size_t smm_size;
|
||||||
int status;
|
int status;
|
||||||
|
|
||||||
*start = 0;
|
*start = smm_start;
|
||||||
*size = 0;
|
*size = smm_size;
|
||||||
|
if (*size && *start)
|
||||||
|
return;
|
||||||
|
|
||||||
|
struct range_entry tseg;
|
||||||
status = fsp_find_range_hob(&tseg, AMD_FSP_TSEG_HOB_GUID.b);
|
status = fsp_find_range_hob(&tseg, AMD_FSP_TSEG_HOB_GUID.b);
|
||||||
|
|
||||||
if (status < 0) {
|
if (status < 0) {
|
||||||
|
@ -50,8 +54,10 @@ void smm_region(uintptr_t *start, size_t *size)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
*start = (uintptr_t)range_entry_base(&tseg);
|
smm_start = (uintptr_t)range_entry_base(&tseg);
|
||||||
*size = range_entry_size(&tseg);
|
smm_size = range_entry_size(&tseg);
|
||||||
|
*start = smm_start;
|
||||||
|
*size = smm_size;
|
||||||
|
|
||||||
if (!once) {
|
if (!once) {
|
||||||
clear_tvalid();
|
clear_tvalid();
|
||||||
|
|
Loading…
Reference in New Issue