2011/7/23 Hauke Mehrtens <hauke@xxxxxxxxxx>: > This causes an databus error on a Broadcom SoC using bcma. > > Signed-off-by: Hauke Mehrtens <hauke@xxxxxxxxxx> > --- > drivers/net/wireless/b43/dma.c | 20 +++++++++++++++++--- > 1 files changed, 17 insertions(+), 3 deletions(-) > > diff --git a/drivers/net/wireless/b43/dma.c b/drivers/net/wireless/b43/dma.c > index 0953ce1..646d6ae 100644 > --- a/drivers/net/wireless/b43/dma.c > +++ b/drivers/net/wireless/b43/dma.c > @@ -795,9 +795,23 @@ static u64 supported_dma_mask(struct b43_wldev *dev) > u32 tmp; > u16 mmio_base; > > - tmp = b43_read32(dev, SSB_TMSHIGH); > - if (tmp & SSB_TMSHIGH_DMA64) > - return DMA_BIT_MASK(64); > + switch (dev->dev->bus_type) { > +#ifdef CONFIG_B43_BCMA > + case B43_BUS_BCMA: > + tmp = bcma_aread32(dev->dev->bdev, BCMA_IOST); > + if (tmp & BCMA_IOST_DMA64) > + return DMA_BIT_MASK(64); > + break; > +#endif > +#ifdef CONFIG_B43_SSB > + case B43_BUS_SSB: > + tmp = ssb_read32(dev->dev->sdev, SSB_TMSHIGH); > + if (tmp & SSB_TMSHIGH_DMA64) > + return DMA_BIT_MASK(64); > + break; > +#endif > + } > + > mmio_base = b43_dmacontroller_base(0, 0); > b43_write32(dev, mmio_base + B43_DMA32_TXCTL, B43_DMA32_TXADDREXT_MASK); > tmp = b43_read32(dev, mmio_base + B43_DMA32_TXCTL); > -- > 1.7.4.1 Ack. Code was half-correctly using b43_read32 for SSB_TMSHIGH and that's how I missed it. Reading non-existent register on PC resulted in 0xFFFFFFFF, but not bus error. Thanks Hauke. -- Rafał -- 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