qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

How to use pxb-pcie in correct way?


From: Marcin Juszkiewicz
Subject: How to use pxb-pcie in correct way?
Date: Mon, 8 Apr 2024 13:58:00 +0200
User-agent: Mozilla Thunderbird

For quite a while I am experimenting with PCI Express setup on SBSA-Ref system. And finally decided to write.

We want to play with NUMA setup and "pxb-pcie" can be assigned to NUMA node other than cpu0 one. But adding it makes other cards dissapear...

When I boot sbsa-ref I have plain PCIe setup:

(qemu) info pci
  Bus  0, device   0, function 0:
    Host bridge: PCI device 1b36:0008
      PCI subsystem 1af4:1100
      id ""
  Bus  0, device   1, function 0:
    Ethernet controller: PCI device 8086:10d3
      PCI subsystem 8086:0000
      IRQ 255, pin A
      BAR0: 32 bit memory at 0xffffffffffffffff [0x0001fffe].
      BAR1: 32 bit memory at 0xffffffffffffffff [0x0001fffe].
      BAR2: I/O at 0xffffffffffffffff [0x001e].
      BAR3: 32 bit memory at 0xffffffffffffffff [0x00003ffe].
      BAR6: 32 bit memory at 0xffffffffffffffff [0x0003fffe].
      id ""
  Bus  0, device   2, function 0:
    Display controller: PCI device 1234:1111
      PCI subsystem 1af4:1100
      BAR0: 32 bit prefetchable memory at 0x80000000 [0x80ffffff].
      BAR2: 32 bit memory at 0x81084000 [0x81084fff].
      BAR6: 32 bit memory at 0xffffffffffffffff [0x00007ffe].
      id ""

Adding extra PCIe card works fine - both just "igb" and "igb" with "pcie-root-port".

But adding "pcie-root-port" + "igb" and then "pxb-pcie" makes "igb" dissapear:

../code/qemu/build/qemu-system-aarch64
-monitor telnet::45454,server,nowait
-serial stdio
-device pcie-root-port,id=ULyWl,slot=0,chassis=0
-device igb,bus=ULyWl
-device pxb-pcie,bus_nr=1

(qemu) info pci
  Bus  0, device   0, function 0:
    Host bridge: PCI device 1b36:0008
      PCI subsystem 1af4:1100
      id ""
  Bus  0, device   1, function 0:
    Ethernet controller: PCI device 8086:10d3
      PCI subsystem 8086:0000
      IRQ 255, pin A
      BAR0: 32 bit memory at 0xffffffffffffffff [0x0001fffe].
      BAR1: 32 bit memory at 0xffffffffffffffff [0x0001fffe].
      BAR2: I/O at 0xffffffffffffffff [0x001e].
      BAR3: 32 bit memory at 0xffffffffffffffff [0x00003ffe].
      BAR6: 32 bit memory at 0xffffffffffffffff [0x0003fffe].
      id ""
  Bus  0, device   2, function 0:
    Display controller: PCI device 1234:1111
      PCI subsystem 1af4:1100
      BAR0: 32 bit prefetchable memory at 0x80000000 [0x80ffffff].
      BAR2: 32 bit memory at 0x81085000 [0x81085fff].
      BAR6: 32 bit memory at 0xffffffffffffffff [0x00007ffe].
      id ""
  Bus  0, device   3, function 0:
    PCI bridge: PCI device 1b36:000c
      IRQ 255, pin A
      BUS 0.
      secondary bus 1.
      subordinate bus 1.
      IO range [0xf000, 0x0fff]
      memory range [0xfff00000, 0x000fffff]
      prefetchable memory range [0xfffffffffff00000, 0x000fffff]
      BAR0: 32 bit memory at 0x81084000 [0x81084fff].
      id "ULyWl"
  Bus  0, device   4, function 0:
    Host bridge: PCI device 1b36:000b
      PCI subsystem 1af4:1100
      id ""


If I add "igb" directly (without root port) then it appears correctly:

(qemu) info pci
  Bus  0, device   0, function 0:
    Host bridge: PCI device 1b36:0008
      PCI subsystem 1af4:1100
      id ""
  Bus  0, device   1, function 0:
    Ethernet controller: PCI device 8086:10d3
      PCI subsystem 8086:0000
      IRQ 255, pin A
      BAR0: 32 bit memory at 0xffffffffffffffff [0x0001fffe].
      BAR1: 32 bit memory at 0xffffffffffffffff [0x0001fffe].
      BAR2: I/O at 0xffffffffffffffff [0x001e].
      BAR3: 32 bit memory at 0xffffffffffffffff [0x00003ffe].
      BAR6: 32 bit memory at 0xffffffffffffffff [0x0003fffe].
      id ""
  Bus  0, device   2, function 0:
    Display controller: PCI device 1234:1111
      PCI subsystem 1af4:1100
      BAR0: 32 bit prefetchable memory at 0x80000000 [0x80ffffff].
      BAR2: 32 bit memory at 0x810c4000 [0x810c4fff].
      BAR6: 32 bit memory at 0xffffffffffffffff [0x00007ffe].
      id ""
  Bus  0, device   3, function 0:
    Ethernet controller: PCI device 8086:10c9
      PCI subsystem 1af4:1100
      IRQ 255, pin A
      BAR0: 32 bit memory at 0xffffffffffffffff [0x0001fffe].
      BAR1: 32 bit memory at 0xffffffffffffffff [0x0001fffe].
      BAR2: I/O at 0xffffffffffffffff [0x001e].
      BAR3: 64 bit memory at 0xffffffffffffffff [0x00003ffe].
      id ""
  Bus  0, device   4, function 0:
    Host bridge: PCI device 1b36:000b
      PCI subsystem 1af4:1100
      id ""


