13 static uint32_t tpm1_invoke_state_machine(
void)
38 "TPM: Unexpected TPM deactivated state. Toggling...\n");
42 "TPM: Can't toggle deactivated state.\n");
46 deactivated = !deactivated;
106 if (
CONFIG(TPM_MEASURED_BOOT_INIT_BOOTBLOCK))
152 if (
CONFIG(TPM_STARTUP_IGNORE_POSTINIT)
171 printk(
BIOS_ERR,
"TPM: Can't enable physical presence command.\n");
183 result = tpm1_invoke_state_machine();
185 if (
CONFIG(TPM_MEASURED_BOOT))
221 const uint8_t *digest,
size_t digest_len,
const char *
name)
238 printk(
BIOS_ERR,
"TPM: Extending hash for `%s` into PCR %d failed.\n",
244 if (
CONFIG(TPM_MEASURED_BOOT))
254 #if CONFIG(VBOOT_LIB)
262 struct vb2_digest_context ctx;
268 assert(digest_len <=
sizeof(digest));
285 if (vb2_digest_extend(&ctx,
buf, len)) {
290 if (vb2_digest_finalize(&ctx, digest, digest_len)) {
#define assert(statement)
#define printk(level,...)
int tspi_measure_cache_to_pcr(void)
Measure digests cached in TCPA log entries into PCRs.
static struct region_device rdev
void tcpa_log_add_table_entry(const char *name, const uint32_t pcr, enum vb2_hash_algorithm digest_algo, const uint8_t *digest, const size_t digest_len)
Add table entry for cbmem TCPA log.
#define BIOS_INFO
BIOS_INFO - Expected events.
#define BIOS_DEBUG
BIOS_DEBUG - Verbose output.
#define BIOS_ERR
BIOS_ERR - System in incomplete state.
static int verification_should_run(void)
static int vboot_logic_executed(void)
#define POST_TPM_FAILURE
TPM failure.
static size_t region_device_sz(const struct region_device *rdev)
ssize_t rdev_readat(const struct region_device *rd, void *b, size_t offset, size_t size)
uint32_t tlcl_set_deactivated(uint8_t flag)
uint32_t tlcl_assert_physical_presence(void)
Assert physical presence in software.
uint32_t tlcl_set_enable(void)
uint32_t tlcl_force_clear(void)
Issue a ForceClear.
uint32_t tlcl_get_flags(uint8_t *disable, uint8_t *deactivated, uint8_t *nvlocked)
uint32_t tlcl_lib_init(void)
Call this first.
uint32_t tlcl_startup(void)
Send a TPM_Startup(ST_CLEAR).
uint32_t tlcl_extend(int pcr_num, const uint8_t *in_digest, uint8_t *out_digest)
Perform a TPM_Extend.
uint32_t tlcl_physical_presence_cmd_enable(void)
Enable the physical presence command.
uint32_t tlcl_resume(void)
Resume by sending a TPM_Startup(ST_STATE).
uint32_t tpm_extend_pcr(int pcr, enum vb2_hash_algorithm digest_algo, const uint8_t *digest, size_t digest_len, const char *name)
Ask vboot for a digest and extend a TPM PCR with it.
static uint32_t tpm_setup_epilogue(uint32_t result)
static int tspi_tpm_is_setup(void)
static uint32_t tpm_setup_s3_helper(void)
uint32_t tpm_setup(int s3flag)
Start the TPM and establish the root of trust.
uint32_t tpm_clear_and_reenable(void)
Issue a TPM_Clear and re-enable/reactivate the TPM.
uint32_t tpm_measure_region(const struct region_device *rdev, uint8_t pcr, const char *rname)
Measure a given region device and extend given PCR with the result.
#define HASH_DATA_CHUNK_SIZE
#define TPM_E_READ_FAILURE
#define TPM_E_MUST_REBOOT
#define TPM_E_INVALID_ARG
#define TPM_E_INVALID_POSTINIT