Skip to content

Commit d98d0b7

Browse files
committed
microvm: add plane property to device tree
Add the plane property to all microvm device tree nodes so firmware can identify which plane each device is assigned to. This is needed by Coconut SVSM to filter devices by plane assignment and discover which devices belong to the firmware plane. Signed-off-by: Luigi Leonardi <leonardi@redhat.com>
1 parent c09b018 commit d98d0b7

1 file changed

Lines changed: 17 additions & 4 deletions

File tree

hw/i386/microvm-dt.c

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,8 @@ static void dt_add_virtio(MicrovmMachineState *mms, VirtIOMMIOProxy *mmio)
7373
return;
7474
}
7575

76+
VirtIODevice *vdev = virtio_bus_get_device(mmio_virtio_bus);
77+
uint8_t plane = object_property_get_int(OBJECT(vdev), "plane", &error_fatal);
7678
hwaddr base = dev->mmio[0].addr;
7779
hwaddr size = 512;
7880
unsigned index = (base - VIRTIO_MMIO_BASE) / size;
@@ -83,13 +85,15 @@ static void dt_add_virtio(MicrovmMachineState *mms, VirtIOMMIOProxy *mmio)
8385
qemu_fdt_setprop_string(ms->fdt, nodename, "compatible", "virtio,mmio");
8486
qemu_fdt_setprop_sized_cells(ms->fdt, nodename, "reg", 2, base, 2, size);
8587
qemu_fdt_setprop(ms->fdt, nodename, "dma-coherent", NULL, 0);
88+
qemu_fdt_setprop_cell(ms->fdt, nodename, "plane", plane);
8689
dt_add_microvm_irq(mms, nodename, irq);
8790
g_free(nodename);
8891
}
8992

90-
static void dt_add_xhci(MicrovmMachineState *mms)
93+
static void dt_add_xhci(MicrovmMachineState *mms, DeviceState *dev)
9194
{
9295
const char compat[] = "generic-xhci";
96+
uint8_t plane = object_property_get_int(OBJECT(dev), "plane", &error_fatal);
9397
MachineState *ms = MACHINE(mms);
9498
uint32_t irq = MICROVM_XHCI_IRQ;
9599
hwaddr base = MICROVM_XHCI_BASE;
@@ -101,12 +105,14 @@ static void dt_add_xhci(MicrovmMachineState *mms)
101105
qemu_fdt_setprop(ms->fdt, nodename, "compatible", compat, sizeof(compat));
102106
qemu_fdt_setprop_sized_cells(ms->fdt, nodename, "reg", 2, base, 2, size);
103107
qemu_fdt_setprop(ms->fdt, nodename, "dma-coherent", NULL, 0);
108+
qemu_fdt_setprop_cell(ms->fdt, nodename, "plane", plane);
104109
dt_add_microvm_irq(mms, nodename, irq);
105110
g_free(nodename);
106111
}
107112

