Xen: ARM: Add support for mapping AMBA device mmio
authorShannon Zhao <shannon.zhao@linaro.org>
Thu, 7 Apr 2016 12:03:24 +0000 (20:03 +0800)
committerDavid Vrabel <david.vrabel@citrix.com>
Wed, 6 Jul 2016 09:34:43 +0000 (10:34 +0100)
Add a bus_notifier for AMBA bus device in order to map the device
mmio regions when DOM0 booting with ACPI.

Signed-off-by: Shannon Zhao <shannon.zhao@linaro.org>
Reviewed-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Reviewed-by: Julien Grall <julien.grall@arm.com>
Tested-by: Julien Grall <julien.grall@arm.com>
drivers/xen/arm-device.c

index b918e8ed50849e08cdbe56be9f72266774e06e14..778acf80aacbf81042a3debc4ca1e90d58037f6c 100644 (file)
@@ -151,3 +151,46 @@ static int __init register_xen_platform_notifier(void)
 }
 
 arch_initcall(register_xen_platform_notifier);
+
+#ifdef CONFIG_ARM_AMBA
+#include <linux/amba/bus.h>
+
+static int xen_amba_notifier(struct notifier_block *nb,
+                            unsigned long action, void *data)
+{
+       struct amba_device *adev = to_amba_device(data);
+       int r = 0;
+
+       switch (action) {
+       case BUS_NOTIFY_ADD_DEVICE:
+               r = xen_map_device_mmio(&adev->res, 1);
+               break;
+       case BUS_NOTIFY_DEL_DEVICE:
+               r = xen_unmap_device_mmio(&adev->res, 1);
+               break;
+       default:
+               return NOTIFY_DONE;
+       }
+       if (r)
+               dev_err(&adev->dev, "AMBA: Failed to %s device %s MMIO!\n",
+                       action == BUS_NOTIFY_ADD_DEVICE ? "map" :
+                       (action == BUS_NOTIFY_DEL_DEVICE ? "unmap" : "?"),
+                       adev->dev.init_name);
+
+       return NOTIFY_OK;
+}
+
+static struct notifier_block amba_device_nb = {
+       .notifier_call = xen_amba_notifier,
+};
+
+static int __init register_xen_amba_notifier(void)
+{
+       if (!xen_initial_domain() || acpi_disabled)
+               return 0;
+
+       return bus_register_notifier(&amba_bustype, &amba_device_nb);
+}
+
+arch_initcall(register_xen_amba_notifier);
+#endif
This page took 0.025143 seconds and 5 git commands to generate.