Modify add_calxeda_midway_xgmac_fdt_node to make it more generic. Add multiple compatible strings support. Signed-off-by: Baptiste Reynal <b.reynal@xxxxxxxxxxxxxxxxxxxxxx> --- hw/arm/sysbus-fdt.c | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/hw/arm/sysbus-fdt.c b/hw/arm/sysbus-fdt.c index 15bb50c..125ba37 100644 --- a/hw/arm/sysbus-fdt.c +++ b/hw/arm/sysbus-fdt.c @@ -58,12 +58,12 @@ typedef struct NodeCreationPair { /* Device Specific Code */ /** - * add_calxeda_midway_xgmac_fdt_node + * add_device_fdt_node * * Generates a very simple node with following properties: * compatible string, regs, interrupts */ -static int add_calxeda_midway_xgmac_fdt_node(SysBusDevice *sbdev, void *opaque) +static int add_generic_fdt_node(SysBusDevice *sbdev, void *opaque) { PlatformBusFdtData *data = opaque; PlatformBusDevice *pbus = data->pbus; @@ -80,6 +80,18 @@ static int add_calxeda_midway_xgmac_fdt_node(SysBusDevice *sbdev, void *opaque) VFIODevice *vbasedev = &vdev->vbasedev; Object *obj = OBJECT(sbdev); + /* + * Process compatible string to deal with multiple strings + * (; is replaced by \0) + */ + char *compat = g_strdup(vdev->compat); + compat_str_len = strlen(compat) + 1; + + char *semicolon = compat; + while ((semicolon = strchr(semicolon, ';')) != NULL) { + *semicolon = '\0'; + } + mmio_base = object_property_get_int(obj, "mmio[0]", NULL); nodename = g_strdup_printf("%s/%s@%" PRIx64, parent_node, @@ -88,9 +100,8 @@ static int add_calxeda_midway_xgmac_fdt_node(SysBusDevice *sbdev, void *opaque) qemu_fdt_add_subnode(fdt, nodename); - compat_str_len = strlen(vdev->compat) + 1; qemu_fdt_setprop(fdt, nodename, "compatible", - vdev->compat, compat_str_len); + compat, compat_str_len); reg_attr = g_new(uint64_t, vbasedev->num_regions*4); @@ -140,7 +151,7 @@ fail: /* list of supported dynamic sysbus devices */ static const NodeCreationPair add_fdt_node_functions[] = { -{TYPE_VFIO_CALXEDA_XGMAC, add_calxeda_midway_xgmac_fdt_node}, +{TYPE_VFIO_CALXEDA_XGMAC, add_generic_fdt_node}, {"", NULL}, /*last element*/ }; -- 2.1.3 _______________________________________________ kvmarm mailing list kvmarm@xxxxxxxxxxxxxxxxxxxxx https://lists.cs.columbia.edu/mailman/listinfo/kvmarm