@ -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,14 +171,15 @@ 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 ] ) {
u32 vid , did ;
vid = didvid & 0xffff ;
did = ( didvid > > 16 ) & 0xffff ;
debug ( " Invalid vendor/device ID %04x/%04x \n " , vid , did ) ;
return - ENOSYS ;
return - ENODEV ;
}
debug ( " Found TPM %s by %s \n " , " SLB9635 TT 1.2 " , " Infineon " ) ;
debug ( " Found TPM: %s \n " , chip_name [ chip_type ] ) ;
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 } ,
{ }
} ;