@@ -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
155162static 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