Signed-off-by: Grant Likely <grant.lik...@secretlab.ca> --- hw/pl011.c | 29 +++++++++++++++++++++++++---- 1 files changed, 25 insertions(+), 4 deletions(-)
diff --git a/hw/pl011.c b/hw/pl011.c index 81de91e..efc06d2 100644 --- a/hw/pl011.c +++ b/hw/pl011.c @@ -286,6 +286,27 @@ static int pl011_load(QEMUFile *f, void *opaque, int version_id) return 0; } +#ifdef CONFIG_FDT +#include <libfdt.h> +static int pl011_fdt_populate(SysBusDevice *dev, void *fdt, int offset) +{ + pl011_state *s = FROM_SYSBUS(pl011_state, dev); + int rc; + + rc = fdt_setprop_string(fdt, offset, "compatible", "arm,amba-device"); + if (rc < 0) + return rc; + + rc = fdt_setprop(fdt, offset, "arm,amba-deviceid", s->id, sizeof(s->id)); + if (rc < 0) + return rc; + + return 0; +} +#else +#define pl011_fdt_populate NULL +#endif + static int pl011_init(SysBusDevice *dev, const unsigned char *id) { int iomemtype; @@ -322,10 +343,10 @@ static int pl011_init_luminary(SysBusDevice *dev) static void pl011_register_devices(void) { - sysbus_register_dev("pl011", sizeof(pl011_state), - pl011_init_arm); - sysbus_register_dev("pl011_luminary", sizeof(pl011_state), - pl011_init_luminary); + sysbus_register_dev_fdt("pl011", sizeof(pl011_state), + pl011_init_arm, pl011_fdt_populate); + sysbus_register_dev_fdt("pl011_luminary", sizeof(pl011_state), + pl011_init_luminary, pl011_fdt_populate); } device_init(pl011_register_devices)