summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergii Dmytruk <sergii.dmytruk@3mdeb.com>2022-10-29 16:57:07 +0300
committerFelix Held <felix-coreboot@felixheld.de>2022-12-05 14:46:43 +0000
commit0a89d5237edcec3015363e9a7a3bd8b014fec500 (patch)
tree71186da3863f0fc295ac60b60344f3c6e801eb0a
parent2393ad0bfb1cd23a0524e7b02a0fd75aff3bf274 (diff)
security/tpm: remove tis_close()
This function was never called from outside of drivers and src/drivers/pc80/tpm/tis.c was the only one doing it in a questionable way. tpm_vendor_cleanup() also isn't needed as one of tis_close() functions was its only caller. Change-Id: I9df76adfc21fca9fa1d1af7c40635ec0684ceb0f Ticket: https://ticket.coreboot.org/issues/433 Signed-off-by: Sergii Dmytruk <sergii.dmytruk@3mdeb.com> Reviewed-on: https://review.coreboot.org/c/coreboot/+/68989 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Julius Werner <jwerner@chromium.org>
-rw-r--r--src/drivers/crb/tis.c13
-rw-r--r--src/drivers/i2c/tpm/cr50.c4
-rw-r--r--src/drivers/i2c/tpm/tis.c10
-rw-r--r--src/drivers/i2c/tpm/tis_atmel.c5
-rw-r--r--src/drivers/i2c/tpm/tpm.c5
-rw-r--r--src/drivers/i2c/tpm/tpm.h2
-rw-r--r--src/drivers/pc80/tpm/tis.c66
-rw-r--r--src/drivers/spi/tpm/tis.c13
-rw-r--r--src/security/tpm/tis.h12
9 files changed, 15 insertions, 115 deletions
diff --git a/src/drivers/crb/tis.c b/src/drivers/crb/tis.c
index bb1cf218ad..a7d4fa7347 100644
--- a/src/drivers/crb/tis.c
+++ b/src/drivers/crb/tis.c
@@ -53,19 +53,6 @@ int tis_open(void)
return 0;
}
-int tis_close(void)
-{
- if (tpm_is_open) {
- /*
- * Do we need to do something here, like waiting for a
- * transaction to stop?
- */
- tpm_is_open = 0;
- }
-
- return 0;
-}
-
int tis_init(void)
{
struct tpm2_info info;
diff --git a/src/drivers/i2c/tpm/cr50.c b/src/drivers/i2c/tpm/cr50.c
index b5cb32ce39..42eeff4b74 100644
--- a/src/drivers/i2c/tpm/cr50.c
+++ b/src/drivers/i2c/tpm/cr50.c
@@ -494,10 +494,6 @@ int tpm_vendor_init(struct tpm_chip *chip, unsigned int bus, uint32_t dev_addr)
return 0;
}
-void tpm_vendor_cleanup(struct tpm_chip *chip)
-{
-}
-
enum cb_err tis_vendor_write(unsigned int addr, const void *buffer, size_t bytes)
{
return cr50_i2c_write(addr & 0xff, buffer, bytes) ? CB_ERR : CB_SUCCESS;
diff --git a/src/drivers/i2c/tpm/tis.c b/src/drivers/i2c/tpm/tis.c
index ea8cf3de70..9e2052ebf0 100644
--- a/src/drivers/i2c/tpm/tis.c
+++ b/src/drivers/i2c/tpm/tis.c
@@ -39,16 +39,6 @@ int tis_open(void)
return 0;
}
-int tis_close(void)
-{
- if (chip.is_open) {
- tpm_vendor_cleanup(&chip);
- chip.is_open = 0;
- }
-
- return 0;
-}
-
int tis_init(void)
{
return tpm_vendor_probe(CONFIG_DRIVER_TPM_I2C_BUS,
diff --git a/src/drivers/i2c/tpm/tis_atmel.c b/src/drivers/i2c/tpm/tis_atmel.c
index 3a87dec698..669ac68f6c 100644
--- a/src/drivers/i2c/tpm/tis_atmel.c
+++ b/src/drivers/i2c/tpm/tis_atmel.c
@@ -27,11 +27,6 @@ int tis_open(void)
return 0;
}
-int tis_close(void)
-{
- return 0;
-}
-
int tis_init(void)
{
return 0;
diff --git a/src/drivers/i2c/tpm/tpm.c b/src/drivers/i2c/tpm/tpm.c
index 840b947ee7..606f14d07c 100644
--- a/src/drivers/i2c/tpm/tpm.c
+++ b/src/drivers/i2c/tpm/tpm.c
@@ -550,8 +550,3 @@ out_err:
release_locality(chip, 0, 1);
return -1;
}
-
-void tpm_vendor_cleanup(struct tpm_chip *chip)
-{
- release_locality(chip, chip->vendor.locality, 1);
-}
diff --git a/src/drivers/i2c/tpm/tpm.h b/src/drivers/i2c/tpm/tpm.h
index eb4fef1167..868b306c36 100644
--- a/src/drivers/i2c/tpm/tpm.h
+++ b/src/drivers/i2c/tpm/tpm.h
@@ -61,6 +61,4 @@ int tpm_vendor_probe(unsigned int bus, uint32_t addr);
int tpm_vendor_init(struct tpm_chip *chip, unsigned int bus, uint32_t dev_addr);
-void tpm_vendor_cleanup(struct tpm_chip *chip);
-
#endif /* __DRIVERS_TPM_SLB9635_I2C_TPM_H__ */
diff --git a/src/drivers/pc80/tpm/tis.c b/src/drivers/pc80/tpm/tis.c
index 06f543498f..ce88ae012d 100644
--- a/src/drivers/pc80/tpm/tis.c
+++ b/src/drivers/pc80/tpm/tis.c
@@ -20,6 +20,7 @@
#include <device/device.h>
#include <console/console.h>
#include <security/tpm/tis.h>
+#include <security/tpm/tss.h>
#include <device/pnp.h>
#include <drivers/tpm/tpm_ppi.h>
#include <timer.h>
@@ -316,11 +317,6 @@ static int tis_wait_access(int locality, u8 mask, u8 expected)
return TPM_TIMEOUT_ERR;
}
-static inline int tis_wait_dropped_access(int locality)
-{
- return tis_wait_access(locality, TIS_ACCESS_ACTIVE_LOCALITY, 0);
-}
-
static inline int tis_wait_received_access(int locality)
{
return tis_wait_access(locality, TIS_ACCESS_ACTIVE_LOCALITY,
@@ -337,11 +333,6 @@ static inline void tis_request_access(int locality)
tpm_write_access(TIS_ACCESS_REQUEST_USE, locality);
}
-static inline void tis_drop_access(int locality)
-{
- tpm_write_access(TIS_ACCESS_ACTIVE_LOCALITY, locality);
-}
-
/*
* PC Client Specific TPM Interface Specification section 11.2.12:
*
@@ -632,8 +623,7 @@ int tis_init(void)
/*
* tis_open()
*
- * Requests access to locality 0 for the caller. After all commands have been
- * completed the caller is supposed to call tis_close().
+ * Requests access to locality 0 for the caller.
*
* Returns 0 on success, TPM_DRIVER_ERR on failure.
*/
@@ -641,22 +631,21 @@ int tis_open(void)
{
u8 locality = 0; /* we use locality zero for everything */
- if (tis_close())
- return TPM_DRIVER_ERR;
+ if (!tis_has_access(locality)) {
+ /* request access to locality */
+ tis_request_access(locality);
- /* now request access to locality */
- tis_request_access(locality);
+ /* did we get a lock? */
+ if (tis_wait_received_access(locality)) {
+ printf("%s:%d - failed to lock locality %u\n",
+ __FILE__, __LINE__, locality);
+ return TPM_DRIVER_ERR;
+ }
- /* did we get a lock? */
- if (tis_wait_received_access(locality)) {
- printf("%s:%d - failed to lock locality %u\n",
- __FILE__, __LINE__, locality);
- return TPM_DRIVER_ERR;
+ /* Certain TPMs seem to need some delay here or they hang... */
+ udelay(10);
}
- /* Certain TPMs seem to need some delay here or they hang... */
- udelay(10);
-
if (tis_command_ready(locality) == TPM_TIMEOUT_ERR)
return TPM_DRIVER_ERR;
@@ -664,27 +653,6 @@ int tis_open(void)
}
/*
- * tis_close()
- *
- * terminate the current session with the TPM by releasing the locked
- * locality. Returns 0 on success of TPM_DRIVER_ERR on failure (in case lock
- * removal did not succeed).
- */
-int tis_close(void)
-{
- u8 locality = 0;
- if (tis_has_access(locality)) {
- tis_drop_access(locality);
- if (tis_wait_dropped_access(locality)) {
- printf("%s:%d - failed to release locality %u\n",
- __FILE__, __LINE__, locality);
- return TPM_DRIVER_ERR;
- }
- }
- return 0;
-}
-
-/*
* tis_sendrecv()
*
* Send the requested data to the TPM and then try to get its response
@@ -727,10 +695,8 @@ int tis_sendrecv(const uint8_t *sendbuf, size_t send_size,
static int tis_setup_interrupt(int vector, int polarity)
{
u8 locality = 0;
- int has_access = tis_has_access(locality);
- /* Open connection and request access if not already granted */
- if (!has_access && tis_open() < 0)
+ if (tlcl_lib_init())
return TPM_DRIVER_ERR;
/* Set TPM interrupt vector */
@@ -739,10 +705,6 @@ static int tis_setup_interrupt(int vector, int polarity)
/* Set TPM interrupt polarity and disable interrupts */
tpm_write_int_polarity(polarity, locality);
- /* Close connection if it was opened */
- if (!has_access && tis_close() < 0)
- return TPM_DRIVER_ERR;
-
return 0;
}
diff --git a/src/drivers/spi/tpm/tis.c b/src/drivers/spi/tpm/tis.c
index 5106fc05f6..b9b2a4a5cb 100644
--- a/src/drivers/spi/tpm/tis.c
+++ b/src/drivers/spi/tpm/tis.c
@@ -38,19 +38,6 @@ int tis_open(void)
return 0;
}
-int tis_close(void)
-{
- if (tpm_is_open) {
- /*
- * Do we need to do something here, like waiting for a
- * transaction to stop?
- */
- tpm_is_open = 0;
- }
-
- return 0;
-}
-
int tis_init(void)
{
struct spi_slave spi;
diff --git a/src/security/tpm/tis.h b/src/security/tpm/tis.h
index 8868e1a0fe..04a137f12e 100644
--- a/src/security/tpm/tis.h
+++ b/src/security/tpm/tis.h
@@ -44,23 +44,13 @@ int tis_init(void);
/*
* tis_open()
*
- * Requests access to locality 0 for the caller. After all commands have been
- * completed the caller is supposed to call tis_close().
+ * Requests access to locality 0 for the caller.
*
* Returns 0 on success, -1 on failure.
*/
int tis_open(void);
/*
- * tis_close()
- *
- * terminate the current session with the TPM by releasing the locked
- * locality. Returns 0 on success of -1 on failure (in case lock
- * removal did not succeed).
- */
-int tis_close(void);
-
-/*
* tis_sendrecv()
*
* Send the requested data to the TPM and then try to get its response