soc/intel/common/block/cse: Add get_me_fw_version function
Modify print_me_fw_version to get ME firmware version by calling it. Tested=On a not yet to be public platform, verified the function can get ME FW version successfully. Signed-off-by: Johnny Lin <johnny_lin@wiwynn.com> Change-Id: I50d472a413bcaaaa085955657bde6a0e6ec2c1db Reviewed-on: https://review.coreboot.org/c/coreboot/+/58520 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Angel Pons <th3fanbus@gmail.com> Reviewed-by: Tim Wawrzynczak <twawrzynczak@chromium.org>
This commit is contained in:
parent
c1a55f73eb
commit
72e76676fc
|
@ -813,42 +813,43 @@ int cse_hmrfpo_get_status(void)
|
||||||
|
|
||||||
void print_me_fw_version(void *unused)
|
void print_me_fw_version(void *unused)
|
||||||
{
|
{
|
||||||
struct version {
|
struct me_fw_ver_resp resp = {0};
|
||||||
uint16_t minor;
|
|
||||||
uint16_t major;
|
|
||||||
uint16_t build;
|
|
||||||
uint16_t hotfix;
|
|
||||||
} __packed;
|
|
||||||
|
|
||||||
struct fw_ver_resp {
|
|
||||||
struct mkhi_hdr hdr;
|
|
||||||
struct version code;
|
|
||||||
struct version rec;
|
|
||||||
struct version fitc;
|
|
||||||
} __packed;
|
|
||||||
|
|
||||||
const struct mkhi_hdr fw_ver_msg = {
|
|
||||||
.group_id = MKHI_GROUP_ID_GEN,
|
|
||||||
.command = MKHI_GEN_GET_FW_VERSION,
|
|
||||||
};
|
|
||||||
|
|
||||||
struct fw_ver_resp resp;
|
|
||||||
size_t resp_size = sizeof(resp);
|
|
||||||
|
|
||||||
/* Ignore if UART debugging is disabled */
|
/* Ignore if UART debugging is disabled */
|
||||||
if (!CONFIG(CONSOLE_SERIAL))
|
if (!CONFIG(CONSOLE_SERIAL))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
if (get_me_fw_version(&resp) == CB_SUCCESS) {
|
||||||
|
printk(BIOS_DEBUG, "ME: Version: %d.%d.%d.%d\n", resp.code.major,
|
||||||
|
resp.code.minor, resp.code.hotfix, resp.code.build);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
printk(BIOS_DEBUG, "ME: Version: Unavailable\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
enum cb_err get_me_fw_version(struct me_fw_ver_resp *resp)
|
||||||
|
{
|
||||||
|
const struct mkhi_hdr fw_ver_msg = {
|
||||||
|
.group_id = MKHI_GROUP_ID_GEN,
|
||||||
|
.command = MKHI_GEN_GET_FW_VERSION,
|
||||||
|
};
|
||||||
|
|
||||||
|
if (resp == NULL) {
|
||||||
|
printk(BIOS_ERR, "%s failed, null pointer parameter\n", __func__);
|
||||||
|
return CB_ERR;
|
||||||
|
}
|
||||||
|
size_t resp_size = sizeof(*resp);
|
||||||
|
|
||||||
/* Ignore if CSE is disabled */
|
/* Ignore if CSE is disabled */
|
||||||
if (!is_cse_enabled())
|
if (!is_cse_enabled())
|
||||||
return;
|
return CB_ERR;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Ignore if ME Firmware SKU type is Lite since
|
* Ignore if ME Firmware SKU type is Lite since
|
||||||
* print_boot_partition_info() logs RO(BP1) and RW(BP2) versions.
|
* print_boot_partition_info() logs RO(BP1) and RW(BP2) versions.
|
||||||
*/
|
*/
|
||||||
if (cse_is_hfs3_fw_sku_lite())
|
if (cse_is_hfs3_fw_sku_lite())
|
||||||
return;
|
return CB_ERR;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Prerequisites:
|
* Prerequisites:
|
||||||
|
@ -858,23 +859,19 @@ void print_me_fw_version(void *unused)
|
||||||
* during ramstage
|
* during ramstage
|
||||||
*/
|
*/
|
||||||
if (!cse_is_hfs1_cws_normal() || !cse_is_hfs1_com_normal())
|
if (!cse_is_hfs1_cws_normal() || !cse_is_hfs1_com_normal())
|
||||||
goto fail;
|
return CB_ERR;
|
||||||
|
|
||||||
heci_reset();
|
heci_reset();
|
||||||
|
|
||||||
if (!heci_send_receive(&fw_ver_msg, sizeof(fw_ver_msg), &resp, &resp_size,
|
if (!heci_send_receive(&fw_ver_msg, sizeof(fw_ver_msg), resp, &resp_size,
|
||||||
HECI_MKHI_ADDR))
|
HECI_MKHI_ADDR))
|
||||||
goto fail;
|
return CB_ERR;
|
||||||
|
|
||||||
if (resp.hdr.result)
|
if (resp->hdr.result)
|
||||||
goto fail;
|
return CB_ERR;
|
||||||
|
|
||||||
printk(BIOS_DEBUG, "ME: Version: %d.%d.%d.%d\n", resp.code.major,
|
|
||||||
resp.code.minor, resp.code.hotfix, resp.code.build);
|
|
||||||
return;
|
|
||||||
|
|
||||||
fail:
|
return CB_SUCCESS;
|
||||||
printk(BIOS_DEBUG, "ME: Version: Unavailable\n");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void cse_trigger_vboot_recovery(enum csme_failure_reason reason)
|
void cse_trigger_vboot_recovery(enum csme_failure_reason reason)
|
||||||
|
|
|
@ -76,6 +76,22 @@ struct fw_version {
|
||||||
uint16_t build;
|
uint16_t build;
|
||||||
} __packed;
|
} __packed;
|
||||||
|
|
||||||
|
/* ME FW Version */
|
||||||
|
struct me_version {
|
||||||
|
uint16_t minor;
|
||||||
|
uint16_t major;
|
||||||
|
uint16_t build;
|
||||||
|
uint16_t hotfix;
|
||||||
|
} __packed;
|
||||||
|
|
||||||
|
/* ME FW Version response */
|
||||||
|
struct me_fw_ver_resp {
|
||||||
|
struct mkhi_hdr hdr;
|
||||||
|
struct me_version code;
|
||||||
|
struct me_version rec;
|
||||||
|
struct me_version fitc;
|
||||||
|
} __packed;
|
||||||
|
|
||||||
/* CSE recovery sub-error codes */
|
/* CSE recovery sub-error codes */
|
||||||
enum csme_failure_reason {
|
enum csme_failure_reason {
|
||||||
/* No error */
|
/* No error */
|
||||||
|
@ -226,6 +242,11 @@ int cse_hmrfpo_get_status(void);
|
||||||
*/
|
*/
|
||||||
void print_me_fw_version(void *unused);
|
void print_me_fw_version(void *unused);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Queries and gets ME firmware version
|
||||||
|
*/
|
||||||
|
enum cb_err get_me_fw_version(struct me_fw_ver_resp *resp);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Checks current working operation state is normal or not.
|
* Checks current working operation state is normal or not.
|
||||||
* Returns true if CSE's current working state is normal, otherwise false.
|
* Returns true if CSE's current working state is normal, otherwise false.
|
||||||
|
|
Loading…
Reference in New Issue