Re: [PATCH 1/2] lib: devres: provide devm_ioremap_resource_nocache()

From: Bartosz Golaszewski
Date: Sun Dec 29 2019 - 07:12:21 EST


niedz., 29 gru 2019 o 11:43 Yangtao Li <tiny.windzz@xxxxxxxxx> napisaÅ(a):
>
> Provide a variant of devm_ioremap_resource() for nocache ioremap.
>
> Signed-off-by: Yangtao Li <tiny.windzz@xxxxxxxxx>
> ---
> Documentation/driver-api/driver-model/devres.rst | 1 +
> include/linux/device.h | 2 ++
> lib/devres.c | 15 +++++++++++++++
> 3 files changed, 18 insertions(+)
>
> diff --git a/Documentation/driver-api/driver-model/devres.rst b/Documentation/driver-api/driver-model/devres.rst
> index 13046fcf0a5d..af1b1b9e3a17 100644
> --- a/Documentation/driver-api/driver-model/devres.rst
> +++ b/Documentation/driver-api/driver-model/devres.rst
> @@ -317,6 +317,7 @@ IOMAP
> devm_ioremap_uc()
> devm_ioremap_wc()
> devm_ioremap_resource() : checks resource, requests memory region, ioremaps
> + devm_ioremap_resource_nocache()
> devm_ioremap_resource_wc()
> devm_platform_ioremap_resource() : calls devm_ioremap_resource() for platform device
> devm_platform_ioremap_resource_wc()
> diff --git a/include/linux/device.h b/include/linux/device.h
> index 96ff76731e93..3aa353aa52e2 100644
> --- a/include/linux/device.h
> +++ b/include/linux/device.h
> @@ -962,6 +962,8 @@ extern void devm_free_pages(struct device *dev, unsigned long addr);
>
> void __iomem *devm_ioremap_resource(struct device *dev,
> const struct resource *res);
> +void __iomem *devm_ioremap_resource_nocache(struct device *dev,
> + const struct resource *res);
> void __iomem *devm_ioremap_resource_wc(struct device *dev,
> const struct resource *res);
>
> diff --git a/lib/devres.c b/lib/devres.c
> index f56070cf970b..a182f8479fbf 100644
> --- a/lib/devres.c
> +++ b/lib/devres.c
> @@ -188,6 +188,21 @@ void __iomem *devm_ioremap_resource(struct device *dev,
> }
> EXPORT_SYMBOL(devm_ioremap_resource);
>
> +/**
> + * devm_ioremap_resource_nocache() - nocache variant of
> + * devm_ioremap_resource()
> + * @dev: generic device to handle the resource for
> + * @res: resource to be handled
> + *
> + * Returns a pointer to the remapped memory or an ERR_PTR() encoded error code
> + * on failure.
> + */
> +void __iomem *devm_ioremap_resource_nocache(struct device *dev,
> + const struct resource *res)
> +{
> + return __devm_ioremap_resource(dev, res, DEVM_IOREMAP_NC);
> +}
> +
> /**
> * devm_ioremap_resource_wc() - write-combined variant of
> * devm_ioremap_resource()
> --
> 2.17.1
>

This has been discussed before. The nocache variants of ioremap() are
being phased out as they're only ever needed on one obscure
architecture IIRC. This is not needed, rather we should convert all
nocache calls to regular ioremap().

Bart