Activity log for bug #1826827

Date Who What changed Old value New value Message
2019-04-29 05:25:33 Amol Surati bug added bug
2019-04-29 05:27:16 Amol Surati attachment added the powernv dtb https://bugs.launchpad.net/qemu/+bug/1826827/+attachment/5259834/+files/dtb
2019-04-29 05:30:43 Amol Surati description pnv_dt_serial has a line which is supposed to set the interrupt-parent of the "isa-serial@i3f8" node to the phandle of "lpc@0". To that end, it calls fdt_get_phandle as shown below: _FDT((fdt_setprop_cell(fdt, node, "interrupt-parent", fdt_get_phandle(fdt, lpc_off)))); The function fdt_get_phandle fails to find the property "phandle" (or "linux,phandle") for the lpc node. Consequently, pnv_dt_serial sets the interrupt-parent to 0. Now boot the qemu-system-ppc64 powernv machine, and extract the fdt by using the qemu monitor's pmemsave command, taking help of the OPAL firmware's messages to locate the fdt in the physical ram. qemu-system-ppc64 -m 1g -machine powernv,num-chips=1 \ -cpu power9 -smp 2,cores=2,threads=1 -accel tcg,thread=multi \ -kernel ./vmlinux \ -append 'disable_radix' \ -serial mon:stdio -nographic -nodefaults The kernel vmlinux contains nothing but a single instruction which loops infintely, so that we can gather OPAL's messages, especially the one below: [ 0.168845963,5] INIT: Starting kernel at 0x20000000, fdt at 0x304b0b70 14404 bytes Once the fdt is dumped to a file, run the following: 'dtc -O dtb -I dts -o out.dts dtb' After a few warnings, the dtc application crashes because an assertion was fired. 1.dts: Warning (unit_address_vs_reg): /lpcm-opb@6030000000000/lpc@0: node has a unit name, but no reg property 1.dts: Warning (simple_bus_reg): /lpcm-opb@6030000000000/lpc@0: missing or empty reg/ranges property 1.dts: Warning (avoid_unnecessary_addr_size): /ibm,opal: unnecessary #address-cells/#size-cells without "ranges" or child "reg" property 1.dts: Warning (unique_unit_address): /interrupt-controller@0: duplicate unit-address (also used in node /memory@0) 1.dts: Warning (chosen_node_stdout_path): /chosen:linux,stdout-path: Use 'stdout-path' instead dtc: livetree.c:575: get_node_by_phandle: Assertion `generate_fixups' failed. Aborted (core dumped) The assertion is fired because get_node_by_phandle receives a phandle value of 0, which is unexpected, unless fixups are needed (They are not, when running the dtc command). Back inside pnv_dt_serial, if the line that sets "interrupt-parent" for the serial device node is commented out, the dtc crash is prevented. Looking at hw/ppc/e500.c, it takes care of allocating necessary phandle values in the nodes, so a similar method can be adopted for powernv. The dtb is attached. Qemu version: QEMU emulator version 4.0.50 (v4.0.0-142-ge0fb2c3d89) Copyright (c) 2003-2019 Fabrice Bellard and the QEMU Project developers dtc version: Version: DTC 1.5.0-g5c3513f6 ------------------------------------------------------------------------- pnv_dt_serial has a line which is supposed to set the interrupt-parent of the "isa-serial@i3f8" node to the phandle of "lpc@0". To that end, it calls fdt_get_phandle as shown below: _FDT((fdt_setprop_cell(fdt, node, "interrupt-parent", fdt_get_phandle(fdt, lpc_off)))); The function fdt_get_phandle fails to find the property "phandle" (or "linux,phandle") for the lpc node. Consequently, pnv_dt_serial sets the interrupt-parent to 0. Now boot the qemu-system-ppc64 powernv machine, and extract the fdt by using the qemu monitor's pmemsave command, taking help of the OPAL firmware's messages to locate the fdt in the physical ram. qemu-system-ppc64 -m 1g -machine powernv,num-chips=1 \ -cpu power9 -smp 2,cores=2,threads=1 -accel tcg,thread=multi \ -kernel ./vmlinux \ -append 'disable_radix' \ -serial mon:stdio -nographic -nodefaults The kernel vmlinux contains nothing but a single instruction which loops infintely, so that we can gather OPAL's messages, especially the one below: [ 0.168845963,5] INIT: Starting kernel at 0x20000000, fdt at 0x304b0b70 14404 bytes Once the fdt is dumped to a file, run the following: 'dtc -O dtb -I dts -o out.dts dtb' After a few warnings, the dtc application crashes because an assertion was fired. 1.dts: Warning (unit_address_vs_reg): /lpcm-opb@6030000000000/lpc@0: node has a unit name, but no reg property 1.dts: Warning (simple_bus_reg): /lpcm-opb@6030000000000/lpc@0: missing or empty reg/ranges property 1.dts: Warning (avoid_unnecessary_addr_size): /ibm,opal: unnecessary #address-cells/#size-cells without "ranges" or child "reg" property 1.dts: Warning (unique_unit_address): /interrupt-controller@0: duplicate unit-address (also used in node /memory@0) 1.dts: Warning (chosen_node_stdout_path): /chosen:linux,stdout-path: Use 'stdout-path' instead dtc: livetree.c:575: get_node_by_phandle: Assertion `generate_fixups' failed. Aborted (core dumped) The assertion is fired because get_node_by_phandle receives a phandle value of 0, which is unexpected, unless fixups are needed (They are not, when running the dtc command). Back inside pnv_dt_serial, if the line that sets "interrupt-parent" for the serial device node is commented out, the dtc crash is prevented. Looking at hw/ppc/e500.c, it takes care of allocating necessary phandle values in the nodes, so a similar method can be adopted for powernv. The dtb is attached.
2019-04-29 05:36:23 Amol Surati description Qemu version: QEMU emulator version 4.0.50 (v4.0.0-142-ge0fb2c3d89) Copyright (c) 2003-2019 Fabrice Bellard and the QEMU Project developers dtc version: Version: DTC 1.5.0-g5c3513f6 ------------------------------------------------------------------------- pnv_dt_serial has a line which is supposed to set the interrupt-parent of the "isa-serial@i3f8" node to the phandle of "lpc@0". To that end, it calls fdt_get_phandle as shown below: _FDT((fdt_setprop_cell(fdt, node, "interrupt-parent", fdt_get_phandle(fdt, lpc_off)))); The function fdt_get_phandle fails to find the property "phandle" (or "linux,phandle") for the lpc node. Consequently, pnv_dt_serial sets the interrupt-parent to 0. Now boot the qemu-system-ppc64 powernv machine, and extract the fdt by using the qemu monitor's pmemsave command, taking help of the OPAL firmware's messages to locate the fdt in the physical ram. qemu-system-ppc64 -m 1g -machine powernv,num-chips=1 \ -cpu power9 -smp 2,cores=2,threads=1 -accel tcg,thread=multi \ -kernel ./vmlinux \ -append 'disable_radix' \ -serial mon:stdio -nographic -nodefaults The kernel vmlinux contains nothing but a single instruction which loops infintely, so that we can gather OPAL's messages, especially the one below: [ 0.168845963,5] INIT: Starting kernel at 0x20000000, fdt at 0x304b0b70 14404 bytes Once the fdt is dumped to a file, run the following: 'dtc -O dtb -I dts -o out.dts dtb' After a few warnings, the dtc application crashes because an assertion was fired. 1.dts: Warning (unit_address_vs_reg): /lpcm-opb@6030000000000/lpc@0: node has a unit name, but no reg property 1.dts: Warning (simple_bus_reg): /lpcm-opb@6030000000000/lpc@0: missing or empty reg/ranges property 1.dts: Warning (avoid_unnecessary_addr_size): /ibm,opal: unnecessary #address-cells/#size-cells without "ranges" or child "reg" property 1.dts: Warning (unique_unit_address): /interrupt-controller@0: duplicate unit-address (also used in node /memory@0) 1.dts: Warning (chosen_node_stdout_path): /chosen:linux,stdout-path: Use 'stdout-path' instead dtc: livetree.c:575: get_node_by_phandle: Assertion `generate_fixups' failed. Aborted (core dumped) The assertion is fired because get_node_by_phandle receives a phandle value of 0, which is unexpected, unless fixups are needed (They are not, when running the dtc command). Back inside pnv_dt_serial, if the line that sets "interrupt-parent" for the serial device node is commented out, the dtc crash is prevented. Looking at hw/ppc/e500.c, it takes care of allocating necessary phandle values in the nodes, so a similar method can be adopted for powernv. The dtb is attached. Qemu version: QEMU emulator version 4.0.50 (v4.0.0-142-ge0fb2c3d89) Copyright (c) 2003-2019 Fabrice Bellard and the QEMU Project developers dtc version: Version: DTC 1.5.0-g5c3513f6 ------------------------------------------------------------------------- pnv_dt_serial has a line which is supposed to set the interrupt-parent of the "isa-serial@i3f8" node to the phandle of "lpc@0". To that end, it calls fdt_get_phandle as shown below: _FDT((fdt_setprop_cell(fdt, node, "interrupt-parent", fdt_get_phandle(fdt, lpc_off)))); The function fdt_get_phandle fails to find the property "phandle" (or "linux,phandle") for the lpc node. Consequently, pnv_dt_serial sets the interrupt-parent to 0. Now boot the qemu-system-ppc64 powernv machine, and extract the fdt by using the qemu monitor's pmemsave command, taking help of the OPAL firmware's messages to locate the fdt in the physical ram. qemu-system-ppc64 -m 1g -machine powernv,num-chips=1 \ -cpu power9 -smp 2,cores=2,threads=1 -accel tcg,thread=multi \ -kernel ./vmlinux \ -append 'disable_radix' \ -serial mon:stdio -nographic -nodefaults The kernel vmlinux contains nothing but a single instruction which loops infintely, so that we can gather OPAL's messages, especially the one below: [ 0.168845963,5] INIT: Starting kernel at 0x20000000, fdt at 0x304b0b70 14404 bytes Once the fdt is dumped to a file, run the following: 'dtc -O dtb -I dts -o out.dts dtb' After a few warnings, the dtc application crashes because an assertion was fired. out.dts: Warning (unit_address_vs_reg): /lpcm-opb@6030000000000/lpc@0: node has a unit name, but no reg property out.dts: Warning (simple_bus_reg): /lpcm-opb@6030000000000/lpc@0: missing or empty reg/ranges property out.dts: Warning (avoid_unnecessary_addr_size): /ibm,opal: unnecessary #address-cells/#size-cells without "ranges" or child "reg" property out.dts: Warning (unique_unit_address): /interrupt-controller@0: duplicate unit-address (also used in node /memory@0) out.dts: Warning (chosen_node_stdout_path): /chosen:linux,stdout-path: Use 'stdout-path' instead dtc: livetree.c:575: get_node_by_phandle: Assertion `generate_fixups' failed. Aborted (core dumped) The assertion is fired because get_node_by_phandle receives a phandle value of 0, which is unexpected, unless fixups are needed (They are not, when running the dtc command). Back inside pnv_dt_serial, if the line that sets "interrupt-parent" for the serial device node is commented out, the dtc crash is prevented. Looking at hw/ppc/e500.c, it takes care of allocating necessary phandle values in the nodes, so a similar method can be adopted for powernv. The dtb is attached. Edit: Add version, Correct filenames.
2019-05-06 06:31:56 David Gibson bug added subscriber David Gibson
2020-11-25 18:29:03 Thomas Huth qemu: status New Incomplete
2020-11-26 00:34:03 Amol Surati qemu: status Incomplete Fix Released