Thread (7 messages) 7 messages, 2 authors, 2021-05-12

Re: [PATCH] tpm_tis_spi: set default probe function if device id not match

From: 乱石 <hidden>
Date: 2021-05-08 02:47:39
Also in: lkml

Hi,

在 2021/5/8 10:01, Jarkko Sakkinen 写道:
On Fri, May 07, 2021 at 10:52:55PM +0800, Liguang Zhang wrote:
quoted
In DSDT table, TPM _CID was SMO0768, and no _HID definition. After a
kernel upgrade from 4.19 to 5.10, TPM probe function was changed which
causes device probe fails. In order to make newer kernel to be
compatible with the older acpi definition, it would be best set default
probe function.

Signed-off-by: Liguang Zhang <redacted>
---
  drivers/char/tpm/tpm_tis_spi_main.c | 12 ++++++++----
  1 file changed, 8 insertions(+), 4 deletions(-)
diff --git a/drivers/char/tpm/tpm_tis_spi_main.c b/drivers/char/tpm/tpm_tis_spi_main.c
index 3856f6ebcb34..da632a582621 100644
--- a/drivers/char/tpm/tpm_tis_spi_main.c
+++ b/drivers/char/tpm/tpm_tis_spi_main.c
@@ -240,10 +240,14 @@ static int tpm_tis_spi_driver_probe(struct spi_device *spi)
  	tpm_tis_spi_probe_func probe_func;
  
  	probe_func = of_device_get_match_data(&spi->dev);
-	if (!probe_func && spi_dev_id)
-		probe_func = (tpm_tis_spi_probe_func)spi_dev_id->driver_data;
-	if (!probe_func)
-		return -ENODEV;
+	if (!probe_func) {
+		if (spi_dev_id) {
+			probe_func = (tpm_tis_spi_probe_func)spi_dev_id->driver_data;
+			if (!probe_func)
+				return -ENODEV;
Perhaps also hear fallback to tpm_tis_spi_probe?

Yes, I do not think of a good way. Do you have any suggestions?


The arm platform is  kunpeng-920, detail dsdt information here:

         Device (SPI0)
         {
             Name (_HID, "HISI0173")  // _HID: Hardware ID
             Name (_ADR, Zero)  // _ADR: Address
             Name (_UID, Zero)  // _UID: Unique ID
             Name (RBUF, ResourceTemplate ()
             {
                 GpioIo (Exclusive, PullUp, 0x0000, 0x0000, 
IoRestrictionNone,
                     "\\_SB.GPO1", 0x00, ResourceConsumer, ,
                     )
                     {   // Pin list
                         0x0006
                     }
                 QWordMemory (ResourceConsumer, PosDecode, MinFixed, 
MaxFixed, NonCacheable, ReadWrite,
                     0x0000000000000000, // Granularity
                     0x00000002011A0000, // Range Minimum
                     0x00000002011AFFFF, // Range Maximum
                     0x0000000000000000, // Translation Offset
                     0x0000000000010000, // Length
                     ,, , AddressRangeMemory, TypeStatic)
                 Interrupt (ResourceConsumer, Level, ActiveHigh, 
Exclusive, ,, )
                 {
                     0x000001EB,
                 }
             })
             Method (_CRS, 0, NotSerialized)  // _CRS: Current Resource 
Settings
             {
                 Return (RBUF) /* \_SB_.SPI0.RBUF */
             }

             Name (_DSD, Package (0x02)  // _DSD: Device-Specific Data
             {
                 ToUUID ("daffd814-6eba-4d8c-8a91-bc9bbf4aa301") /* 
Device Properties for _DSD */,
                 Package (0x03)
                 {
                     Package (0x02)
                     {
                         "reg-io-width",
                         0x04
                     },

                     Package (0x02)
                     {
                         "num-cs",
                         One
                     },

                     Package (0x02)
                     {
                         "cs-gpios",
                         Package (0x04)
                         {
                             SPI0,
                             Zero,
                             Zero,
                             Zero
                         }
                     }
                 }
             })
         }

         Scope (SPI0)
         {
             Device (TPM)
             {
                 Name (_ADR, Zero)  // _ADR: Address
                 Name (_CID, Package (0x01)  // _CID: Compatible ID
                 {
                     "SMO0768"
                 })
                 Name (_UID, Zero)  // _UID: Unique ID
                 Name (_DSD, Package (0x02)  // _DSD: Device-Specific Data
                 {
                     ToUUID ("daffd814-6eba-4d8c-8a91-bc9bbf4aa301") /* 
Device Properties for _DSD */,
                     Package (0x00){}
                 })
                 Method (_CRS, 0, NotSerialized)  // _CRS: Current 
Resource Settings
                 {
                     Name (RBUF, ResourceTemplate ()
                     {
                         SpiSerialBusV2 (0x0000, PolarityLow, 
FourWireMode, 0x08,
                             ControllerInitiated, 0x000F4240, 
ClockPolarityLow,
                             ClockPhaseFirst, "\\_SB.SPI0",
                             0x00, ResourceConsumer, , Exclusive,
                             )
                     })
                     Return (RBUF) /* \_SB_.SPI0.TPM_._CRS.RBUF */
                 }

                 Method (_STA, 0, NotSerialized)  // _STA: Status
                 {
                     If ((TPEN == One))
                     {
                         Return (0x0F)
                     }
                     Else
                     {
                         Return (Zero)
                     }
                 }
             }
         }
     }


Regards

Liguang
quoted
+		} else
+			probe_func = tpm_tis_spi_probe;
+	}
  
  	return probe_func(spi);
  }
-- 
2.19.1.6.gb485710b
/Jarkko
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help