mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/herbert/cryptodev-2.6.git
synced 2026-04-18 03:23:53 -04:00
crypto: ccp - Add AMD Seamless Firmware Servicing (SFS) driver
AMD Seamless Firmware Servicing (SFS) is a secure method to allow non-persistent updates to running firmware and settings without requiring BIOS reflash and/or system reset. SFS does not address anything that runs on the x86 processors and it can be used to update ASP firmware, modules, register settings and update firmware for other microprocessors like TMPM, etc. SFS driver support adds ioctl support to communicate the SFS commands to the ASP/PSP by using the TEE mailbox interface. The Seamless Firmware Servicing (SFS) driver is added as a PSP sub-device. For detailed information, please look at the SFS specifications: https://www.amd.com/content/dam/amd/en/documents/epyc-technical-docs/specifications/58604.pdf Signed-off-by: Ashish Kalra <ashish.kalra@amd.com> Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de> Reviewed-by: Tom Lendacky <thomas.lendacky@amd.com> Acked-by: Herbert Xu <herbert@gondor.apana.org.au> Link: https://lore.kernel.org/cover.1758057691.git.ashish.kalra@amd.com
This commit is contained in:
committed by
Borislav Petkov (AMD)
parent
e09701dcdd
commit
648dbccc03
@@ -17,6 +17,7 @@
|
||||
#include "psp-dev.h"
|
||||
#include "sev-dev.h"
|
||||
#include "tee-dev.h"
|
||||
#include "sfs.h"
|
||||
#include "platform-access.h"
|
||||
#include "dbc.h"
|
||||
#include "hsti.h"
|
||||
@@ -182,6 +183,17 @@ static int psp_check_tee_support(struct psp_device *psp)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int psp_check_sfs_support(struct psp_device *psp)
|
||||
{
|
||||
/* Check if device supports SFS feature */
|
||||
if (!psp->capability.sfs) {
|
||||
dev_dbg(psp->dev, "psp does not support SFS\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int psp_init(struct psp_device *psp)
|
||||
{
|
||||
int ret;
|
||||
@@ -198,6 +210,12 @@ static int psp_init(struct psp_device *psp)
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (!psp_check_sfs_support(psp)) {
|
||||
ret = sfs_dev_init(psp);
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (psp->vdata->platform_access) {
|
||||
ret = platform_access_dev_init(psp);
|
||||
if (ret)
|
||||
@@ -302,6 +320,8 @@ void psp_dev_destroy(struct sp_device *sp)
|
||||
|
||||
tee_dev_destroy(psp);
|
||||
|
||||
sfs_dev_destroy(psp);
|
||||
|
||||
dbc_dev_destroy(psp);
|
||||
|
||||
platform_access_dev_destroy(psp);
|
||||
|
||||
Reference in New Issue
Block a user