Merge tag 'platform-drivers-x86-v6.8-4' of git://git.kernel.org/pub/scm/linux/kernel...
authorLinus Torvalds <torvalds@linux-foundation.org>
Tue, 5 Mar 2024 20:48:29 +0000 (12:48 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Tue, 5 Mar 2024 20:48:29 +0000 (12:48 -0800)
Pull x86 platform driver fixes from Hans de Goede:

 - Fix P2SB regression causing ACPI errors and high CPU load

 - Fix error return path in amd_pmf_init_smart_pc()

* tag 'platform-drivers-x86-v6.8-4' of git://git.kernel.org/pub/scm/linux/kernel/git/pdx86/platform-drivers-x86:
  platform/x86/amd/pmf: Fix missing error code in amd_pmf_init_smart_pc()
  platform/x86: p2sb: On Goldmont only cache P2SB and SPI devfn BAR

drivers/platform/x86/amd/pmf/tee-if.c
drivers/platform/x86/p2sb.c

index 8527dca9cf5604dc140ac22c5f06870bd32be296..dcbe8f85e122947be014778c14478a7374698b49 100644 (file)
@@ -458,8 +458,10 @@ int amd_pmf_init_smart_pc(struct amd_pmf_dev *dev)
        amd_pmf_hex_dump_pb(dev);
 
        dev->prev_data = kzalloc(sizeof(*dev->prev_data), GFP_KERNEL);
-       if (!dev->prev_data)
+       if (!dev->prev_data) {
+               ret = -ENOMEM;
                goto error;
+       }
 
        ret = amd_pmf_start_policy_engine(dev);
        if (ret)
index 6bd14d0132dbd73b1ea497679d4dd8297671859e..3d66e1d4eb1f52dad69c8b2f94d5089ccd0b0c25 100644 (file)
 #define P2SBC_HIDE             BIT(8)
 
 #define P2SB_DEVFN_DEFAULT     PCI_DEVFN(31, 1)
+#define P2SB_DEVFN_GOLDMONT    PCI_DEVFN(13, 0)
+#define SPI_DEVFN_GOLDMONT     PCI_DEVFN(13, 2)
 
 static const struct x86_cpu_id p2sb_cpu_ids[] = {
-       X86_MATCH_INTEL_FAM6_MODEL(ATOM_GOLDMONT,       PCI_DEVFN(13, 0)),
+       X86_MATCH_INTEL_FAM6_MODEL(ATOM_GOLDMONT, P2SB_DEVFN_GOLDMONT),
        {}
 };
 
@@ -98,21 +100,12 @@ static void p2sb_scan_and_cache_devfn(struct pci_bus *bus, unsigned int devfn)
 
 static int p2sb_scan_and_cache(struct pci_bus *bus, unsigned int devfn)
 {
-       unsigned int slot, fn;
-
-       if (PCI_FUNC(devfn) == 0) {
-               /*
-                * When function number of the P2SB device is zero, scan it and
-                * other function numbers, and if devices are available, cache
-                * their BAR0s.
-                */
-               slot = PCI_SLOT(devfn);
-               for (fn = 0; fn < NR_P2SB_RES_CACHE; fn++)
-                       p2sb_scan_and_cache_devfn(bus, PCI_DEVFN(slot, fn));
-       } else {
-               /* Scan the P2SB device and cache its BAR0 */
-               p2sb_scan_and_cache_devfn(bus, devfn);
-       }
+       /* Scan the P2SB device and cache its BAR0 */
+       p2sb_scan_and_cache_devfn(bus, devfn);
+
+       /* On Goldmont p2sb_bar() also gets called for the SPI controller */
+       if (devfn == P2SB_DEVFN_GOLDMONT)
+               p2sb_scan_and_cache_devfn(bus, SPI_DEVFN_GOLDMONT);
 
        if (!p2sb_valid_resource(&p2sb_resources[PCI_FUNC(devfn)].res))
                return -ENOENT;