@@ -681,17 +681,28 @@ static efi_status_t exit_boot(struct boot_params *boot_params, void *handle)
return EFI_SUCCESS;
}
-static bool have_unsupported_snp_features(void)
+static bool check_snp_features(struct boot_params *bp)
{
+ u64 status = sev_get_status();
u64 unsupported;
- unsupported = snp_get_unsupported_features(sev_get_status());
+ unsupported = snp_get_unsupported_features(status);
if (unsupported) {
efi_err("Unsupported SEV-SNP features detected: 0x%llx\n",
unsupported);
- return true;
+ return false;
}
- return false;
+
+ if (status & MSR_AMD64_SEV_SNP_ENABLED) {
+ void *tbl = get_efi_config_table(EFI_CC_BLOB_GUID);
+
+ if (!tbl) {
+ efi_err("SEV-SNP is enabled but CC blob not found\n");
+ return false;
+ }
+ bp->cc_blob_address = (u32)(unsigned long)tbl;
+ }
+ return true;
}
static void efi_get_seed(void *seed, int size)
@@ -829,7 +840,7 @@ void __noreturn efi_stub_entry(efi_handle_t handle,
hdr = &boot_params->hdr;
- if (have_unsupported_snp_features())
+ if (!check_snp_features(boot_params))
efi_exit(handle, EFI_UNSUPPORTED);
if (IS_ENABLED(CONFIG_EFI_DXE_MEM_ATTRIBUTES)) {