diff options
author | Sergii Dmytruk <sergii.dmytruk@3mdeb.com> | 2022-10-29 16:57:07 +0300 |
---|---|---|
committer | Felix Held <felix-coreboot@felixheld.de> | 2022-12-05 14:46:43 +0000 |
commit | 0a89d5237edcec3015363e9a7a3bd8b014fec500 (patch) | |
tree | 71186da3863f0fc295ac60b60344f3c6e801eb0a /src | |
parent | 2393ad0bfb1cd23a0524e7b02a0fd75aff3bf274 (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>
Diffstat (limited to 'src')
-rw-r--r-- | src/drivers/crb/tis.c | 13 | ||||
-rw-r--r-- | src/drivers/i2c/tpm/cr50.c | 4 | ||||
-rw-r--r-- | src/drivers/i2c/tpm/tis.c | 10 | ||||
-rw-r--r-- | src/drivers/i2c/tpm/tis_atmel.c | 5 | ||||
-rw-r--r-- | src/drivers/i2c/tpm/tpm.c | 5 | ||||
-rw-r--r-- | src/drivers/i2c/tpm/tpm.h | 2 | ||||
-rw-r--r-- | src/drivers/pc80/tpm/tis.c | 66 | ||||
-rw-r--r-- | src/drivers/spi/tpm/tis.c | 13 | ||||
-rw-r--r-- | src/security/tpm/tis.h | 12 |
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 |