tpm: tpm_tis_i2c: Merge struct tpm_dev into tpm_chip
authorSimon Glass <sjg@chromium.org>
Sun, 23 Aug 2015 00:31:25 +0000 (18:31 -0600)
committerSimon Glass <sjg@chromium.org>
Mon, 31 Aug 2015 13:57:27 +0000 (07:57 -0600)
There are too many structures storing the same sort of information. Move the
fields from struct tpm_dev into struct tpm_chip and remove the former
struct.

Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Heiko Schocher <hs@denx.de>
drivers/tpm/tpm_tis_i2c.c
drivers/tpm/tpm_tis_i2c.h

index 3ae1a4e436974e70008d5ee43373ddcb16bfdf61..81a3bb59819e59ecd81bfbaa69d00ea9b8721c42 100644 (file)
@@ -34,9 +34,6 @@
 
 DECLARE_GLOBAL_DATA_PTR;
 
-/* Max buffer size supported by our tpm */
-#define TPM_DEV_BUFSIZE                1260
-
 /* Max number of iterations after i2c NAK */
 #define MAX_COUNT              3
 
@@ -78,12 +75,6 @@ enum tis_defaults {
 #define TPM_TIS_I2C_DID_VID_9635 0x000b15d1L
 #define TPM_TIS_I2C_DID_VID_9645 0x001a15d1L
 
-enum i2c_chip_type {
-       SLB9635,
-       SLB9645,
-       UNKNOWN,
-};
-
 static const char * const chip_name[] = {
        [SLB9635] = "slb9635tt",
        [SLB9645] = "slb9645tt",
@@ -390,18 +381,8 @@ struct tpm {
        char inited;
 } tpm;
 
-/* Global structure for tpm chip data */
 static struct tpm_chip g_chip;
 
-/* Structure to store I2C TPM specific stuff */
-struct tpm_dev {
-       struct udevice *dev;
-       u8 buf[TPM_DEV_BUFSIZE + sizeof(u8)];  /* Max buffer size + addr */
-       enum i2c_chip_type chip_type;
-};
-
-static struct tpm_dev tpm_dev;
-
 /*
  * iic_tpm_read() - read from TPM register
  * @addr: register address to read from
@@ -422,10 +403,10 @@ static int iic_tpm_read(u8 addr, u8 *buffer, size_t len)
        int count;
        uint32_t addrbuf = addr;
 
-       if ((tpm_dev.chip_type == SLB9635) || (tpm_dev.chip_type == UNKNOWN)) {
+       if ((g_chip.chip_type == SLB9635) || (g_chip.chip_type == UNKNOWN)) {
                /* slb9635 protocol should work in both cases */
                for (count = 0; count < MAX_COUNT; count++) {
-                       rc = dm_i2c_write(tpm_dev.dev, 0, (uchar *)&addrbuf, 1);
+                       rc = dm_i2c_write(g_chip.dev, 0, (uchar *)&addrbuf, 1);
                        if (rc == 0)
                                break;  /* Success, break to skip sleep */
                        udelay(SLEEP_DURATION);
@@ -439,7 +420,7 @@ static int iic_tpm_read(u8 addr, u8 *buffer, size_t len)
                 */
                for (count = 0; count < MAX_COUNT; count++) {
                        udelay(SLEEP_DURATION);
-                       rc = dm_i2c_read(tpm_dev.dev, 0, buffer, len);
+                       rc = dm_i2c_read(g_chip.dev, 0, buffer, len);
                        if (rc == 0)
                                break;  /* success, break to skip sleep */
                }
@@ -452,7 +433,7 @@ static int iic_tpm_read(u8 addr, u8 *buffer, size_t len)
                 * be safe on the safe side.
                 */
                for (count = 0; count < MAX_COUNT; count++) {
-                       rc = dm_i2c_read(tpm_dev.dev, addr, buffer, len);
+                       rc = dm_i2c_read(g_chip.dev, addr, buffer, len);
                        if (rc == 0)
                                break;  /* break here to skip sleep */
                        udelay(SLEEP_DURATION);
@@ -474,7 +455,7 @@ static int iic_tpm_write_generic(u8 addr, u8 *buffer, size_t len,
        int count;
 
        for (count = 0; count < max_count; count++) {
-               rc = dm_i2c_write(tpm_dev.dev, addr, buffer, len);
+               rc = dm_i2c_write(g_chip.dev, addr, buffer, len);
                if (rc == 0)
                        break;  /* Success, break to skip sleep */
                udelay(sleep_time);
@@ -809,7 +790,7 @@ out_err:
        return rc;
 }
 
-static enum i2c_chip_type tpm_vendor_chip_type(void)
+static enum i2c_chip_type tpm_tis_i2c_chip_type(void)
 {
 #if CONFIG_IS_ENABLED(OF_CONTROL)
        const void *blob = gd->fdt_blob;
@@ -823,14 +804,14 @@ static enum i2c_chip_type tpm_vendor_chip_type(void)
        return UNKNOWN;
 }
 
-int tpm_vendor_init(struct udevice *dev)
+static int tpm_tis_i2c_init(struct udevice *dev)
 {
        struct tpm_chip *chip = &g_chip;
        u32 vendor;
        u32 expected_did_vid;
 
-       tpm_dev.dev = dev;
-       tpm_dev.chip_type = tpm_vendor_chip_type();
+       g_chip.dev = dev;
+       g_chip.chip_type = tpm_tis_i2c_chip_type();
        chip->is_open = 1;
 
        /* Disable interrupts (not supported) */
@@ -854,7 +835,7 @@ int tpm_vendor_init(struct udevice *dev)
                return -EIO;
        }
 
-       if (tpm_dev.chip_type == SLB9635) {
+       if (g_chip.chip_type == SLB9635) {
                vendor = be32_to_cpu(vendor);
                expected_did_vid = TPM_TIS_I2C_DID_VID_9635;
        } else {
@@ -862,13 +843,13 @@ int tpm_vendor_init(struct udevice *dev)
                expected_did_vid = TPM_TIS_I2C_DID_VID_9645;
        }
 
-       if (tpm_dev.chip_type != UNKNOWN && vendor != expected_did_vid) {
+       if (g_chip.chip_type != UNKNOWN && vendor != expected_did_vid) {
                error("Vendor id did not match! ID was %08x\n", vendor);
                return -ENODEV;
        }
 
        debug("1.2 TPM (chip type %s device-id 0x%X)\n",
-             chip_name[tpm_dev.chip_type], vendor >> 16);
+             chip_name[g_chip.chip_type], vendor >> 16);
 
        /*
         * A timeout query to TPM can be placed here.
@@ -878,11 +859,6 @@ int tpm_vendor_init(struct udevice *dev)
        return 0;
 }
 
-void tpm_vendor_cleanup(struct tpm_chip *chip)
-{
-       release_locality(chip, chip->locality, 1);
-}
-
 /* Returns max number of milliseconds to wait */
 static unsigned long tpm_calc_ordinal_duration(struct tpm_chip *chip,
                u32 ordinal)
@@ -980,7 +956,7 @@ static int tpm_open_dev(struct udevice *dev)
        debug("%s: start\n", __func__);
        if (g_chip.is_open)
                return -EBUSY;
-       rc = tpm_vendor_init(dev);
+       rc = tpm_tis_i2c_init(dev);
        if (rc < 0)
                g_chip.is_open = 0;
        return rc;
@@ -989,7 +965,7 @@ static int tpm_open_dev(struct udevice *dev)
 static void tpm_close(void)
 {
        if (g_chip.is_open) {
-               tpm_vendor_cleanup(&g_chip);
+               release_locality(&g_chip, g_chip.locality, 1);
                g_chip.is_open = 0;
        }
 }
index 2a4ad774293df90be2b272bf39622661f0073173..0fec4640d85121272e0b8c616cb40e5807f9850e 100644 (file)
@@ -33,7 +33,14 @@ enum tpm_timeout {
 #define TPM_RSP_SIZE_BYTE      2
 #define TPM_RSP_RC_BYTE                6
 
-struct tpm_chip;
+/* Max buffer size supported by our tpm */
+#define TPM_DEV_BUFSIZE                1260
+
+enum i2c_chip_type {
+       SLB9635,
+       SLB9645,
+       UNKNOWN,
+};
 
 struct tpm_chip {
        int is_open;
@@ -44,6 +51,9 @@ struct tpm_chip {
        int locality;
        unsigned long timeout_a, timeout_b, timeout_c, timeout_d;  /* msec */
        unsigned long duration[3];  /* msec */
+       struct udevice *dev;
+       u8 buf[TPM_DEV_BUFSIZE + sizeof(u8)];  /* Max buffer size + addr */
+       enum i2c_chip_type chip_type;
 };
 
 struct tpm_input_header {
@@ -102,9 +112,4 @@ struct tpm_cmd_t {
        union tpm_cmd_params params;
 } __packed;
 
-struct udevice;
-int tpm_vendor_init(struct udevice *dev);
-
-void tpm_vendor_cleanup(struct tpm_chip *chip);
-
 #endif