@@ -281,6 +281,36 @@ static void powernv_populate_chip(PnvChip *chip, void *fdt)
g_free(typename);
}
+typedef struct ForeachPopulateArgs {
+ void *fdt;
+ int offset;
+} ForeachPopulateArgs;
+
+static int powernv_populate_isa_device(DeviceState *dev, void *opaque)
+{
+ return 0;
+}
+
+static void powernv_populate_isa(ISABus *bus, void *fdt)
+{
+ int lpc_offset;
+ ForeachPopulateArgs args;
+
+ lpc_offset = fdt_node_offset_by_compatible(fdt, -1, "ibm,lpc");
+ if (lpc_offset < 0) {
+ error_report("Could not find the lpc node !?");
+ return;
+ }
+
+ args.fdt = fdt;
+ args.offset = lpc_offset;
+
+ /* ISA devices are not necessarily parented to the ISA bus so we
+ * can not use object_child_foreach() */
+ qbus_walk_children(BUS(bus), powernv_populate_isa_device,
+ NULL, NULL, NULL, &args);
+}
+
static void *powernv_create_fdt(MachineState *machine)
{
const char plat_compat[] = "qemu,powernv\0ibm,powernv";
@@ -328,6 +358,8 @@ static void *powernv_create_fdt(MachineState *machine)
for (i = 0; i < pnv->num_chips; i++) {
powernv_populate_chip(pnv->chips[i], fdt);
}
+
+ powernv_populate_isa(pnv->isa_bus, fdt);
return fdt;
}