> > > >> + > >> +static int rockchip_pcie_rd_other_conf(struct rockchip_pcie_port *pp, > >> + struct pci_bus *bus, u32 devfn, > >> + int where, int size, u32 *val) > >> +{ > >> + u32 busdev; > >> + > >> + busdev = PCIE_ECAM_ADDR(bus->number, PCI_SLOT(devfn), > >> + PCI_FUNC(devfn), where); > >> + > >> + if (busdev & (size - 1)) { > >> + *val = 0; > >> + return PCIBIOS_BAD_REGISTER_NUMBER; > >> + } > >> + > >> + if (size == 4) { > >> + *val = readl(pp->reg_base + busdev); > >> + } else if (size == 2) { > >> + *val = readw(pp->reg_base + busdev); > >> + } else if (size == 1) { > >> + *val = readb(pp->reg_base + busdev); > >> + } else { > >> + *val = 0; > >> + return PCIBIOS_BAD_REGISTER_NUMBER; > >> + } > >> + return PCIBIOS_SUCCESSFUL; > >> +} > >> + > > > > This looks like the normal ECAM operations, you could just call those. > > I read ECAM reference code, I found it not support ioremap config space > for each bus individually on 64-bit systems. Our soc is 64-bit system, > and bus0 config space base address is 0xfda00000, bus1 base address is > 0xf8100000. So I think it is not normal ECAM operations, I do not know > if I have understood correctly? > Hi, I think Arnd was suggesting to use generic config read/write calls, pci_generic_config_read/pci_generic_config_write which does above functionality. Bharat -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html