These changes are the raw update to linux-4.4.6-rt14. Kernel sources
[kvmfornfv.git] / kernel / drivers / ssb / main.c
index a48a743..5d1e9a0 100644 (file)
@@ -596,166 +596,6 @@ error:
        return err;
 }
 
-static u8 ssb_ssb_read8(struct ssb_device *dev, u16 offset)
-{
-       struct ssb_bus *bus = dev->bus;
-
-       offset += dev->core_index * SSB_CORE_SIZE;
-       return readb(bus->mmio + offset);
-}
-
-static u16 ssb_ssb_read16(struct ssb_device *dev, u16 offset)
-{
-       struct ssb_bus *bus = dev->bus;
-
-       offset += dev->core_index * SSB_CORE_SIZE;
-       return readw(bus->mmio + offset);
-}
-
-static u32 ssb_ssb_read32(struct ssb_device *dev, u16 offset)
-{
-       struct ssb_bus *bus = dev->bus;
-
-       offset += dev->core_index * SSB_CORE_SIZE;
-       return readl(bus->mmio + offset);
-}
-
-#ifdef CONFIG_SSB_BLOCKIO
-static void ssb_ssb_block_read(struct ssb_device *dev, void *buffer,
-                              size_t count, u16 offset, u8 reg_width)
-{
-       struct ssb_bus *bus = dev->bus;
-       void __iomem *addr;
-
-       offset += dev->core_index * SSB_CORE_SIZE;
-       addr = bus->mmio + offset;
-
-       switch (reg_width) {
-       case sizeof(u8): {
-               u8 *buf = buffer;
-
-               while (count) {
-                       *buf = __raw_readb(addr);
-                       buf++;
-                       count--;
-               }
-               break;
-       }
-       case sizeof(u16): {
-               __le16 *buf = buffer;
-
-               SSB_WARN_ON(count & 1);
-               while (count) {
-                       *buf = (__force __le16)__raw_readw(addr);
-                       buf++;
-                       count -= 2;
-               }
-               break;
-       }
-       case sizeof(u32): {
-               __le32 *buf = buffer;
-
-               SSB_WARN_ON(count & 3);
-               while (count) {
-                       *buf = (__force __le32)__raw_readl(addr);
-                       buf++;
-                       count -= 4;
-               }
-               break;
-       }
-       default:
-               SSB_WARN_ON(1);
-       }
-}
-#endif /* CONFIG_SSB_BLOCKIO */
-
-static void ssb_ssb_write8(struct ssb_device *dev, u16 offset, u8 value)
-{
-       struct ssb_bus *bus = dev->bus;
-
-       offset += dev->core_index * SSB_CORE_SIZE;
-       writeb(value, bus->mmio + offset);
-}
-
-static void ssb_ssb_write16(struct ssb_device *dev, u16 offset, u16 value)
-{
-       struct ssb_bus *bus = dev->bus;
-
-       offset += dev->core_index * SSB_CORE_SIZE;
-       writew(value, bus->mmio + offset);
-}
-
-static void ssb_ssb_write32(struct ssb_device *dev, u16 offset, u32 value)
-{
-       struct ssb_bus *bus = dev->bus;
-
-       offset += dev->core_index * SSB_CORE_SIZE;
-       writel(value, bus->mmio + offset);
-}
-
-#ifdef CONFIG_SSB_BLOCKIO
-static void ssb_ssb_block_write(struct ssb_device *dev, const void *buffer,
-                               size_t count, u16 offset, u8 reg_width)
-{
-       struct ssb_bus *bus = dev->bus;
-       void __iomem *addr;
-
-       offset += dev->core_index * SSB_CORE_SIZE;
-       addr = bus->mmio + offset;
-
-       switch (reg_width) {
-       case sizeof(u8): {
-               const u8 *buf = buffer;
-
-               while (count) {
-                       __raw_writeb(*buf, addr);
-                       buf++;
-                       count--;
-               }
-               break;
-       }
-       case sizeof(u16): {
-               const __le16 *buf = buffer;
-
-               SSB_WARN_ON(count & 1);
-               while (count) {
-                       __raw_writew((__force u16)(*buf), addr);
-                       buf++;
-                       count -= 2;
-               }
-               break;
-       }
-       case sizeof(u32): {
-               const __le32 *buf = buffer;
-
-               SSB_WARN_ON(count & 3);
-               while (count) {
-                       __raw_writel((__force u32)(*buf), addr);
-                       buf++;
-                       count -= 4;
-               }
-               break;
-       }
-       default:
-               SSB_WARN_ON(1);
-       }
-}
-#endif /* CONFIG_SSB_BLOCKIO */
-
-/* Ops for the plain SSB bus without a host-device (no PCI or PCMCIA). */
-static const struct ssb_bus_ops ssb_ssb_ops = {
-       .read8          = ssb_ssb_read8,
-       .read16         = ssb_ssb_read16,
-       .read32         = ssb_ssb_read32,
-       .write8         = ssb_ssb_write8,
-       .write16        = ssb_ssb_write16,
-       .write32        = ssb_ssb_write32,
-#ifdef CONFIG_SSB_BLOCKIO
-       .block_read     = ssb_ssb_block_read,
-       .block_write    = ssb_ssb_block_write,
-#endif
-};
-
 static int ssb_fetch_invariants(struct ssb_bus *bus,
                                ssb_invariants_func_t get_invariants)
 {
@@ -876,7 +716,6 @@ int ssb_bus_pcibus_register(struct ssb_bus *bus, struct pci_dev *host_pci)
 
        return err;
 }
