On 06/07/2022 07:21, Pali Rohár wrote: > [...] > Fix this issue and introduce a new option CONFIG_PPC_PCI_DOMAIN_FROM_OF_REG. > When this option is disabled then powerpc kernel would assign PCI domains > in the similar way like it is doing kernel for other architectures, > starting from zero and also how it was done prior that commit. I found this sentence a bit weird, "in the similar way like it is doing kernel for other architectures", but other than that: Reviewed-by: Guilherme G. Piccoli <gpiccoli@xxxxxxxxxx> Thanks for the improvement! Cheers, Guilherme > > This option is by default enabled for powernv and pseries platform for which > was that commit originally intended. > > With this change upgrading kernels from LTS 4.4 version does not change PCI > domain on smaller embedded platforms with fixed number of PCIe controllers. > And also ensure that PCI domain zero is present as before that commit. > > Fixes: 63a72284b159 ("powerpc/pci: Assign fixed PHB number based on device-tree properties") > Signed-off-by: Pali Rohár <pali@xxxxxxxxxx> > --- > Changes in v2: > * Enable CONFIG_PPC_PCI_DOMAIN_FROM_OF_REG by default on powernv and pseries > --- > arch/powerpc/Kconfig | 11 +++++++++++ > arch/powerpc/kernel/pci-common.c | 4 ++-- > 2 files changed, 13 insertions(+), 2 deletions(-) > > diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig > index f66084bc1dfe..053a88e84049 100644 > --- a/arch/powerpc/Kconfig > +++ b/arch/powerpc/Kconfig > @@ -386,6 +386,17 @@ config PPC_OF_PLATFORM_PCI > depends on PCI > depends on PPC64 # not supported on 32 bits yet > > +config PPC_PCI_DOMAIN_FROM_OF_REG > + bool "Use OF reg property for PCI domain" > + depends on PCI > + default y if PPC_PSERIES || PPC_POWERNV > + help > + By default PCI domain for host bridge during its registration is > + chosen as the lowest unused PCI domain number. > + > + When this option is enabled then PCI domain can be determined > + also from lower bits of the OF / Device Tree 'reg' property. > + > config ARCH_SUPPORTS_UPROBES > def_bool y > > diff --git a/arch/powerpc/kernel/pci-common.c b/arch/powerpc/kernel/pci-common.c > index 068410cd54a3..7f959df34833 100644 > --- a/arch/powerpc/kernel/pci-common.c > +++ b/arch/powerpc/kernel/pci-common.c > @@ -74,7 +74,6 @@ void __init set_pci_dma_ops(const struct dma_map_ops *dma_ops) > static int get_phb_number(struct device_node *dn) > { > int ret, phb_id = -1; > - u32 prop_32; > u64 prop; > > /* > @@ -83,7 +82,8 @@ static int get_phb_number(struct device_node *dn) > * reading "ibm,opal-phbid", only present in OPAL environment. > */ > ret = of_property_read_u64(dn, "ibm,opal-phbid", &prop); > - if (ret) { > + if (ret && IS_ENABLED(CONFIG_PPC_PCI_DOMAIN_FROM_OF_REG)) { > + u32 prop_32; > ret = of_property_read_u32_index(dn, "reg", 1, &prop_32); > prop = prop_32; > }