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

From: Frank Lee
Date: Sun Dec 29 2019 - 09:37:15 EST


On Sun, Dec 29, 2019 at 8:11 PM Bartosz Golaszewski
<bgolaszewski@xxxxxxxxxxxx> wrote:
>
> 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().

Thanks for pointing out!
I have seen the use of ioremap_nocache in many architectures,
so they are wrong and should be changed to ioremap?

Yangtao

>
> Bart