Skip to content

Commit c9434e6

Browse files
tlendackysean-jc
authored andcommitted
crypto: ccp - Add an API to return the supported SEV-SNP policy bits
Supported policy bits are dependent on the level of SEV firmware that is currently running. Create an API to return the supported policy bits for the current level of firmware. Signed-off-by: Tom Lendacky <thomas.lendacky@amd.com> Acked-by: Herbert Xu <herbert@gondor.apana.org.au> Link: https://patch.msgid.link/e3f711366ddc22e3dd215c987fd2e28dc1c07f54.1761593632.git.thomas.lendacky@amd.com Signed-off-by: Sean Christopherson <seanjc@google.com>
1 parent ce62118 commit c9434e6

File tree

2 files changed

+55
-0
lines changed

2 files changed

+55
-0
lines changed

drivers/crypto/ccp/sev-dev.c

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2777,6 +2777,43 @@ void sev_platform_shutdown(void)
27772777
}
27782778
EXPORT_SYMBOL_GPL(sev_platform_shutdown);
27792779

2780+
u64 sev_get_snp_policy_bits(void)
2781+
{
2782+
struct psp_device *psp = psp_master;
2783+
struct sev_device *sev;
2784+
u64 policy_bits;
2785+
2786+
if (!cc_platform_has(CC_ATTR_HOST_SEV_SNP))
2787+
return 0;
2788+
2789+
if (!psp || !psp->sev_data)
2790+
return 0;
2791+
2792+
sev = psp->sev_data;
2793+
2794+
policy_bits = SNP_POLICY_MASK_BASE;
2795+
2796+
if (sev->snp_plat_status.feature_info) {
2797+
if (sev->snp_feat_info_0.ecx & SNP_RAPL_DISABLE_SUPPORTED)
2798+
policy_bits |= SNP_POLICY_MASK_RAPL_DIS;
2799+
2800+
if (sev->snp_feat_info_0.ecx & SNP_CIPHER_TEXT_HIDING_SUPPORTED)
2801+
policy_bits |= SNP_POLICY_MASK_CIPHERTEXT_HIDING_DRAM;
2802+
2803+
if (sev->snp_feat_info_0.ecx & SNP_AES_256_XTS_POLICY_SUPPORTED)
2804+
policy_bits |= SNP_POLICY_MASK_MEM_AES_256_XTS;
2805+
2806+
if (sev->snp_feat_info_0.ecx & SNP_CXL_ALLOW_POLICY_SUPPORTED)
2807+
policy_bits |= SNP_POLICY_MASK_CXL_ALLOW;
2808+
2809+
if (sev_version_greater_or_equal(1, 58))
2810+
policy_bits |= SNP_POLICY_MASK_PAGE_SWAP_DISABLE;
2811+
}
2812+
2813+
return policy_bits;
2814+
}
2815+
EXPORT_SYMBOL_GPL(sev_get_snp_policy_bits);
2816+
27802817
void sev_dev_destroy(struct psp_device *psp)
27812818
{
27822819
struct sev_device *sev = psp->sev_data;

include/linux/psp-sev.h

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,20 @@
3232
#define SNP_POLICY_MASK_MIGRATE_MA BIT_ULL(18)
3333
#define SNP_POLICY_MASK_DEBUG BIT_ULL(19)
3434
#define SNP_POLICY_MASK_SINGLE_SOCKET BIT_ULL(20)
35+
#define SNP_POLICY_MASK_CXL_ALLOW BIT_ULL(21)
36+
#define SNP_POLICY_MASK_MEM_AES_256_XTS BIT_ULL(22)
37+
#define SNP_POLICY_MASK_RAPL_DIS BIT_ULL(23)
38+
#define SNP_POLICY_MASK_CIPHERTEXT_HIDING_DRAM BIT_ULL(24)
39+
#define SNP_POLICY_MASK_PAGE_SWAP_DISABLE BIT_ULL(25)
40+
41+
/* Base SEV-SNP policy bitmask for minimum supported SEV firmware version */
42+
#define SNP_POLICY_MASK_BASE (SNP_POLICY_MASK_API_MINOR | \
43+
SNP_POLICY_MASK_API_MAJOR | \
44+
SNP_POLICY_MASK_SMT | \
45+
SNP_POLICY_MASK_RSVD_MBO | \
46+
SNP_POLICY_MASK_MIGRATE_MA | \
47+
SNP_POLICY_MASK_DEBUG | \
48+
SNP_POLICY_MASK_SINGLE_SOCKET)
3549

3650
#define SEV_FW_BLOB_MAX_SIZE 0x4000 /* 16KB */
3751

@@ -868,7 +882,10 @@ struct snp_feature_info {
868882
u32 edx;
869883
} __packed;
870884

885+
#define SNP_RAPL_DISABLE_SUPPORTED BIT(2)
871886
#define SNP_CIPHER_TEXT_HIDING_SUPPORTED BIT(3)
887+
#define SNP_AES_256_XTS_POLICY_SUPPORTED BIT(4)
888+
#define SNP_CXL_ALLOW_POLICY_SUPPORTED BIT(5)
872889

873890
#ifdef CONFIG_CRYPTO_DEV_SP_PSP
874891

@@ -1014,6 +1031,7 @@ void *snp_alloc_firmware_page(gfp_t mask);
10141031
void snp_free_firmware_page(void *addr);
10151032
void sev_platform_shutdown(void);
10161033
bool sev_is_snp_ciphertext_hiding_supported(void);
1034+
u64 sev_get_snp_policy_bits(void);
10171035

10181036
#else /* !CONFIG_CRYPTO_DEV_SP_PSP */
10191037

0 commit comments

Comments
 (0)