soc/amd/mendocino: Consume fsp misc_data hob

Provide support function to query fsp misc_data hob and return smu
reported power and thermal limit.

BUG=b:253301653
TEST=Use get_amd_smu_reported_tdp(&tdp) values match what FSP placed in
the hob.

Change-Id: I9f0d8cdd616726c5a714e99504b83b0126dd273b
Signed-off-by: Jason Glenesk <jason.glenesk@amd.com>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/73747
Reviewed-by: Martin Roth <martin.roth@amd.corp-partner.google.com>
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
This commit is contained in:
Jason Glenesk 2023-03-16 15:28:10 -07:00 committed by Martin L Roth
parent 665c58b77a
commit 60875b4718
5 changed files with 78 additions and 0 deletions

View File

@ -30,6 +30,7 @@ ramstage-y += agesa_acpi.c
ramstage-y += chip.c
ramstage-y += cpu.c
ramstage-y += fch.c
ramstage-y += fsp_misc_data_hob.c
ramstage-y += fsp_s_params.c
ramstage-y += gpio.c
ramstage-y += i2c.c

View File

@ -0,0 +1,49 @@
/* SPDX-License-Identifier: GPL-2.0-only */
#include <console/console.h>
#include <FspGuids.h>
#include <fsp/amd_misc_data.h>
#include <fsp/amd_misc_data_hob.h>
#include <fsp/util.h>
#include <string.h>
#include <types.h>
static enum cb_err get_amd_misc_data_hob(const struct amd_misc_data **fsp_misc_data, int min_revision)
{
static const struct amd_misc_data *fsp_misc_data_cache;
size_t hob_size = 0;
const struct amd_misc_data *hob;
if (fsp_misc_data_cache) {
*fsp_misc_data = fsp_misc_data_cache;
return CB_SUCCESS;
}
hob = fsp_find_extension_hob_by_guid(AMD_MISC_DATA_HOB_GUID.b, &hob_size);
if (hob == NULL || hob_size < sizeof(struct amd_misc_data)) {
printk(BIOS_ERR, "Couldn't find fsp misc data HOB.\n");
return CB_ERR;
}
if (hob->version < min_revision) {
printk(BIOS_ERR, "Unexpected fsp misc data HOB version.\n");
return CB_ERR;
}
fsp_misc_data_cache = hob;
*fsp_misc_data = fsp_misc_data_cache;
return CB_SUCCESS;
}
enum cb_err get_amd_smu_reported_tdp(uint32_t *tdp)
{
const struct amd_misc_data *fsp_misc_data = NULL;
if (get_amd_misc_data_hob(&fsp_misc_data, AMD_MISC_DATA_VERSION) != CB_SUCCESS)
return CB_ERR;
*tdp = fsp_misc_data->smu_power_and_thm_limit;
return CB_SUCCESS;
}

View File

@ -0,0 +1,10 @@
/* SPDX-License-Identifier: GPL-2.0-only */
#ifndef AMD_MISC_DATA_H
#define AMD_MISC_DATA_H
#include <types.h>
enum cb_err get_amd_smu_reported_tdp(uint32_t *tdp);
#endif /* AMD_MISC_DATA_H */

View File

@ -0,0 +1,14 @@
/* SPDX-License-Identifier: GPL-2.0-only */
#ifndef __AMD_MISC_DATA_HOB_H__
#define __AMD_MISC_DATA_HOB_H__
#define AMD_MISC_DATA_VERSION 2
struct amd_misc_data {
uint8_t version;
uint8_t unused[3];
uint32_t smu_power_and_thm_limit;
} __packed;
#endif /* __AMD_MISC_DATA_HOB_H__ */

View File

@ -21,4 +21,8 @@
GUID_INIT(0x3060C5EC, 0x7399, 0x432D, \
0xBC, 0x97, 0xBF, 0x95, 0xE4, 0x3D, 0x53, 0x0C )
#define AMD_MISC_DATA_HOB_GUID \
GUID_INIT(0x27f7d972, 0x318f, 0x4665, \
0x8a, 0x99, 0xf4, 0x4c, 0x04, 0x4b, 0x49, 0x08)
#endif /* __FSP_GUIDS__ */