Linux-ACPI Archive on lore.kernel.org
 help / color / Atom feed
* [PATCH v1 1/3] irqdomain: Make __irq_domain_add() less OF-dependent
@ 2020-05-20 16:49 Andy Shevchenko
  2020-05-20 16:49 ` [PATCH v1 2/3] irqdomain: Get rid of special treatment for ACPI in __irq_domain_add() Andy Shevchenko
  2020-05-20 16:49 ` [PATCH v1 3/3] irqdomain: Allow software node to be correct one for IRQ domain Andy Shevchenko
  0 siblings, 2 replies; 5+ messages in thread
From: Andy Shevchenko @ 2020-05-20 16:49 UTC (permalink / raw)
  To: Marc Zyngier, Thomas Gleixner, linux-kernel, Rafael J. Wysocki,
	linux-acpi
  Cc: Andy Shevchenko

__irq_domain_add() in some places relies on the fact that fwnode
can be only type of OF. This prevents refactoring of the code
to support other types of fwnode. Make it less OF-dependent
by switching to use fwnode directly where it makes sense.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
 kernel/irq/irqdomain.c | 13 ++++++-------
 1 file changed, 6 insertions(+), 7 deletions(-)

diff --git a/kernel/irq/irqdomain.c b/kernel/irq/irqdomain.c
index 35b8d97c3a1d..d59a4224f920 100644
--- a/kernel/irq/irqdomain.c
+++ b/kernel/irq/irqdomain.c
@@ -132,14 +132,13 @@ struct irq_domain *__irq_domain_add(struct fwnode_handle *fwnode, int size,
 				    const struct irq_domain_ops *ops,
 				    void *host_data)
 {
-	struct device_node *of_node = to_of_node(fwnode);
 	struct irqchip_fwid *fwid;
 	struct irq_domain *domain;
 
 	static atomic_t unknown_domains;
 
 	domain = kzalloc_node(sizeof(*domain) + (sizeof(unsigned int) * size),
-			      GFP_KERNEL, of_node_to_nid(of_node));
+			      GFP_KERNEL, of_node_to_nid(to_of_node(fwnode)));
 	if (!domain)
 		return NULL;
 
