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>
diff --git a/src/soc/intel/common/block/cse/cse_lite.c b/src/soc/intel/common/block/cse/cse_lite.c
index d0b2873..d968bff 100644
--- a/src/soc/intel/common/block/cse/cse_lite.c
+++ b/src/soc/intel/common/block/cse/cse_lite.c
@@ -1065,6 +1065,28 @@
 	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 back-up command to CSE and update the PSR back-up state in CMOS.
@@ -1077,6 +1099,16 @@
 		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:
 	 * 1) HFSTS1 Current Working State is Normal
 	 * 2) HFSTS1 Current Operation Mode is Normal