]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
tpm: cr50: Check for valid locality
authorSimon Glass <sjg@chromium.org>
Thu, 31 Dec 2020 16:52:12 +0000 (09:52 -0700)
committerSimon Glass <sjg@chromium.org>
Sat, 30 Jan 2021 21:25:41 +0000 (14:25 -0700)
When the Cr50 starts up it doesn't have a valid locality. The driver sets
it to -1 to indicate that. Tracking this allows cr50_i2c_cleanup() to
avoid releasing a locality that was not claimed.

However the helper functions that generate the flags use a u8 type which
cannot support -1, so they return a locality of 0xff.

Fix this by updating the type. With this, 'tpm startup TPM2_SU_CLEAR'
works as expected.

Signed-off-by: Simon Glass <sjg@chromium.org>
drivers/tpm/cr50_i2c.c

index ce61b72d222afd3139f73d6d02b656cdf331c27b..f53924a8fcb86a03c3f06ae2328e2235d0cc0e0e 100644 (file)
@@ -183,23 +183,31 @@ static int cr50_i2c_write(struct udevice *dev, u8 addr, const u8 *buffer,
        return cr50_i2c_wait_tpm_ready(dev);
 }
 
-static inline u8 tpm_access(u8 locality)
+static inline u8 tpm_access(int locality)
 {
+       if (locality == -1)
+               locality = 0;
        return 0x0 | (locality << 4);
 }
 
-static inline u8 tpm_sts(u8 locality)
+static inline u8 tpm_sts(int locality)
 {
+       if (locality == -1)
+               locality = 0;
        return 0x1 | (locality << 4);
 }
 
-static inline u8 tpm_data_fifo(u8 locality)
+static inline u8 tpm_data_fifo(int locality)
 {
+       if (locality == -1)
+               locality = 0;
        return 0x5 | (locality << 4);
 }
 
-static inline u8 tpm_did_vid(u8 locality)
+static inline u8 tpm_did_vid(int locality)
 {
+       if (locality == -1)
+               locality = 0;
        return 0x6 | (locality << 4);
 }