On 01/12/2013 11:46 AM, Nathan Hintz wrote: > The sanity checks allow 1 and 2 byte reads/writes of the extended > PCI config space to proceed; however, the code only supports 4 > byte reads/writes. This patch adds support for 1 and 2 byte > reads/writes of the extended PCI config space. > > Signed-off-by: Nathan Hintz <nlhintz@xxxxxxxxxxx> Acked-by: Hauke Mehrtens <hauke@xxxxxxxxxx> > --- > drivers/bcma/driver_pci_host.c | 15 ++++++++------- > 1 files changed, 8 insertions(+), 7 deletions(-) > > diff --git a/drivers/bcma/driver_pci_host.c b/drivers/bcma/driver_pci_host.c > index e1381ba..92800b4 100644 > --- a/drivers/bcma/driver_pci_host.c > +++ b/drivers/bcma/driver_pci_host.c > @@ -101,7 +101,7 @@ static int bcma_extpci_read_config(struct bcma_drv_pci *pc, unsigned int dev, > */ > if (off >= PCI_CONFIG_SPACE_SIZE) { > addr = (func << 12); > - addr |= (off & 0x0FFF); > + addr |= (off & 0x0FFC); > val = bcma_pcie_read_config(pc, addr); > } else { > addr = BCMA_CORE_PCI_PCICFG0; > @@ -164,7 +164,11 @@ static int bcma_extpci_write_config(struct bcma_drv_pci *pc, unsigned int dev, > /* accesses to config registers with offsets >= 256 > * requires indirect access. > */ > - if (off < PCI_CONFIG_SPACE_SIZE) { > + if (off >= PCI_CONFIG_SPACE_SIZE) { > + addr = (func << 12); > + addr |= (off & 0x0FFC); > + val = bcma_pcie_read_config(pc, addr); > + } else { > addr = BCMA_CORE_PCI_PCICFG0; > addr |= (func << 8); > addr |= (off & 0xfc); > @@ -202,13 +206,10 @@ static int bcma_extpci_write_config(struct bcma_drv_pci *pc, unsigned int dev, > /* accesses to config registers with offsets >= 256 > * requires indirect access. > */ > - if (off >= PCI_CONFIG_SPACE_SIZE) { > - addr = (func << 12); > - addr |= (off & 0x0FFF); > + if (off >= PCI_CONFIG_SPACE_SIZE) > bcma_pcie_write_config(pc, addr, val); > - } else { > + else > pcicore_write32(pc, addr, val); > - } > } else { > writel(val, mmio); > > -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html