spi: intel: Improve resource mapping
authorHeiner Kallweit <hkallweit1@gmail.com>
Wed, 9 Apr 2025 16:25:01 +0000 (18:25 +0200)
committerMark Brown <broonie@kernel.org>
Thu, 24 Apr 2025 11:56:59 +0000 (12:56 +0100)
Let's use the pci/platform-specialized functions for mapping a resource,
and pass the mapped address to intel_spi_probe. Benefits are:

- No separate call needed for getting the resource, and no access to
  struct pci_dev internals (pdev->resource[]).

- More user-friendly output in /proc/iomem. In my case:

  before
  80704000-80704fff : 0000:00:1f.5
    80704000-80704fff : 0000:00:1f.5 0000:00:1f.5

  after
  80704000-80704fff : 0000:00:1f.5
    80704000-80704fff : spi_intel_pci

Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
Link: https://patch.msgid.link/2585fa05-60c4-48c4-a838-e87014665ae2@gmail.com
Signed-off-by: Mark Brown <broonie@kernel.org>
drivers/spi/spi-intel-pci.c
drivers/spi/spi-intel-platform.c
drivers/spi/spi-intel.c
drivers/spi/spi-intel.h

index 4d9ffec900bbf13cf5443824db37741da5edfc89..4b63cb98df9cca28a66939ade9226eb74d0899d9 100644 (file)
@@ -44,6 +44,7 @@ static int intel_spi_pci_probe(struct pci_dev *pdev,
                               const struct pci_device_id *id)
 {
        struct intel_spi_boardinfo *info;
+       void __iomem *base;
        int ret;
 
        ret = pcim_enable_device(pdev);
@@ -56,7 +57,12 @@ static int intel_spi_pci_probe(struct pci_dev *pdev,
                return -ENOMEM;
 
        info->data = pdev;
-       return intel_spi_probe(&pdev->dev, &pdev->resource[0], info);
+
+       base = pcim_iomap_region(pdev, 0, KBUILD_MODNAME);
+       if (IS_ERR(base))
+               return PTR_ERR(base);
+
+       return intel_spi_probe(&pdev->dev, base, info);
 }
 
 static const struct pci_device_id intel_spi_pci_ids[] = {
index 0974cca83a5d2359c879c4a375f76a2ceb36de7f..6cbed0b2e0636cfcdcdc72fad89a15a3b89baa2d 100644 (file)
 static int intel_spi_platform_probe(struct platform_device *pdev)
 {
        struct intel_spi_boardinfo *info;
-       struct resource *mem;
+       void __iomem *base;
 
        info = dev_get_platdata(&pdev->dev);
        if (!info)
                return -EINVAL;
 
-       mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-       return intel_spi_probe(&pdev->dev, mem, info);
+       base = devm_platform_ioremap_resource(pdev, 0);
+       if (IS_ERR(base))
+               return PTR_ERR(base);
+
+       return intel_spi_probe(&pdev->dev, base, info);
 }
 
 static struct platform_driver intel_spi_platform_driver = {
index b0dcdb6fb8fa9fedbc2ebfafe15459e31fb82dbc..5d5a546c62ea7ffeac37e7e34b761607e7c2b6aa 100644 (file)
@@ -1467,13 +1467,13 @@ EXPORT_SYMBOL_GPL(intel_spi_groups);
 /**
  * intel_spi_probe() - Probe the Intel SPI flash controller
  * @dev: Pointer to the parent device
- * @mem: MMIO resource
+ * @base: iomapped MMIO resource
  * @info: Platform specific information
  *
  * Probes Intel SPI flash controller and creates the flash chip device.
  * Returns %0 on success and negative errno in case of failure.
  */
-int intel_spi_probe(struct device *dev, struct resource *mem,
+int intel_spi_probe(struct device *dev, void __iomem *base,
                    const struct intel_spi_boardinfo *info)
 {
        struct spi_controller *host;
@@ -1488,10 +1488,7 @@ int intel_spi_probe(struct device *dev, struct resource *mem,
 
        ispi = spi_controller_get_devdata(host);
 
-       ispi->base = devm_ioremap_resource(dev, mem);
-       if (IS_ERR(ispi->base))
-               return PTR_ERR(ispi->base);
-
+       ispi->base = base;
        ispi->dev = dev;
        ispi->host = host;
        ispi->info = info;
index c5f35060dd637237053f8966a6b6223e96b3af9b..53b292c6ea0c1e13011ac258671ac3e2781837e1 100644 (file)
 
 #include <linux/platform_data/x86/spi-intel.h>
 
-struct resource;
-
 extern const struct attribute_group *intel_spi_groups[];
 
-int intel_spi_probe(struct device *dev, struct resource *mem,
+int intel_spi_probe(struct device *dev, void __iomem *base,
                    const struct intel_spi_boardinfo *info);
 
 #endif /* SPI_INTEL_H */