lkml.org 
[lkml]   [2019]   [Oct]   [2]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v2 4/5] drivers: platform: provide devm_platform_ioremap_resource_wc()
    Date
    From: Bartosz Golaszewski <bgolaszewski@baylibre.com>

    Provide a write-combined variant of devm_platform_ioremap_resource().

    While at it: in order not to duplicate code - pass the resource
    retrieved by platform_get_resource() directly to the appropriate
    devm_ioremap_resource() variant.

    Signed-off-by: Bartosz Golaszewski <bgolaszewski@baylibre.com>
    ---
    .../driver-api/driver-model/devres.rst | 1 +
    drivers/base/platform.c | 27 +++++++++++++++----
    include/linux/platform_device.h | 3 +++
    3 files changed, 26 insertions(+), 5 deletions(-)

    diff --git a/Documentation/driver-api/driver-model/devres.rst b/Documentation/driver-api/driver-model/devres.rst
    index e605bb9df6e1..480b78ca3871 100644
    --- a/Documentation/driver-api/driver-model/devres.rst
    +++ b/Documentation/driver-api/driver-model/devres.rst
    @@ -318,6 +318,7 @@ IOMAP
    devm_ioremap_resource() : checks resource, requests memory region, ioremaps
    devm_ioremap_resource_wc()
    devm_platform_ioremap_resource() : calls devm_ioremap_resource() for platform device
    + devm_platform_ioremap_resource_wc()
    devm_iounmap()
    pcim_iomap()
    pcim_iomap_regions() : do request_region() and iomap() on multiple BARs
    diff --git a/drivers/base/platform.c b/drivers/base/platform.c
    index b6c6c7d97d5b..8fdf3eb23bda 100644
    --- a/drivers/base/platform.c
    +++ b/drivers/base/platform.c
    @@ -60,6 +60,7 @@ struct resource *platform_get_resource(struct platform_device *dev,
    }
    EXPORT_SYMBOL_GPL(platform_get_resource);

    +#ifdef CONFIG_HAS_IOMEM
    /**
    * devm_platform_ioremap_resource - call devm_ioremap_resource() for a platform
    * device
    @@ -68,16 +69,32 @@ EXPORT_SYMBOL_GPL(platform_get_resource);
    * resource management
    * @index: resource index
    */
    -#ifdef CONFIG_HAS_IOMEM
    void __iomem *devm_platform_ioremap_resource(struct platform_device *pdev,
    unsigned int index)
    {
    - struct resource *res;
    -
    - res = platform_get_resource(pdev, IORESOURCE_MEM, index);
    - return devm_ioremap_resource(&pdev->dev, res);
    + return devm_ioremap_resource(&pdev->dev,
    + platform_get_resource(pdev,
    + IORESOURCE_MEM,
    + index));
    }
    EXPORT_SYMBOL_GPL(devm_platform_ioremap_resource);
    +
    +/**
    + * devm_platform_ioremap_resource_wc - write-combined variant of
    + * devm_platform_ioremap_resource()
    + *
    + * @pdev: platform device to use both for memory resource lookup as well as
    + * resource management
    + * @index: resource index
    + */
    +void __iomem *devm_platform_ioremap_resource_wc(struct platform_device *pdev,
    + unsigned int index)
    +{
    + return devm_ioremap_resource_wc(&pdev->dev,
    + platform_get_resource(pdev,
    + IORESOURCE_MEM,
    + index));
    +}
    #endif /* CONFIG_HAS_IOMEM */

    static int __platform_get_irq(struct platform_device *dev, unsigned int num)
    diff --git a/include/linux/platform_device.h b/include/linux/platform_device.h
    index 1b5cec067533..83930790c701 100644
    --- a/include/linux/platform_device.h
    +++ b/include/linux/platform_device.h
    @@ -57,6 +57,9 @@ platform_find_device_by_driver(struct device *start,
    extern void __iomem *
    devm_platform_ioremap_resource(struct platform_device *pdev,
    unsigned int index);
    +extern void __iomem *
    +devm_platform_ioremap_resource_wc(struct platform_device *pdev,
    + unsigned int index);
    extern int platform_get_irq(struct platform_device *, unsigned int);
    extern int platform_get_irq_optional(struct platform_device *, unsigned int);
    extern int platform_irq_count(struct platform_device *);
    --
    2.23.0
    \
     
     \ /
      Last update: 2019-10-02 18:26    [W:6.456 / U:0.020 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site