diff options
Diffstat (limited to 'drivers/ssb')
-rw-r--r-- | drivers/ssb/b43_pci_bridge.c | 1 | ||||
-rw-r--r-- | drivers/ssb/driver_chipcommon.c | 1 | ||||
-rw-r--r-- | drivers/ssb/driver_chipcommon_pmu.c | 1 | ||||
-rw-r--r-- | drivers/ssb/driver_gige.c | 1 | ||||
-rw-r--r-- | drivers/ssb/driver_pcicore.c | 1 | ||||
-rw-r--r-- | drivers/ssb/embedded.c | 1 | ||||
-rw-r--r-- | drivers/ssb/main.c | 25 | ||||
-rw-r--r-- | drivers/ssb/pcihost_wrapper.c | 1 |
8 files changed, 29 insertions, 3 deletions
diff --git a/drivers/ssb/b43_pci_bridge.c b/drivers/ssb/b43_pci_bridge.c index bf53e44c82a..bad7ba517a1 100644 --- a/drivers/ssb/b43_pci_bridge.c +++ b/drivers/ssb/b43_pci_bridge.c @@ -11,6 +11,7 @@ */ #include <linux/pci.h> +#include <linux/module.h> #include <linux/ssb/ssb.h> #include "ssb_private.h" diff --git a/drivers/ssb/driver_chipcommon.c b/drivers/ssb/driver_chipcommon.c index 5d9c97c2479..e9d2ca11283 100644 --- a/drivers/ssb/driver_chipcommon.c +++ b/drivers/ssb/driver_chipcommon.c @@ -10,6 +10,7 @@ #include <linux/ssb/ssb.h> #include <linux/ssb/ssb_regs.h> +#include <linux/export.h> #include <linux/pci.h> #include "ssb_private.h" diff --git a/drivers/ssb/driver_chipcommon_pmu.c b/drivers/ssb/driver_chipcommon_pmu.c index 52901c14c68..e5a2e0e9bc1 100644 --- a/drivers/ssb/driver_chipcommon_pmu.c +++ b/drivers/ssb/driver_chipcommon_pmu.c @@ -12,6 +12,7 @@ #include <linux/ssb/ssb_regs.h> #include <linux/ssb/ssb_driver_chipcommon.h> #include <linux/delay.h> +#include <linux/export.h> #include "ssb_private.h" diff --git a/drivers/ssb/driver_gige.c b/drivers/ssb/driver_gige.c index 3adb98dad70..f30ea689933 100644 --- a/drivers/ssb/driver_gige.c +++ b/drivers/ssb/driver_gige.c @@ -10,6 +10,7 @@ #include <linux/ssb/ssb.h> #include <linux/ssb/ssb_driver_gige.h> +#include <linux/export.h> #include <linux/pci.h> #include <linux/pci_regs.h> #include <linux/slab.h> diff --git a/drivers/ssb/driver_pcicore.c b/drivers/ssb/driver_pcicore.c index e6ac3177fbb..84c934c0a54 100644 --- a/drivers/ssb/driver_pcicore.c +++ b/drivers/ssb/driver_pcicore.c @@ -10,6 +10,7 @@ #include <linux/ssb/ssb.h> #include <linux/pci.h> +#include <linux/export.h> #include <linux/delay.h> #include <linux/ssb/ssb_embedded.h> diff --git a/drivers/ssb/embedded.c b/drivers/ssb/embedded.c index eec3e267be4..9ef124f9ee2 100644 --- a/drivers/ssb/embedded.c +++ b/drivers/ssb/embedded.c @@ -8,6 +8,7 @@ * Licensed under the GNU/GPL. See COPYING for details. */ +#include <linux/export.h> #include <linux/ssb/ssb.h> #include <linux/ssb/ssb_embedded.h> #include <linux/ssb/ssb_driver_pci.h> diff --git a/drivers/ssb/main.c b/drivers/ssb/main.c index 29c7d4f9d1a..bb6317fb925 100644 --- a/drivers/ssb/main.c +++ b/drivers/ssb/main.c @@ -12,6 +12,7 @@ #include <linux/delay.h> #include <linux/io.h> +#include <linux/module.h> #include <linux/ssb/ssb.h> #include <linux/ssb/ssb_regs.h> #include <linux/ssb/ssb_driver_gige.h> @@ -1260,16 +1261,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); } diff --git a/drivers/ssb/pcihost_wrapper.c b/drivers/ssb/pcihost_wrapper.c index 116a8116984..af5448f5e2d 100644 --- a/drivers/ssb/pcihost_wrapper.c +++ b/drivers/ssb/pcihost_wrapper.c @@ -12,6 +12,7 @@ */ #include <linux/pci.h> +#include <linux/export.h> #include <linux/slab.h> #include <linux/ssb/ssb.h> |