All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/6] usb: sound/soc: Use platform_get_irq*() variants to fetch IRQ's
@ 2021-12-20  1:04 Lad Prabhakar
  2021-12-20  1:04 ` [PATCH 1/6] usb: host: fotg210: Use platform_get_irq() to get the interrupt Lad Prabhakar
                   ` (6 more replies)
  0 siblings, 7 replies; 13+ messages in thread
From: Lad Prabhakar @ 2021-12-20  1:04 UTC (permalink / raw)
  To: Rob Herring, Greg Kroah-Hartman, linux-usb, Peter Chen,
	Pawel Laszczak, Roger Quadros, Aswath Govindraju, Felipe Balbi,
	Rui Miguel Silva, Bin Liu
  Cc: linux-renesas-soc, linux-kernel, Prabhakar, Lad Prabhakar

Hi All,

This patch series aims to drop using platform_get_resource() for IRQ types
in preparation for removal of static setup of IRQ resource from DT core
code.

Dropping usage of platform_get_resource() was agreed based on
the discussion [0].

[0] https://patchwork.kernel.org/project/linux-renesas-soc/
patch/20211209001056.29774-1-prabhakar.mahadev-lad.rj@bp.renesas.com/

Note: I have just build tested the patches.

Cheers,
Prabhakar

Lad Prabhakar (6):
  usb: host: fotg210: Use platform_get_irq() to get the interrupt
  usb: renesas_usbhs: Use platform_get_irq() to get the interrupt
  usb: dwc3: Drop unneeded calls to platform_get_resource_byname()
  usb: isp1760: Use platform_get_irq() to get the interrupt
  usb: cdns3: Use platform_get_irq_byname() to get the interrupt
  usb: musb: dsps: Use platform_get_irq_byname() to get the interrupt

 drivers/usb/cdns3/cdns3-plat.c     | 14 ++++++----
 drivers/usb/dwc3/host.c            | 45 +++++++++++++++++-------------
 drivers/usb/host/fotg210-hcd.c     | 11 ++------
 drivers/usb/isp1760/isp1760-if.c   | 16 +++++------
 drivers/usb/musb/musb_dsps.c       | 15 ++++++----
 drivers/usb/renesas_usbhs/common.c | 14 ++++------
 drivers/usb/renesas_usbhs/common.h |  1 -
 drivers/usb/renesas_usbhs/mod.c    | 14 +---------
 8 files changed, 59 insertions(+), 71 deletions(-)

-- 
2.17.1


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

* [PATCH 1/6] usb: host: fotg210: Use platform_get_irq() to get the interrupt
  2021-12-20  1:04 [PATCH 0/6] usb: sound/soc: Use platform_get_irq*() variants to fetch IRQ's Lad Prabhakar
@ 2021-12-20  1:04 ` Lad Prabhakar
  2021-12-20 10:21   ` Geert Uytterhoeven
  2021-12-20  1:04 ` [PATCH 2/6] usb: renesas_usbhs: " Lad Prabhakar
                   ` (5 subsequent siblings)
  6 siblings, 1 reply; 13+ messages in thread
From: Lad Prabhakar @ 2021-12-20  1:04 UTC (permalink / raw)
  To: Rob Herring, Greg Kroah-Hartman, linux-usb, Peter Chen,
	Pawel Laszczak, Roger Quadros, Aswath Govindraju, Felipe Balbi,
	Rui Miguel Silva, Bin Liu
  Cc: linux-renesas-soc, linux-kernel, Prabhakar, Lad Prabhakar

platform_get_resource(pdev, IORESOURCE_IRQ, ..) relies on static
allocation of IRQ resources in DT core code, this causes an issue
when using hierarchical interrupt domains using "interrupts" property
in the node as this bypasses the hierarchical setup and messes up the
irq chaining.

In preparation for removal of static setup of IRQ resource from DT core
code use platform_get_irq().

Signed-off-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
---
 drivers/usb/host/fotg210-hcd.c | 11 +++--------
 1 file changed, 3 insertions(+), 8 deletions(-)

diff --git a/drivers/usb/host/fotg210-hcd.c b/drivers/usb/host/fotg210-hcd.c
index b590995a6b3e..7af17c8e069b 100644
--- a/drivers/usb/host/fotg210-hcd.c
+++ b/drivers/usb/host/fotg210-hcd.c
@@ -5576,14 +5576,9 @@ static int fotg210_hcd_probe(struct platform_device *pdev)
 
 	pdev->dev.power.power_state = PMSG_ON;
 
-	res = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
-	if (!res) {
-		dev_err(dev, "Found HC with no IRQ. Check %s setup!\n",
-				dev_name(dev));
-		return -ENODEV;
-	}
-
-	irq = res->start;
+	irq = platform_get_irq(pdev, 0);
+	if (irq < 0)
+		return irq;
 
 	hcd = usb_create_hcd(&fotg210_fotg210_hc_driver, dev,
 			dev_name(dev));
-- 
2.17.1


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