108-
static void dt_add_pcie(MicrovmMachineState *mms)
113+
static void dt_add_pcie(MicrovmMachineState *mms, DeviceState *dev)
109114
{
115+
uint8_t plane = object_property_get_int(OBJECT(dev), "plane", &error_fatal);
110116
MachineState *ms = MACHINE(mms);
111117
hwaddr base = PCIE_MMIO_BASE;
112118
int nr_pcie_buses;
@@ -121,6 +127,7 @@ static void dt_add_pcie(MicrovmMachineState *mms)
121127
qemu_fdt_setprop_cell(ms->fdt, nodename, "#size-cells", 2);
122128
qemu_fdt_setprop_cell(ms->fdt, nodename, "linux,pci-domain", 0);
123129
qemu_fdt_setprop(ms->fdt, nodename, "dma-coherent", NULL, 0);
130+
qemu_fdt_setprop_cell(ms->fdt, nodename, "plane", plane);
124131

125132
qemu_fdt_setprop_sized_cells(ms->fdt, nodename, "reg",
126133
2, PCIE_ECAM_BASE, 2, PCIE_ECAM_SIZE);
@@ -154,6 +161,7 @@ static void dt_add_pcie(MicrovmMachineState *mms)
154161

155162
static void dt_add_ioapic(MicrovmMachineState *mms, SysBusDevice *dev)
156163
{
164+
uint8_t plane = object_property_get_int(OBJECT(dev), "plane", &error_fatal);
157165
MachineState *ms = MACHINE(mms);
158166
hwaddr base = dev->mmio[0].addr;
159167
char *nodename;
@@ -181,6 +189,7 @@ static void dt_add_ioapic(MicrovmMachineState *mms, SysBusDevice *dev)
181189
qemu_fdt_setprop_cell(ms->fdt, nodename, "#address-cells", 0x2);
182190
qemu_fdt_setprop_sized_cells(ms->fdt, nodename, "reg",
183191
2, base, 2, 0x1000);
192+
qemu_fdt_setprop_cell(ms->fdt, nodename, "plane", plane);
184193

185194
ph = qemu_fdt_alloc_phandle(ms->fdt);
186195
qemu_fdt_setprop_cell(ms->fdt, nodename, "phandle", ph);
@@ -195,6 +204,7 @@ static void dt_add_isa_serial(MicrovmMachineState *mms, ISADevice *dev)
195204
const char compat[] = "ns16550";
196205
uint32_t irq = object_property_get_int(OBJECT(dev), "irq", &error_fatal);
197206
hwaddr base = object_property_get_int(OBJECT(dev), "iobase", &error_fatal);
207+
uint8_t plane = object_property_get_int(OBJECT(dev), "plane", &error_fatal);
198208
MachineState *ms = MACHINE(mms);
199209
hwaddr size = 8;
200210
char *nodename;
@@ -203,6 +213,7 @@ static void dt_add_isa_serial(MicrovmMachineState *mms, ISADevice *dev)
203213
qemu_fdt_add_subnode(ms->fdt, nodename);
204214
qemu_fdt_setprop(ms->fdt, nodename, "compatible", compat, sizeof(compat));
205215
qemu_fdt_setprop_sized_cells(ms->fdt, nodename, "reg", 2, base, 2, size);
216+
qemu_fdt_setprop_cell(ms->fdt, nodename, "plane", plane);
206217
dt_add_microvm_irq(mms, nodename, irq);
207218

208219
if (base == 0x3f8 /* com1 */) {
@@ -217,6 +228,7 @@ static void dt_add_isa_rtc(MicrovmMachineState *mms, ISADevice *dev)
217228
const char compat[] = "motorola,mc146818";
218229
uint32_t irq = object_property_get_uint(OBJECT(dev), "irq", &error_fatal);
219230
hwaddr base = object_property_get_uint(OBJECT(dev), "iobase", &error_fatal);
231+
uint8_t plane = object_property_get_int(OBJECT(dev), "plane", &error_fatal);
220232
MachineState *ms = MACHINE(mms);
221233
hwaddr size = 8;
222234
char *nodename;
@@ -225,6 +237,7 @@ static void dt_add_isa_rtc(MicrovmMachineState *mms, ISADevice *dev)
225237
qemu_fdt_add_subnode(ms->fdt, nodename);
226238
qemu_fdt_setprop(ms->fdt, nodename, "compatible", compat, sizeof(compat));
227239
qemu_fdt_setprop_sized_cells(ms->fdt, nodename, "reg", 2, base, 2, size);
240+
qemu_fdt_setprop_cell(ms->fdt, nodename, "plane", plane);
228241
dt_add_microvm_irq(mms, nodename, irq);
229242
g_free(nodename);
230243
}
@@ -291,14 +304,14 @@ static void dt_setup_sys_bus(MicrovmMachineState *mms)
291304
/* xhci */
292305
obj = object_dynamic_cast(OBJECT(dev), TYPE_XHCI_SYSBUS);
293306
if (obj) {
294-
dt_add_xhci(mms);
307+
dt_add_xhci(mms, DEVICE(obj));
295308
continue;
296309
}
297310

298311
/* pcie */
299312
obj = object_dynamic_cast(OBJECT(dev), TYPE_GPEX_HOST);
300313
if (obj) {
301-
dt_add_pcie(mms);
314+
dt_add_pcie(mms, DEVICE(obj));
302315
continue;
303316
}
304317

0 commit comments

Comments
 (0)