summaryrefslogtreecommitdiff
path: root/src/drivers
diff options
context:
space:
mode:
authorPhilipp Deppenwiese <zaolin@das-labor.org>2018-02-27 22:18:11 +0100
committerPhilipp Deppenwiese <zaolin.daisuki@gmail.com>2018-07-25 15:53:35 +0000
commitdb70f3bb4d5d58441b1c93d216347ec296b4f787 (patch)
treedfa44a3dc22d53f39d364b15c2f56792e0ef7115 /src/drivers
parentb009ac49c85161ea2746f8bdfc6ce28a8f46e8bc (diff)
downloadcoreboot-db70f3bb4d5d58441b1c93d216347ec296b4f787.tar.xz
drivers/tpm: Add TPM ramstage driver for devices without vboot.
Logic: If vboot is not used and the tpm is not initialized in the romstage makes use of the ramstage driver to initialize the TPM globally without having setup calls in lower SoC level implementations. * Add TPM driver in ramstage chip init which calls the tpm_setup function. * Purge all occurrences of TPM init code and headers. * Only compile TIS drivers into ramstage except for vboot usage. * Remove Google Urara/Rotor TPM support because of missing i2c driver in ramstage. Change-Id: I7536c9734732aeaa85ccc7916c12eecb9ca26b2e Signed-off-by: Philipp Deppenwiese <zaolin@das-labor.org> Reviewed-on: https://review.coreboot.org/24905 Reviewed-by: Patrick Rudolph <siro@das-labor.org> Reviewed-by: Felix Held <felix-coreboot@felixheld.de> Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Diffstat (limited to 'src/drivers')
-rw-r--r--src/drivers/intel/fsp1_1/romstage.c10
-rw-r--r--src/drivers/tpm/Kconfig7
-rw-r--r--src/drivers/tpm/Makefile.inc1
-rw-r--r--src/drivers/tpm/tpm.c35
4 files changed, 43 insertions, 10 deletions
diff --git a/src/drivers/intel/fsp1_1/romstage.c b/src/drivers/intel/fsp1_1/romstage.c
index 0320bf5724..51f9a75373 100644
--- a/src/drivers/intel/fsp1_1/romstage.c
+++ b/src/drivers/intel/fsp1_1/romstage.c
@@ -37,7 +37,6 @@
#include <stage_cache.h>
#include <string.h>
#include <timestamp.h>
-#include <security/tpm/tspi.h>
#include <vendorcode/google/chromeos/chromeos.h>
asmlinkage void *romstage_main(FSP_INFO_HEADER *fih)
@@ -167,15 +166,6 @@ void romstage_common(struct romstage_params *params)
if (romstage_handoff_init(
params->power_state->prev_sleep_state == ACPI_S3) < 0)
hard_reset();
-
- /*
- * Initialize the TPM, unless the TPM was already initialized
- * in verstage and used to verify romstage.
- */
- if ((IS_ENABLED(CONFIG_TPM1) || IS_ENABLED(CONFIG_TPM2)) &&
- !IS_ENABLED(CONFIG_VBOOT_STARTS_IN_BOOTBLOCK))
- tpm_setup(params->power_state->prev_sleep_state ==
- ACPI_S3);
}
void after_cache_as_ram_stage(void)
diff --git a/src/drivers/tpm/Kconfig b/src/drivers/tpm/Kconfig
new file mode 100644
index 0000000000..8508210fc6
--- /dev/null
+++ b/src/drivers/tpm/Kconfig
@@ -0,0 +1,7 @@
+config TPM_INIT
+ bool
+ default y if TPM1 || TPM2
+ depends on !VBOOT
+ help
+ This driver automatically initializes the TPM if vboot is not used.
+ The TPM driver init is done during the ramstage chip init phase.
diff --git a/src/drivers/tpm/Makefile.inc b/src/drivers/tpm/Makefile.inc
new file mode 100644
index 0000000000..4e80600ddf
--- /dev/null
+++ b/src/drivers/tpm/Makefile.inc
@@ -0,0 +1 @@
+ramstage-$(CONFIG_TPM_INIT) += tpm.c
diff --git a/src/drivers/tpm/tpm.c b/src/drivers/tpm/tpm.c
new file mode 100644
index 0000000000..e4a81c3da4
--- /dev/null
+++ b/src/drivers/tpm/tpm.c
@@ -0,0 +1,35 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2018 Facebook Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ */
+
+#include <types.h>
+#include <stddef.h>
+#include <bootstate.h>
+#include <security/tpm/tspi.h>
+
+#if IS_ENABLED(CONFIG_ARCH_X86)
+#include <arch/acpi.h>
+#endif
+
+static void init_tpm_dev(void *unused)
+{
+#if IS_ENABLED(CONFIG_ARCH_X86)
+ int s3resume = acpi_is_wakeup_s3();
+ tpm_setup(s3resume);
+#else
+ tpm_setup(false);
+#endif
+}
+
+BOOT_STATE_INIT_ENTRY(BS_DEV_INIT, BS_ON_ENTRY, init_tpm_dev, NULL);