* [PATCH 2/6] usb: renesas_usbhs: Use platform_get_irq() to get the interrupt
  2021-12-20  1:04 [PATCH 0/6] usb: sound/soc: Use platform_get_irq*() variants to fetch IRQ's Lad Prabhakar
  2021-12-20  1:04 ` [PATCH 1/6] usb: host: fotg210: Use platform_get_irq() to get the interrupt Lad Prabhakar
@ 2021-12-20  1:04 ` Lad Prabhakar
  2021-12-20  1:04 ` [PATCH 3/6] usb: dwc3: Drop unneeded calls to platform_get_resource_byname() Lad Prabhakar
                   ` (4 subsequent siblings)
  6 siblings, 0 replies; 13+ messages in thread
From: Lad Prabhakar @ 2021-12-20  1:04 UTC (permalink / raw)
  To: Rob Herring, Greg Kroah-Hartman, linux-usb, Peter Chen,
	Pawel Laszczak, Roger Quadros, Aswath Govindraju, Felipe Balbi,
	Rui Miguel Silva, Bin Liu
  Cc: linux-renesas-soc, linux-kernel, Prabhakar, Lad Prabhakar

platform_get_resource(pdev, IORESOURCE_IRQ, ..) relies on static
allocation of IRQ resources in DT core code, this causes an issue
when using hierarchical interrupt domains using "interrupts" property
in the node as this bypasses the hierarchical setup and messes up the
irq chaining.

In preparation for removal of static setup of IRQ resource from DT core
code use platform_get_irq().

Drop irqflags member from struct usbhs_priv as this driver is used by
two non DT users sh7757lcr and ecovec24 which do not pass
IORESOURCE_IRQ_SHAREABLE as part of their pdata. Along this drop the
IRQF_SHARED flag handling in the code.

Signed-off-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
---
 drivers/usb/renesas_usbhs/common.c | 14 +++++---------
 drivers/usb/renesas_usbhs/common.h |  1 -
 drivers/usb/renesas_usbhs/mod.c    | 14 +-------------
 3 files changed, 6 insertions(+), 23 deletions(-)

diff --git a/drivers/usb/renesas_usbhs/common.c b/drivers/usb/renesas_usbhs/common.c
index 3af91b2b8f76..96f3939a65e2 100644
--- a/drivers/usb/renesas_usbhs/common.c
+++ b/drivers/usb/renesas_usbhs/common.c
@@ -589,11 +589,11 @@ static int usbhs_probe(struct platform_device *pdev)
 {
 	const struct renesas_usbhs_platform_info *info;
 	struct usbhs_priv *priv;
-	struct resource *irq_res;
 	struct device *dev = &pdev->dev;
 	struct gpio_desc *gpiod;
 	int ret;
 	u32 tmp;
+	int irq;
 
 	/* check device node */
 	if (dev_of_node(dev))
@@ -608,11 +608,9 @@ static int usbhs_probe(struct platform_device *pdev)
 	}
 
 	/* platform data */
-	irq_res = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
-	if (!irq_res) {
-		dev_err(dev, "Not enough Renesas USB platform resources.\n");
-		return -ENODEV;
-	}
+	irq = platform_get_irq(pdev, 0);
+	if (irq < 0)
+		return irq;
 
 	/* usb private data */
 	priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL);
@@ -669,9 +667,7 @@ static int usbhs_probe(struct platform_device *pdev)
 	/*
 	 * priv settings
 	 */
-	priv->irq	= irq_res->start;
-	if (irq_res->flags & IORESOURCE_IRQ_SHAREABLE)
-		priv->irqflags = IRQF_SHARED;
+	priv->irq = irq;
 	priv->pdev	= pdev;
 	INIT_DELAYED_WORK(&priv->notify_hotplug_work, usbhsc_notify_hotplug);
 	spin_lock_init(usbhs_priv_to_lock(priv));
