Thread (14 messages) flat view 14 messages, 4 authors, 9d ago

Re: [PATCH] soc: fsl: qe: properly scan GPIO nodes at startup

From: Herve Codina <herve.codina@bootlin.com>
Date: 2026-07-30 09:29:34
Also in: linux-arm-kernel, lkml

Hi Christophe,

On Thu, 30 Jul 2026 10:11:29 +0200
"Christophe Leroy (CS GROUP)" [off-list ref] wrote:
Hi Hervé,

Le 29/07/2026 à 17:21, Herve Codina a écrit :
quoted
Hi Christophe,

On Wed, 29 Jul 2026 16:10:36 +0200
"Christophe Leroy (CS GROUP)" [off-list ref] wrote:
  
quoted
Before commit 156460811def ("soc: fsl: qe: Change GPIO driver to a
proper platform driver") qe_add_gpiochips() was walking the device
tree to find all nodes with compatible "fsl,mpc8323-qe-pario-bank".

After that commit the discovery is handled by the platform core,
therefore it is necessary to call of_platform_default_populate() on
the par_io node.

Fixes: 156460811def ("soc: fsl: qe: Change GPIO driver to a proper platform driver")
Signed-off-by: Christophe Leroy (CS GROUP) <chleroy@kernel.org>
---
  drivers/soc/fsl/qe/qe_io.c | 15 +++++++++++++++
  1 file changed, 15 insertions(+)
diff --git a/drivers/soc/fsl/qe/qe_io.c b/drivers/soc/fsl/qe/qe_io.c
index a5e2d0e5ab51..02ca556c8db0 100644
--- a/drivers/soc/fsl/qe/qe_io.c
+++ b/drivers/soc/fsl/qe/qe_io.c
@@ -15,6 +15,7 @@
  #include <linux/errno.h>
  #include <linux/module.h>
  #include <linux/ioport.h>
+#include <linux/of_platform.h>
  
  #include <asm/io.h>
  #include <soc/fsl/qe/qe.h>
@@ -184,3 +185,17 @@ int par_io_of_config(struct device_node *np)
  	return 0;
  }
  EXPORT_SYMBOL(par_io_of_config);
+
+static int __init par_io_populate(void)
+{
+	struct device_node *np = of_find_node_by_name(NULL, "par_io");
+
+	if (!np)
+		return 0;
+
+	of_platform_default_populate(np, NULL, NULL);
+	of_node_put(np);
+
+	return 0;
+}
+arch_initcall(par_io_populate);  

The par_io node is a sub-node of the soc@xxx node.
The soc@xxx node is simple-bus compatible. This child node should be
populated.

Why do we need this additional of_platform_default_populate?

Also par_io node has a compatible. Maybe the related driver should call
of_platform_populate() to populate children of par_io if needed. If this
driver is missing, maybe it should be created.

Do I miss something?  
As discussed together off-line, at the time being the par_io driver is 
not a platform driver. par_io_init() is called from setup_arch() by some 
board setups.

In order to fix the regression, I keep it minimal with an 
arch_initcall() function which is equivalent to what we had before 
changing this driver to a platform driver. It will also ease applying 
the fix to stable without too much churn.

It will still be possible to rework par_io driver in a follow-up patch 
and change it to a propoer platform driver.
Yes, indeed, this makes sense.

Thanks for the clarification.

Best regards,
Hervé
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help