Loading drivers/ssb/main.c +21 −3 Original line number Diff line number Diff line Loading @@ -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 { if (ssb_dma_translation_special_bit(dev)) return SSB_PCIE_DMA_H32; else return SSB_PCI_DMA; } default: __ssb_dma_not_implemented(dev); } Loading Loading
drivers/ssb/main.c +21 −3 Original line number Diff line number Diff line Loading @@ -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 { if (ssb_dma_translation_special_bit(dev)) return SSB_PCIE_DMA_H32; else return SSB_PCI_DMA; } default: __ssb_dma_not_implemented(dev); } Loading