2019-12-29 10:46:09

by Frank Lee

[permalink] [raw]
Subject: [PATCH 1/2] lib: devres: provide devm_ioremap_resource_nocache()

Provide a variant of devm_ioremap_resource() for nocache ioremap.

Signed-off-by: Yangtao Li <[email protected]>
---
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


2019-12-29 10:46:10

by Frank Lee

[permalink] [raw]
Subject: [PATCH] platform: goldfish: pipe: switch to platform_get_irq

platform_get_resource(pdev, IORESOURCE_IRQ) is not recommended for
requesting IRQ's resources, as they can be not ready yet. Using
platform_get_irq() instead is preferred for getting IRQ even if it
was not retrieved earlier.

Signed-off-by: Yangtao Li <[email protected]>
---
drivers/platform/goldfish/goldfish_pipe.c | 8 +++-----
1 file changed, 3 insertions(+), 5 deletions(-)

diff --git a/drivers/platform/goldfish/goldfish_pipe.c b/drivers/platform/goldfish/goldfish_pipe.c
index cef0133aa47a..a1ebaec6eea9 100644
--- a/drivers/platform/goldfish/goldfish_pipe.c
+++ b/drivers/platform/goldfish/goldfish_pipe.c
@@ -913,11 +913,9 @@ static int goldfish_pipe_probe(struct platform_device *pdev)
return -EINVAL;
}

- r = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
- if (!r)
- return -EINVAL;
-
- dev->irq = r->start;
+ dev->irq = platform_get_irq(pdev, 0);
+ if (dev->irq < 0)
+ return dev->irq;

/*
* Exchange the versions with the host device
--
2.17.1

2019-12-29 11:01:18

by Frank Lee

[permalink] [raw]
Subject: Re: [PATCH] platform: goldfish: pipe: switch to platform_get_irq

Ignore this, I posted it just now...

On Sun, Dec 29, 2019 at 6:43 PM Yangtao Li <[email protected]> wrote:
>
> platform_get_resource(pdev, IORESOURCE_IRQ) is not recommended for
> requesting IRQ's resources, as they can be not ready yet. Using
> platform_get_irq() instead is preferred for getting IRQ even if it
> was not retrieved earlier.
>
> Signed-off-by: Yangtao Li <[email protected]>
> ---
> drivers/platform/goldfish/goldfish_pipe.c | 8 +++-----
> 1 file changed, 3 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/platform/goldfish/goldfish_pipe.c b/drivers/platform/goldfish/goldfish_pipe.c
> index cef0133aa47a..a1ebaec6eea9 100644
> --- a/drivers/platform/goldfish/goldfish_pipe.c
> +++ b/drivers/platform/goldfish/goldfish_pipe.c
> @@ -913,11 +913,9 @@ static int goldfish_pipe_probe(struct platform_device *pdev)
> return -EINVAL;
> }
>
> - r = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
> - if (!r)
> - return -EINVAL;
> -
> - dev->irq = r->start;
> + dev->irq = platform_get_irq(pdev, 0);
> + if (dev->irq < 0)
> + return dev->irq;
>
> /*
> * Exchange the versions with the host device
> --
> 2.17.1
>

2019-12-29 12:13:39

by Bartosz Golaszewski

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

niedz., 29 gru 2019 o 11:43 Yangtao Li <[email protected]> napisał(a):
>
> Provide a variant of devm_ioremap_resource() for nocache ioremap.
>
> Signed-off-by: Yangtao Li <[email protected]>
> ---
> 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

2019-12-29 14:38:37

by Frank Lee

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

On Sun, Dec 29, 2019 at 8:11 PM Bartosz Golaszewski
<[email protected]> wrote:
>
> niedz., 29 gru 2019 o 11:43 Yangtao Li <[email protected]> napisał(a):
> >
> > Provide a variant of devm_ioremap_resource() for nocache ioremap.
> >
> > Signed-off-by: Yangtao Li <[email protected]>
> > ---
> > 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

2019-12-29 15:05:51

by Arnd Bergmann

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

On Sun, Dec 29, 2019 at 3:36 PM Frank Lee <[email protected]> wrote:

> 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?

Yes, those patches are already part of linux-next.

Arnd