-EXPORT_SYMBOL(ssb_bus_pcibus_register);
 #endif /* CONFIG_SSB_PCIHOST */
 
 #ifdef CONFIG_SSB_PCMCIAHOST
@@ -898,7 +737,6 @@ int ssb_bus_pcmciabus_register(struct ssb_bus *bus,
 
        return err;
 }
-EXPORT_SYMBOL(ssb_bus_pcmciabus_register);
 #endif /* CONFIG_SSB_PCMCIAHOST */
 
 #ifdef CONFIG_SSB_SDIOHOST
@@ -923,13 +761,14 @@ int ssb_bus_sdiobus_register(struct ssb_bus *bus, struct sdio_func *func,
 EXPORT_SYMBOL(ssb_bus_sdiobus_register);
 #endif /* CONFIG_SSB_PCMCIAHOST */
 
+#ifdef CONFIG_SSB_HOST_SOC
 int ssb_bus_ssbbus_register(struct ssb_bus *bus, unsigned long baseaddr,
                            ssb_invariants_func_t get_invariants)
 {
        int err;
 
        bus->bustype = SSB_BUSTYPE_SSB;
-       bus->ops = &ssb_ssb_ops;
+       bus->ops = &ssb_host_soc_ops;
 
        err = ssb_bus_register(bus, get_invariants, baseaddr);
        if (!err) {
@@ -939,6 +778,7 @@ int ssb_bus_ssbbus_register(struct ssb_bus *bus, unsigned long baseaddr,
 
        return err;
 }
+#endif
 
 int __ssb_driver_register(struct ssb_driver *drv, struct module *owner)
 {
@@ -1465,6 +1305,12 @@ static int __init ssb_modinit(void)
                /* don't fail SSB init because of this */
                err = 0;
        }
+       err = ssb_host_pcmcia_init();
+       if (err) {
+               ssb_err("PCMCIA host initialization failed\n");
+               /* don't fail SSB init because of this */
+               err = 0;
+       }
        err = ssb_gige_init();
        if (err) {
                ssb_err("SSB Broadcom Gigabit Ethernet driver initialization failed\n");
@@ -1482,6 +1328,7 @@ fs_initcall(ssb_modinit);
 static void __exit ssb_modexit(void)
 {
        ssb_gige_exit();
+       ssb_host_pcmcia_exit();
        b43_pci_ssb_bridge_exit();
        bus_unregister(&ssb_bustype);
 }