diff --git a/drivers/usb/renesas_usbhs/common.h b/drivers/usb/renesas_usbhs/common.h
index eb34d762a63d..3fb5bc94dc0d 100644
--- a/drivers/usb/renesas_usbhs/common.h
+++ b/drivers/usb/renesas_usbhs/common.h
@@ -252,7 +252,6 @@ struct usbhs_priv {
 
 	void __iomem *base;
 	unsigned int irq;
-	unsigned long irqflags;
 
 	const struct renesas_usbhs_platform_callback *pfunc;
 	struct renesas_usbhs_driver_param	dparam;
diff --git a/drivers/usb/renesas_usbhs/mod.c b/drivers/usb/renesas_usbhs/mod.c
index b98112cefaa4..f2ea3e1412d2 100644
--- a/drivers/usb/renesas_usbhs/mod.c
+++ b/drivers/usb/renesas_usbhs/mod.c
@@ -142,7 +142,7 @@ int usbhs_mod_probe(struct usbhs_priv *priv)
 
 	/* irq settings */
 	ret = devm_request_irq(dev, priv->irq, usbhs_interrupt,
-			  priv->irqflags, dev_name(dev), priv);
+			       0, dev_name(dev), priv);
 	if (ret) {
 		dev_err(dev, "irq request err\n");
 		goto mod_init_gadget_err;
@@ -219,18 +219,6 @@ static int usbhs_status_get_each_irq(struct usbhs_priv *priv,
 	usbhs_unlock(priv, flags);
 	/********************  spin unlock ******************/
 
-	/*
-	 * Check whether the irq enable registers and the irq status are set
-	 * when IRQF_SHARED is set.
-	 */
-	if (priv->irqflags & IRQF_SHARED) {
-		if (!(intenb0 & state->intsts0) &&
-		    !(intenb1 & state->intsts1) &&
-		    !(state->bempsts) &&
-		    !(state->brdysts))
-			return -EIO;
-	}
-
 	return 0;
 }
 
-- 
2.17.1


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

* [PATCH 3/6] usb: dwc3: Drop unneeded calls to platform_get_resource_byname()
  2021-12-20  1:04 [PATCH 0/6] usb: sound/soc: Use platform_get_irq*() variants to fetch IRQ's Lad Prabhakar
  2021-12-20  1:04 ` [PATCH 1/6] usb: host: fotg210: Use platform_get_irq() to get the interrupt Lad Prabhakar
  2021-12-20  1:04 ` [PATCH 2/6] usb: renesas_usbhs: " Lad Prabhakar
@ 2021-12-20  1:04 ` Lad Prabhakar
  2021-12-20 10:47   ` Roger Quadros
  2021-12-20  1:04 ` [PATCH 4/6] usb: isp1760: Use platform_get_irq() to get the interrupt Lad Prabhakar
                   ` (3 subsequent siblings)
  6 siblings, 1 reply; 13+ messages in thread
From: Lad Prabhakar @ 2021-12-20  1:04 UTC (permalink / raw)
  To: Rob Herring, Greg Kroah-Hartman, linux-usb, Peter Chen,
	Pawel Laszczak, Roger Quadros, Aswath Govindraju, Felipe Balbi,
	Rui Miguel Silva, Bin Liu
  Cc: linux-renesas-soc, linux-kernel, Prabhakar, Lad Prabhakar

Drop unneeded calls to platform_get_resource_byname() from
dwc3_host_init(). dwc3_host_init() already calls dwc3_host_get_irq()
which gets the irq number, just use this to get the IRQ resource data
and fill the xhci_resources[1]

Signed-off-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
---
 drivers/usb/dwc3/host.c | 45 ++++++++++++++++++++++++-----------------
 1 file changed, 26 insertions(+), 19 deletions(-)

diff --git a/drivers/usb/dwc3/host.c b/drivers/usb/dwc3/host.c
index f29a264635aa..eda871973d6c 100644
--- a/drivers/usb/dwc3/host.c
+++ b/drivers/usb/dwc3/host.c
@@ -8,32 +8,55 @@
  */
 
 #include <linux/acpi.h>
+#include <linux/irq.h>
+#include <linux/of.h>
 #include <linux/platform_device.h>
 
 #include "core.h"
 
+static void dwc3_host_fill_xhci_irq_res(struct dwc3 *dwc,
+					int irq, char *name)
+{
+	struct platform_device *pdev = to_platform_device(dwc->dev);
+	struct device_node *np = dev_of_node(&pdev->dev);
+
+	dwc->xhci_resources[1].start = irq;
+	dwc->xhci_resources[1].end = irq;
+	dwc->xhci_resources[1].flags = IORESOURCE_IRQ | irq_get_trigger_type(irq);
+	if (!name && np)
+		dwc->xhci_resources[1].name = of_node_full_name(pdev->dev.of_node);
+	else
+		dwc->xhci_resources[1].name = name;
+}
+
 static int dwc3_host_get_irq(struct dwc3 *dwc)
 {
 	struct platform_device	*dwc3_pdev = to_platform_device(dwc->dev);
 	int irq;
 
 	irq = platform_get_irq_byname_optional(dwc3_pdev, "host");
-	if (irq > 0)
+	if (irq > 0) {
+		dwc3_host_fill_xhci_irq_res(dwc, irq, "host");
 		goto out;
+	}
 
 	if (irq == -EPROBE_DEFER)
 		goto out;
 
 	irq = platform_get_irq_byname_optional(dwc3_pdev, "dwc_usb3");
-	if (irq > 0)
+	if (irq > 0) {
+		dwc3_host_fill_xhci_irq_res(dwc, irq, "dwc_usb3");
 		goto out;
+	}
 
 	if (irq == -EPROBE_DEFER)
 		goto out;
 
 	irq = platform_get_irq(dwc3_pdev, 0);
-	if (irq > 0)
+	if (irq > 0) {
+		dwc3_host_fill_xhci_irq_res(dwc, irq, NULL);
 		goto out;
+	}
 
 	if (!irq)
 		irq = -EINVAL;
@@ -47,28 +70,12 @@ int dwc3_host_init(struct dwc3 *dwc)
 	struct property_entry	props[4];
 	struct platform_device	*xhci;
 	int			ret, irq;
-	struct resource		*res;
-	struct platform_device	*dwc3_pdev = to_platform_device(dwc->dev);
 	int			prop_idx = 0;
 
 	irq = dwc3_host_get_irq(dwc);
 	if (irq < 0)
 		return irq;
 
-	res = platform_get_resource_byname(dwc3_pdev, IORESOURCE_IRQ, "host");
-	if (!res)
-		res = platform_get_resource_byname(dwc3_pdev, IORESOURCE_IRQ,
-				"dwc_usb3");
-	if (!res)
-		res = platform_get_resource(dwc3_pdev, IORESOURCE_IRQ, 0);
-	if (!res)
-		return -ENOMEM;
-
-	dwc->xhci_resources[1].start = irq;
-	dwc->xhci_resources[1].end = irq;
-	dwc->xhci_resources[1].flags = res->flags;
-	dwc->xhci_resources[1].name = res->name;
-
 	xhci = platform_device_alloc("xhci-hcd", PLATFORM_DEVID_AUTO);
 	if (!xhci) {
 		dev_err(dwc->dev, "couldn't allocate xHCI device\n");
-- 
2.17.1


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

* [PATCH 4/6] usb: isp1760: Use platform_get_irq() to get the interrupt
  2021-12-20  1:04 [PATCH 0/6] usb: sound/soc: Use platform_get_irq*() variants to fetch IRQ's Lad Prabhakar
                   ` (2 preceding siblings ...)
  2021-12-20  1:04 ` [PATCH 3/6] usb: dwc3: Drop unneeded calls to platform_get_resource_byname() Lad Prabhakar
@ 2021-12-20  1:04 ` Lad Prabhakar
  2021-12-20 10:25   ` Geert Uytterhoeven
  2021-12-20 15:37   ` Rui Miguel Silva
  2021-12-20  1:04 ` [PATCH 5/6] usb: cdns3: Use platform_get_irq_byname() " Lad Prabhakar
                   ` (2 subsequent siblings)
  6 siblings, 2 replies; 13+ messages in thread
From: Lad Prabhakar @ 2021-12-20  1:04 UTC (permalink / raw)
  To: Rob Herring, Greg Kroah-Hartman, linux-usb, Peter Chen,
	Pawel Laszczak, Roger Quadros, Aswath Govindraju, Felipe Balbi,
	Rui Miguel Silva, Bin Liu
  Cc: linux-renesas-soc, linux-kernel, Prabhakar, Lad Prabhakar

platform_get_resource(pdev, IORESOURCE_IRQ, ..) relies on static
allocation of IRQ resources in DT core code, this causes an issue
when using hierarchical interrupt domains using "interrupts" property
in the node as this bypasses the hierarchical setup and messes up the
irq chaining.

In preparation for removal of static setup of IRQ resource from DT core
code use platform_get_irq(). Also use irq_get_trigger_type to get the
IRQ trigger flags.

Signed-off-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
---
 drivers/usb/isp1760/isp1760-if.c | 16 +++++++---------
 1 file changed, 7 insertions(+), 9 deletions(-)

diff --git a/drivers/usb/isp1760/isp1760-if.c b/drivers/usb/isp1760/isp1760-if.c
index 7cc349c0b2ad..65ba5aca2a4f 100644
--- a/drivers/usb/isp1760/isp1760-if.c
+++ b/drivers/usb/isp1760/isp1760-if.c
@@ -13,6 +13,7 @@
 
 #include <linux/usb.h>
 #include <linux/io.h>
+#include <linux/irq.h>
 #include <linux/module.h>
 #include <linux/of.h>
 #include <linux/platform_device.h>
@@ -191,17 +192,15 @@ static int isp1760_plat_probe(struct platform_device *pdev)
 	unsigned long irqflags;
 	unsigned int devflags = 0;
 	struct resource *mem_res;
-	struct resource *irq_res;
+	int irq;
 	int ret;
 
 	mem_res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
 
-	irq_res = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
-	if (!irq_res) {
-		pr_warn("isp1760: IRQ resource not available\n");
-		return -ENODEV;
-	}
-	irqflags = irq_res->flags & IRQF_TRIGGER_MASK;
+	irq = platform_get_irq(pdev, 0);
+	if (irq < 0)
+		return irq;
+	irqflags = irq_get_trigger_type(irq);
 
 	if (IS_ENABLED(CONFIG_OF) && pdev->dev.of_node) {
 		struct device_node *dp = pdev->dev.of_node;
@@ -239,8 +238,7 @@ static int isp1760_plat_probe(struct platform_device *pdev)
 		return -ENXIO;
 	}
 
-	ret = isp1760_register(mem_res, irq_res->start, irqflags, &pdev->dev,
-			       devflags);
+	ret = isp1760_register(mem_res, irq, irqflags, &pdev->dev, devflags);
 	if (ret < 0)
 		return ret;
 
-- 
2.17.1


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

* [PATCH 5/6] usb: cdns3: Use platform_get_irq_byname() to get the interrupt
  2021-12-20  1:04 [PATCH 0/6] usb: sound/soc: Use platform_get_irq*() variants to fetch IRQ's Lad Prabhakar
                   ` (3 preceding siblings ...)
  2021-12-20  1:04 ` [PATCH 4/6] usb: isp1760: Use platform_get_irq() to get the interrupt Lad Prabhakar
@ 2021-12-20  1:04 ` Lad Prabhakar
  2021-12-20 10:48   ` Roger Quadros
  2021-12-20  1:04 ` [PATCH 6/6] usb: musb: dsps: " Lad Prabhakar
  2021-12-21  7:51 ` [PATCH 0/6] usb: sound/soc: Use platform_get_irq*() variants to fetch IRQ's Greg Kroah-Hartman
  6 siblings, 1 reply; 13+ messages in thread
From: Lad Prabhakar @ 2021-12-20  1:04 UTC (permalink / raw)
  To: Rob Herring, Greg Kroah-Hartman, linux-usb, Peter Chen,
	Pawel Laszczak, Roger Quadros, Aswath Govindraju, Felipe Balbi,
	Rui Miguel Silva, Bin Liu
  Cc: linux-renesas-soc, linux-kernel, Prabhakar, Lad Prabhakar

platform_get_resource_byname(pdev, IORESOURCE_IRQ, ..) relies on static
allocation of IRQ resources in DT core code, this causes an issue
when using hierarchical interrupt domains using "interrupts" property
in the node as this bypasses the hierarchical setup and messes up the
irq chaining.

In preparation for removal of static setup of IRQ resource from DT core
code use platform_get_irq_byname().

Signed-off-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
---
 drivers/usb/cdns3/cdns3-plat.c | 14 ++++++++------
 1 file changed, 8 insertions(+), 6 deletions(-)

diff --git a/drivers/usb/cdns3/cdns3-plat.c b/drivers/usb/cdns3/cdns3-plat.c
index 4d0f027e5bd3..dc068e940ed5 100644
--- a/drivers/usb/cdns3/cdns3-plat.c
+++ b/drivers/usb/cdns3/cdns3-plat.c
@@ -13,6 +13,7 @@
  */
 
 #include <linux/module.h>
+#include <linux/irq.h>
 #include <linux/kernel.h>
 #include <linux/platform_device.h>
 #include <linux/pm_runtime.h>
@@ -65,13 +66,14 @@ static int cdns3_plat_probe(struct platform_device *pdev)
 
 	platform_set_drvdata(pdev, cdns);
 
-	res = platform_get_resource_byname(pdev, IORESOURCE_IRQ, "host");
-	if (!res) {
-		dev_err(dev, "missing host IRQ\n");
-		return -ENODEV;
-	}
+	ret = platform_get_irq_byname(pdev, "host");
+	if (ret < 0)
+		return ret;
 
-	cdns->xhci_res[0] = *res;
+	cdns->xhci_res[0].start = ret;
+	cdns->xhci_res[0].end = ret;
+	cdns->xhci_res[0].flags = IORESOURCE_IRQ | irq_get_trigger_type(ret);
+	cdns->xhci_res[0].name = "host";
 
 	res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "xhci");
 	if (!res) {
-- 
2.17.1


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

* [PATCH 6/6] usb: musb: dsps: Use platform_get_irq_byname() to get the interrupt
  2021-12-20  1:04 [PATCH 0/6] usb: sound/soc: Use platform_get_irq*() variants to fetch IRQ's Lad Prabhakar
                   ` (4 preceding siblings ...)
  2021-12-20  1:04 ` [PATCH 5/6] usb: cdns3: Use platform_get_irq_byname() " Lad Prabhakar
@ 2021-12-20  1:04 ` Lad Prabhakar
  2021-12-21  7:51 ` [PATCH 0/6] usb: sound/soc: Use platform_get_irq*() variants to fetch IRQ's Greg Kroah-Hartman
  6 siblings, 0 replies; 13+ messages in thread
From: Lad Prabhakar @ 2021-12-20  1:04 UTC (permalink / raw)
  To: Rob Herring, Greg Kroah-Hartman, linux-usb, Peter Chen,
	Pawel Laszczak, Roger Quadros, Aswath Govindraju, Felipe Balbi,
	Rui Miguel Silva, Bin Liu
  Cc: linux-renesas-soc, linux-kernel, Prabhakar, Lad Prabhakar

platform_get_resource_byname(pdev, IORESOURCE_IRQ, ..) relies on static
allocation of IRQ resources in DT core code, this causes an issue
when using hierarchical interrupt domains using "interrupts" property
in the node as this bypasses the hierarchical setup and messes up the
irq chaining.

In preparation for removal of static setup of IRQ resource from DT core
code use platform_get_irq_byname().

Signed-off-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
---
 drivers/usb/musb/musb_dsps.c | 15 +++++++++------
 1 file changed, 9 insertions(+), 6 deletions(-)

diff --git a/drivers/usb/musb/musb_dsps.c b/drivers/usb/musb/musb_dsps.c
index b5935834f9d2..f75cde0f2b43 100644
--- a/drivers/usb/musb/musb_dsps.c
+++ b/drivers/usb/musb/musb_dsps.c
@@ -15,6 +15,7 @@
  */
 
 #include <linux/io.h>
+#include <linux/irq.h>
 #include <linux/err.h>
 #include <linux/platform_device.h>
 #include <linux/dma-mapping.h>
@@ -739,12 +740,14 @@ static int dsps_create_musb_pdev(struct dsps_glue *glue,
 	}
 	resources[0] = *res;
 
-	res = platform_get_resource_byname(parent, IORESOURCE_IRQ, "mc");
-	if (!res) {
-		dev_err(dev, "failed to get irq.\n");
-		return -EINVAL;
-	}
-	resources[1] = *res;
+	ret = platform_get_irq_byname(parent, "mc");
+	if (ret < 0)
+		return ret;
+
+	resources[1].start = ret;
+	resources[1].end = ret;
+	resources[1].flags = IORESOURCE_IRQ | irq_get_trigger_type(ret);
+	resources[1].name = "mc";
 
 	/* allocate the child platform device */
 	musb = platform_device_alloc("musb-hdrc",
-- 
2.17.1


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

* Re: [PATCH 1/6] usb: host: fotg210: Use platform_get_irq() to get the interrupt
  2021-12-20  1:04 ` [PATCH 1/6] usb: host: fotg210: Use platform_get_irq() to get the interrupt Lad Prabhakar
@ 2021-12-20 10:21   ` Geert Uytterhoeven
  0 siblings, 0 replies; 13+ messages in thread
From: Geert Uytterhoeven @ 2021-12-20 10:21 UTC (permalink / raw)
  To: Lad Prabhakar
  Cc: Rob Herring, Greg Kroah-Hartman, USB list, Peter Chen,
	Pawel Laszczak, Roger Quadros, Aswath Govindraju, Felipe Balbi,
	Rui Miguel Silva, Bin Liu, Linux-Renesas,
	Linux Kernel Mailing List, Prabhakar

On Mon, Dec 20, 2021 at 10:18 AM Lad Prabhakar
<prabhakar.mahadev-lad.rj@bp.renesas.com> wrote:
> platform_get_resource(pdev, IORESOURCE_IRQ, ..) relies on static
> allocation of IRQ resources in DT core code, this causes an issue
> when using hierarchical interrupt domains using "interrupts" property
> in the node as this bypasses the hierarchical setup and messes up the
> irq chaining.
>
> In preparation for removal of static setup of IRQ resource from DT core
> code use platform_get_irq().
>
> Signed-off-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>

Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>

Gr{oetje,eeting}s,

                        Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
                                -- Linus Torvalds

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

* Re: [PATCH 4/6] usb: isp1760: Use platform_get_irq() to get the interrupt
  2021-12-20  1:04 ` [PATCH 4/6] usb: isp1760: Use platform_get_irq() to get the interrupt Lad Prabhakar
@ 2021-12-20 10:25   ` Geert Uytterhoeven
  2021-12-20 15:37   ` Rui Miguel Silva
  1 sibling, 0 replies; 13+ messages in thread
From: Geert Uytterhoeven @ 2021-12-20 10:25 UTC (permalink / raw)
  To: Lad Prabhakar
  Cc: Rob Herring, Greg Kroah-Hartman, USB list, Peter Chen,
	Pawel Laszczak, Roger Quadros, Aswath Govindraju, Felipe Balbi,
	Rui Miguel Silva, Bin Liu, Linux-Renesas,
	Linux Kernel Mailing List, Prabhakar

On Mon, Dec 20, 2021 at 10:18 AM Lad Prabhakar
<prabhakar.mahadev-lad.rj@bp.renesas.com> wrote:
> platform_get_resource(pdev, IORESOURCE_IRQ, ..) relies on static
> allocation of IRQ resources in DT core code, this causes an issue
> when using hierarchical interrupt domains using "interrupts" property
> in the node as this bypasses the hierarchical setup and messes up the
> irq chaining.
>
> In preparation for removal of static setup of IRQ resource from DT core
> code use platform_get_irq(). Also use irq_get_trigger_type to get the
> IRQ trigger flags.
>
> Signed-off-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>

Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>

Gr{oetje,eeting}s,

                        Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
                                -- Linus Torvalds

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

* Re: [PATCH 3/6] usb: dwc3: Drop unneeded calls to platform_get_resource_byname()
  2021-12-20  1:04 ` [PATCH 3/6] usb: dwc3: Drop unneeded calls to platform_get_resource_byname() Lad Prabhakar
@ 2021-12-20 10:47   ` Roger Quadros
  0 siblings, 0 replies; 13+ messages in thread
From: Roger Quadros @ 2021-12-20 10:47 UTC (permalink / raw)
  To: Lad Prabhakar, Rob Herring, Greg Kroah-Hartman, linux-usb,
	Peter Chen, Pawel Laszczak, Aswath Govindraju, Felipe Balbi,
	Rui Miguel Silva, Bin Liu
  Cc: linux-renesas-soc, linux-kernel, Prabhakar


On 20/12/2021 03:04, Lad Prabhakar wrote:
> Drop unneeded calls to platform_get_resource_byname() from
> dwc3_host_init(). dwc3_host_init() already calls dwc3_host_get_irq()
> which gets the irq number, just use this to get the IRQ resource data
> and fill the xhci_resources[1]
> 
> Signed-off-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>

Reviewed-by: Roger Quadros <rogerq@kernel.org>

--
cheers,
-roger

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

* Re: [PATCH 5/6] usb: cdns3: Use platform_get_irq_byname() to get the interrupt
  2021-12-20  1:04 ` [PATCH 5/6] usb: cdns3: Use platform_get_irq_byname() " Lad Prabhakar
@ 2021-12-20 10:48   ` Roger Quadros
  0 siblings, 0 replies; 13+ messages in thread
From: Roger Quadros @ 2021-12-20 10:48 UTC (permalink / raw)
  To: Lad Prabhakar, Rob Herring, Greg Kroah-Hartman, linux-usb,
	Peter Chen, Pawel Laszczak, Aswath Govindraju, Felipe Balbi,
	Rui Miguel Silva, Bin Liu
  Cc: linux-renesas-soc, linux-kernel, Prabhakar



On 20/12/2021 03:04, Lad Prabhakar wrote:
> platform_get_resource_byname(pdev, IORESOURCE_IRQ, ..) relies on static
> allocation of IRQ resources in DT core code, this causes an issue
> when using hierarchical interrupt domains using "interrupts" property
> in the node as this bypasses the hierarchical setup and messes up the
> irq chaining.
> 
> In preparation for removal of static setup of IRQ resource from DT core
> code use platform_get_irq_byname().
> 
> Signed-off-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
> ---
>  drivers/usb/cdns3/cdns3-plat.c | 14 ++++++++------
>  1 file changed, 8 insertions(+), 6 deletions(-)
> 
> diff --git a/drivers/usb/cdns3/cdns3-plat.c b/drivers/usb/cdns3/cdns3-plat.c
> index 4d0f027e5bd3..dc068e940ed5 100644
> --- a/drivers/usb/cdns3/cdns3-plat.c
> +++ b/drivers/usb/cdns3/cdns3-plat.c
> @@ -13,6 +13,7 @@
>   */
>  
>  #include <linux/module.h>
> +#include <linux/irq.h>
>  #include <linux/kernel.h>
>  #include <linux/platform_device.h>
>  #include <linux/pm_runtime.h>
> @@ -65,13 +66,14 @@ static int cdns3_plat_probe(struct platform_device *pdev)
>  
>  	platform_set_drvdata(pdev, cdns);
>  
> -	res = platform_get_resource_byname(pdev, IORESOURCE_IRQ, "host");
> -	if (!res) {
> -		dev_err(dev, "missing host IRQ\n");
> -		return -ENODEV;
> -	}
> +	ret = platform_get_irq_byname(pdev, "host");
> +	if (ret < 0)
> +		return ret;
>  
> -	cdns->xhci_res[0] = *res;
> +	cdns->xhci_res[0].start = ret;
> +	cdns->xhci_res[0].end = ret;
> +	cdns->xhci_res[0].flags = IORESOURCE_IRQ | irq_get_trigger_type(ret);
> +	cdns->xhci_res[0].name = "host";
>  
>  	res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "xhci");
>  	if (!res) {
> 

Reviewed-by: Roger Quadros <rogerq@kernel.org>

--
cheers,
-roger

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

* Re: [PATCH 4/6] usb: isp1760: Use platform_get_irq() to get the interrupt
  2021-12-20  1:04 ` [PATCH 4/6] usb: isp1760: Use platform_get_irq() to get the interrupt Lad Prabhakar
  2021-12-20 10:25   ` Geert Uytterhoeven
@ 2021-12-20 15:37   ` Rui Miguel Silva
  1 sibling, 0 replies; 13+ messages in thread
From: Rui Miguel Silva @ 2021-12-20 15:37 UTC (permalink / raw)
  To: Lad Prabhakar, Rob Herring, Greg Kroah-Hartman, linux-usb,
	Peter Chen, Pawel Laszczak, Roger Quadros, Aswath Govindraju,
	Felipe Balbi, Bin Liu
  Cc: linux-renesas-soc, linux-kernel, Prabhakar

Hi Lad,
Thanks for the patch.

On Mon Dec 20, 2021 at 1:04 AM WET, Lad Prabhakar wrote:

> platform_get_resource(pdev, IORESOURCE_IRQ, ..) relies on static
> allocation of IRQ resources in DT core code, this causes an issue
> when using hierarchical interrupt domains using "interrupts" property
> in the node as this bypasses the hierarchical setup and messes up the
> irq chaining.
>
> In preparation for removal of static setup of IRQ resource from DT core
> code use platform_get_irq(). Also use irq_get_trigger_type to get the
> IRQ trigger flags.
>
> Signed-off-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>

LGTM.
Reviewed-by: Rui Miguel Silva <rui.silva@linaro.org>

------
Cheers,
     Rui

> ---
>  drivers/usb/isp1760/isp1760-if.c | 16 +++++++---------
>  1 file changed, 7 insertions(+), 9 deletions(-)
>
> diff --git a/drivers/usb/isp1760/isp1760-if.c b/drivers/usb/isp1760/isp1760-if.c
> index 7cc349c0b2ad..65ba5aca2a4f 100644
> --- a/drivers/usb/isp1760/isp1760-if.c
> +++ b/drivers/usb/isp1760/isp1760-if.c
> @@ -13,6 +13,7 @@
>  
>  #include <linux/usb.h>
>  #include <linux/io.h>
> +#include <linux/irq.h>
>  #include <linux/module.h>
>  #include <linux/of.h>
>  #include <linux/platform_device.h>
> @@ -191,17 +192,15 @@ static int isp1760_plat_probe(struct platform_device *pdev)
>  	unsigned long irqflags;
>  	unsigned int devflags = 0;
>  	struct resource *mem_res;
> -	struct resource *irq_res;
> +	int irq;
>  	int ret;
>  
>  	mem_res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
>  
> -	irq_res = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
> -	if (!irq_res) {
> -		pr_warn("isp1760: IRQ resource not available\n");
> -		return -ENODEV;
> -	}
> -	irqflags = irq_res->flags & IRQF_TRIGGER_MASK;
> +	irq = platform_get_irq(pdev, 0);
> +	if (irq < 0)
> +		return irq;
> +	irqflags = irq_get_trigger_type(irq);
>  
>  	if (IS_ENABLED(CONFIG_OF) && pdev->dev.of_node) {
>  		struct device_node *dp = pdev->dev.of_node;
> @@ -239,8 +238,7 @@ static int isp1760_plat_probe(struct platform_device *pdev)
>  		return -ENXIO;
>  	}
>  
> -	ret = isp1760_register(mem_res, irq_res->start, irqflags, &pdev->dev,
> -			       devflags);
> +	ret = isp1760_register(mem_res, irq, irqflags, &pdev->dev, devflags);
>  	if (ret < 0)
>  		return ret;
>  
> -- 
> 2.17.1




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

* Re: [PATCH 0/6] usb: sound/soc: Use platform_get_irq*() variants to fetch IRQ's
  2021-12-20  1:04 [PATCH 0/6] usb: sound/soc: Use platform_get_irq*() variants to fetch IRQ's Lad Prabhakar
                   ` (5 preceding siblings ...)
  2021-12-20  1:04 ` [PATCH 6/6] usb: musb: dsps: " Lad Prabhakar
@ 2021-12-21  7:51 ` Greg Kroah-Hartman
  6 siblings, 0 replies; 13+ messages in thread
From: Greg Kroah-Hartman @ 2021-12-21  7:51 UTC (permalink / raw)
  To: Lad Prabhakar
  Cc: Rob Herring, linux-usb, Peter Chen, Pawel Laszczak,
	Roger Quadros, Aswath Govindraju, Felipe Balbi, Rui Miguel Silva,
	Bin Liu, linux-renesas-soc, linux-kernel, Prabhakar

On Mon, Dec 20, 2021 at 01:04:05AM +0000, Lad Prabhakar wrote:
> Hi All,
> 
> This patch series aims to drop using platform_get_resource() for IRQ types
> in preparation for removal of static setup of IRQ resource from DT core
> code.
> 
> Dropping usage of platform_get_resource() was agreed based on
> the discussion [0].
> 
> [0] https://patchwork.kernel.org/project/linux-renesas-soc/
> patch/20211209001056.29774-1-prabhakar.mahadev-lad.rj@bp.renesas.com/
> 
> Note: I have just build tested the patches.

I don't think "sound/soc" mattered here in your subject line :)

I'll go queue these up now, thanks.

greg k-h

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

end of thread, other threads:[~2021-12-21  7:52 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-12-20  1:04 [PATCH 0/6] usb: sound/soc: Use platform_get_irq*() variants to fetch IRQ's Lad Prabhakar
2021-12-20  1:04 ` [PATCH 1/6] usb: host: fotg210: Use platform_get_irq() to get the interrupt Lad Prabhakar
2021-12-20 10:21   ` Geert Uytterhoeven
2021-12-20  1:04 ` [PATCH 2/6] usb: renesas_usbhs: " Lad Prabhakar
2021-12-20  1:04 ` [PATCH 3/6] usb: dwc3: Drop unneeded calls to platform_get_resource_byname() Lad Prabhakar
2021-12-20 10:47   ` Roger Quadros
2021-12-20  1:04 ` [PATCH 4/6] usb: isp1760: Use platform_get_irq() to get the interrupt Lad Prabhakar
2021-12-20 10:25   ` Geert Uytterhoeven
2021-12-20 15:37   ` Rui Miguel Silva
2021-12-20  1:04 ` [PATCH 5/6] usb: cdns3: Use platform_get_irq_byname() " Lad Prabhakar
2021-12-20 10:48   ` Roger Quadros
2021-12-20  1:04 ` [PATCH 6/6] usb: musb: dsps: " Lad Prabhakar
2021-12-21  7:51 ` [PATCH 0/6] usb: sound/soc: Use platform_get_irq*() variants to fetch IRQ's Greg Kroah-Hartman

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.