[Skiboot] [PATCH] libstb: Pass a tpm_dev to tpm_i2c_request_send()
Oliver O'Halloran
oohall at gmail.com
Wed Nov 7 13:24:48 AEDT 2018
Just pass the container structure rather than bus_id and xscom_base to
tpm_i2c_request_send(). Rename xscom_base to i2c_addr while we're here
since that's just plain wrong.
Signed-off-by: Oliver O'Halloran <oohall at gmail.com>
---
libstb/drivers/tpm_i2c_interface.c | 7 ++++---
libstb/drivers/tpm_i2c_interface.h | 4 +++-
libstb/drivers/tpm_i2c_nuvoton.c | 24 +++++++++---------------
libstb/tpm_chip.h | 2 +-
4 files changed, 17 insertions(+), 20 deletions(-)
diff --git a/libstb/drivers/tpm_i2c_interface.c b/libstb/drivers/tpm_i2c_interface.c
index 8e5ba3263cdc..ea0dd66bfa6d 100644
--- a/libstb/drivers/tpm_i2c_interface.c
+++ b/libstb/drivers/tpm_i2c_interface.c
@@ -39,7 +39,7 @@
*
* Returns: Zero on success otherwise a negative error code
*/
-int tpm_i2c_request_send(int bus_id, int dev_addr, int read_write,
+int tpm_i2c_request_send(struct tpm_dev *tpm_device, int read_write,
uint32_t offset, uint32_t offset_bytes, void* buf,
size_t buflen)
{
@@ -52,8 +52,9 @@ int tpm_i2c_request_send(int bus_id, int dev_addr, int read_write,
*/
timeout = (buflen + offset_bytes + 2) * I2C_BYTE_TIMEOUT_MS;
- rc = i2c_request_send(bus_id, dev_addr, read_write, offset,
- offset_bytes, buf, buflen, timeout);
+ rc = i2c_request_send(tpm_device->bus_id, tpm_device->i2c_addr,
+ read_write, offset, offset_bytes, buf, buflen,
+ timeout);
if (rc == OPAL_PARAMETER)
return STB_ARG_ERROR;
else if (rc < 0)
diff --git a/libstb/drivers/tpm_i2c_interface.h b/libstb/drivers/tpm_i2c_interface.h
index d2acc1ae8d96..1134cd582fdb 100644
--- a/libstb/drivers/tpm_i2c_interface.h
+++ b/libstb/drivers/tpm_i2c_interface.h
@@ -20,7 +20,9 @@
#include <i2c.h>
#include <stdlib.h>
-extern int tpm_i2c_request_send(int tpm_bus_id, int tpm_dev_addr, int read_write,
+#include "../tpm_chip.h"
+
+extern int tpm_i2c_request_send(struct tpm_dev *tpm_device, int read_write,
uint32_t offset, uint32_t offset_bytes, void* buf,
size_t buflen);
#endif /* __TPM_I2C_H */
diff --git a/libstb/drivers/tpm_i2c_nuvoton.c b/libstb/drivers/tpm_i2c_nuvoton.c
index d18add9f73da..7f29debfffca 100644
--- a/libstb/drivers/tpm_i2c_nuvoton.c
+++ b/libstb/drivers/tpm_i2c_nuvoton.c
@@ -61,15 +61,13 @@ static struct tpm_dev *tpm_device = NULL;
static int tpm_status_write_byte(uint8_t byte)
{
uint8_t value = byte;
- return tpm_i2c_request_send(tpm_device->bus_id, tpm_device->xscom_base,
- SMBUS_WRITE, TPM_STS, 1, &value,
+ return tpm_i2c_request_send(tpm_device, SMBUS_WRITE, TPM_STS, 1, &value,
sizeof(value));
}
static int tpm_status_read_byte(uint8_t offset, uint8_t *byte)
{
- return tpm_i2c_request_send(tpm_device->bus_id, tpm_device->xscom_base,
- SMBUS_READ, offset, 1, byte,
+ return tpm_i2c_request_send(tpm_device, SMBUS_READ, offset, 1, byte,
sizeof(uint8_t));
}
@@ -292,8 +290,7 @@ static int tpm_write_fifo(uint8_t* buf, size_t buflen)
bytes = (count + burst_count > buflen - 1 ?
(buflen - 1 - count) : burst_count);
- rc = tpm_i2c_request_send(tpm_device->bus_id,
- tpm_device->xscom_base,
+ rc = tpm_i2c_request_send(tpm_device,
SMBUS_WRITE, TPM_DATA_FIFO_W,
1, &buf[count], bytes);
count += bytes;
@@ -335,8 +332,7 @@ static int tpm_write_fifo(uint8_t* buf, size_t buflen)
if (burst_count < 0)
return burst_count;
- rc = tpm_i2c_request_send(tpm_device->bus_id,
- tpm_device->xscom_base,
+ rc = tpm_i2c_request_send(tpm_device,
SMBUS_WRITE,
TPM_DATA_FIFO_W, 1,
&buf[count], 1);
@@ -401,8 +397,7 @@ static int tpm_read_fifo(uint8_t* buf, size_t* buflen)
"bc=%d, bl=%zd\n", count, burst_count, *buflen);
rc = STB_TPM_OVERFLOW;
}
- rc = tpm_i2c_request_send(tpm_device->bus_id,
- tpm_device->xscom_base,
+ rc = tpm_i2c_request_send(tpm_device,
SMBUS_READ,
TPM_DATA_FIFO_R, 1,
&buf[count], burst_count);
@@ -452,7 +447,7 @@ static int tpm_transmit(struct tpm_dev *dev, uint8_t* buf, size_t cmdlen,
tpm_device = dev;
DBG("**** %s: dev %#x/%#x buf %016llx cmdlen %zu"
" buflen %zu ****\n",
- __func__, dev->bus_id, dev->xscom_base, *(uint64_t*) buf,
+ __func__, dev->bus_id, dev->i2c_addr, *(uint64_t *) buf,
cmdlen, *buflen);
DBG("step 1/5: set command ready\n");
@@ -518,7 +513,7 @@ static int nuvoton_tpm_quirk(void *data, struct i2c_request *req, int *rc)
* in a nice world of pain.
*/
if (tpm_device->bus_id == req->bus->opal_id &&
- tpm_device->xscom_base == req->dev_addr &&
+ tpm_device->i2c_addr == req->dev_addr &&
((req->op == I2C_READ && req->rw_len == 1) ||
(req->op == I2C_WRITE && req->rw_len == 0))) {
*rc = OPAL_I2C_TIMEOUT;
@@ -545,9 +540,8 @@ void tpm_i2c_nuvoton_probe(void)
* Read TPM device address and bus id. Make sure the properties
* really exist if the default value is returned.
*/
- tpm_device->xscom_base = dt_prop_get_u32_def(node, "reg", 0);
- if (!tpm_device->xscom_base &&
- !dt_find_property(node, "reg")) {
+ tpm_device->i2c_addr = dt_prop_get_u32_def(node, "reg", 0);
+ if (!tpm_device->i2c_addr && !dt_find_property(node, "reg")) {
/*
* @fwts-label NuvotonRegNotFound
* @fwts-advice reg property not found. This indicates
diff --git a/libstb/tpm_chip.h b/libstb/tpm_chip.h
index fed5619b622c..de7f8ed725a5 100644
--- a/libstb/tpm_chip.h
+++ b/libstb/tpm_chip.h
@@ -28,7 +28,7 @@ struct tpm_dev {
int bus_id;
/* TPM address in the bus */
- int xscom_base;
+ int i2c_addr;
};
struct tpm_driver {
--
2.17.2
More information about the Skiboot
mailing list