diff mbox series

of: WARN on using default root node #address-cells/#size-cells

Message ID 20240530185049.2851617-1-robh@kernel.org
State New
Headers show
Series of: WARN on using default root node #address-cells/#size-cells | expand

Commit Message

Rob Herring May 30, 2024, 6:50 p.m. UTC
While OpenFirmware originally allowed default values of #address-cells
and #size-cells, FDT has long required explicit values. It's been a
warning in dtc for the root node since the beginning (2005) and for
any parent node since 2007. Of course, not all FDT uses dtc, but that
should be the majority by far. The various extracted OF devicetrees I
have dating back to the 1990s (various PowerMac, OLPC, PASemi Nemo)
all have explicit root node properties.

I have no idea what exists for Sparc, so disabling the warning for it.
If any other platforms hit the warning, then the warning can be
disabled for them.

Signed-off-by: Rob Herring (Arm) <robh@kernel.org>
---
Sparc folks, If anyone can dump DTs from some Sparc systems it would be
helpful.
---
 drivers/of/base.c | 2 ++
 drivers/of/fdt.c  | 2 ++
 2 files changed, 4 insertions(+)

Comments

Conor Dooley May 30, 2024, 7:21 p.m. UTC | #1
On Thu, May 30, 2024 at 01:50:48PM -0500, Rob Herring (Arm) wrote:
> While OpenFirmware originally allowed default values of #address-cells
> and #size-cells, FDT has long required explicit values. It's been a
> warning in dtc for the root node since the beginning (2005) and for
> any parent node since 2007. Of course, not all FDT uses dtc, but that
> should be the majority by far. The various extracted OF devicetrees I
> have dating back to the 1990s (various PowerMac, OLPC, PASemi Nemo)
> all have explicit root node properties.
> 
> I have no idea what exists for Sparc, so disabling the warning for it.
> If any other platforms hit the warning, then the warning can be
> disabled for them.
> 
> Signed-off-by: Rob Herring (Arm) <robh@kernel.org>
> ---
> Sparc folks, If anyone can dump DTs from some Sparc systems it would be
> helpful.
> ---
>  drivers/of/base.c | 2 ++
>  drivers/of/fdt.c  | 2 ++
>  2 files changed, 4 insertions(+)
> 
> diff --git a/drivers/of/base.c b/drivers/of/base.c
> index 61fff13bbee5..6930aa29fec1 100644
> --- a/drivers/of/base.c
> +++ b/drivers/of/base.c
> @@ -96,6 +96,7 @@ int of_bus_n_addr_cells(struct device_node *np)
>  			return cells;
>  
>  	/* No #address-cells property for the root node */
> +	WARN_ONCE(!IS_ENABLED(CONFIG_SPARC), "Only listed platforms should rely on default '#address-cells'\n");

I assume "listed platforms" means things in the first parameter of
WARN_ONCE()? Since that's only SPARC, why not just say it? The error
message is rather obtuse as-is I think.
Sam Ravnborg May 30, 2024, 8:27 p.m. UTC | #2
Hi Rob.

On Thu, May 30, 2024 at 01:50:48PM -0500, Rob Herring (Arm) wrote:
> While OpenFirmware originally allowed default values of #address-cells
> and #size-cells, FDT has long required explicit values. It's been a
> warning in dtc for the root node since the beginning (2005) and for
> any parent node since 2007. Of course, not all FDT uses dtc, but that
> should be the majority by far. The various extracted OF devicetrees I
> have dating back to the 1990s (various PowerMac, OLPC, PASemi Nemo)
> all have explicit root node properties.
> 
> I have no idea what exists for Sparc, so disabling the warning for it.
> If any other platforms hit the warning, then the warning can be
> disabled for them.
> 
> Signed-off-by: Rob Herring (Arm) <robh@kernel.org>
> ---
> Sparc folks, If anyone can dump DTs from some Sparc systems it would be
> helpful.

For sparc the format looks much different - see:
git://git.kernel.org/pub/scm/linux/kernel/git/davem/prtconfs.git

This is dumps from the prtconf tool found in Solaris.

Looking at for example t1000 it looks like #size-cells, #address-cells
are used properly.

Looking at the older ss20 I see no use of these.
Looking at sb100 (old sparc64 machine) I see inconsistent use.

My best guess is that sparc32 machines see little to no use of them.
sparc64 use them, but on older machines the usage is inconsistent.

	Sam
Rob Herring May 31, 2024, 12:33 a.m. UTC | #3
On Thu, May 30, 2024 at 2:21 PM Conor Dooley <conor@kernel.org> wrote:
>
> On Thu, May 30, 2024 at 01:50:48PM -0500, Rob Herring (Arm) wrote:
> > While OpenFirmware originally allowed default values of #address-cells
> > and #size-cells, FDT has long required explicit values. It's been a
> > warning in dtc for the root node since the beginning (2005) and for
> > any parent node since 2007. Of course, not all FDT uses dtc, but that
> > should be the majority by far. The various extracted OF devicetrees I
> > have dating back to the 1990s (various PowerMac, OLPC, PASemi Nemo)
> > all have explicit root node properties.
> >
> > I have no idea what exists for Sparc, so disabling the warning for it.
> > If any other platforms hit the warning, then the warning can be
> > disabled for them.
> >
> > Signed-off-by: Rob Herring (Arm) <robh@kernel.org>
> > ---
> > Sparc folks, If anyone can dump DTs from some Sparc systems it would be
> > helpful.
> > ---
> >  drivers/of/base.c | 2 ++
> >  drivers/of/fdt.c  | 2 ++
> >  2 files changed, 4 insertions(+)
> >
> > diff --git a/drivers/of/base.c b/drivers/of/base.c
> > index 61fff13bbee5..6930aa29fec1 100644
> > --- a/drivers/of/base.c
> > +++ b/drivers/of/base.c
> > @@ -96,6 +96,7 @@ int of_bus_n_addr_cells(struct device_node *np)
> >                       return cells;
> >
> >       /* No #address-cells property for the root node */
> > +     WARN_ONCE(!IS_ENABLED(CONFIG_SPARC), "Only listed platforms should rely on default '#address-cells'\n");
>
> I assume "listed platforms" means things in the first parameter of
> WARN_ONCE()? Since that's only SPARC, why not just say it? The error
> message is rather obtuse as-is I think.

