Skip to content

Commit cf89c94

Browse files
mpemaddy-kerneldev
authored andcommitted
powerpc/prom_init: Fixup missing powermac #size-cells
On some powermacs `escc` nodes are missing `#size-cells` properties, which is deprecated and now triggers a warning at boot since commit 045b14c ("of: WARN on deprecated #address-cells/#size-cells handling"). For example: Missing '#size-cells' in /pci@f2000000/mac-io@c/escc@13000 WARNING: CPU: 0 PID: 0 at drivers/of/base.c:133 of_bus_n_size_cells+0x98/0x108 Hardware name: PowerMac3,1 7400 0xc0209 PowerMac ... Call Trace: of_bus_n_size_cells+0x98/0x108 (unreliable) of_bus_default_count_cells+0x40/0x60 __of_get_address+0xc8/0x21c __of_address_to_resource+0x5c/0x228 pmz_init_port+0x5c/0x2ec pmz_probe.isra.0+0x144/0x1e4 pmz_console_init+0x10/0x48 console_init+0xcc/0x138 start_kernel+0x5c4/0x694 As powermacs boot via prom_init it's possible to add the missing properties to the device tree during boot, avoiding the warning. Note that `escc-legacy` nodes are also missing `#size-cells` properties, but they are skipped by the macio driver, so leave them alone. Depends-on: 045b14c ("of: WARN on deprecated #address-cells/#size-cells handling") Signed-off-by: Michael Ellerman <[email protected]> Reviewed-by: Rob Herring <[email protected]> Signed-off-by: Madhavan Srinivasan <[email protected]> Link: https://patch.msgid.link/[email protected]
1 parent a747695 commit cf89c94

File tree

1 file changed

+27
-2
lines changed

1 file changed

+27
-2
lines changed

arch/powerpc/kernel/prom_init.c

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2848,7 +2848,7 @@ static void __init fixup_device_tree_chrp(void)
28482848
#endif
28492849

28502850
#if defined(CONFIG_PPC64) && defined(CONFIG_PPC_PMAC)
2851-
static void __init fixup_device_tree_pmac(void)
2851+
static void __init fixup_device_tree_pmac64(void)
28522852
{
28532853
phandle u3, i2c, mpic;
28542854
u32 u3_rev;
@@ -2888,7 +2888,31 @@ static void __init fixup_device_tree_pmac(void)
28882888
&parent, sizeof(parent));
28892889
}
28902890
#else
2891-
#define fixup_device_tree_pmac()
2891+
#define fixup_device_tree_pmac64()
2892+
#endif
2893+
2894+
#ifdef CONFIG_PPC_PMAC
2895+
static void __init fixup_device_tree_pmac(void)
2896+
{
2897+
__be32 val = 1;
2898+
char type[8];
2899+
phandle node;
2900+
2901+
// Some pmacs are missing #size-cells on escc nodes
2902+
for (node = 0; prom_next_node(&node); ) {
2903+
type[0] = '\0';
2904+
prom_getprop(node, "device_type", type, sizeof(type));
2905+
if (prom_strcmp(type, "escc"))
2906+
continue;
2907+
2908+
if (prom_getproplen(node, "#size-cells") != PROM_ERROR)
2909+
continue;
2910+
2911+
prom_setprop(node, NULL, "#size-cells", &val, sizeof(val));
2912+
}
2913+
}
2914+
#else
2915+
static inline void fixup_device_tree_pmac(void) { }
28922916
#endif
28932917

28942918
#ifdef CONFIG_PPC_EFIKA
@@ -3111,6 +3135,7 @@ static void __init fixup_device_tree(void)
31113135
{
31123136
fixup_device_tree_chrp();
31133137
fixup_device_tree_pmac();
3138+
fixup_device_tree_pmac64();
31143139
fixup_device_tree_efika();
31153140
fixup_device_tree_pasemi();
31163141
}

0 commit comments

Comments
 (0)