Hi, This second version was rebased with upstream and includes fixed/amended versions of relevant patches that were sent to the mailing list and aren't upstream yet. In this process 4 patches from v1 were discarded, becoming either irrelevant or squashed into others.
The patches are organized as follows: - patches 1-4: enable user creatable phb3/phb4 root ports - patches 5-10: enable user creatable pnv-phb3 devices - patches 11-18: enable user creatable pnv-phb4 devices Here are some examples of what we're able to do with this series: * powernv8 machine with -nodefaults,2 pnv-phb3s with 'pcie.N' name, one of them with a root port and a netcard: $ qemu-system-ppc64 -m 4G -machine powernv8,accel=tcg -smp 2,cores=2,threads=1 \ -bios skiboot.lid -kernel vmlinux -initrd buildroot.rootfs.cpio \ -append 'console=hvc0 ro xmon=on' \ -nodefaults \ -serial mon:stdio -nographic \ -device pnv-phb3,chip-id=0,index=0,id=pcie.0 \ -device pnv-phb3,chip-id=0,index=2,id=pcie.2 \ -device pnv-phb3-root-port,bus=pcie.2,id=pcie.5 \ -netdev bridge,helper=/usr/libexec/qemu-bridge-helper,br=virbr0,id=net0 \ -device e1000e,netdev=net0,mac=C0:ff:EE:00:01:04,bus=pcie.5,addr=0x0 * powernv9 machine with -nodefaults, 3 of the available 12 pnv-phb4 devices created, 2 root ports, one of the port with a pcie-pci-bridge and devices connected in the bridge: $ qemu-system-ppc64 -m 4G -machine powernv9 \ -smp 2,sockets=2,cores=1,threads=1 \ -accel tcg,thread=multi -bios skiboot.lid \ -kernel vmlinux -initrd buildroot.rootfs.cpio \ -append 'console=hvc0 ro xmon=on' \ -nodefaults \ -serial mon:stdio -nographic \ -device pnv-phb4,chip-id=0,index=0,id=pcie.0 \ -device pnv-phb4,chip-id=0,index=4,id=pcie.1 \ -device pnv-phb4,chip-id=1,index=3,id=pcie.2 \ -device pnv-phb4-root-port,id=root0,bus=pcie.2 \ -device pnv-phb4-root-port,id=root1,bus=pcie.1 \ -device pcie-pci-bridge,id=bridge1,bus=root0,addr=0x0 \ -device nvme,bus=bridge1,addr=0x1,drive=drive0,serial=1234 \ -drive file=./simics-disk.raw,if=none,id=drive0,format=raw,cache=none \ -device e1000e,netdev=net0,mac=C0:ff:EE:00:01:04,bus=bridge1,addr=0x3 \ -netdev bridge,helper=/usr/libexec/qemu-bridge-helper,br=virbr0,id=net0 \ -device nec-usb-xhci,bus=bridge1,addr=0x2 * powernv8/9 with default settings can be used as usual. The work done in this series didn't change the name of the buses created by the default root ports (named pcie.0...N): $ qemu-system-ppc64 -m 4G \ -machine powernv9 -smp 2,sockets=2,cores=1,threads=1 \ -accel tcg,thread=multi -bios skiboot.lid \ -kernel vmlinux -initrd buildroot.rootfs.cpio \ -append 'console=hvc0 ro xmon=on' \ -serial mon:stdio -nographic \ -device pcie-pci-bridge,id=bridge1,bus=pcie.0,addr=0x0 \ -device nvme,bus=bridge1,addr=0x1,drive=drive0,serial=1234 \ -drive file=./simics-disk.raw,if=none,id=drive0,format=raw,cache=none \ -device e1000e,netdev=net0,mac=C0:ff:EE:00:01:04,bus=bridge1,addr=0x3 \ -netdev bridge,helper=/usr/libexec/qemu-bridge-helper,br=virbr0,id=net0 \ -device nec-usb-xhci,bus=bridge1,addr=0x2 Changes from v1: - rebased with upstream at 7d4ae4d497807 - added relevant patches that aren't upstream yet from "ppc/pnv: Preliminary cleanups before user created PHBs" [1] and "ppc/pnv: Add support for user created PHB3/PHB4 devices" [2] series - renamed phb3/phb4 default buses name to 'pnv-phb3-root' and 'pnv-phb4-root' - renamed pnv_pec_get_phb_id() to pnv_phb4_pec_get_phb_id() - patch 'introduce pnv_pec_init_stack_xscom()' moved to patch 16 to be closer with patch 17 that uses it - v1 link: https://lists.gnu.org/archive/html/qemu-devel/2021-12/msg04427.html [1] https://lists.gnu.org/archive/html/qemu-devel/2021-12/msg03810.html [2] https://lists.gnu.org/archive/html/qemu-devel/2021-12/msg01548.html Cédric Le Goater (5): ppc/pnv: Attach PHB3 root port device when defaults are enabled ppc/pnv: Introduce support for user created PHB3 devices ppc/pnv: Reparent user created PHB3 devices to the PnvChip ppc/pnv: Complete user created PHB3 devices ppc/pnv: Move num_phbs under Pnv8Chip Daniel Henrique Barboza (13): pnv_phb3.c: add unique chassis and slot for pnv_phb3_root_port pnv_phb4.c: add unique chassis and slot for pnv_phb4_root_port pnv_phb4.c: make pnv-phb4-root-port user creatable pnv_phb4.c: check if root port exists in rc_config functions pnv_phb3.h: change TYPE_PNV_PHB3_ROOT_BUS name pnv_phb4.c: introduce pnv_phb4_set_stack_phb_props() pnv_phb4_pec.c: move pnv_pec_phb_offset() to pnv_phb4.c pnv_phb4_pec: use pnv_phb4_pec_get_phb_id() in pnv_pec_dt_xscom() pnv_phb4.h: turn phb into a pointer in struct PnvPhb4PecStack pnv_phb4_pec.c: use 'default_enabled()' to init stack->phb pnv_phb4.c: introduce pnv_pec_init_stack_xscom() ppc/pnv: Introduce user creatable pnv-phb4 devices pnv_phb4.c: change TYPE_PNV_PHB4_ROOT_BUS name hw/pci-host/pnv_phb3.c | 57 ++++++++-- hw/pci-host/pnv_phb4.c | 193 ++++++++++++++++++++++++++++++--- hw/pci-host/pnv_phb4_pec.c | 86 ++++++--------- hw/ppc/pnv.c | 55 ++++++++-- include/hw/pci-host/pnv_phb3.h | 4 +- include/hw/pci-host/pnv_phb4.h | 15 ++- include/hw/ppc/pnv.h | 8 +- 7 files changed, 322 insertions(+), 96 deletions(-) -- 2.33.1