@@ -177,15 +176,15 @@ struct irq_domain *__irq_domain_add(struct fwnode_handle *fwnode, int size,
 
 		domain->fwnode = fwnode;
 #endif
-	} else if (of_node) {
+	} else if (is_of_node(fwnode)) {
 		char *name;
 
 		/*
-		 * DT paths contain '/', which debugfs is legitimately
+		 * fwnode paths contain '/', which debugfs is legitimately
 		 * unhappy about. Replace them with ':', which does
 		 * the trick and is not as offensive as '\'...
 		 */
-		name = kasprintf(GFP_KERNEL, "%pOF", of_node);
+		name = kasprintf(GFP_KERNEL, "%pfw", fwnode);
 		if (!name) {
 			kfree(domain);
 			return NULL;
@@ -210,7 +209,7 @@ struct irq_domain *__irq_domain_add(struct fwnode_handle *fwnode, int size,
 		domain->flags |= IRQ_DOMAIN_NAME_ALLOCATED;
 	}
 
-	of_node_get(of_node);
+	fwnode_handle_get(fwnode);
 
 	/* Fill structure */
 	INIT_RADIX_TREE(&domain->revmap_tree, GFP_KERNEL);
@@ -259,7 +258,7 @@ void irq_domain_remove(struct irq_domain *domain)
 
 	pr_debug("Removed domain %s\n", domain->name);
 
-	of_node_put(irq_domain_get_of_node(domain));
+	fwnode_handle_put(domain->fwnode);
 	if (domain->flags & IRQ_DOMAIN_NAME_ALLOCATED)
 		kfree(domain->name);
 	kfree(domain);
-- 
2.26.2


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

* [PATCH v1 2/3] irqdomain: Get rid of special treatment for ACPI in __irq_domain_add()
  2020-05-20 16:49 [PATCH v1 1/3] irqdomain: Make __irq_domain_add() less OF-dependent Andy Shevchenko
@ 2020-05-20 16:49 ` Andy Shevchenko
  2020-05-20 16:49 ` [PATCH v1 3/3] irqdomain: Allow software node to be correct one for IRQ domain Andy Shevchenko
  1 sibling, 0 replies; 5+ messages in thread
From: Andy Shevchenko @ 2020-05-20 16:49 UTC (permalink / raw)
  To: Marc Zyngier, Thomas Gleixner, linux-kernel, Rafael J. Wysocki,
	linux-acpi
  Cc: Andy Shevchenko

After change __irq_domain_add() to cooperate better with fwnodes
we don't need to have special treatment for ACPI case.

Get rid of the special treatment for ACPI.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
 kernel/irq/irqdomain.c | 17 +----------------
 1 file changed, 1 insertion(+), 16 deletions(-)

diff --git a/kernel/irq/irqdomain.c b/kernel/irq/irqdomain.c
index d59a4224f920..c6204bc606a2 100644
--- a/kernel/irq/irqdomain.c
+++ b/kernel/irq/irqdomain.c
@@ -161,22 +161,7 @@ struct irq_domain *__irq_domain_add(struct fwnode_handle *fwnode, int size,
 			domain->name = fwid->name;
 			break;
 		}
-#ifdef CONFIG_ACPI
-	} else if (is_acpi_device_node(fwnode)) {
-		struct acpi_buffer buf = {
-			.length = ACPI_ALLOCATE_BUFFER,
-		};
-		acpi_handle handle;
-
-		handle = acpi_device_handle(to_acpi_device_node(fwnode));
-		if (acpi_get_name(handle, ACPI_FULL_PATHNAME, &buf) == AE_OK) {
-			domain->name = buf.pointer;
-			domain->flags |= IRQ_DOMAIN_NAME_ALLOCATED;
-		}
-
-		domain->fwnode = fwnode;
-#endif
-	} else if (is_of_node(fwnode)) {
+	} else if (is_of_node(fwnode) || is_acpi_device_node(fwnode)) {
 		char *name;
 
 		/*
-- 
2.26.2


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

* [PATCH v1 3/3] irqdomain: Allow software node to be correct one for IRQ domain
  2020-05-20 16:49 [PATCH v1 1/3] irqdomain: Make __irq_domain_add() less OF-dependent Andy Shevchenko
  2020-05-20 16:49 ` [PATCH v1 2/3] irqdomain: Get rid of special treatment for ACPI in __irq_domain_add() Andy Shevchenko
@ 2020-05-20 16:49 ` Andy Shevchenko
  2020-05-21  8:59   ` Marc Zyngier
  1 sibling, 1 reply; 5+ messages in thread
From: Andy Shevchenko @ 2020-05-20 16:49 UTC (permalink / raw)
  To: Marc Zyngier, Thomas Gleixner, linux-kernel, Rafael J. Wysocki,
	linux-acpi
  Cc: Andy Shevchenko

In some cases we might need to have an IRQ domain created out of software node.
One of such cases is DesignWare GPIO driver when it's instantiated from
half-baked ACPI table (alas, we can't fix it for devices which are few years
on market) and thus using software nodes to quirk this up. But the driver
is using IRQ domains based on per GPIO port firmware nodes, which are in
the above case software ones. This brings a warning message to be printed

  [   73.957183] irq: Invalid fwnode type for irqdomain

and creates an unknown IRQ domain.

When we allow software node to be correct one for IRQ domain we will
get rid of the warning message and nice domain name at the same time:

  % ls -1 /sys/kernel/debug/irq/domains/
  ...
  intel-quark-dw-apb-gpio:portA

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
 kernel/irq/irqdomain.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/kernel/irq/irqdomain.c b/kernel/irq/irqdomain.c
index c6204bc606a2..e4ebc5398ef5 100644
--- a/kernel/irq/irqdomain.c
+++ b/kernel/irq/irqdomain.c
@@ -161,7 +161,8 @@ struct irq_domain *__irq_domain_add(struct fwnode_handle *fwnode, int size,
 			domain->name = fwid->name;
 			break;
 		}
-	} else if (is_of_node(fwnode) || is_acpi_device_node(fwnode)) {
+	} else if (is_of_node(fwnode) || is_acpi_device_node(fwnode) ||
+		   is_software_node(fwnode)) {
 		char *name;
 
 		/*
-- 
2.26.2


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

* Re: [PATCH v1 3/3] irqdomain: Allow software node to be correct one for IRQ domain
  2020-05-20 16:49 ` [PATCH v1 3/3] irqdomain: Allow software node to be correct one for IRQ domain Andy Shevchenko
@ 2020-05-21  8:59   ` Marc Zyngier
  2020-05-21  9:43     ` Andy Shevchenko
  0 siblings, 1 reply; 5+ messages in thread
From: Marc Zyngier @ 2020-05-21  8:59 UTC (permalink / raw)
  To: Andy Shevchenko
  Cc: Thomas Gleixner, linux-kernel, Rafael J. Wysocki, linux-acpi

Hi Andy,

On 2020-05-20 17:49, Andy Shevchenko wrote:
> In some cases we might need to have an IRQ domain created out of 
> software node.
> One of such cases is DesignWare GPIO driver when it's instantiated from
> half-baked ACPI table (alas, we can't fix it for devices which are few 
> years
> on market) and thus using software nodes to quirk this up. But the 
> driver
> is using IRQ domains based on per GPIO port firmware nodes, which are 
> in
> the above case software ones. This brings a warning message to be 
> printed
> 
>   [   73.957183] irq: Invalid fwnode type for irqdomain
> 
> and creates an unknown IRQ domain.
> 
> When we allow software node to be correct one for IRQ domain we will
> get rid of the warning message and nice domain name at the same time:
> 
>   % ls -1 /sys/kernel/debug/irq/domains/
>   ...
>   intel-quark-dw-apb-gpio:portA
> 
> Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
> ---
>  kernel/irq/irqdomain.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/kernel/irq/irqdomain.c b/kernel/irq/irqdomain.c
> index c6204bc606a2..e4ebc5398ef5 100644
> --- a/kernel/irq/irqdomain.c
> +++ b/kernel/irq/irqdomain.c
> @@ -161,7 +161,8 @@ struct irq_domain *__irq_domain_add(struct
> fwnode_handle *fwnode, int size,
>  			domain->name = fwid->name;
>  			break;
>  		}
> -	} else if (is_of_node(fwnode) || is_acpi_device_node(fwnode)) {
> +	} else if (is_of_node(fwnode) || is_acpi_device_node(fwnode) ||
> +		   is_software_node(fwnode)) {
>  		char *name;
> 
>  		/*

Thanks for this. I've applied it to irqchip-next. In the future,
please consider adding a cover letter describing the overall
goal of the series.

Cheers,

         M.
-- 
Jazz is not dead. It just smells funny...

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

* Re: [PATCH v1 3/3] irqdomain: Allow software node to be correct one for IRQ domain
  2020-05-21  8:59   ` Marc Zyngier
@ 2020-05-21  9:43     ` Andy Shevchenko
  0 siblings, 0 replies; 5+ messages in thread
From: Andy Shevchenko @ 2020-05-21  9:43 UTC (permalink / raw)
  To: Marc Zyngier; +Cc: Thomas Gleixner, linux-kernel, Rafael J. Wysocki, linux-acpi

On Thu, May 21, 2020 at 09:59:57AM +0100, Marc Zyngier wrote:
> On 2020-05-20 17:49, Andy Shevchenko wrote:

> Thanks for this. I've applied it to irqchip-next.

Thank you, Marc!

> In the future,
> please consider adding a cover letter describing the overall
> goal of the series.

I will keep in mind and follow.

-- 
With Best Regards,
Andy Shevchenko



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

end of thread, back to index

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-05-20 16:49 [PATCH v1 1/3] irqdomain: Make __irq_domain_add() less OF-dependent Andy Shevchenko
2020-05-20 16:49 ` [PATCH v1 2/3] irqdomain: Get rid of special treatment for ACPI in __irq_domain_add() Andy Shevchenko
2020-05-20 16:49 ` [PATCH v1 3/3] irqdomain: Allow software node to be correct one for IRQ domain Andy Shevchenko
2020-05-21  8:59   ` Marc Zyngier
2020-05-21  9:43     ` Andy Shevchenko

Linux-ACPI Archive on lore.kernel.org

Archives are clonable:
	git clone --mirror https://lore.kernel.org/linux-acpi/0 linux-acpi/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 linux-acpi linux-acpi/ https://lore.kernel.org/linux-acpi \
		linux-acpi@vger.kernel.org
	public-inbox-index linux-acpi

Example config snippet for mirrors

Newsgroup available over NNTP:
	nntp://nntp.lore.kernel.org/org.kernel.vger.linux-acpi


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git