inteltool: Add support to print TME/MKTME status
Print whether the SOC supports TME/MKTME. If the SOC supports the feature, print the status of enable and lock bit from TME_ACTIVATE MSR. -t option prints this status. Sample output: If TME/MKTME is supported: ============= Dumping INTEL TME/MKTME status ============= TME supported : YES TME locked : YES TME enabled : YES ==================================================== If TME/MKTME is not supported: ============= Dumping INTEL TME status ============= TME supported : NO ==================================================== Signed-off-by: Pratik Prajapati <pratikkumar.v.prajapati@intel.com> Change-Id: I584ac4b045ba80998d454283e02d3f28ef45692d Reviewed-on: https://review.coreboot.org/c/coreboot/+/45088 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Stefan Reinauer <stefan.reinauer@coreboot.org>
This commit is contained in:
committed by
Patrick Georgi
parent
41220cd245
commit
1e67816961
@ -22,6 +22,10 @@
|
||||
#define MTRR_CAP_MSR 0xfe
|
||||
#define PRMRR_SUPPORTED (1 << 12)
|
||||
#define SGX_SUPPORTED (1 << 2)
|
||||
#define IA32_TME_ACTIVATE 0x982
|
||||
#define TME_SUPPORTED (1 << 13)
|
||||
#define TME_LOCKED (1)
|
||||
#define TME_ENABLED (1 << 1)
|
||||
|
||||
int fd_msr;
|
||||
|
||||
@ -212,6 +216,55 @@ int print_sgx(void)
|
||||
return error;
|
||||
}
|
||||
|
||||
static int is_tme_supported()
|
||||
{
|
||||
cpuid_result_t cpuid_regs;
|
||||
|
||||
/*
|
||||
* CPUID leaf 0x7 subleaf 0x0 to detect TME support
|
||||
* https://software.intel.com/sites/default/files/managed/a5/16/Multi-Key
|
||||
* -Total-Memory-Encryption-Spec.pdf
|
||||
*/
|
||||
|
||||
cpuid_regs = cpuid_ext(0x7, 0x0);
|
||||
return (cpuid_regs.ecx & TME_SUPPORTED);
|
||||
}
|
||||
|
||||
static msr_t read_tme_activate_msr(){
|
||||
return rdmsr_from_cpu(0, IA32_TME_ACTIVATE);
|
||||
}
|
||||
|
||||
static int is_tme_locked()
|
||||
{
|
||||
msr_t data = read_tme_activate_msr();
|
||||
return (data.lo & TME_LOCKED);
|
||||
}
|
||||
|
||||
static int is_tme_enabled()
|
||||
{
|
||||
msr_t data = read_tme_activate_msr();
|
||||
return (data.lo & TME_ENABLED);
|
||||
}
|
||||
|
||||
void print_tme(void)
|
||||
{
|
||||
#ifndef __DARWIN__
|
||||
int tme_supported = is_tme_supported();
|
||||
|
||||
printf("\n============= Dumping INTEL TME status =============\n");
|
||||
|
||||
printf("TME supported : %s\n", tme_supported ? "YES" : "NO");
|
||||
|
||||
if (tme_supported) {
|
||||
printf("TME locked : %s\n", is_tme_locked() ? "YES" : "NO");
|
||||
printf("TME enabled : %s\n", is_tme_enabled() ? "YES" : "NO");
|
||||
}
|
||||
printf("====================================================\n");
|
||||
#else
|
||||
printf("Not Implemented\n");
|
||||
#endif
|
||||
}
|
||||
|
||||
int print_intel_core_msrs(void)
|
||||
{
|
||||
unsigned int i, core, id, core_num = get_number_of_cores();
|
||||
|
Reference in New Issue
Block a user