forked from Minki/linux
ssb: fix DMA translation for some specific boards
Signed-off-by: Michael Buesch <m@bues.ch> Signed-off-by: Rafał Miłecki <zajec5@gmail.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
292121dce2
commit
04023afcce
@ -1260,16 +1260,34 @@ void ssb_device_disable(struct ssb_device *dev, u32 core_specific_flags)
|
||||
}
|
||||
EXPORT_SYMBOL(ssb_device_disable);
|
||||
|
||||
/* Some chipsets need routing known for PCIe and 64-bit DMA */
|
||||
static bool ssb_dma_translation_special_bit(struct ssb_device *dev)
|
||||
{
|
||||
u16 chip_id = dev->bus->chip_id;
|
||||
|
||||
if (dev->id.coreid == SSB_DEV_80211) {
|
||||
return (chip_id == 0x4322 || chip_id == 43221 ||
|
||||
chip_id == 43231 || chip_id == 43222);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
u32 ssb_dma_translation(struct ssb_device *dev)
|
||||
{
|
||||
switch (dev->bus->bustype) {
|
||||
case SSB_BUSTYPE_SSB:
|
||||
return 0;
|
||||
case SSB_BUSTYPE_PCI:
|
||||
if (ssb_read32(dev, SSB_TMSHIGH) & SSB_TMSHIGH_DMA64)
|
||||
if (pci_is_pcie(dev->bus->host_pci) &&
|
||||
ssb_read32(dev, SSB_TMSHIGH) & SSB_TMSHIGH_DMA64) {
|
||||
return SSB_PCIE_DMA_H32;
|
||||
else
|
||||
return SSB_PCI_DMA;
|
||||
} else {
|
||||
if (ssb_dma_translation_special_bit(dev))
|
||||
return SSB_PCIE_DMA_H32;
|
||||
else
|
||||
return SSB_PCI_DMA;
|
||||
}
|
||||
default:
|
||||
__ssb_dma_not_implemented(dev);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user