soc/intel/cse: Check PSR bit before issuing PSR backup command
Get PSR bit state using MKHI_FWCAPS_GET_FW_FEATURE_STATE HECI command Use this bit info to check if SKU supports PSR and consequently issue PSR_HECI_FW_DOWNGRADE_BACKUP command for PSR data backup during downgrade. BUG=b:273207144 TEST=build CB image and boot on google/rex board. Check for "PSR is supported in this SKU" message in coreboot logs to confirm that PSR bit is set in SKU Signed-off-by: Anil Kumar <anil.kumar.k@intel.com> Change-Id: I6e92341a9dc799146eb8f1a70b3a4a16fd1aa0ae Reviewed-on: https://review.coreboot.org/c/coreboot/+/74874 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Subrata Banik <subratabanik@google.com>
This commit is contained in:
parent
7b2edc3b6b
commit
a2d10bb029
@ -1065,6 +1065,28 @@ static bool is_psr_data_backed_up(void)
|
|||||||
return (get_psr_backup_status() == PSR_BACKUP_DONE);
|
return (get_psr_backup_status() == PSR_BACKUP_DONE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool is_psr_supported(void)
|
||||||
|
{
|
||||||
|
uint32_t feature_status;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Check if SoC has support for PSR feature typically PSR feature
|
||||||
|
* is only supported by vpro SKU
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
if (cse_get_fw_feature_state(&feature_status) != CB_SUCCESS) {
|
||||||
|
printk(BIOS_ERR, "cse_get_fw_feature_state command failed !\n");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!(feature_status & ME_FW_FEATURE_PSR)) {
|
||||||
|
printk(BIOS_DEBUG, "PSR is not supported in this SKU !\n");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* PSR data needs to be backed up prior to downgrade. So switch the CSE boot mode to RW, send
|
* PSR data needs to be backed up prior to downgrade. So switch the CSE boot mode to RW, send
|
||||||
* PSR back-up command to CSE and update the PSR back-up state in CMOS.
|
* PSR back-up command to CSE and update the PSR back-up state in CMOS.
|
||||||
@ -1076,6 +1098,16 @@ static void backup_psr_data(void)
|
|||||||
if (cse_boot_to_rw() != CB_SUCCESS)
|
if (cse_boot_to_rw() != CB_SUCCESS)
|
||||||
goto update_and_exit;
|
goto update_and_exit;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The function to check for PSR feature support can only be called after
|
||||||
|
* switching to RW partition. The command MKHI_FWCAPS_GET_FW_FEATURE_STATE
|
||||||
|
* that gives feature state is supported by a process that is loaded only
|
||||||
|
* when CSE boots from RW.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
if (!is_psr_supported())
|
||||||
|
goto update_and_exit;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Prerequisites:
|
* Prerequisites:
|
||||||
* 1) HFSTS1 Current Working State is Normal
|
* 1) HFSTS1 Current Working State is Normal
|
||||||
|
@ -40,7 +40,7 @@ enum mkhi_group_id {
|
|||||||
/* Get Firmware Feature State Command Id */
|
/* Get Firmware Feature State Command Id */
|
||||||
#define MKHI_FWCAPS_GET_FW_FEATURE_STATE 0x02
|
#define MKHI_FWCAPS_GET_FW_FEATURE_STATE 0x02
|
||||||
#define ME_FEATURE_STATE_RULE_ID 0x20
|
#define ME_FEATURE_STATE_RULE_ID 0x20
|
||||||
|
#define ME_FW_FEATURE_PSR BIT(5)
|
||||||
/* MEI bus disable command. Must be sent to MEI client endpoint, not MKHI */
|
/* MEI bus disable command. Must be sent to MEI client endpoint, not MKHI */
|
||||||
#define MEI_BUS_DISABLE_COMMAND 0xc
|
#define MEI_BUS_DISABLE_COMMAND 0xc
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user