bcma: do not initialize deactivated PCIe cores
authorHauke Mehrtens <hauke@hauke-m.de>
Thu, 4 Oct 2012 15:45:54 +0000 (15:45 +0000)
committerHauke Mehrtens <hauke@hauke-m.de>
Thu, 4 Oct 2012 15:45:54 +0000 (15:45 +0000)
Before it was tried to initialize the deactivated PCIe core in client
mode, but this causes the SoC to hang. Just do not initialize it at all
and ignore the core it is not working and nothing is connected to it
when the specific bit is set in the boardflags.

SVN-Revision: 33620

target/linux/brcm47xx/patches-3.3/204-bcma-do-not-initialize-deactivated-PCIe-cores.patch [new file with mode: 0644]
target/linux/brcm47xx/patches-3.3/240-bcma-pcie-config-access.patch

diff --git a/target/linux/brcm47xx/patches-3.3/204-bcma-do-not-initialize-deactivated-PCIe-cores.patch b/target/linux/brcm47xx/patches-3.3/204-bcma-do-not-initialize-deactivated-PCIe-cores.patch
new file mode 100644 (file)
index 0000000..302ac8d
--- /dev/null
@@ -0,0 +1,26 @@
+--- a/drivers/bcma/driver_pci_host.c
++++ b/drivers/bcma/driver_pci_host.c
+@@ -35,11 +35,6 @@ bool __devinit bcma_core_pci_is_in_hostm
+           chipid_top != 0x5300)
+               return false;
+-      if (bus->sprom.boardflags_lo & BCMA_CORE_PCI_BFL_NOPCI) {
+-              bcma_info(bus, "This PCI core is disabled and not working\n");
+-              return false;
+-      }
+-
+       bcma_core_enable(pc->core, 0);
+       return !mips_busprobe32(tmp, pc->core->io_addr);
+@@ -396,6 +391,11 @@ void __devinit bcma_core_pci_hostmode_in
+       bcma_info(bus, "PCIEcore in host mode found\n");
++      if (bus->sprom.boardflags_lo & BCMA_CORE_PCI_BFL_NOPCI) {
++              bcma_info(bus, "This PCIE core is disabled and not working\n");
++              return;
++      }
++
+       pc_host = kzalloc(sizeof(*pc_host), GFP_KERNEL);
+       if (!pc_host)  {
+               bcma_err(bus, "can not allocate memory");
index 874c249b0ff03de18b554e329c9f4a849aac0df4..91b8a4191c209b0694d83743b2dd254fdd9ca2ab 100644 (file)
@@ -1,6 +1,6 @@
 --- a/drivers/bcma/driver_pci_host.c
 +++ b/drivers/bcma/driver_pci_host.c
-@@ -99,19 +99,19 @@ static int bcma_extpci_read_config(struc
+@@ -94,19 +94,19 @@ static int bcma_extpci_read_config(struc
        if (dev == 0) {
                /* we support only two functions on device 0 */
                if (func > 1)
@@ -23,7 +23,7 @@
                        val = pcicore_read32(pc, addr);
                }
        } else {
-@@ -127,8 +127,6 @@ static int bcma_extpci_read_config(struc
+@@ -122,8 +122,6 @@ static int bcma_extpci_read_config(struc
                        val = 0xffffffff;
                        goto unmap;
                }
@@ -32,7 +32,7 @@
        }
        val >>= (8 * (off & 3));
  
-@@ -156,7 +154,7 @@ static int bcma_extpci_write_config(stru
+@@ -151,7 +149,7 @@ static int bcma_extpci_write_config(stru
                                   const void *buf, int len)
  {
        int err = -EINVAL;
@@ -41,7 +41,7 @@
        void __iomem *mmio = 0;
        u16 chipid = pc->core->bus->chipinfo.id;
  
-@@ -164,16 +162,22 @@ static int bcma_extpci_write_config(stru
+@@ -159,16 +157,22 @@ static int bcma_extpci_write_config(stru
        if (unlikely(len != 1 && len != 2 && len != 4))
                goto out;
        if (dev == 0) {
@@ -70,7 +70,7 @@
                }
        } else {
                addr = bcma_get_cfgspace_addr(pc, dev, func, off);
-@@ -192,12 +196,10 @@ static int bcma_extpci_write_config(stru
+@@ -187,12 +191,10 @@ static int bcma_extpci_write_config(stru
  
        switch (len) {
        case 1:
@@ -83,7 +83,7 @@
                val &= ~(0xFFFF << (8 * (off & 3)));
                val |= *((const u16 *)buf) << (8 * (off & 3));
                break;
-@@ -205,13 +207,14 @@ static int bcma_extpci_write_config(stru
+@@ -200,13 +202,14 @@ static int bcma_extpci_write_config(stru
                val = *((const u32 *)buf);
                break;
        }