summaryrefslogtreecommitdiff
path: root/src/drivers
diff options
context:
space:
mode:
authorGrzegorz Bernacki <bernacki@google.com>2023-06-14 12:01:32 +0000
committerFelix Held <felix-coreboot@felixheld.de>2023-07-06 16:16:43 +0000
commit7758b47e3be128ab8c1c3fecb63b8f0054351ee0 (patch)
tree626cdc57c8c0eb979e336af506da07b4e4ea77e0 /src/drivers
parent15d75aa999709ab2006b816f7c0335b52147f945 (diff)
drivers/tpm: Move tis_plat_irq_status to cr50 driver
tis_plat_irq_status() function is used only by Google TPM. It should be moved to drivers/tpm/cr50.c. The name of the function was changed to cr50_plat_irq_status(). BUG=b:277787305 TEST=Build all affected platforms Change-Id: I78dc39f2c7b44232b06947d3dfe6afa52807ced8 Signed-off-by: Grzegorz Bernacki <bernacki@google.com> Reviewed-on: https://review.coreboot.org/c/coreboot/+/75917 Reviewed-by: Yu-Ping Wu <yupingso@google.com> Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Eric Lai <eric_lai@quanta.corp-partner.google.com> Reviewed-by: Raul Rangel <rrangel@chromium.org>
Diffstat (limited to 'src/drivers')
-rw-r--r--src/drivers/i2c/tpm/cr50.c19
-rw-r--r--src/drivers/spi/tpm/tpm.c19
-rw-r--r--src/drivers/tpm/cr50.c19
-rw-r--r--src/drivers/tpm/cr50.h3
4 files changed, 24 insertions, 36 deletions
diff --git a/src/drivers/i2c/tpm/cr50.c b/src/drivers/i2c/tpm/cr50.c
index d9088233c2..7c0c488658 100644
--- a/src/drivers/i2c/tpm/cr50.c
+++ b/src/drivers/i2c/tpm/cr50.c
@@ -33,7 +33,6 @@
#define CR50_TIMEOUT_INIT_MS 30000 /* Very long timeout for TPM init */
#define CR50_TIMEOUT_LONG_MS 2000 /* Long timeout while waiting for TPM */
#define CR50_TIMEOUT_SHORT_MS 2 /* Short timeout during transactions */
-#define CR50_TIMEOUT_NOIRQ_MS 20 /* Timeout for TPM ready without IRQ */
#define CR50_DID_VID 0x00281ae0L
#define TI50_DID_VID 0x504a6666L
@@ -46,20 +45,6 @@ struct tpm_inf_dev {
static struct tpm_inf_dev tpm_dev;
-__weak int tis_plat_irq_status(void)
-{
- static int warning_displayed;
-
- if (!warning_displayed) {
- printk(BIOS_WARNING, "%s() not implemented, wasting 20ms to wait on"
- " Cr50!\n", __func__);
- warning_displayed = 1;
- }
- mdelay(CR50_TIMEOUT_NOIRQ_MS);
-
- return 1;
-}
-
/*
* cr50_i2c_read() - read from TPM register
*
@@ -79,7 +64,7 @@ static int cr50_i2c_read(uint8_t addr, uint8_t *buffer, size_t len)
return -1;
/* Clear interrupt before starting transaction */
- tis_plat_irq_status();
+ cr50_plat_irq_status();
/* Send the register address byte to the TPM */
if (i2c_write_raw(tpm_dev.bus, tpm_dev.addr, &addr, 1)) {
@@ -125,7 +110,7 @@ static int cr50_i2c_write(uint8_t addr, const uint8_t *buffer, size_t len)
memcpy(tpm_dev.buf + 1, buffer, len);
/* Clear interrupt before starting transaction */
- tis_plat_irq_status();
+ cr50_plat_irq_status();
/* Send write request buffer with address */
if (i2c_write_raw(tpm_dev.bus, tpm_dev.addr, tpm_dev.buf, len + 1)) {
diff --git a/src/drivers/spi/tpm/tpm.c b/src/drivers/spi/tpm/tpm.c
index 976a8d894e..5bb56db867 100644
--- a/src/drivers/spi/tpm/tpm.c
+++ b/src/drivers/spi/tpm/tpm.c
@@ -61,23 +61,6 @@ void tpm2_get_info(struct tpm2_info *info)
*info = tpm_info;
}
-__weak int tis_plat_irq_status(void)
-{
- static int warning_displayed;
-
- if (!CONFIG(TPM_GOOGLE))
- dead_code();
-
- if (!warning_displayed) {
- printk(BIOS_WARNING, "%s() not implemented, wasting 10ms to wait on"
- " Cr50!\n", __func__);
- warning_displayed = 1;
- }
- mdelay(10);
-
- return 1;
-}
-
/*
* Each TPM2 SPI transaction starts the same: CS is asserted, the 4 byte
* header is sent to the TPM, the master waits til TPM is ready to continue.
@@ -421,7 +404,7 @@ int tpm2_init(struct spi_slave *spi_if)
/* Clear any pending IRQs. */
if (CONFIG(TPM_GOOGLE))
- tis_plat_irq_status();
+ cr50_plat_irq_status();
/*
* 150 ms should be enough to synchronize with the TPM even under the
diff --git a/src/drivers/tpm/cr50.c b/src/drivers/tpm/cr50.c
index 25ce881d8a..5618b9db5d 100644
--- a/src/drivers/tpm/cr50.c
+++ b/src/drivers/tpm/cr50.c
@@ -1,5 +1,6 @@
/* SPDX-License-Identifier: BSD-3-Clause */
+#include <delay.h>
#include <drivers/spi/tpm/tpm.h>
#include <security/tpm/tis.h>
#include <string.h>
@@ -17,6 +18,8 @@
(CONFIG(CR50_USE_LONG_INTERRUPT_PULSES) \
? CR50_BOARD_CFG_100US_READY_PULSE : 0)
+#define CR50_TIMEOUT_NOIRQ_MS 20 /* Timeout for TPM ready without IRQ */
+
enum cr50_register {
CR50_FW_VER_REG,
CR50_BOARD_CFG_REG,
@@ -95,6 +98,20 @@ static uint32_t cr50_get_board_cfg(void)
return value & CR50_BOARD_CFG_FEATUREBITS_MASK;
}
+__weak int cr50_plat_irq_status(void)
+{
+ static int warning_displayed;
+
+ if (!warning_displayed) {
+ printk(BIOS_WARNING, "%s() not implemented, wasting 20ms to wait on Cr50!\n",
+ __func__);
+ warning_displayed = 1;
+ }
+ mdelay(CR50_TIMEOUT_NOIRQ_MS);
+
+ return 1;
+}
+
/**
* Set the BOARD_CFG register on the TPM chip to a particular compile-time constant value.
*/
@@ -235,7 +252,7 @@ enum cb_err cr50_wait_tpm_ready(void)
stopwatch_init_msecs_expire(&sw, CONFIG_GOOGLE_TPM_IRQ_TIMEOUT_MS);
- while (!tis_plat_irq_status())
+ while (!cr50_plat_irq_status())
if (stopwatch_expired(&sw)) {
printk(BIOS_ERR, "Cr50 TPM IRQ timeout!\n");
return CB_ERR;
diff --git a/src/drivers/tpm/cr50.h b/src/drivers/tpm/cr50.h
index 7ff63fa3c7..35e70a4320 100644
--- a/src/drivers/tpm/cr50.h
+++ b/src/drivers/tpm/cr50.h
@@ -24,4 +24,7 @@ enum cb_err cr50_set_board_cfg(void);
/* Wait for IRQ to indicate the TPM is ready */
enum cb_err cr50_wait_tpm_ready(void);
+/* Check TPM IRQ and clear it, returns 1 when IRQ pending or 0 when not */
+int cr50_plat_irq_status(void);
+
#endif /* __DRIVERS_TPM_CR50_H__ */