Hi George, On 14 October 2016 at 15:41, George McCollister <george.mccollis...@gmail.com> wrote: > > The Atmel AT97SC3204 is also TIS compliant. > Modify the tpm_tis_lpc driver to check for the vid/did used by the > Atmel AT97SC3204 and report an appropriate description. > > Signed-off-by: George McCollister <george.mccollis...@gmail.com> > --- > drivers/tpm/tpm_tis_lpc.c | 37 ++++++++++++++++++++++++++++--------- > 1 file changed, 28 insertions(+), 9 deletions(-) > > diff --git a/drivers/tpm/tpm_tis_lpc.c b/drivers/tpm/tpm_tis_lpc.c > index b4efbb5..316993a 100644 > --- a/drivers/tpm/tpm_tis_lpc.c > +++ b/drivers/tpm/tpm_tis_lpc.c > @@ -21,6 +21,21 @@ > > #define PREFIX "lpc_tpm: " > > +enum i2c_chip_type { > + SLB9635, > + AT97SC3204, > +}; > + > +static const char * const chip_name[] = { > + [SLB9635] = "Infineon SLB9635 TT 1.2", > + [AT97SC3204] = "Atmel AT97SC3204", > +}; > + > +static const u32 chip_didvid[] = { > + [SLB9635] = 0xb15d1, > + [AT97SC3204] = 0x32041114, > +}; > + > struct tpm_locality { > u32 access; > u8 padding0[4]; > @@ -146,9 +161,9 @@ static int tis_wait_reg(struct tpm_tis_lpc_priv *priv, > u32 *reg, u8 mask, > static int tpm_tis_lpc_probe(struct udevice *dev) > { > struct tpm_tis_lpc_priv *priv = dev_get_priv(dev); > - u32 vid, did; > fdt_addr_t addr; > u32 didvid; > + ulong chip_type = dev_get_driver_data(dev); > > addr = dev_get_addr(dev); > if (addr == FDT_ADDR_T_NONE) > @@ -156,15 +171,16 @@ static int tpm_tis_lpc_probe(struct udevice *dev) > priv->regs = map_sysmem(addr, 0); > didvid = tpm_read_word(priv, &priv->regs[0].did_vid); > > - vid = didvid & 0xffff; > - did = (didvid >> 16) & 0xffff; > - if (vid != 0x15d1 || did != 0xb) { > + if (didvid == chip_didvid[chip_type]) { > + debug("Found TPM: %s\n", chip_name[chip_type]); > + } else {
Can you put this error clause first, so that the debug() remains where it is? > + u32 vid, did; > + vid = didvid & 0xffff; > + did = (didvid >> 16) & 0xffff; > debug("Invalid vendor/device ID %04x/%04x\n", vid, did); > return -ENOSYS; I think we should change this to -ENODEV as it is a missing device, not a missing system call. Or maybe -ENOENT? > } > > - debug("Found TPM %s by %s\n", "SLB9635 TT 1.2", "Infineon"); > - > return 0; > } > > @@ -421,11 +437,13 @@ static int tpm_tis_lpc_close(struct udevice *dev) > > static int tpm_tis_get_desc(struct udevice *dev, char *buf, int size) > { > + ulong chip_type = dev_get_driver_data(dev); > + > if (size < 50) > return -ENOSPC; > > - return snprintf(buf, size, "1.2 TPM (vendor %s, chip %s)", > - "Infineon", "SLB9635 TT 1.2"); > + return snprintf(buf, size, "1.2 TPM (%s)", > + chip_name[chip_type]); > } > > > @@ -438,7 +456,8 @@ static const struct tpm_ops tpm_tis_lpc_ops = { > }; > > static const struct udevice_id tpm_tis_lpc_ids[] = { > - { .compatible = "infineon,slb9635lpc" }, > + { .compatible = "infineon,slb9635lpc", .data = SLB9635 }, > + { .compatible = "atmel,at97sc3204", .data = AT97SC3204 }, > { } > }; > > -- > 2.9.3 > Regards, Simon _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot