linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/2] platform_device: add new devres function
@ 2024-01-05 17:22 Philipp Stanner
  2024-01-05 17:22 ` [PATCH 1/2] platform_device: add devres function region-reqs Philipp Stanner
  2024-01-05 17:22 ` [PATCH 2/2] drm/dcss: request memory region Philipp Stanner
  0 siblings, 2 replies; 6+ messages in thread
From: Philipp Stanner @ 2024-01-05 17:22 UTC (permalink / raw)
  To: Greg Kroah-Hartman, Rafael J. Wysocki, Laurentiu Palcu,
	Lucas Stach, Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann,
	David Airlie, Daniel Vetter, Shawn Guo, Sascha Hauer,
	Pengutronix Kernel Team, Fabio Estevam, NXP Linux Team,
	Mark Brown, Takashi Iwai, David Gow, Uwe Kleine-König
  Cc: linux-kernel, dri-devel, linux-arm-kernel, Philipp Stanner

Patch #1 adds a new devres function that I found could be useful for the
driver dcss in drm. Patch #2 makes that driver use the new function.

I compiled this successfully but unfortunately don't have the hardware
to test it for dcss.
So you might want to have a closer look.

Greetings,
P.

Philipp Stanner (2):
  platform_device: add devres function region-reqs
  drm/dcss: request memory region

 drivers/base/platform.c             | 37 +++++++++++++++++++++++++++++
 drivers/gpu/drm/imx/dcss/dcss-dev.c |  8 +++----
 include/linux/platform_device.h     |  2 ++
 3 files changed, 43 insertions(+), 4 deletions(-)

-- 
2.43.0


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH 1/2] platform_device: add devres function region-reqs
  2024-01-05 17:22 [PATCH 0/2] platform_device: add new devres function Philipp Stanner
@ 2024-01-05 17:22 ` Philipp Stanner
  2024-01-05 19:11   ` Uwe Kleine-König
  2024-01-08  7:46   ` kernel test robot
  2024-01-05 17:22 ` [PATCH 2/2] drm/dcss: request memory region Philipp Stanner
  1 sibling, 2 replies; 6+ messages in thread
From: Philipp Stanner @ 2024-01-05 17:22 UTC (permalink / raw)
  To: Greg Kroah-Hartman, Rafael J. Wysocki, Laurentiu Palcu,
	Lucas Stach, Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann,
	David Airlie, Daniel Vetter, Shawn Guo, Sascha Hauer,
	Pengutronix Kernel Team, Fabio Estevam, NXP Linux Team,
	Mark Brown, Takashi Iwai, David Gow, Uwe Kleine-König
  Cc: linux-kernel, dri-devel, linux-arm-kernel, Philipp Stanner

Some drivers want to use (request) a region exclusively but nevertheless
create several mappings within that region.

Currently, there is no managed devres function to request a region
without mapping it.

Add the function devm_platform_get_resource()

Signed-off-by: Philipp Stanner <pstanner@redhat.com>
---
 drivers/base/platform.c         | 37 +++++++++++++++++++++++++++++++++
 include/linux/platform_device.h |  2 ++
 2 files changed, 39 insertions(+)

diff --git a/drivers/base/platform.c b/drivers/base/platform.c
index 10c577963418..243b9ec54d04 100644
--- a/drivers/base/platform.c
+++ b/drivers/base/platform.c
@@ -82,6 +82,43 @@ struct resource *platform_get_mem_or_io(struct platform_device *dev,
 }
 EXPORT_SYMBOL_GPL(platform_get_mem_or_io);
 
+/**
+ * devm_platform_get_and_resource - get and request a resource
+ *
+ * @pdev: the platform device to get the resource from
+ * @type: resource type (either IORESOURCE_MEM or IORESOURCE_IO)
+ * @num: resource index
+ * @name: name to be associated with the request
+ *
+ * Return: a pointer to the resource on success, an ERR_PTR on failure.
+ *
+ * Gets a resource and requests it. Use this instead of
+ * devm_platform_ioremap_resource() only if you have to create several single
+ * mappings with devm_ioremap().
+ */
+struct resource *devm_platform_get_resource(struct platform_device *pdev,
+		unsigned int type, unsigned int num, const char *name)
+{
+	struct resource *res;
+
+	res = platform_get_resource(pdev, type, num);
+	if (!res)
+		return ERR_PTR(-EINVAL);
+
+	if (type & IORESOURCE_MEM)
+		res = devm_request_mem_region(&pdev->dev, res->start, res->end, name);
+	else if (type & IORESOURCE_IO)
+		res = devm_request_region(&pdev->dev, res->start, res->end, name);
+	else
+		return ERR_PTR(-EINVAL);
+
+	if (!res)
+		return ERR_PTR(-EBUSY);
+
+	return res;
+}
+EXPORT_SYMBOL_GPL(devm_platform_get_resource);
+
 #ifdef CONFIG_HAS_IOMEM
 /**
  * devm_platform_get_and_ioremap_resource - call devm_ioremap_resource() for a
diff --git a/include/linux/platform_device.h b/include/linux/platform_device.h
index 7a41c72c1959..68e2857521f4 100644
--- a/include/linux/platform_device.h
+++ b/include/linux/platform_device.h
@@ -59,6 +59,8 @@ extern struct resource *platform_get_resource(struct platform_device *,
 					      unsigned int, unsigned int);
 extern struct resource *platform_get_mem_or_io(struct platform_device *,
 					       unsigned int);
+extern struct resource *devm_platform_get_resource(struct platform_device *pdev,
+		unsigned int type, unsigned int num, const char *name);
 
 extern struct device *
 platform_find_device_by_driver(struct device *start,
-- 
2.43.0


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH 2/2] drm/dcss: request memory region
  2024-01-05 17:22 [PATCH 0/2] platform_device: add new devres function Philipp Stanner
  2024-01-05 17:22 ` [PATCH 1/2] platform_device: add devres function region-reqs Philipp Stanner
@ 2024-01-05 17:22 ` Philipp Stanner
  1 sibling, 0 replies; 6+ messages in thread
From: Philipp Stanner @ 2024-01-05 17:22 UTC (permalink / raw)
  To: Greg Kroah-Hartman, Rafael J. Wysocki, Laurentiu Palcu,
	Lucas Stach, Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann,
	David Airlie, Daniel Vetter, Shawn Guo, Sascha Hauer,
	Pengutronix Kernel Team, Fabio Estevam, NXP Linux Team,
	Mark Brown, Takashi Iwai, David Gow, Uwe Kleine-König
  Cc: linux-kernel, dri-devel, linux-arm-kernel, Philipp Stanner

The driver's memory regions are currently just ioremap()ed, but not
reserved through a request. That's not a bug, but having the request is
a little more robust.

Implement the region-request through the corresponding managed
devres-function.

Signed-off-by: Philipp Stanner <pstanner@redhat.com>
---
 drivers/gpu/drm/imx/dcss/dcss-dev.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/drivers/gpu/drm/imx/dcss/dcss-dev.c b/drivers/gpu/drm/imx/dcss/dcss-dev.c
index 4f3af0dfb344..efd3a998652d 100644
--- a/drivers/gpu/drm/imx/dcss/dcss-dev.c
+++ b/drivers/gpu/drm/imx/dcss/dcss-dev.c
@@ -177,10 +177,10 @@ struct dcss_dev *dcss_dev_create(struct device *dev, bool hdmi_output)
 		return ERR_PTR(-ENODEV);
 	}
 
-	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-	if (!res) {
-		dev_err(dev, "cannot get memory resource\n");
-		return ERR_PTR(-EINVAL);
+	res = devm_platform_get_resource(pdev, IORESOURCE_MEM, 0, "dcss");
+	if (IS_ERR(res)) {
+		dev_err(dev, "cannot get / request memory resource\n");
+		return res;
 	}
 
 	dcss = kzalloc(sizeof(*dcss), GFP_KERNEL);
-- 
2.43.0


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH 1/2] platform_device: add devres function region-reqs
  2024-01-05 17:22 ` [PATCH 1/2] platform_device: add devres function region-reqs Philipp Stanner
@ 2024-01-05 19:11   ` Uwe Kleine-König
  2024-01-08  8:25     ` Philipp Stanner
  2024-01-08  7:46   ` kernel test robot
  1 sibling, 1 reply; 6+ messages in thread
From: Uwe Kleine-König @ 2024-01-05 19:11 UTC (permalink / raw)
  To: Philipp Stanner
  Cc: Greg Kroah-Hartman, Rafael J. Wysocki, Laurentiu Palcu,
	Lucas Stach, Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann,
	David Airlie, Daniel Vetter, Shawn Guo, Sascha Hauer,
	Pengutronix Kernel Team, Fabio Estevam, NXP Linux Team,
	Mark Brown, Takashi Iwai, David Gow, linux-arm-kernel,
	linux-kernel, dri-devel


[-- Attachment #1.1: Type: text/plain, Size: 2673 bytes --]

On Fri, Jan 05, 2024 at 06:22:18PM +0100, Philipp Stanner wrote:
> Some drivers want to use (request) a region exclusively but nevertheless
> create several mappings within that region.
> 
> Currently, there is no managed devres function to request a region
> without mapping it.
> 
> Add the function devm_platform_get_resource()
> 
> Signed-off-by: Philipp Stanner <pstanner@redhat.com>
> ---
>  drivers/base/platform.c         | 37 +++++++++++++++++++++++++++++++++
>  include/linux/platform_device.h |  2 ++
>  2 files changed, 39 insertions(+)
> 
> diff --git a/drivers/base/platform.c b/drivers/base/platform.c
> index 10c577963418..243b9ec54d04 100644
> --- a/drivers/base/platform.c
> +++ b/drivers/base/platform.c
> @@ -82,6 +82,43 @@ struct resource *platform_get_mem_or_io(struct platform_device *dev,
>  }
>  EXPORT_SYMBOL_GPL(platform_get_mem_or_io);
>  
> +/**
> + * devm_platform_get_and_resource - get and request a resource

This function name is wrong.

> + *
> + * @pdev: the platform device to get the resource from
> + * @type: resource type (either IORESOURCE_MEM or IORESOURCE_IO)
> + * @num: resource index
> + * @name: name to be associated with the request
> + *
> + * Return: a pointer to the resource on success, an ERR_PTR on failure.
> + *
> + * Gets a resource and requests it. Use this instead of
> + * devm_platform_ioremap_resource() only if you have to create several single
> + * mappings with devm_ioremap().
> + */
> +struct resource *devm_platform_get_resource(struct platform_device *pdev,
> +		unsigned int type, unsigned int num, const char *name)
> +{
> +	struct resource *res;
> +
> +	res = platform_get_resource(pdev, type, num);
> +	if (!res)
> +		return ERR_PTR(-EINVAL);

From devm_platform_get_resource I'd expect that it only does
platform_get_resource() + register a cleanup function to undo it.

> +	if (type & IORESOURCE_MEM)
> +		res = devm_request_mem_region(&pdev->dev, res->start, res->end, name);
> +	else if (type & IORESOURCE_IO)
> +		res = devm_request_region(&pdev->dev, res->start, res->end, name);
> +	else
> +		return ERR_PTR(-EINVAL);

So this part is surprising. IMHO your function's name should include
"request".

> +	if (!res)
> +		return ERR_PTR(-EBUSY);
> +
> +	return res;
> +}
> +EXPORT_SYMBOL_GPL(devm_platform_get_resource);
> +
>  #ifdef CONFIG_HAS_IOMEM
>  /**
>   * devm_platform_get_and_ioremap_resource - call devm_ioremap_resource() for a

Best regards
Uwe

-- 
Pengutronix e.K.                           | Uwe Kleine-König            |
Industrial Linux Solutions                 | https://www.pengutronix.de/ |

[-- Attachment #1.2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

[-- Attachment #2: Type: text/plain, Size: 176 bytes --]

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH 1/2] platform_device: add devres function region-reqs
  2024-01-05 17:22 ` [PATCH 1/2] platform_device: add devres function region-reqs Philipp Stanner
  2024-01-05 19:11   ` Uwe Kleine-König
@ 2024-01-08  7:46   ` kernel test robot
  1 sibling, 0 replies; 6+ messages in thread
From: kernel test robot @ 2024-01-08  7:46 UTC (permalink / raw)
  To: Philipp Stanner, Greg Kroah-Hartman, Rafael J. Wysocki,
	Laurentiu Palcu, Lucas Stach, Maarten Lankhorst, Maxime Ripard,
	Thomas Zimmermann, David Airlie, Daniel Vetter, Shawn Guo,
	Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam,
	NXP Linux Team, Mark Brown, Takashi Iwai, David Gow,
	Uwe Kleine-König
  Cc: oe-kbuild-all, linux-arm-kernel, linux-kernel, dri-devel,
	Philipp Stanner

Hi Philipp,

kernel test robot noticed the following build warnings:

[auto build test WARNING on drm-misc/drm-misc-next]
[also build test WARNING on driver-core/driver-core-testing driver-core/driver-core-next driver-core/driver-core-linus linus/master v6.7 next-20240105]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]

url:    https://github.com/intel-lab-lkp/linux/commits/Philipp-Stanner/platform_device-add-devres-function-region-reqs/20240106-012526
base:   git://anongit.freedesktop.org/drm/drm-misc drm-misc-next
patch link:    https://lore.kernel.org/r/20240105172218.42457-3-pstanner%40redhat.com
patch subject: [PATCH 1/2] platform_device: add devres function region-reqs
config: x86_64-randconfig-101-20240106 (https://download.01.org/0day-ci/archive/20240108/202401081547.VBj4FKaw-lkp@intel.com/config)
compiler: gcc-7 (Ubuntu 7.5.0-6ubuntu2) 7.5.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240108/202401081547.VBj4FKaw-lkp@intel.com/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202401081547.VBj4FKaw-lkp@intel.com/

All warnings (new ones prefixed by >>):

>> drivers/base/platform.c:101: warning: expecting prototype for devm_platform_get_and_resource(). Prototype was for devm_platform_get_resource() instead


vim +101 drivers/base/platform.c

    84	
    85	/**
    86	 * devm_platform_get_and_resource - get and request a resource
    87	 *
    88	 * @pdev: the platform device to get the resource from
    89	 * @type: resource type (either IORESOURCE_MEM or IORESOURCE_IO)
    90	 * @num: resource index
    91	 * @name: name to be associated with the request
    92	 *
    93	 * Return: a pointer to the resource on success, an ERR_PTR on failure.
    94	 *
    95	 * Gets a resource and requests it. Use this instead of
    96	 * devm_platform_ioremap_resource() only if you have to create several single
    97	 * mappings with devm_ioremap().
    98	 */
    99	struct resource *devm_platform_get_resource(struct platform_device *pdev,
   100			unsigned int type, unsigned int num, const char *name)
 > 101	{
   102		struct resource *res;
   103	
   104		res = platform_get_resource(pdev, type, num);
   105		if (!res)
   106			return ERR_PTR(-EINVAL);
   107	
   108		if (type & IORESOURCE_MEM)
   109			res = devm_request_mem_region(&pdev->dev, res->start, res->end, name);
   110		else if (type & IORESOURCE_IO)
   111			res = devm_request_region(&pdev->dev, res->start, res->end, name);
   112		else
   113			return ERR_PTR(-EINVAL);
   114	
   115		if (!res)
   116			return ERR_PTR(-EBUSY);
   117	
   118		return res;
   119	}
   120	EXPORT_SYMBOL_GPL(devm_platform_get_resource);
   121	

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH 1/2] platform_device: add devres function region-reqs
  2024-01-05 19:11   ` Uwe Kleine-König
@ 2024-01-08  8:25     ` Philipp Stanner
  0 siblings, 0 replies; 6+ messages in thread
