Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
[firefly-linux-kernel-4.4.55.git] / drivers / bcma / main.c
index 4a92f647b58bdef4fa28f28b772d960036469c78..f72f52b4b1dde78311ff4872f57eaf8d838ad456 100644 (file)
@@ -81,8 +81,8 @@ struct bcma_device *bcma_find_core(struct bcma_bus *bus, u16 coreid)
 }
 EXPORT_SYMBOL_GPL(bcma_find_core);
 
-static struct bcma_device *bcma_find_core_unit(struct bcma_bus *bus, u16 coreid,
-                                              u8 unit)
+struct bcma_device *bcma_find_core_unit(struct bcma_bus *bus, u16 coreid,
+                                       u8 unit)
 {
        struct bcma_device *core;
 
@@ -120,6 +120,11 @@ static int bcma_register_cores(struct bcma_bus *bus)
                        continue;
                }
 
+               /* Only first GMAC core on BCM4706 is connected and working */
+               if (core->id.id == BCMA_CORE_4706_MAC_GBIT &&
+                   core->core_unit > 0)
+                       continue;
+
                core->dev.release = bcma_release_core_dev;
                core->dev.bus = &bcma_bus_type;
                dev_set_name(&core->dev, "bcma%d:%d", bus->num, dev_id);
@@ -149,6 +154,14 @@ static int bcma_register_cores(struct bcma_bus *bus)
                dev_id++;
        }
 
+#ifdef CONFIG_BCMA_DRIVER_MIPS
+       if (bus->drv_cc.pflash.present) {
+               err = platform_device_register(&bcma_pflash_dev);
+               if (err)
+                       bcma_err(bus, "Error registering parallel flash\n");
+       }
+#endif
+
 #ifdef CONFIG_BCMA_SFLASH
        if (bus->drv_cc.sflash.present) {
                err = platform_device_register(&bcma_sflash_dev);
@@ -268,6 +281,13 @@ int bcma_bus_register(struct bcma_bus *bus)
 void bcma_bus_unregister(struct bcma_bus *bus)
 {
        struct bcma_device *cores[3];
+       int err;
+
+       err = bcma_gpio_unregister(&bus->drv_cc);
+       if (err == -EBUSY)
+               bcma_err(bus, "Some GPIOs are still in use.\n");
+       else if (err)
+               bcma_err(bus, "Can not unregister GPIO driver: %i\n", err);
 
        cores[0] = bcma_find_core(bus, BCMA_CORE_MIPS_74K);
        cores[1] = bcma_find_core(bus, BCMA_CORE_PCIE);