lkml.org 
[lkml]   [2020]   [May]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.4 34/50] lib: devres: add a helper function for ioremap_uc
    Date
    From: Tuowen Zhao <ztuowen@gmail.com>

    [ Upstream commit e537654b7039aacfe8ae629d49655c0e5692ad44 ]

    Implement a resource managed strongly uncachable ioremap function.

    Cc: <stable@vger.kernel.org> # v4.19+
    Tested-by: AceLan Kao <acelan.kao@canonical.com>
    Signed-off-by: Tuowen Zhao <ztuowen@gmail.com>
    Acked-by: Mika Westerberg <mika.westerberg@linux.intel.com>
    Acked-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Acked-by: Luis Chamberlain <mcgrof@kernel.org>
    Signed-off-by: Lee Jones <lee.jones@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    include/linux/io.h | 2 ++
    lib/devres.c | 19 +++++++++++++++++++
    2 files changed, 21 insertions(+)

    diff --git a/include/linux/io.h b/include/linux/io.h
    index accac822336aa..a59834bc0a114 100644
    --- a/include/linux/io.h
    +++ b/include/linux/io.h
    @@ -64,6 +64,8 @@ static inline void devm_ioport_unmap(struct device *dev, void __iomem *addr)

    void __iomem *devm_ioremap(struct device *dev, resource_size_t offset,
    resource_size_t size);
    +void __iomem *devm_ioremap_uc(struct device *dev, resource_size_t offset,
    + resource_size_t size);
    void __iomem *devm_ioremap_nocache(struct device *dev, resource_size_t offset,
    resource_size_t size);
    void __iomem *devm_ioremap_wc(struct device *dev, resource_size_t offset,
    diff --git a/lib/devres.c b/lib/devres.c
    index 6a0e9bd6524ae..17624d35e82d4 100644
    --- a/lib/devres.c
    +++ b/lib/devres.c
    @@ -9,6 +9,7 @@
    enum devm_ioremap_type {
    DEVM_IOREMAP = 0,
    DEVM_IOREMAP_NC,
    + DEVM_IOREMAP_UC,
    DEVM_IOREMAP_WC,
    };

    @@ -39,6 +40,9 @@ static void __iomem *__devm_ioremap(struct device *dev, resource_size_t offset,
    case DEVM_IOREMAP_NC:
    addr = ioremap_nocache(offset, size);
    break;
    + case DEVM_IOREMAP_UC:
    + addr = ioremap_uc(offset, size);
    + break;
    case DEVM_IOREMAP_WC:
    addr = ioremap_wc(offset, size);
    break;
    @@ -68,6 +72,21 @@ void __iomem *devm_ioremap(struct device *dev, resource_size_t offset,
    }
    EXPORT_SYMBOL(devm_ioremap);

    +/**
    + * devm_ioremap_uc - Managed ioremap_uc()
    + * @dev: Generic device to remap IO address for
    + * @offset: Resource address to map
    + * @size: Size of map
    + *
    + * Managed ioremap_uc(). Map is automatically unmapped on driver detach.
    + */
    +void __iomem *devm_ioremap_uc(struct device *dev, resource_size_t offset,
    + resource_size_t size)
    +{
    + return __devm_ioremap(dev, offset, size, DEVM_IOREMAP_UC);
    +}
    +EXPORT_SYMBOL_GPL(devm_ioremap_uc);
    +
    /**
    * devm_ioremap_nocache - Managed ioremap_nocache()
    * @dev: Generic device to remap IO address for
    --
    2.20.1


    \
     
     \ /
      Last update: 2020-05-08 14:58    [W:4.294 / U:0.004 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site