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>
This commit is contained in:
parent
2393ad0bfb
commit
0a89d5237e
|
@ -53,19 +53,6 @@ int tis_open(void)
|
||||||
return 0;
|
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)
|
int tis_init(void)
|
||||||
{
|
{
|
||||||
struct tpm2_info info;
|
struct tpm2_info info;
|
||||||
|
|
|
@ -494,10 +494,6 @@ int tpm_vendor_init(struct tpm_chip *chip, unsigned int bus, uint32_t dev_addr)
|
||||||
return 0;
|
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)
|
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;
|
return cr50_i2c_write(addr & 0xff, buffer, bytes) ? CB_ERR : CB_SUCCESS;
|
||||||
|
|
|
@ -39,16 +39,6 @@ int tis_open(void)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int tis_close(void)
|
|
||||||
{
|
|
||||||
if (chip.is_open) {
|
|
||||||
tpm_vendor_cleanup(&chip);
|
|
||||||
chip.is_open = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int tis_init(void)
|
int tis_init(void)
|
||||||
{
|
{
|
||||||
return tpm_vendor_probe(CONFIG_DRIVER_TPM_I2C_BUS,
|
return tpm_vendor_probe(CONFIG_DRIVER_TPM_I2C_BUS,
|
||||||
|
|
|
@ -27,11 +27,6 @@ int tis_open(void)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int tis_close(void)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int tis_init(void)
|
int tis_init(void)
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -550,8 +550,3 @@ out_err:
|
||||||
release_locality(chip, 0, 1);
|
release_locality(chip, 0, 1);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
void tpm_vendor_cleanup(struct tpm_chip *chip)
|
|
||||||
{
|
|
||||||
release_locality(chip, chip->vendor.locality, 1);
|
|
||||||
}
|
|
||||||
|
|
|
@ -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);
|
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__ */
|
#endif /* __DRIVERS_TPM_SLB9635_I2C_TPM_H__ */
|
||||||
|
|
|
@ -20,6 +20,7 @@
|
||||||
#include <device/device.h>
|
#include <device/device.h>
|
||||||
#include <console/console.h>
|
#include <console/console.h>
|
||||||
#include <security/tpm/tis.h>
|
#include <security/tpm/tis.h>
|
||||||
|
#include <security/tpm/tss.h>
|
||||||
#include <device/pnp.h>
|
#include <device/pnp.h>
|
||||||
#include <drivers/tpm/tpm_ppi.h>
|
#include <drivers/tpm/tpm_ppi.h>
|
||||||
#include <timer.h>
|
#include <timer.h>
|
||||||
|
@ -316,11 +317,6 @@ static int tis_wait_access(int locality, u8 mask, u8 expected)
|
||||||
return TPM_TIMEOUT_ERR;
|
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)
|
static inline int tis_wait_received_access(int locality)
|
||||||
{
|
{
|
||||||
return tis_wait_access(locality, TIS_ACCESS_ACTIVE_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);
|
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:
|
* PC Client Specific TPM Interface Specification section 11.2.12:
|
||||||
*
|
*
|
||||||
|
@ -632,8 +623,7 @@ int tis_init(void)
|
||||||
/*
|
/*
|
||||||
* tis_open()
|
* tis_open()
|
||||||
*
|
*
|
||||||
* Requests access to locality 0 for the caller. After all commands have been
|
* Requests access to locality 0 for the caller.
|
||||||
* completed the caller is supposed to call tis_close().
|
|
||||||
*
|
*
|
||||||
* Returns 0 on success, TPM_DRIVER_ERR on failure.
|
* Returns 0 on success, TPM_DRIVER_ERR on failure.
|
||||||
*/
|
*/
|
||||||
|
@ -641,49 +631,27 @@ int tis_open(void)
|
||||||
{
|
{
|
||||||
u8 locality = 0; /* we use locality zero for everything */
|
u8 locality = 0; /* we use locality zero for everything */
|
||||||
|
|
||||||
if (tis_close())
|
if (!tis_has_access(locality)) {
|
||||||
return TPM_DRIVER_ERR;
|
/* request access to locality */
|
||||||
|
tis_request_access(locality);
|
||||||
|
|
||||||
/* now request access to locality */
|
/* did we get a lock? */
|
||||||
tis_request_access(locality);
|
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? */
|
/* Certain TPMs seem to need some delay here or they hang... */
|
||||||
if (tis_wait_received_access(locality)) {
|
udelay(10);
|
||||||
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);
|
|
||||||
|
|
||||||
if (tis_command_ready(locality) == TPM_TIMEOUT_ERR)
|
if (tis_command_ready(locality) == TPM_TIMEOUT_ERR)
|
||||||
return TPM_DRIVER_ERR;
|
return TPM_DRIVER_ERR;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* 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()
|
* tis_sendrecv()
|
||||||
*
|
*
|
||||||
|
@ -727,10 +695,8 @@ int tis_sendrecv(const uint8_t *sendbuf, size_t send_size,
|
||||||
static int tis_setup_interrupt(int vector, int polarity)
|
static int tis_setup_interrupt(int vector, int polarity)
|
||||||
{
|
{
|
||||||
u8 locality = 0;
|
u8 locality = 0;
|
||||||
int has_access = tis_has_access(locality);
|
|
||||||
|
|
||||||
/* Open connection and request access if not already granted */
|
if (tlcl_lib_init())
|
||||||
if (!has_access && tis_open() < 0)
|
|
||||||
return TPM_DRIVER_ERR;
|
return TPM_DRIVER_ERR;
|
||||||
|
|
||||||
/* Set TPM interrupt vector */
|
/* Set TPM interrupt vector */
|
||||||
|
@ -739,10 +705,6 @@ static int tis_setup_interrupt(int vector, int polarity)
|
||||||
/* Set TPM interrupt polarity and disable interrupts */
|
/* Set TPM interrupt polarity and disable interrupts */
|
||||||
tpm_write_int_polarity(polarity, locality);
|
tpm_write_int_polarity(polarity, locality);
|
||||||
|
|
||||||
/* Close connection if it was opened */
|
|
||||||
if (!has_access && tis_close() < 0)
|
|
||||||
return TPM_DRIVER_ERR;
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -38,19 +38,6 @@ int tis_open(void)
|
||||||
return 0;
|
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)
|
int tis_init(void)
|
||||||
{
|
{
|
||||||
struct spi_slave spi;
|
struct spi_slave spi;
|
||||||
|
|
|
@ -44,22 +44,12 @@ int tis_init(void);
|
||||||
/*
|
/*
|
||||||
* tis_open()
|
* tis_open()
|
||||||
*
|
*
|
||||||
* Requests access to locality 0 for the caller. After all commands have been
|
* Requests access to locality 0 for the caller.
|
||||||
* completed the caller is supposed to call tis_close().
|
|
||||||
*
|
*
|
||||||
* Returns 0 on success, -1 on failure.
|
* Returns 0 on success, -1 on failure.
|
||||||
*/
|
*/
|
||||||
int tis_open(void);
|
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()
|
* tis_sendrecv()
|
||||||
*
|
*
|
||||||
|
|
Loading…
Reference in New Issue