When I add "pcie-root-port" with "igb" followed by "pcie-root-port" and "pxb-pcie" then no IGB again:


-device pcie-root-port,id=RjKXs,slot=0,chassis=0
-device igb,bus=RjKXs
-device pcie-root-port,chassis=7
-device pxb-pcie,bus_nr=1


(qemu) info pci
  Bus  0, device   0, function 0:
    Host bridge: PCI device 1b36:0008
      PCI subsystem 1af4:1100
      id ""
  Bus  0, device   1, function 0:
    Ethernet controller: PCI device 8086:10d3
      PCI subsystem 8086:0000
      IRQ 255, pin A
      BAR0: 32 bit memory at 0xffffffffffffffff [0x0001fffe].
      BAR1: 32 bit memory at 0xffffffffffffffff [0x0001fffe].
      BAR2: I/O at 0xffffffffffffffff [0x001e].
      BAR3: 32 bit memory at 0xffffffffffffffff [0x00003ffe].
      BAR6: 32 bit memory at 0xffffffffffffffff [0x0003fffe].
      id ""
  Bus  0, device   2, function 0:
    Display controller: PCI device 1234:1111
      PCI subsystem 1af4:1100
      BAR0: 32 bit prefetchable memory at 0x80000000 [0x80ffffff].
      BAR2: 32 bit memory at 0x81086000 [0x81086fff].
      BAR6: 32 bit memory at 0xffffffffffffffff [0x00007ffe].
      id ""
  Bus  0, device   3, function 0:
    PCI bridge: PCI device 1b36:000c
      IRQ 255, pin A
      BUS 0.
      secondary bus 1.
      subordinate bus 1.
      IO range [0xf000, 0x0fff]
      memory range [0xfff00000, 0x000fffff]
      prefetchable memory range [0xfffffffffff00000, 0x000fffff]
      BAR0: 32 bit memory at 0x81085000 [0x81085fff].
      id "RjKXs"
  Bus  0, device   4, function 0:
    PCI bridge: PCI device 1b36:000c
      IRQ 255, pin A
      BUS 0.
      secondary bus 2.
      subordinate bus 2.
      IO range [0xf000, 0x0fff]
      memory range [0xfff00000, 0x000fffff]
      prefetchable memory range [0xfffffffffff00000, 0x000fffff]
      BAR0: 32 bit memory at 0x81084000 [0x81084fff].
      id ""
  Bus  0, device   5, function 0:
    Host bridge: PCI device 1b36:000b
      PCI subsystem 1af4:1100
      id ""


Same (no "igb") with more complex structure behind "pxb-pcie" bridge:

../code/qemu/build/qemu-system-aarch64

-monitor telnet::45454,server,nowait

-serial stdio

-device pcie-root-port,id=PrZUz,slot=0,chassis=0

-device igb,bus=PrZUz

-device pcie-root-port,chassis=7

-device pxb-pcie,id=pxb1,bus_nr=1

-device pcie-pci-bridge,id=pci,bus=pxb1

-device es1370,bus=pci,addr=9,id=es1370

-device e1000,bus=pci,addr=10,id=e1000

-device pcie-root-port,id=root_port_for_ahci,bus=pxb1,chassis=10,slot=0

