From 7758b47e3be128ab8c1c3fecb63b8f0054351ee0 Mon Sep 17 00:00:00 2001 From: Grzegorz Bernacki Date: Wed, 14 Jun 2023 12:01:32 +0000 Subject: [PATCH] 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 Reviewed-on: https://review.coreboot.org/c/coreboot/+/75917 Reviewed-by: Yu-Ping Wu Tested-by: build bot (Jenkins) Reviewed-by: Eric Lai Reviewed-by: Raul Rangel --- src/drivers/i2c/tpm/cr50.c | 19 ++----------------- src/drivers/spi/tpm/tpm.c | 19 +------------------ src/drivers/tpm/cr50.c | 19 ++++++++++++++++++- src/drivers/tpm/cr50.h | 3 +++ src/mainboard/google/asurada/chromeos.c | 4 ++-- src/mainboard/google/cherry/chromeos.c | 4 ++-- src/mainboard/google/corsola/chromeos.c | 4 ++-- src/mainboard/google/geralt/chromeos.c | 4 ++-- src/mainboard/google/gru/chromeos.c | 4 ++-- .../guybrush/variants/baseboard/tpm_tis.c | 4 ++-- src/mainboard/google/herobrine/chromeos.c | 4 ++-- .../kahlee/variants/baseboard/tpm_tis.c | 4 ++-- src/mainboard/google/kukui/chromeos.c | 4 ++-- .../google/myst/variants/baseboard/tpm_tis.c | 4 ++-- src/mainboard/google/oak/tpm_tis.c | 4 ++-- .../skyrim/variants/baseboard/tpm_tis.c | 4 ++-- src/mainboard/google/trogdor/chromeos.c | 4 ++-- .../google/zork/variants/baseboard/tpm_tis.c | 4 ++-- src/security/tpm/tis.h | 11 ----------- src/soc/intel/common/tpm_tis.c | 4 ++-- 20 files changed, 54 insertions(+), 77 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 #include #include #include @@ -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__ */ diff --git a/src/mainboard/google/asurada/chromeos.c b/src/mainboard/google/asurada/chromeos.c index 1aa8876ca4..d8787f63a2 100644 --- a/src/mainboard/google/asurada/chromeos.c +++ b/src/mainboard/google/asurada/chromeos.c @@ -2,8 +2,8 @@ #include #include +#include #include -#include #include "gpio.h" @@ -36,7 +36,7 @@ int get_write_protect_state(void) return !gpio_get(GPIO_WP); } -int tis_plat_irq_status(void) +int cr50_plat_irq_status(void) { return gpio_eint_poll(GPIO_H1_AP_INT); } diff --git a/src/mainboard/google/cherry/chromeos.c b/src/mainboard/google/cherry/chromeos.c index 301a0bc1c7..4a93ae2c73 100644 --- a/src/mainboard/google/cherry/chromeos.c +++ b/src/mainboard/google/cherry/chromeos.c @@ -2,8 +2,8 @@ #include #include +#include #include -#include #include "gpio.h" @@ -61,7 +61,7 @@ void fill_lb_gpios(struct lb_gpios *gpios) lb_add_gpios(gpios, spk_gpios, ARRAY_SIZE(spk_gpios)); } -int tis_plat_irq_status(void) +int cr50_plat_irq_status(void) { return gpio_eint_poll(GPIO_GSC_AP_INT); } diff --git a/src/mainboard/google/corsola/chromeos.c b/src/mainboard/google/corsola/chromeos.c index 9717f9c2e1..a1674d3c13 100644 --- a/src/mainboard/google/corsola/chromeos.c +++ b/src/mainboard/google/corsola/chromeos.c @@ -2,9 +2,9 @@ #include #include +#include #include #include -#include #include #include "gpio.h" @@ -68,7 +68,7 @@ int get_ec_is_trusted(void) return !!gpio_get(GPIO_EC_IN_RW_ODL); } -int tis_plat_irq_status(void) +int cr50_plat_irq_status(void) { return gpio_eint_poll(GPIO_GSC_AP_INT_ODL); } diff --git a/src/mainboard/google/geralt/chromeos.c b/src/mainboard/google/geralt/chromeos.c index a6e891703a..1144701ea3 100644 --- a/src/mainboard/google/geralt/chromeos.c +++ b/src/mainboard/google/geralt/chromeos.c @@ -2,8 +2,8 @@ #include #include +#include #include -#include #include "gpio.h" #include "panel.h" @@ -67,7 +67,7 @@ void fill_lb_gpios(struct lb_gpios *gpios) } } -int tis_plat_irq_status(void) +int cr50_plat_irq_status(void) { return gpio_eint_poll(GPIO_GSC_AP_INT_ODL); } diff --git a/src/mainboard/google/gru/chromeos.c b/src/mainboard/google/gru/chromeos.c index 479ca3d85d..3e57242fa3 100644 --- a/src/mainboard/google/gru/chromeos.c +++ b/src/mainboard/google/gru/chromeos.c @@ -2,8 +2,8 @@ #include #include +#include #include -#include #include "board.h" @@ -44,7 +44,7 @@ void setup_chromeos_gpios(void) } #if CONFIG(GRU_HAS_TPM2) -int tis_plat_irq_status(void) +int cr50_plat_irq_status(void) { return gpio_irq_status(GPIO_TPM_IRQ); } diff --git a/src/mainboard/google/guybrush/variants/baseboard/tpm_tis.c b/src/mainboard/google/guybrush/variants/baseboard/tpm_tis.c index 2f3e426ef9..bc4091527f 100644 --- a/src/mainboard/google/guybrush/variants/baseboard/tpm_tis.c +++ b/src/mainboard/google/guybrush/variants/baseboard/tpm_tis.c @@ -1,10 +1,10 @@ /* SPDX-License-Identifier: GPL-2.0-or-later */ #include +#include #include -#include -int tis_plat_irq_status(void) +int cr50_plat_irq_status(void) { gpio_t irq_gpio = GPIO_85; uint32_t board_ver = board_id(); diff --git a/src/mainboard/google/herobrine/chromeos.c b/src/mainboard/google/herobrine/chromeos.c index b5631fc8b2..f17e2782f8 100644 --- a/src/mainboard/google/herobrine/chromeos.c +++ b/src/mainboard/google/herobrine/chromeos.c @@ -3,7 +3,7 @@ #include #include #include "board.h" -#include +#include void setup_chromeos_gpios(void) { @@ -55,7 +55,7 @@ int get_ec_is_trusted(void) return 1; } -int tis_plat_irq_status(void) +int cr50_plat_irq_status(void) { return gpio_irq_status(GPIO_H1_AP_INT); } diff --git a/src/mainboard/google/kahlee/variants/baseboard/tpm_tis.c b/src/mainboard/google/kahlee/variants/baseboard/tpm_tis.c index 2e3cfb8d15..87b7f45dc9 100644 --- a/src/mainboard/google/kahlee/variants/baseboard/tpm_tis.c +++ b/src/mainboard/google/kahlee/variants/baseboard/tpm_tis.c @@ -1,10 +1,10 @@ /* SPDX-License-Identifier: GPL-2.0-only */ +#include #include -#include #include -int tis_plat_irq_status(void) +int cr50_plat_irq_status(void) { return gpio_interrupt_status(GPIO_9); } diff --git a/src/mainboard/google/kukui/chromeos.c b/src/mainboard/google/kukui/chromeos.c index 4c4a8bec03..13e7f4c38f 100644 --- a/src/mainboard/google/kukui/chromeos.c +++ b/src/mainboard/google/kukui/chromeos.c @@ -2,8 +2,8 @@ #include #include +#include #include -#include #include "gpio.h" @@ -33,7 +33,7 @@ int get_write_protect_state(void) return !gpio_get(GPIO_WP); } -int tis_plat_irq_status(void) +int cr50_plat_irq_status(void) { return gpio_eint_poll(CR50_IRQ); } diff --git a/src/mainboard/google/myst/variants/baseboard/tpm_tis.c b/src/mainboard/google/myst/variants/baseboard/tpm_tis.c index d03158db81..3641e7abd9 100644 --- a/src/mainboard/google/myst/variants/baseboard/tpm_tis.c +++ b/src/mainboard/google/myst/variants/baseboard/tpm_tis.c @@ -1,9 +1,9 @@ /* SPDX-License-Identifier: GPL-2.0-or-later */ -#include +#include #include -int tis_plat_irq_status(void) +int cr50_plat_irq_status(void) { return gpio_interrupt_status(GPIO_84); } diff --git a/src/mainboard/google/oak/tpm_tis.c b/src/mainboard/google/oak/tpm_tis.c index 9071869642..75c951b41f 100644 --- a/src/mainboard/google/oak/tpm_tis.c +++ b/src/mainboard/google/oak/tpm_tis.c @@ -1,11 +1,11 @@ /* SPDX-License-Identifier: GPL-2.0-only */ +#include #include -#include #include "gpio.h" -int tis_plat_irq_status(void) +int cr50_plat_irq_status(void) { return gpio_eint_poll(CR50_IRQ); } diff --git a/src/mainboard/google/skyrim/variants/baseboard/tpm_tis.c b/src/mainboard/google/skyrim/variants/baseboard/tpm_tis.c index 7e513ef79f..b3ab49aee3 100644 --- a/src/mainboard/google/skyrim/variants/baseboard/tpm_tis.c +++ b/src/mainboard/google/skyrim/variants/baseboard/tpm_tis.c @@ -1,9 +1,9 @@ /* SPDX-License-Identifier: GPL-2.0-or-later */ -#include +#include #include -int tis_plat_irq_status(void) +int cr50_plat_irq_status(void) { return gpio_interrupt_status(GPIO_18); } diff --git a/src/mainboard/google/trogdor/chromeos.c b/src/mainboard/google/trogdor/chromeos.c index 11b38b513d..2fe3e610e1 100644 --- a/src/mainboard/google/trogdor/chromeos.c +++ b/src/mainboard/google/trogdor/chromeos.c @@ -3,7 +3,7 @@ #include #include #include "board.h" -#include +#include void setup_chromeos_gpios(void) { @@ -53,7 +53,7 @@ void fill_lb_gpios(struct lb_gpios *gpios) lb_add_gpios(gpios, chromeos_gpios, ARRAY_SIZE(chromeos_gpios)); } -int tis_plat_irq_status(void) +int cr50_plat_irq_status(void) { return gpio_irq_status(GPIO_H1_AP_INT); } diff --git a/src/mainboard/google/zork/variants/baseboard/tpm_tis.c b/src/mainboard/google/zork/variants/baseboard/tpm_tis.c index 97eac5db92..822349288a 100644 --- a/src/mainboard/google/zork/variants/baseboard/tpm_tis.c +++ b/src/mainboard/google/zork/variants/baseboard/tpm_tis.c @@ -1,10 +1,10 @@ /* SPDX-License-Identifier: GPL-2.0-or-later */ +#include #include -#include #include -int tis_plat_irq_status(void) +int cr50_plat_irq_status(void) { return gpio_interrupt_status(GPIO_3); } diff --git a/src/security/tpm/tis.h b/src/security/tpm/tis.h index 9b343330e3..fae049efff 100644 --- a/src/security/tpm/tis.h +++ b/src/security/tpm/tis.h @@ -64,17 +64,6 @@ int tis_open(void); int tis_sendrecv(const u8 *sendbuf, size_t send_size, u8 *recvbuf, size_t *recv_len); -/* TODO: This is supposed to be used only for Google TPM. - Consider moving this to drivers/tpm/cr50.h. */ -/* - * tis_plat_irq_status() - * - * Check tpm irq and clear it. - * - * Returns 1 when irq pending or 0 when not. - */ -int tis_plat_irq_status(void); - /* * tis_vendor_write() * diff --git a/src/soc/intel/common/tpm_tis.c b/src/soc/intel/common/tpm_tis.c index d761f14483..56cf64809e 100644 --- a/src/soc/intel/common/tpm_tis.c +++ b/src/soc/intel/common/tpm_tis.c @@ -1,9 +1,9 @@ /* SPDX-License-Identifier: GPL-2.0-only */ #include -#include +#include -int tis_plat_irq_status(void) +int cr50_plat_irq_status(void) { return acpi_get_gpe(CONFIG_TPM_TIS_ACPI_INTERRUPT); }