From: Philipp Stanner @ 2024-01-08  8:25 UTC (permalink / raw)
  To: Uwe Kleine-König
  Cc: dri-devel, Fabio Estevam, Rafael J. Wysocki, Greg Kroah-Hartman,
	Sascha Hauer, linux-kernel, Maxime Ripard, Mark Brown,
	NXP Linux Team, Thomas Zimmermann, Laurentiu Palcu, David Gow,
	Shawn Guo, Pengutronix Kernel Team, linux-arm-kernel

Hi

On Fri, 2024-01-05 at 20:11 +0100, Uwe Kleine-König wrote:
> On Fri, Jan 05, 2024 at 06:22:18PM +0100, Philipp Stanner wrote:
> > Some drivers want to use (request) a region exclusively but
> > nevertheless
> > create several mappings within that region.
> > 
> > Currently, there is no managed devres function to request a region
> > without mapping it.
> > 
> > Add the function devm_platform_get_resource()
> > 
> > Signed-off-by: Philipp Stanner <pstanner@redhat.com>
> > ---
> >  drivers/base/platform.c         | 37
> > +++++++++++++++++++++++++++++++++
> >  include/linux/platform_device.h |  2 ++
> >  2 files changed, 39 insertions(+)
> > 
> > diff --git a/drivers/base/platform.c b/drivers/base/platform.c
> > index 10c577963418..243b9ec54d04 100644
> > --- a/drivers/base/platform.c
> > +++ b/drivers/base/platform.c
> > @@ -82,6 +82,43 @@ struct resource *platform_get_mem_or_io(struct
> > platform_device *dev,
> >  }
> >  EXPORT_SYMBOL_GPL(platform_get_mem_or_io);
> >  
> > +/**
> > + * devm_platform_get_and_resource - get and request a resource
> 
> This function name is wrong.
> 
> > + *
> > + * @pdev: the platform device to get the resource from
> > + * @type: resource type (either IORESOURCE_MEM or IORESOURCE_IO)
> > + * @num: resource index
> > + * @name: name to be associated with the request
> > + *
> > + * Return: a pointer to the resource on success, an ERR_PTR on
> > failure.
> > + *
> > + * Gets a resource and requests it. Use this instead of
> > + * devm_platform_ioremap_resource() only if you have to create
> > several single
> > + * mappings with devm_ioremap().
> > + */
> > +struct resource *devm_platform_get_resource(struct platform_device
> > *pdev,
> > +               unsigned int type, unsigned int num, const char
> > *name)
> > +{
> > +       struct resource *res;
> > +
> > +       res = platform_get_resource(pdev, type, num);
> > +       if (!res)
> > +               return ERR_PTR(-EINVAL);
> 
> From devm_platform_get_resource I'd expect that it only does
> platform_get_resource() + register a cleanup function to undo it.
> 
> > +       if (type & IORESOURCE_MEM)
> > +               res = devm_request_mem_region(&pdev->dev, res-
> > >start, res->end, name);
> > +       else if (type & IORESOURCE_IO)
> > +               res = devm_request_region(&pdev->dev, res->start,
> > res->end, name);
> > +       else
> > +               return ERR_PTR(-EINVAL);
> 
> So this part is surprising. IMHO your function's name should include
> "request".

Yes, that sounds very correct to me. I'll address that in v2


Thx for the feedback,

P.

> 
> > +       if (!res)
> > +               return ERR_PTR(-EBUSY);
> > +
> > +       return res;
> > +}
> > +EXPORT_SYMBOL_GPL(devm_platform_get_resource);
> > +
> >  #ifdef CONFIG_HAS_IOMEM
> >  /**
> >   * devm_platform_get_and_ioremap_resource - call
> > devm_ioremap_resource() for a
> 
> Best regards
> Uwe
> 


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2024-01-08  8:25 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-01-05 17:22 [PATCH 0/2] platform_device: add new devres function Philipp Stanner
2024-01-05 17:22 ` [PATCH 1/2] platform_device: add devres function region-reqs Philipp Stanner
2024-01-05 19:11   ` Uwe Kleine-König
2024-01-08  8:25     ` Philipp Stanner
2024-01-08  7:46   ` kernel test robot
2024-01-05 17:22 ` [PATCH 2/2] drm/dcss: request memory region Philipp Stanner

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).