Hi!
Custom motherboard on Intel Atom C3338 with PCIe (x4) M.2 slot does not see NVME disks at SeaBIOS boot menu. (SeaBIOS (version rel-1.13.0-1-g3ab38b1)) Does not load the operating system from these drives. If you boot from another media, then the NVME disk is seen in the system and works fine. In the logs there is a warning at "void *pci_enable_membar" function in the "coreboot/payloads/external/SeaBIOS/seabios/src/hw/pcidevice.c" file line 186.
Warning message: WARNING - internal error detected at pci_enable_membar:186!
// Verify a memory bar and return it to the caller void * pci_enable_membar(struct pci_device *pci, u32 addr) { wait_preempt(); u32 bar = pci_config_readl(pci->bdf, addr); if (bar & PCI_BASE_ADDRESS_SPACE_IO) { warn_internalerror(); return NULL; } if (bar & PCI_BASE_ADDRESS_MEM_TYPE_64) { u32 high = pci_config_readl(pci->bdf, addr+4); if (high) { dprintf(1, "Can not map memory bar over 4Gig\n"); return NULL; } } bar &= PCI_BASE_ADDRESS_MEM_MASK; if (bar + 4*1024*1024 < 20*1024*1024) { // Bar doesn't look valid (it is in last 4M or first 16M) warn_internalerror(); =========================================>WARNING! return NULL; } pci_config_maskw(pci->bdf, PCI_COMMAND, 0, PCI_COMMAND_MEMORY); pci->have_driver = 1; return (void*)bar; }
Some values: for Samsung NVME disk 0x144d:0xa804; bdf: 0x200
bar: 0x4 at (u32 bar = pci_config_readl(pci->bdf, addr)) bar: 0x0 at (bar &= PCI_BASE_ADDRESS_MEM_MASK) have_driver = 0.
If you boot from another media, then the NVME disk is seen in the system and works fine.
lspci: 02:00.0 Non-Volatile memory controller: Samsung Electronics Co Ltd NVMe SSD Controller SM961/PM961
fdisk: Disk /dev/nvme0n1: 232,9 GiB, 250059350016 bytes, 488397168 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0x5107186e
Device Boot Start End Sectors Size Id Type /dev/nvme0n1p1 * 2048 1126399 1124352 549M 7 HPFS/NTFS/exFAT /dev/nvme0n1p2 1126400 488394751 487268352 232,4G 7 HPFS/NTFS/exFAT
Tried with different NVME drives with different controllers. What could be the reason? Driver needed?
Best regards, Dmitry Ponamorev
On Wed, Feb 10, 2021 at 09:35:30AM -0000, dponamorev@gmail.com wrote:
Hi!
Custom motherboard on Intel Atom C3338 with PCIe (x4) M.2 slot does not see NVME disks at SeaBIOS boot menu. (SeaBIOS (version rel-1.13.0-1-g3ab38b1)) Does not load the operating system from these drives. If you boot from another media, then the NVME disk is seen in the system and works fine. In the logs there is a warning at "void *pci_enable_membar" function in the "coreboot/payloads/external/SeaBIOS/seabios/src/hw/pcidevice.c" file line 186.
Warning message: WARNING - internal error detected at pci_enable_membar:186!
// Verify a memory bar and return it to the caller void * pci_enable_membar(struct pci_device *pci, u32 addr) { wait_preempt(); u32 bar = pci_config_readl(pci->bdf, addr); if (bar & PCI_BASE_ADDRESS_SPACE_IO) { warn_internalerror(); return NULL; } if (bar & PCI_BASE_ADDRESS_MEM_TYPE_64) { u32 high = pci_config_readl(pci->bdf, addr+4); if (high) { dprintf(1, "Can not map memory bar over 4Gig\n"); return NULL; } } bar &= PCI_BASE_ADDRESS_MEM_MASK; if (bar + 4*1024*1024 < 20*1024*1024) { // Bar doesn't look valid (it is in last 4M or first 16M) warn_internalerror(); =========================================>WARNING! return NULL; } pci_config_maskw(pci->bdf, PCI_COMMAND, 0, PCI_COMMAND_MEMORY); pci->have_driver = 1; return (void*)bar; }
Some values: for Samsung NVME disk 0x144d:0xa804; bdf: 0x200
bar: 0x4 at (u32 bar = pci_config_readl(pci->bdf, addr)) bar: 0x0 at (bar &= PCI_BASE_ADDRESS_MEM_MASK) have_driver = 0.
If you boot from another media, then the NVME disk is seen in the system and works fine.
lspci: 02:00.0 Non-Volatile memory controller: Samsung Electronics Co Ltd NVMe SSD Controller SM961/PM961
fdisk: Disk /dev/nvme0n1: 232,9 GiB, 250059350016 bytes, 488397168 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0x5107186e
Device Boot Start End Sectors Size Id Type /dev/nvme0n1p1 * 2048 1126399 1124352 549M 7 HPFS/NTFS/exFAT /dev/nvme0n1p2 1126400 488394751 487268352 232,4G 7 HPFS/NTFS/exFAT
Tried with different NVME drives with different controllers. What could be the reason? Driver needed?
This sounds like a BAR resource allocation problem even before SeaBIOS runs. You should look at resource allocation debugging information from coreboot or whatever your pre-SeaBIOS firmware is.