aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/1842-crypto-ccp-fix-the-SEV-probe-in-kexec-boot-path.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/1842-crypto-ccp-fix-the-SEV-probe-in-kexec-boot-path.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/1842-crypto-ccp-fix-the-SEV-probe-in-kexec-boot-path.patch58
1 files changed, 58 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/1842-crypto-ccp-fix-the-SEV-probe-in-kexec-boot-path.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/1842-crypto-ccp-fix-the-SEV-probe-in-kexec-boot-path.patch
new file mode 100644
index 00000000..745e83be
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/1842-crypto-ccp-fix-the-SEV-probe-in-kexec-boot-path.patch
@@ -0,0 +1,58 @@
+From 932bfd21029a1372b5032cf1d0785af9877b3dcd Mon Sep 17 00:00:00 2001
+From: "Singh, Brijesh" <brijesh.singh@amd.com>
+Date: Wed, 30 Jan 2019 20:57:52 +0000
+Subject: [PATCH 1842/2940] crypto: ccp - fix the SEV probe in kexec boot path
+
+A kexec reboot may leave the firmware in INIT or WORKING state.
+Currently, we issue PLATFORM_INIT command during the probe without
+checking the current state. The PLATFORM_INIT command fails if the
+FW is already in INIT state. Lets check the current state, if FW
+is not in UNINIT state then transition it to UNINIT before
+initializing or upgrading the FW.
+
+Signed-off-by: Brijesh Singh <brijesh.singh@amd.com>
+Cc: Tom Lendacky <thomas.lendacky@amd.com>
+Cc: Gary Hook <gary.hook@amd.com>
+Reviewed-by: Tom Lendacky <thomas.lendacky@amd.com>
+Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
+---
+ drivers/crypto/ccp/psp-dev.c | 16 ++++++++++++++++
+ 1 file changed, 16 insertions(+)
+
+diff --git a/drivers/crypto/ccp/psp-dev.c b/drivers/crypto/ccp/psp-dev.c
+index d79147177394..4afe6b1badb8 100644
+--- a/drivers/crypto/ccp/psp-dev.c
++++ b/drivers/crypto/ccp/psp-dev.c
+@@ -437,6 +437,7 @@ static int sev_get_api_version(void)
+ psp_master->api_major = status->api_major;
+ psp_master->api_minor = status->api_minor;
+ psp_master->build = status->build;
++ psp_master->sev_state = status->state;
+
+ return 0;
+ }
+@@ -964,6 +965,21 @@ void psp_pci_init(void)
+ if (sev_get_api_version())
+ goto err;
+
++ /*
++ * If platform is not in UNINIT state then firmware upgrade and/or
++ * platform INIT command will fail. These command require UNINIT state.
++ *
++ * In a normal boot we should never run into case where the firmware
++ * is not in UNINIT state on boot. But in case of kexec boot, a reboot
++ * may not go through a typical shutdown sequence and may leave the
++ * firmware in INIT or WORKING state.
++ */
++
++ if (psp_master->sev_state != SEV_STATE_UNINIT) {
++ sev_platform_shutdown(NULL);
++ psp_master->sev_state = SEV_STATE_UNINIT;
++ }
++
+ if (SEV_VERSION_GREATER_OR_EQUAL(0, 15) &&
+ sev_update_firmware(psp_master->dev) == 0)
+ sev_get_api_version();
+--
+2.17.1
+