My intent is if you hit this warning, add the platform here. I imagine
it will be older stuff we can't or don't want to fix. Maybe I should
just say that as a comment instead.

Rob
Conor Dooley May 31, 2024, 3:11 p.m. UTC | #4
On Thu, May 30, 2024 at 07:33:57PM -0500, Rob Herring wrote:
> On Thu, May 30, 2024 at 2:21 PM Conor Dooley <conor@kernel.org> wrote:
> >
> > On Thu, May 30, 2024 at 01:50:48PM -0500, Rob Herring (Arm) wrote:
> > > While OpenFirmware originally allowed default values of #address-cells
> > > and #size-cells, FDT has long required explicit values. It's been a
> > > warning in dtc for the root node since the beginning (2005) and for
> > > any parent node since 2007. Of course, not all FDT uses dtc, but that
> > > should be the majority by far. The various extracted OF devicetrees I
> > > have dating back to the 1990s (various PowerMac, OLPC, PASemi Nemo)
> > > all have explicit root node properties.
> > >
> > > I have no idea what exists for Sparc, so disabling the warning for it.
> > > If any other platforms hit the warning, then the warning can be
> > > disabled for them.
> > >
> > > Signed-off-by: Rob Herring (Arm) <robh@kernel.org>
> > > ---
> > > Sparc folks, If anyone can dump DTs from some Sparc systems it would be
> > > helpful.
> > > ---
> > >  drivers/of/base.c | 2 ++
> > >  drivers/of/fdt.c  | 2 ++
> > >  2 files changed, 4 insertions(+)
> > >
> > > diff --git a/drivers/of/base.c b/drivers/of/base.c
> > > index 61fff13bbee5..6930aa29fec1 100644
> > > --- a/drivers/of/base.c
> > > +++ b/drivers/of/base.c
> > > @@ -96,6 +96,7 @@ int of_bus_n_addr_cells(struct device_node *np)
> > >                       return cells;
> > >
> > >       /* No #address-cells property for the root node */
> > > +     WARN_ONCE(!IS_ENABLED(CONFIG_SPARC), "Only listed platforms should rely on default '#address-cells'\n");
> >
> > I assume "listed platforms" means things in the first parameter of
> > WARN_ONCE()? Since that's only SPARC, why not just say it? The error
> > message is rather obtuse as-is I think.
> 
> My intent is if you hit this warning, add the platform here.

Aye, I figured as much. My point was mostly that if you see this warning
during boot etc the message doesn't make that much sense. It only really
makes sense when you look at the kernel sources.

> I imagine
> it will be older stuff we can't or don't want to fix. Maybe I should
> just say that as a comment instead.
diff mbox series

Patch

diff --git a/drivers/of/base.c b/drivers/of/base.c
index 61fff13bbee5..6930aa29fec1 100644
--- a/drivers/of/base.c
+++ b/drivers/of/base.c
@@ -96,6 +96,7 @@  int of_bus_n_addr_cells(struct device_node *np)
 			return cells;
 
 	/* No #address-cells property for the root node */
+	WARN_ONCE(!IS_ENABLED(CONFIG_SPARC), "Only listed platforms should rely on default '#address-cells'\n");
 	return OF_ROOT_NODE_ADDR_CELLS_DEFAULT;
 }
 
@@ -116,6 +117,7 @@  int of_bus_n_size_cells(struct device_node *np)
 			return cells;
 
 	/* No #size-cells property for the root node */
+	WARN_ONCE(!IS_ENABLED(CONFIG_SPARC), "Only listed platforms should rely on default '#size-cells'\n");
 	return OF_ROOT_NODE_SIZE_CELLS_DEFAULT;
 }
 
diff --git a/drivers/of/fdt.c b/drivers/of/fdt.c
index a8a04f27915b..568a3fca4c27 100644
--- a/drivers/of/fdt.c
+++ b/drivers/of/fdt.c
@@ -961,11 +961,13 @@  int __init early_init_dt_scan_root(void)
 	prop = of_get_flat_dt_prop(node, "#size-cells", NULL);
 	if (prop)
 		dt_root_size_cells = be32_to_cpup(prop);
+	WARN(!prop, "No '#size-cells' in root node\n");
 	pr_debug("dt_root_size_cells = %x\n", dt_root_size_cells);
 
 	prop = of_get_flat_dt_prop(node, "#address-cells", NULL);
 	if (prop)
 		dt_root_addr_cells = be32_to_cpup(prop);
+	WARN(!prop, "No '#address-cells' in root node\n");
 	pr_debug("dt_root_addr_cells = %x\n", dt_root_addr_cells);
 
 	return 0;