nuttx icon indicating copy to clipboard operation
nuttx copied to clipboard

drivers/pci: calculate bar size

Open lipengfei28 opened this issue 1 month ago • 5 comments

Summary

X86_64:init bar in bios, In NuttX, PCI should not be enumerated again; it is only necessary to calculate the size of the BARs. kvm_set_user_memory_region: KVM_SET_USER_MEMORY_REGION failed

Impact

qemu-system-x86_64, PCI enumerate in bios, in nuttx,should use address in the bar regs, it is only necessary to calculate the size of the BARs,

Testing

If there is not ths patch the log: qemu-system-x86_64 -cpu host -enable-kvm -m 2G -cdrom boot.iso -nographic -serial mon:stdio
-object memory-backend-file,id=shmmem-shmem2,mem-path=/dev/shm/my_shmem2,size=4194304,share=yes
-device ivshmem-plain,id=shmem2,memdev=shmmem-shmem2,addr=0xb SeaBIOS (version 1.15.0-1)

iPXE (https://ipxe.org) 00:03.0 CA00 PCI2.10 PnP PMM+7FF8B350+7FECB350 CA00

Booting from Hard Disk... Boot failed: could not read the boot disk

Booting from Floppy... Boot failed: could not read the boot disk

Booting from DVD/CD... pci_scan_bus: pci_scan_bus for bus 0 pci_scan_bus: class = 00000600, hdr_type = 00000000 pci_scan_bus: 00:00 [8086:1237] pci_setup_device: pbar0 set bad mask pci_setup_device: pbar1 set bad mask pci_setup_device: pbar2 set bad mask pci_setup_device: pbar3 set bad mask pci_setup_device: pbar4 set bad mask pci_setup_device: pbar5 set bad mask pci_scan_bus: class = 00000601, hdr_type = 00000080 pci_scan_bus: 00:08 [8086:7000] pci_setup_device: pbar0 set bad mask pci_setup_device: pbar1 set bad mask pci_setup_device: pbar2 set bad mask pci_setup_device: pbar3 set bad mask pci_setup_device: pbar4 set bad mask pci_setup_device: pbar5 set bad mask pci_scan_bus: class = 00000101, hdr_type = 00000000 pci_scan_bus: 00:09 [8086:7010] pci_setup_device: pbar0 set bad mask pci_setup_device: pbar1 set bad mask pci_setup_device: pbar2 set bad mask pci_setup_device: pbar3 set bad mask pci_setup_device: pbar4: mask64=fffffffe 16bytes pci_setup_device: pbar5 set bad mask pci_scan_bus: class = 00000680, hdr_type = 00000000 pci_scan_bus: 00:0b [8086:7113] pci_setup_device: pbar0 set bad mask pci_setup_device: pbar1 set bad mask pci_setup_device: pbar2 set bad mask pci_setup_device: pbar3 set bad mask pci_setup_device: pbar4 set bad mask pci_setup_device: pbar5 set bad mask pci_scan_bus: class = 00000300, hdr_type = 00000000 pci_scan_bus: 00:10 [1234:1111] pci_setup_device: pbar0: mask64=fffffff0 16777216bytes pci_setup_device: pbar1 set bad mask pci_setup_device: pbar2: mask64=fffffff0 4096bytes pci_setup_device: pbar3 set bad mask pci_setup_device: pbar4 set bad mask pci_setup_device: pbar5 set bad mask pci_scan_bus: class = 00000200, hdr_type = 00000000 pci_scan_bus: 00:18 [8086:100e] pci_setup_device: pbar0: mask64=fffffff0 131072bytes pci_setup_device: pbar1: mask64=fffffffe 64bytes pci_setup_device: pbar2 set bad mask pci_setup_device: pbar3 set bad mask pci_setup_device: pbar4 set bad mask pci_setup_device: pbar5 set bad mask pci_scan_bus: class = 00000500, hdr_type = 00000000 pci_scan_bus: 00:58 [1af4:1110] pci_setup_device: pbar0: mask64=fffffff0 256bytes pci_setup_device: pbar1 set bad mask qemu-system-x86_64: kvm_set_user_memory_region: KVM_SET_USER_MEMORY_REGION failed, slot=4, start=0xfffffffffe000000, size=0x400000: Invalid argument kvm_set_phys_mem: error registering slot: Invalid argument [1] 616461 IOT instruction qemu-system-x86_64 -cpu host -enable-kvm -m 2G -cdrom boot.iso -nographic

Add this patch: qemu_robot_robot qemu-system-x86_64 -cpu host -enable-kvm -m 2G -cdrom boot.iso -nographic -serial mon:stdio
-object memory-backend-file,id=shmmem-shmem2,mem-path=/dev/shm/my_shmem2,size=4194304,share=yes
-device ivshmem-plain,id=shmem2,memdev=shmmem-shmem2,addr=0xb SeaBIOS (version 1.15.0-1)

iPXE (https://ipxe.org) 00:03.0 CA00 PCI2.10 PnP PMM+7FF8B350+7FECB350 CA00

Booting from Hard Disk... Boot failed: could not read the boot disk

Booting from Floppy... Boot failed: could not read the boot disk

Booting from DVD/CD... pci_scan_bus: pci_scan_bus for bus 0 pci_scan_bus: class = 00000600, hdr_type = 00000000 pci_scan_bus: 00:00 [8086:1237] pci_setup_device: pbar0 set bad mask pci_setup_device: pbar1 set bad mask pci_setup_device: pbar2 set bad mask pci_setup_device: pbar3 set bad mask pci_setup_device: pbar4 set bad mask pci_setup_device: pbar5 set bad mask pci_scan_bus: class = 00000601, hdr_type = 00000080 pci_scan_bus: 00:08 [8086:7000] pci_setup_device: pbar0 set bad mask pci_setup_device: pbar1 set bad mask pci_setup_device: pbar2 set bad mask pci_setup_device: pbar3 set bad mask pci_setup_device: pbar4 set bad mask pci_setup_device: pbar5 set bad mask pci_scan_bus: class = 00000101, hdr_type = 00000000 pci_scan_bus: 00:09 [8086:7010] pci_setup_device: pbar0 set bad mask pci_setup_device: pbar1 set bad mask pci_setup_device: pbar2 set bad mask pci_setup_device: pbar3 set bad mask pci_setup_device: pbar4: mask64=fffffffe 16bytes pci_setup_device: pbar5 set bad mask pci_scan_bus: class = 00000680, hdr_type = 00000000 pci_scan_bus: 00:0b [8086:7113] pci_setup_device: pbar0 set bad mask pci_setup_device: pbar1 set bad mask pci_setup_device: pbar2 set bad mask pci_setup_device: pbar3 set bad mask pci_setup_device: pbar4 set bad mask pci_setup_device: pbar5 set bad mask pci_scan_bus: class = 00000300, hdr_type = 00000000 pci_scan_bus: 00:10 [1234:1111] pci_setup_device: pbar0: mask64=fffffff0 16777216bytes pci_setup_device: pbar1 set bad mask pci_setup_device: pbar2: mask64=fffffff0 4096bytes pci_setup_device: pbar3 set bad mask pci_setup_device: pbar4 set bad mask pci_setup_device: pbar5 set bad mask pci_scan_bus: class = 00000200, hdr_type = 00000000 pci_scan_bus: 00:18 [8086:100e] pci_setup_device: pbar0: mask64=fffffff0 131072bytes pci_setup_device: pbar1: mask64=fffffffe 64bytes pci_setup_device: pbar2 set bad mask pci_setup_device: pbar3 set bad mask pci_setup_device: pbar4 set bad mask pci_setup_device: pbar5 set bad mask pci_scan_bus: class = 00000500, hdr_type = 00000000 pci_scan_bus: 00:58 [1af4:1110] pci_setup_device: pbar0: mask64=fffffff0 256bytes pci_setup_device: pbar1 set bad mask pci_setup_device: pbar2: mask64=fffffffffffffff0 4194304bytes pci_setup_device: pbar4 set bad mask pci_setup_device: pbar5 set bad mask acpi_dump: RSDT = 0x7ffe190c acpi_dump: tp32 = 0x7ffe1930 acpi_dump: end32 = 0x7ffe1940 acpi_sdt_dump: ptr = 0x7ffe17c0 sig = FACP acpi_sdt_dump: ptr = 0x7ffe1834 sig = APIC acpi_sdt_dump: ptr = 0x7ffe18ac sig = HPET acpi_sdt_dump: ptr = 0x7ffe18e4 sig = WAET acpi_dump: Found MADT type 0 0x7ffe1860 acpi_dump: Found MADT type 1 0x7ffe1868 acpi_dump: Found MADT type 2 0x7ffe1874 acpi_dump: Found MADT type 2 0x7ffe187e acpi_dump: Found MADT type 2 0x7ffe1888 acpi_dump: Found MADT type 2 0x7ffe1892 acpi_dump: Found MADT type 2 0x7ffe189c acpi_dump: Found MADT type 4 0x7ffe18a6 acpi_dump: Found LAPIC for CPU 0 0x7ffe1860 acpi_dump: ACPI ID 0 acpi_dump: APIC ID 0 acpi_dump: flags 1 acpi_dump: Found IOAPIC 0x7ffe1868 x86_rng_initialize: Initializing RNG ivshmem_probe: shmem addr=0xfe000000 size=4194304 reg=0xfebb1000 pci_register_uio_ivshmem_driver: Register ivshmem driver, id=0 e1000_probe: Enabled bus mastering e1000_probe: Enabled memory resources e1000_initialize: Failed to connect MSI -138 telnetd [0:255]

NuttShell (NSH) NuttX-12.3.0 nsh> ls /: dev/ proc/ nsh> nsh> pwd / nsh>

lipengfei28 avatar Nov 25 '25 07:11 lipengfei28

please update commit title to drivers/pci: x86_64 calculate bar size

done

lipengfei28 avatar Nov 25 '25 11:11 lipengfei28

Please update PR description.

done

lipengfei28 avatar Nov 26 '25 02:11 lipengfei28

done

It still does not adhere to the contribution guidelines. You must fill out all of the sections according to the template.

linguini1 avatar Nov 26 '25 03:11 linguini1

done

It still does not adhere to the contribution guidelines. You must fill out all of the sections according to the template.

done

lipengfei28 avatar Nov 27 '25 02:11 lipengfei28

done

Please read the contributing guidelines. The description is still insufficient.

First off, the description still contains the following template text:

PRs without testing information will not be accepted. We will request test logs.

This portion, ironically, asks for test logs. Letting us know what command you used to invoke QEMU is good step, but that is still not a test log. It is not sufficient "testing" to invoke QEMU and see that NuttX boots. You've made a functional change to the PCI driver. How are you testing that change specifically, in the driver? Are you invoking the driver?

It's also not clear from your description (at least to me) what the fix is. You mention:

X86_64:init bar in bios, In NuttX, PCI should not be enumerated again; it is only necessary to calculate the size of the BARs. kvm_set_user_memory_region: KVM_SET_USER_MEMORY_REGION failed

This doesn't really make sense to me. What is this error and under what conditions was it occurring before? How does your change fix that? Was NuttX failing to boot before this change? It is not well described.

linguini1 avatar Nov 28 '25 02:11 linguini1