Message ID | 1420857290-8373-10-git-send-email-robh@kernel.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Hi Rob, On 10/01/15 12:34, Rob Herring wrote: > Convert the ks8695 PCI driver to use the generic config access functions. > > This changes accesses from __raw_readX/__raw_writeX to readX/writeX > variants. > > Signed-off-by: Rob Herring <robh@kernel.org> > Cc: Greg Ungerer <gerg@uclinux.org> I wasn't CC'ed on the generic implementation patch ("pci: introduce common pci config space accessors"), but I assume this is it: https://www.mail-archive.com/linux-kernel@vger.kernel.org/msg800405.html That all looks ok to me. I have not tested it, but: Acked-by: Greg Ungerer <gerg@uclinux.org> Regards Greg > Cc: Russell King <linux@arm.linux.org.uk> > Cc: linux-arm-kernel@lists.infradead.org > --- > arch/arm/mach-ks8695/pci.c | 77 ++++------------------------------------------ > 1 file changed, 6 insertions(+), 71 deletions(-) > > diff --git a/arch/arm/mach-ks8695/pci.c b/arch/arm/mach-ks8695/pci.c > index bb18193..c1bc4c3 100644 > --- a/arch/arm/mach-ks8695/pci.c > +++ b/arch/arm/mach-ks8695/pci.c > @@ -38,8 +38,6 @@ > > > static int pci_dbg; > -static int pci_cfg_dbg; > - > > static void ks8695_pci_setupconfig(unsigned int bus_nr, unsigned int devfn, unsigned int where) > { > @@ -59,75 +57,11 @@ static void ks8695_pci_setupconfig(unsigned int bus_nr, unsigned int devfn, unsi > } > } > > - > -/* > - * The KS8695 datasheet prohibits anything other than 32bit accesses > - * to the IO registers, so all our configuration must be done with > - * 32bit operations, and the correct bit masking and shifting. > - */ > - > -static int ks8695_pci_readconfig(struct pci_bus *bus, > - unsigned int devfn, int where, int size, u32 *value) > -{ > - ks8695_pci_setupconfig(bus->number, devfn, where); > - > - *value = __raw_readl(KS8695_PCI_VA + KS8695_PBCD); > - > - switch (size) { > - case 4: > - break; > - case 2: > - *value = *value >> ((where & 2) * 8); > - *value &= 0xffff; > - break; > - case 1: > - *value = *value >> ((where & 3) * 8); > - *value &= 0xff; > - break; > - } > - > - if (pci_cfg_dbg) { > - printk("read: %d,%08x,%02x,%d: %08x (%08x)\n", > - bus->number, devfn, where, size, *value, > - __raw_readl(KS8695_PCI_VA + KS8695_PBCD)); > - } > - > - return PCIBIOS_SUCCESSFUL; > -} > - > -static int ks8695_pci_writeconfig(struct pci_bus *bus, > - unsigned int devfn, int where, int size, u32 value) > +static void __iomem *ks8695_pci_map_bus(struct pci_bus *bus, unsigned int devfn, > + int where) > { > - unsigned long tmp; > - > - if (pci_cfg_dbg) { > - printk("write: %d,%08x,%02x,%d: %08x\n", > - bus->number, devfn, where, size, value); > - } > - > ks8695_pci_setupconfig(bus->number, devfn, where); > - > - switch (size) { > - case 4: > - __raw_writel(value, KS8695_PCI_VA + KS8695_PBCD); > - break; > - case 2: > - tmp = __raw_readl(KS8695_PCI_VA + KS8695_PBCD); > - tmp &= ~(0xffff << ((where & 2) * 8)); > - tmp |= value << ((where & 2) * 8); > - > - __raw_writel(tmp, KS8695_PCI_VA + KS8695_PBCD); > - break; > - case 1: > - tmp = __raw_readl(KS8695_PCI_VA + KS8695_PBCD); > - tmp &= ~(0xff << ((where & 3) * 8)); > - tmp |= value << ((where & 3) * 8); > - > - __raw_writel(tmp, KS8695_PCI_VA + KS8695_PBCD); > - break; > - } > - > - return PCIBIOS_SUCCESSFUL; > + return KS8695_PCI_VA + KS8695_PBCD; > } > > static void ks8695_local_writeconfig(int where, u32 value) > @@ -137,8 +71,9 @@ static void ks8695_local_writeconfig(int where, u32 value) > } > > static struct pci_ops ks8695_pci_ops = { > - .read = ks8695_pci_readconfig, > - .write = ks8695_pci_writeconfig, > + .map_bus = ks8695_pci_map_bus, > + .read = pci_generic_config_read32, > + .write = pci_generic_config_write32, > }; > > static struct resource pci_mem = {
diff --git a/arch/arm/mach-ks8695/pci.c b/arch/arm/mach-ks8695/pci.c index bb18193..c1bc4c3 100644 --- a/arch/arm/mach-ks8695/pci.c +++ b/arch/arm/mach-ks8695/pci.c @@ -38,8 +38,6 @@ static int pci_dbg; -static int pci_cfg_dbg; - static void ks8695_pci_setupconfig(unsigned int bus_nr, unsigned int devfn, unsigned int where) { @@ -59,75 +57,11 @@ static void ks8695_pci_setupconfig(unsigned int bus_nr, unsigned int devfn, unsi } } - -/* - * The KS8695 datasheet prohibits anything other than 32bit accesses - * to the IO registers, so all our configuration must be done with - * 32bit operations, and the correct bit masking and shifting. - */ - -static int ks8695_pci_readconfig(struct pci_bus *bus, - unsigned int devfn, int where, int size, u32 *value) -{ - ks8695_pci_setupconfig(bus->number, devfn, where); - - *value = __raw_readl(KS8695_PCI_VA + KS8695_PBCD); - - switch (size) { - case 4: - break; - case 2: - *value = *value >> ((where & 2) * 8); - *value &= 0xffff; - break; - case 1: - *value = *value >> ((where & 3) * 8); - *value &= 0xff; - break; - } - - if (pci_cfg_dbg) { - printk("read: %d,%08x,%02x,%d: %08x (%08x)\n", - bus->number, devfn, where, size, *value, - __raw_readl(KS8695_PCI_VA + KS8695_PBCD)); - } - - return PCIBIOS_SUCCESSFUL; -} - -static int ks8695_pci_writeconfig(struct pci_bus *bus, - unsigned int devfn, int where, int size, u32 value) +static void __iomem *ks8695_pci_map_bus(struct pci_bus *bus, unsigned int devfn, + int where) { - unsigned long tmp; - - if (pci_cfg_dbg) { - printk("write: %d,%08x,%02x,%d: %08x\n", - bus->number, devfn, where, size, value); - } - ks8695_pci_setupconfig(bus->number, devfn, where); - - switch (size) { - case 4: - __raw_writel(value, KS8695_PCI_VA + KS8695_PBCD); - break; - case 2: - tmp = __raw_readl(KS8695_PCI_VA + KS8695_PBCD); - tmp &= ~(0xffff << ((where & 2) * 8)); - tmp |= value << ((where & 2) * 8); - - __raw_writel(tmp, KS8695_PCI_VA + KS8695_PBCD); - break; - case 1: - tmp = __raw_readl(KS8695_PCI_VA + KS8695_PBCD); - tmp &= ~(0xff << ((where & 3) * 8)); - tmp |= value << ((where & 3) * 8); - - __raw_writel(tmp, KS8695_PCI_VA + KS8695_PBCD); - break; - } - - return PCIBIOS_SUCCESSFUL; + return KS8695_PCI_VA + KS8695_PBCD; } static void ks8695_local_writeconfig(int where, u32 value) @@ -137,8 +71,9 @@ static void ks8695_local_writeconfig(int where, u32 value) } static struct pci_ops ks8695_pci_ops = { - .read = ks8695_pci_readconfig, - .write = ks8695_pci_writeconfig, + .map_bus = ks8695_pci_map_bus, + .read = pci_generic_config_read32, + .write = pci_generic_config_write32, }; static struct resource pci_mem = {
Convert the ks8695 PCI driver to use the generic config access functions. This changes accesses from __raw_readX/__raw_writeX to readX/writeX variants. Signed-off-by: Rob Herring <robh@kernel.org> Cc: Greg Ungerer <gerg@uclinux.org> Cc: Russell King <linux@arm.linux.org.uk> Cc: linux-arm-kernel@lists.infradead.org --- arch/arm/mach-ks8695/pci.c | 77 ++++------------------------------------------ 1 file changed, 6 insertions(+), 71 deletions(-)