|
|
@@ -173,6 +173,31 @@ void __init plat_mem_setup(void)
|
|
|
pm_power_off = bcm47xx_machine_halt;
|
|
|
}
|
|
|
|
|
|
+#ifdef CONFIG_BCM47XX_BCMA
|
|
|
+static struct device * __init bcm47xx_setup_device(void)
|
|
|
+{
|
|
|
+ struct device *dev;
|
|
|
+ int err;
|
|
|
+
|
|
|
+ dev = kzalloc(sizeof(*dev), GFP_KERNEL);
|
|
|
+ if (!dev)
|
|
|
+ return NULL;
|
|
|
+
|
|
|
+ err = dev_set_name(dev, "bcm47xx_soc");
|
|
|
+ if (err) {
|
|
|
+ pr_err("Failed to set SoC device name: %d\n", err);
|
|
|
+ kfree(dev);
|
|
|
+ return NULL;
|
|
|
+ }
|
|
|
+
|
|
|
+ err = dma_coerce_mask_and_coherent(dev, DMA_BIT_MASK(32));
|
|
|
+ if (err)
|
|
|
+ pr_err("Failed to set SoC DMA mask: %d\n", err);
|
|
|
+
|
|
|
+ return dev;
|
|
|
+}
|
|
|
+#endif
|
|
|
+
|
|
|
/*
|
|
|
* This finishes bus initialization doing things that were not possible without
|
|
|
* kmalloc. Make sure to call it late enough (after mm_init).
|
|
|
@@ -183,6 +208,10 @@ void __init bcm47xx_bus_setup(void)
|
|
|
if (bcm47xx_bus_type == BCM47XX_BUS_TYPE_BCMA) {
|
|
|
int err;
|
|
|
|
|
|
+ bcm47xx_bus.bcma.dev = bcm47xx_setup_device();
|
|
|
+ if (!bcm47xx_bus.bcma.dev)
|
|
|
+ panic("Failed to setup SoC device\n");
|
|
|
+
|
|
|
err = bcma_host_soc_init(&bcm47xx_bus.bcma);
|
|
|
if (err)
|
|
|
panic("Failed to initialize BCMA bus (err %d)", err);
|
|
|
@@ -235,6 +264,8 @@ static int __init bcm47xx_register_bus_complete(void)
|
|
|
#endif
|
|
|
#ifdef CONFIG_BCM47XX_BCMA
|
|
|
case BCM47XX_BUS_TYPE_BCMA:
|
|
|
+ if (device_register(bcm47xx_bus.bcma.dev))
|
|
|
+ pr_err("Failed to register SoC device\n");
|
|
|
bcma_bus_register(&bcm47xx_bus.bcma.bus);
|
|
|
break;
|
|
|
#endif
|