summaryrefslogtreecommitdiffstats
path: root/target/linux/brcm47xx/patches-3.3/044-bcma-add-PCIe-host-controller.patch
diff options
context:
space:
mode:
authorHauke Mehrtens <hauke@hauke-m.de>2012-05-03 20:18:41 +0000
committerHauke Mehrtens <hauke@hauke-m.de>2012-05-03 20:18:41 +0000
commit22b2e3fbb9cc78d671e44f788a062031c97ffc6f (patch)
tree6395b1a6324793714e3d8d770a71cdc9362da4e1 /target/linux/brcm47xx/patches-3.3/044-bcma-add-PCIe-host-controller.patch
parent8e9d914343967982a1a48e80000bbb09161e636c (diff)
downloadmaster-31e0f0ae-22b2e3fbb9cc78d671e44f788a062031c97ffc6f.tar.gz
master-31e0f0ae-22b2e3fbb9cc78d671e44f788a062031c97ffc6f.tar.bz2
master-31e0f0ae-22b2e3fbb9cc78d671e44f788a062031c97ffc6f.zip
brcm47xx: add support for kernel 3.3
SVN-Revision: 31573
Diffstat (limited to 'target/linux/brcm47xx/patches-3.3/044-bcma-add-PCIe-host-controller.patch')
-rw-r--r--target/linux/brcm47xx/patches-3.3/044-bcma-add-PCIe-host-controller.patch76
1 files changed, 76 insertions, 0 deletions
diff --git a/target/linux/brcm47xx/patches-3.3/044-bcma-add-PCIe-host-controller.patch b/target/linux/brcm47xx/patches-3.3/044-bcma-add-PCIe-host-controller.patch
new file mode 100644
index 0000000000..e5740693f1
--- /dev/null
+++ b/target/linux/brcm47xx/patches-3.3/044-bcma-add-PCIe-host-controller.patch
@@ -0,0 +1,76 @@
+--- a/arch/mips/pci/pci-bcm47xx.c
++++ b/arch/mips/pci/pci-bcm47xx.c
+@@ -25,6 +25,7 @@
+ #include <linux/types.h>
+ #include <linux/pci.h>
+ #include <linux/ssb/ssb.h>
++#include <linux/bcma/bcma.h>
+ #include <bcm47xx.h>
+
+ int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
+@@ -32,15 +33,12 @@ int __init pcibios_map_irq(const struct
+ return 0;
+ }
+
+-int pcibios_plat_dev_init(struct pci_dev *dev)
+-{
+ #ifdef CONFIG_BCM47XX_SSB
++static int bcm47xx_pcibios_plat_dev_init_ssb(struct pci_dev *dev)
++{
+ int res;
+ u8 slot, pin;
+
+- if (bcm47xx_bus_type != BCM47XX_BUS_TYPE_SSB)
+- return 0;
+-
+ res = ssb_pcibios_plat_dev_init(dev);
+ if (res < 0) {
+ printk(KERN_ALERT "PCI: Failed to init device %s\n",
+@@ -60,6 +58,47 @@ int pcibios_plat_dev_init(struct pci_dev
+ }
+
+ dev->irq = res;
++ return 0;
++}
+ #endif
++
++#ifdef CONFIG_BCM47XX_BCMA
++static int bcm47xx_pcibios_plat_dev_init_bcma(struct pci_dev *dev)
++{
++ int res;
++
++ res = bcma_core_pci_plat_dev_init(dev);
++ if (res < 0) {
++ printk(KERN_ALERT "PCI: Failed to init device %s\n",
++ pci_name(dev));
++ return res;
++ }
++
++ res = bcma_core_pci_pcibios_map_irq(dev);
++
++ /* IRQ-0 and IRQ-1 are software interrupts. */
++ if (res < 2) {
++ printk(KERN_ALERT "PCI: Failed to map IRQ of device %s\n",
++ pci_name(dev));
++ return res;
++ }
++
++ dev->irq = res;
+ return 0;
+ }
++#endif
++
++int pcibios_plat_dev_init(struct pci_dev *dev)
++{
++#ifdef CONFIG_BCM47XX_SSB
++ if (bcm47xx_bus_type == BCM47XX_BUS_TYPE_SSB)
++ return bcm47xx_pcibios_plat_dev_init_ssb(dev);
++ else
++#endif
++#ifdef CONFIG_BCM47XX_BCMA
++ if (bcm47xx_bus_type == BCM47XX_BUS_TYPE_BCMA)
++ return bcm47xx_pcibios_plat_dev_init_bcma(dev);
++ else
++#endif
++ return 0;
++}