Deactivate TPM

Just not exporting TPM isn't good enough as it can still be accessed.
You need to send it a deactivate command.

Change-Id: I3eb84660949c2d1e2b492d541e01d4ba78037630
Signed-off-by: Vladimir Serbinenko <phcoder@gmail.com>
Reviewed-on: http://review.coreboot.org/10270
Tested-by: build bot (Jenkins)
Reviewed-by: Patrick Georgi <pgeorgi@google.com>
This commit is contained in:
Vladimir Serbinenko 2015-05-18 10:46:57 +02:00
parent a93c0143ac
commit ce58a4e002
3 changed files with 31 additions and 5 deletions

View File

@ -37,3 +37,10 @@ config SKIP_TPM_STARTUP_ON_NORMAL_BOOT
depends on LPC_TPM
help
Skip TPM init on normal boot. Useful if payload does TPM init.
config TPM_DEACTIVATE
bool "Deactivate TPM"
default n
depends on LPC_TPM
help
Deactivate TPM by issuing deactivate command.

View File

@ -27,11 +27,11 @@ Device (TPM)
Method (_STA, 0)
{
If (CONFIG_LPC_TPM) {
Return (0xf)
} Else {
Return (0x0)
}
#if CONFIG_LPC_TPM && !CONFIG_TPM_DEACTIVATE
Return (0xf)
#else
Return (0x0)
#endif
}
Name (IBUF, ResourceTemplate ()

View File

@ -50,6 +50,12 @@ static const struct {
{0x0, 0xc1, 0x0, 0x0, 0x0, 0xc, 0x0, 0x0, 0x0, 0x99, 0x0, 0x1 }
};
static const struct {
u8 buffer[12];
} tpm_deactivate_cmd = {
{0x0, 0xc1, 0x0, 0x0, 0x0, 0xc, 0x0, 0x0, 0x0, 0x99, 0x0, 0x3 }
};
static const struct {
u8 buffer[10];
} tpm_continueselftest_cmd = {
@ -181,6 +187,19 @@ void init_tpm(int s3resume)
u32 result;
u8 response[TPM_LARGE_ENOUGH_COMMAND_SIZE];
if (CONFIG_TPM_DEACTIVATE) {
printk(BIOS_SPEW, "TPM: Deactivate\n");
result = TlclSendReceive(tpm_deactivate_cmd.buffer,
response, sizeof(response));
if (result == TPM_SUCCESS) {
printk(BIOS_SPEW, "TPM: OK.\n");
return;
}
printk(BIOS_ERR, "TPM: Error code 0x%x.\n", result);
return;
}
/* Doing TPM startup when we're not coming in on the S3 resume path
* saves us roughly 20ms in boot time only. This does not seem to
* be worth an API change to vboot_reference-firmware right now, so