-device ahci,bus=root_port_for_ahci,id=ahci


  Bus  1, device   0, function 0:
    PCI bridge: PCI device 1b36:000e
      IRQ 255, pin A
      BUS 1.
      secondary bus 2.
      subordinate bus 2.
      IO range [0x1000, 0x1fff]
      memory range [0x81100000, 0x811fffff]
      prefetchable memory range [0xfffffffffff00000, 0x000fffff]
      BAR0: 64 bit memory at 0x81200000 [0x812000ff].
      id "pci"
  Bus  2, device   9, function 0:
    Audio controller: PCI device 1274:5000
      PCI subsystem 4942:4c4c
      IRQ 255, pin A
      BAR0: I/O at 0xffffffffffffffff [0x00fe].
      id "es1370"
  Bus  2, device  16, function 0:
    Ethernet controller: PCI device 8086:100e
      PCI subsystem 1af4:1100
      IRQ 255, pin A
      BAR0: 32 bit memory at 0xffffffffffffffff [0x0001fffe].
      BAR1: I/O at 0xffffffffffffffff [0x003e].
      BAR6: 32 bit memory at 0xffffffffffffffff [0x0003fffe].
      id "e1000"
  Bus  1, device   1, function 0:
    PCI bridge: PCI device 1b36:000c
      IRQ 255, pin A
      BUS 1.
      secondary bus 3.
      subordinate bus 3.
      IO range [0x0000, 0x0fff]
      memory range [0x81000000, 0x810fffff]
      prefetchable memory range [0xfffffffffff00000, 0x000fffff]
      BAR0: 32 bit memory at 0x81201000 [0x81201fff].
      id "root_port_for_ahci"
  Bus  3, device   0, function 0:
    SATA controller: PCI device 8086:2922
      PCI subsystem 1af4:1100
      IRQ 255, pin A
      BAR4: I/O at 0xffffffffffffffff [0x001e].
      BAR5: 32 bit memory at 0xffffffffffffffff [0x00000ffe].
      id "ahci"
  Bus  0, device   0, function 0:
    Host bridge: PCI device 1b36:0008
      PCI subsystem 1af4:1100
      id ""
  Bus  0, device   1, function 0:
    Ethernet controller: PCI device 8086:10d3
      PCI subsystem 8086:0000
      IRQ 255, pin A
      BAR0: 32 bit memory at 0xffffffffffffffff [0x0001fffe].
      BAR1: 32 bit memory at 0xffffffffffffffff [0x0001fffe].
      BAR2: I/O at 0xffffffffffffffff [0x001e].
      BAR3: 32 bit memory at 0xffffffffffffffff [0x00003ffe].
      BAR6: 32 bit memory at 0xffffffffffffffff [0x0003fffe].
      id ""
  Bus  0, device   2, function 0:
    Display controller: PCI device 1234:1111
      PCI subsystem 1af4:1100
      BAR0: 32 bit prefetchable memory at 0x80000000 [0x80ffffff].
      BAR2: 32 bit memory at 0x81386000 [0x81386fff].
      BAR6: 32 bit memory at 0xffffffffffffffff [0x00007ffe].
      id ""
  Bus  0, device   3, function 0:
    PCI bridge: PCI device 1b36:000c
      IRQ 255, pin A
      BUS 0.
      secondary bus 1.
      subordinate bus 3.
      IO range [0x0000, 0x1fff]
      memory range [0x81000000, 0x812fffff]
      prefetchable memory range [0xfffffffffff00000, 0x000fffff]
      BAR0: 32 bit memory at 0x81385000 [0x81385fff].
      id "PrZUz"
  Bus  1, device   0, function 0:
    PCI bridge: PCI device 1b36:000e
      IRQ 255, pin A
      BUS 1.
      secondary bus 2.
      subordinate bus 2.
      IO range [0x1000, 0x1fff]
      memory range [0x81100000, 0x811fffff]
      prefetchable memory range [0xfffffffffff00000, 0x000fffff]
      BAR0: 64 bit memory at 0x81200000 [0x812000ff].
      id "pci"
  Bus  2, device   9, function 0:
    Audio controller: PCI device 1274:5000
      PCI subsystem 4942:4c4c
      IRQ 255, pin A
      BAR0: I/O at 0xffffffffffffffff [0x00fe].
      id "es1370"
  Bus  2, device  16, function 0:
    Ethernet controller: PCI device 8086:100e
      PCI subsystem 1af4:1100
      IRQ 255, pin A
      BAR0: 32 bit memory at 0xffffffffffffffff [0x0001fffe].
      BAR1: I/O at 0xffffffffffffffff [0x003e].
      BAR6: 32 bit memory at 0xffffffffffffffff [0x0003fffe].
      id "e1000"
  Bus  1, device   1, function 0:
    PCI bridge: PCI device 1b36:000c
      IRQ 255, pin A
      BUS 1.
      secondary bus 3.
      subordinate bus 3.
      IO range [0x0000, 0x0fff]
      memory range [0x81000000, 0x810fffff]
      prefetchable memory range [0xfffffffffff00000, 0x000fffff]
      BAR0: 32 bit memory at 0x81201000 [0x81201fff].
      id "root_port_for_ahci"
  Bus  3, device   0, function 0:
    SATA controller: PCI device 8086:2922
      PCI subsystem 1af4:1100
      IRQ 255, pin A
      BAR4: I/O at 0xffffffffffffffff [0x001e].
      BAR5: 32 bit memory at 0xffffffffffffffff [0x00000ffe].
      id "ahci"
  Bus  0, device   4, function 0:
    PCI bridge: PCI device 1b36:000c
      IRQ 255, pin A
      BUS 0.
      secondary bus 4.
      subordinate bus 4.
      IO range [0xf000, 0x0fff]
      memory range [0xfff00000, 0x000fffff]
      prefetchable memory range [0xfffffffffff00000, 0x000fffff]
      BAR0: 32 bit memory at 0x81384000 [0x81384fff].
      id ""
  Bus  0, device   5, function 0:
    Host bridge: PCI device 1b36:000b
      PCI subsystem 1af4:1100
      id "pxb1"

What happens with missing card? It does not have to be "igb" - "ac97" gets lost too.

And only first added one dissapears. If I add two cards (with root-port entries) before "pxb-pcie" then second one is present.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]