crypto: ccp: Add Platform Security Processor (PSP) device support
The Platform Security Processor (PSP) is part of the AMD Secure Processor (AMD-SP) functionality. The PSP is a dedicated processor that provides support for key management commands in Secure Encrypted Virtualization (SEV) mode, along with software-based Trusted Execution Environment (TEE) to enable third-party trusted applications. Note that the key management functionality provided by the SEV firmware can be used outside of the kvm-amd driver hence it doesn't need to depend on CONFIG_KVM_AMD. Cc: Paolo Bonzini <pbonzini@redhat.com> Cc: "Radim Krčmář" <rkrcmar@redhat.com> Cc: Borislav Petkov <bp@suse.de> Cc: Herbert Xu <herbert@gondor.apana.org.au> Cc: Gary Hook <gary.hook@amd.com> Cc: Tom Lendacky <thomas.lendacky@amd.com> Cc: linux-crypto@vger.kernel.org Cc: kvm@vger.kernel.org Cc: linux-kernel@vger.kernel.org Improvements-by: Borislav Petkov <bp@suse.de> Signed-off-by: Brijesh Singh <brijesh.singh@amd.com> Reviewed-by: Borislav Petkov <bp@suse.de>
This commit is contained in:
@@ -42,12 +42,17 @@ struct ccp_vdata {
|
||||
const unsigned int offset;
|
||||
const unsigned int rsamax;
|
||||
};
|
||||
|
||||
struct psp_vdata {
|
||||
const unsigned int offset;
|
||||
};
|
||||
|
||||
/* Structure to hold SP device data */
|
||||
struct sp_dev_vdata {
|
||||
const unsigned int bar;
|
||||
|
||||
const struct ccp_vdata *ccp_vdata;
|
||||
void *psp_vdata;
|
||||
const struct psp_vdata *psp_vdata;
|
||||
};
|
||||
|
||||
struct sp_device {
|
||||
@@ -68,6 +73,10 @@ struct sp_device {
|
||||
/* DMA caching attribute support */
|
||||
unsigned int axcache;
|
||||
|
||||
/* get and set master device */
|
||||
struct sp_device*(*get_psp_master_device)(void);
|
||||
void (*set_psp_master_device)(struct sp_device *);
|
||||
|
||||
bool irq_registered;
|
||||
bool use_tasklet;
|
||||
|
||||
@@ -103,6 +112,7 @@ void sp_free_ccp_irq(struct sp_device *sp, void *data);
|
||||
int sp_request_psp_irq(struct sp_device *sp, irq_handler_t handler,
|
||||
const char *name, void *data);
|
||||
void sp_free_psp_irq(struct sp_device *sp, void *data);
|
||||
struct sp_device *sp_get_psp_master_device(void);
|
||||
|
||||
#ifdef CONFIG_CRYPTO_DEV_SP_CCP
|
||||
|
||||
@@ -130,4 +140,16 @@ static inline int ccp_dev_resume(struct sp_device *sp)
|
||||
}
|
||||
#endif /* CONFIG_CRYPTO_DEV_SP_CCP */
|
||||
|
||||
#ifdef CONFIG_CRYPTO_DEV_SP_PSP
|
||||
|
||||
int psp_dev_init(struct sp_device *sp);
|
||||
void psp_dev_destroy(struct sp_device *sp);
|
||||
|
||||
#else /* !CONFIG_CRYPTO_DEV_SP_PSP */
|
||||
|
||||
static inline int psp_dev_init(struct sp_device *sp) { return 0; }
|
||||
static inline void psp_dev_destroy(struct sp_device *sp) { }
|
||||
|
||||
#endif /* CONFIG_CRYPTO_DEV_SP_PSP */
|
||||
|
||||
#endif
|
||||
|
Reference in New Issue
Block a user