Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Xen: ARM: Add support for mapping AMBA device mmio

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>

authored by

Shannon Zhao and committed by
David Vrabel
5789afeb 4ba04bec

+43
+43
drivers/xen/arm-device.c
··· 151 151 } 152 152 153 153 arch_initcall(register_xen_platform_notifier); 154 + 155 + #ifdef CONFIG_ARM_AMBA 156 + #include <linux/amba/bus.h> 157 + 158 + static int xen_amba_notifier(struct notifier_block *nb, 159 + unsigned long action, void *data) 160 + { 161 + struct amba_device *adev = to_amba_device(data); 162 + int r = 0; 163 + 164 + switch (action) { 165 + case BUS_NOTIFY_ADD_DEVICE: 166 + r = xen_map_device_mmio(&adev->res, 1); 167 + break; 168 + case BUS_NOTIFY_DEL_DEVICE: 169 + r = xen_unmap_device_mmio(&adev->res, 1); 170 + break; 171 + default: 172 + return NOTIFY_DONE; 173 + } 174 + if (r) 175 + dev_err(&adev->dev, "AMBA: Failed to %s device %s MMIO!\n", 176 + action == BUS_NOTIFY_ADD_DEVICE ? "map" : 177 + (action == BUS_NOTIFY_DEL_DEVICE ? "unmap" : "?"), 178 + adev->dev.init_name); 179 + 180 + return NOTIFY_OK; 181 + } 182 + 183 + static struct notifier_block amba_device_nb = { 184 + .notifier_call = xen_amba_notifier, 185 + }; 186 + 187 + static int __init register_xen_amba_notifier(void) 188 + { 189 + if (!xen_initial_domain() || acpi_disabled) 190 + return 0; 191 + 192 + return bus_register_notifier(&amba_bustype, &amba_device_nb); 193 + } 194 + 195 + arch_initcall(register_xen_amba_notifier); 196 + #endif