Hi. Is anyone successfully using the Patriot P300 m.2 drive on Banana Pi Bpi R3 and Openwrt at the moment? Thanks.
Working NVME SSD on Banana Pi r3 (BPi R3)
Disk Model: KBG302MS128G NMVe Toshiba 128GB
Driver Packages (as per jtxnn678): kmod-nvme
Procedure
-
Start with working OWRT on the BPiR3, Install SSD to M.2 Slot of the BPiR3, boot up.
-
Delete existing partitions, create new partitions, format partitions ext4 (block 2048), mount partitions
# Delete all partitions and create one new one. From terminal (ubuntu) also works from OWRT: fdisk -l # List all devices, note dev/nvme0n1 partition of the SSD (listed at the end) fdisk /dev/nvme0n1 # Format USB drive m # help d # Delete partiion 1 # Select partition X to delete p # Print partition table to verify deleted (might not need this) # Repeat for other partitions on USB n # Create a New Partition 1 # Assign Partition number to New Partition Enter # Choose default value: p - primary (Extended is for legacy MBR w/ partitions > 4 on a disk) Enter # Use Default sector for First Sector (ie. 2048) Enter # Use Default Sector for Last Sector (Partition_size_MB)*(First Sector)=Last Sector (ie.Partition Size:10GB: 10,000*2048=20480000 (Last Sector 20480000)) w # Write/commit all changes to disk # Format USB as EXT4 format with mkfs # Syntax: mkfs.ext4 [options] /dev/nvme0n1p1 # [options] # -L # specifies the label for the partition # -m # sets the reserved blocks percentage, which is 1 (1%) in this case # -b # specifies the block size, which we’ve set to 4096 bytes, # Syntax: (Formatting) fdisk -l # find device name See Screenshots above mkfs.ext4 -L EXT4 -m 1 -b 2048 /dev/nvme0n1p1 mkfs.ext4 -L EXT4 -m 1 -b 2048 /dev/nvme0n1p2 # Now Mount the nvme SSD for us # Note: I created two partitions on my nvme, one to be used for logging and the other for future use. mkdir /mnt/nvme1 mkdir /mnt/nvme2 mount /dev/nvme0n1p1 /mnt/nvme1 # See screenshots above # Response: [ 9060.486963] EXT4-fs (nvme0n1p1): mounted filesystem eabc402a-47a6-4ce3-aabd-49a0ad1d3752 r/w with ordered data mode. Quota mode: disabled. mount /dev/nvme0n1p2 /mnt/nvme2 # Response: [ 9070.658167] EXT4-fs (nvme0n1p2): mounted filesystem b6782965-07b7-4a2f-b46f-63a5cee1c7f7 r/w with ordered data mode. Quota mode: disabled. df -h # verify partition(s) mounted See screenshots above. # How To - Unmount NVMe Partitions umount /dev/nvme0n1p1 umount /dev/nvme01np2 df -h # verify partition(s) unmounted See Screenshots
Hello
frank-w
Title:
BPi-R3 Mini: PCIe AER errors and kernel panic with Crucial P310 NVMe SSD
Labels:
bug, hardware, mediatek, pcie, nvme, r3-mini
Issue Body
Hardware
· Board: Banana Pi R3 Mini · SoC: MediaTek MT7986 · NVMe: Crucial P310 2TB PCIe Gen4 (Micron/Crucial Technology Device 5426) · Boot Media: eMMC (primary), SPI NAND (secondary) · RAM: 2GB DDR4
Software
· Firmware: ImmortalWrt 24.10.4 (BananaWRT custom build) · U-Boot: 2024.10-ImmortalWrt-r33602-e717d133ed6d · Kernel: 6.6.110 · Build Date: Oct 27 2025
Problem Description
The Crucial P310 NVMe SSD is detected at the PCIe level but causes kernel panics due to PCIe AER errors when NVMe drivers load. The system works perfectly without NVMe modules, but crashes during NVMe initialization.
What Works ![]()
· PCIe enumeration detects NVMe controller · Hardware is physically compatible · System boots and runs stable without NVMe modules · U-Boot recognizes PCIe topology
What Fails ![]()
· Kernel panic when nvme/nvme-pci modules load · PCIe AER errors trigger system crashes · NVMe drive never becomes available to userspace
Critical Error Logs
PCIe Detection (Works):
[ 2.637095] pci 0000:01:00.0: [c0a9:5426] type 00 class 0x010802
[ 2.650087] pci 0000:01:00.0: 8.000 Gb/s available PCIe bandwidth, limited by 5.0 GT/s PCIe x2 link at 0000:00:00.0
NVMe Initialization (Starts then Fails):
[ 553.270770] nvme 0000:01:00.0: assign IRQ: got 128
[ 553.275801] nvme nvme0: pci function 0000:01:00.0
[ 553.419853] nvme nvme0: allocated 64 MiB host memory buffer.
PCIe AER Errors (Cause Crash):
[ 553.501807] pcieport 0000:00:00.0: AER: Corrected error message received from 0000:00:00.0
[ 553.514692] pcieport 0000:00:00.0: PCIe Bus Error: severity=Corrected, type=Physical Layer, (Receiver ID)
[ 553.532577] pcieport 0000:00:00.0: [ 0] RxErr
[ 553.550148] pcieport 0000:00:00.0: AER: Uncorrected (Fatal) error message received from 0000:00:00.0
[ 553.566716] pcieport 0000:00:00.0: [ 5] SDES (First)
[ 553.592570] pcieport 0000:00:00.0: [14] CmpltTO
[ 553.607322] pcieport 0000:00:00.0: AER: broadcast error_detected message
[ 553.624982] nvme nvme0: frozen state error detected, reset controller
Final Kernel Panic:
[ 553.769402] Internal error: synchronous external abort: 0000000096000210 [#1] SMP
[ 554.009534] Kernel panic - not syncing: synchronous external abort: Fatal exception
Debug Information
Current PCIe Status:
# lspci
00:00.0 PCI bridge: MEDIATEK Corp. Device 1f32 (rev 01)
01:00.0 Non-Volatile memory controller: Micron/Crucial Technology Device 5426 (rev 01)
# ls /dev/nvme*
ls: /dev/nvme*: No such file or directory
# cat /proc/cmdline
root=/dev/fit0 rootwait
NVMe Module Status:
# lsmod | grep nvme
(no output - modules not loaded to avoid crash)
# find /lib/modules -name "*nvme*"
/lib/modules/6.6.110/kernel/drivers/nvme/host/nvme.ko
/lib/modules/6.6.110/kernel/drivers/nvme/host/nvme-core.ko
Attempted Solutions
- Kernel Parameters:
· Result: System boots but NVMe drivers don’t auto-loadpci=noaer aer=off pcie_aspm=force - Manual Module Loading:
· Result: Immediate kernel panicmodprobe nvme nvme-pci - PCIe Link Management: · Tried various pcie_aspm.policy settings · No improvement in stability
Specific Questions for frank-w
- PCIe AER Configuration: How to properly disable AER for MT7986’s PCIe controller? The standard pci=noaer doesn’t seem sufficient.
- Gen4/Gen3 Compatibility: Are there known issues with Gen4 NVMe drives on the BPi-R3 Mini’s Gen3 controller? Should we force Gen3 mode?
- Device Tree Modifications: Are there specific DTS properties needed for stable PCIe operation with high-power NVMe drives?
- Power Management: Could this be a power delivery issue? The Crucial P310 is a high-performance drive - are there known power limitations on the R3 Mini’s M.2 slot?
- Kernel Configuration: Should NVMe support be compiled in rather than modular for this platform? Are there specific MT7986 PCIe patches needed?
- Error Recovery: The AER subsystem seems to trigger fatal errors on correctable issues - how can we make error recovery more robust?
- Hardware Workarounds: Are there known compatible NVMe models that work better with this board?
Additional Context
· The same Crucial P310 works perfectly in other x86 and ARM systems · BPi-R3 Mini PCIe link shows 8 Gb/s available (5.0 GT/s x2) as expected · U-Boot PCIe enumeration works correctly · Issue occurs specifically during Linux NVMe driver initialization
Supporting Files
If needed, I can provide:
· Complete dmesg log · U-Boot environment · Device tree source · Kernel config
Why This Needs Expertise
· BPi-R3 Mini hardware specifics · MediaTek MT7986 PCIe implementation · OpenWrt kernel configuration for this platform · Device tree customization for stable operation
This appears to be a platform-specific issue requiring expertise in both the hardware design and the OpenWrt software stack for this particular board.
The core issue: PCIe link establishes but AER errors during NVMe initialization trigger fatal error recovery that crashes the system. Standard AER disable parameters don’t prevent the crashes.
This comprehensive issue provides all the technical details frank-w would need to understand and help solve the problem. It shows you’ve done substantial troubleshooting and narrows down the issue to specific PCIe/AER interactions on the BPi-R3 Mini platform.
Afaik gen3 driver means mtkv3 and not pciev3. I’m no pci expert but i remember similar issues with some v3 ssd. Seems really some features are missing (did not find aer in driver). If there is no way to disable aer in firmware i would define ssd as incompatible.
Try to boot something with a more recent kernel version. Who knows, there already may be a fix for your problem.
Hi guys,
I was checking the PCIe status on my BananaPi R3 Mini running Bananawrt, and here’s what I see:
lspci
00:00.0 PCI bridge: MEDIATEK Corp. Device 1f32 (rev 01) 01:00.0 Non-Volatile memory controller: Micron/Crucial Technology Device 5426 (rev 01)
ls /dev/nvme*
ls: /dev/nvme*: No such file or directory
cat /proc/cmdline
root=/dev/fit0 rootwait
The NVMe device shows up in lspci but no /dev/nvme* device nodes are present, so the system isn’t recognizing it for use.
Could you advise on the next steps to get the NVMe detected properly in Bananawrt? Do I need specific kernel modules, device tree changes, or a boot parameter adjustment?
Thanks in advance!
I guess nvme driver is missing or not loaded
Try
zgrep -i nvme /proc/config.gz
I’m using ImmortalWrt on the BPI-R3 Mini and I found a PCIe initialization problem that prevents my NVMe SSD from working.
The kernel log shows this error during boot:
[ 2.171380] bridge: filtering via arp/ip/ip6tables is no longer available by default. Update your scripts to load br_netfilter if you need this.
[ 2.184452] 8021q: 802.1Q VLAN Support v1.8
[ 2.202109] mtk-pcie-gen3 11280000.pcie: host bridge /soc/pcie@11280000 ranges:
[ 2.209432] mtk-pcie-gen3 11280000.pcie: Parsing ranges property...
[ 2.215689] mtk-pcie-gen3 11280000.pcie: MEM 0x0020000000..0x002fffffff -> 0x0020000000
[ 2.224154] debugfs: File 'type' in directory 'phy-soc:[email protected]' already present!
[ 2.228567] mtk-msdc 11230000.mmc: Final PAD_DS_TUNE: 0x14414
[ 2.232314] debugfs: File 'efuse' in directory 'phy-soc:[email protected]' already present!
[ 2.232318] debugfs: File 'intr' in directory 'phy-soc:[email protected]' already present!
[ 2.232321] debugfs: File 'tx-imp' in directory 'phy-soc:[email protected]' already present!
[ 2.232324] debugfs: File 'rx-imp' in directory 'phy-soc:[email protected]' already present!
[ 2.272296] mmc0: new HS400 MMC card at address 0001
[ 2.278066] mmcblk0: mmc0:0001 008GB0 7.28 GiB
[ 2.284661] Alternate GPT is invalid, using primary GPT.
[ 2.289980] mmcblk0: p1 p2 p3 p4 p5 p128
[ 2.295213] mmcblk0boot0: mmc0:0001 008GB0 4.00 MiB
[ 2.300913] mmcblk0boot1: mmc0:0001 008GB0 4.00 MiB
[ 2.306096] mmcblk0rpmb: mmc0:0001 008GB0 4.00 MiB, chardev (249:0)
[ 2.488730] mtk-pcie-gen3 11280000.pcie: set MEM trans window[0]: cpu_addr =
0x20000000, pci_addr = 0x20000000, size = 0x10000000
[ 2.500652] mtk-pcie-gen3 11280000.pcie: PCI host bridge to bus 0000:00
[ 2.507258] pci_bus 0000:00: root bus resource [bus 00-ff]
[ 2.512731] pci_bus 0000:00: root bus resource [mem 0x20000000-0x2fffffff]
[ 2.519585] pci_bus 0000:00: scanning bus
[ 2.523606] pci 0000:00:00.0: [14c3:1f32] type 01 class 0x060400
[ 2.529607] pci 0000:00:00.0: reg 0x10: [mem 0x00000000-0x00007fff 64bit]
[ 2.536441] pci 0000:00:00.0: PME# supported from D0 D3hot D3cold
[ 2.542521] pci 0000:00:00.0: PME# disabled
[ 2.547489] pci_bus 0000:00: fixups for bus
[ 2.551660] pci 0000:00:00.0: scanning [bus 00-00] behind bridge, pass 0
[ 2.558353] pci 0000:00:00.0: bridge configuration invalid ([bus 00-00]), reconfiguring
[ 2.566344] pci 0000:00:00.0: scanning [bus 00-00] behind bridge, pass 1
[ 2.573090] pci_bus 0000:01: scanning bus
[ 2.577109] pci 0000:01:00.0: [c0a9:5426] type 00 class 0x010802
[ 2.583125] pci 0000:01:00.0: reg 0x10: [mem 0x00000000-0x00003fff 64bit]
[ 2.590099] pci 0000:01:00.0: 8.000 Gb/s available PCIe bandwidth, limited by 5.0 GT/s PCIe x2 link at 0000:00:00.0 (capable of 63.012 Gb/s with 16.0 GT/s PCIe x4 link)
[ 2.632319] pci_bus 0000:01: fixups for bus
[ 2.636488] pci_bus 0000:01: bus scan returning with max=01
[ 2.642043] pci_bus 0000:01: busn_res: [bus 01-ff] end is updated to 01
[ 2.648647] pci_bus 0000:00: bus scan returning with max=01
[ 2.654218] pci 0000:00:00.0: BAR 8: assigned [mem 0x20000000-0x200fffff]
[ 2.660986] pci 0000:00:00.0: BAR 0: assigned [mem 0x20100000-0x20107fff 64bit]
[ 2.668285] pci 0000:01:00.0: BAR 0: assigned [mem 0x20000000-0x20003fff 64bit]
[ 2.675587] pci 0000:00:00.0: PCI bridge to [bus 01]
[ 2.680537] pci 0000:00:00.0: bridge window [mem 0x20000000-0x200fffff]
[ 2.687424] pcieport 0000:00:00.0: assign IRQ: got 128
[ 2.692556] pcieport 0000:00:00.0: enabling device (0000 -> 0002)
[ 2.698639] pcieport 0000:00:00.0: enabling bus mastering
[ 2.704535] mtk-pcie-gen3 11280000.pcie: msi#0x0 address_hi 0x0 address_lo 0x11280c00 data 0
[ 2.712963] mtk-pcie-gen3 11280000.pcie: msi#0x1 address_hi 0x0 address_lo 0x11280c00 data 1
[ 2.721377] mtk-pcie-gen3 11280000.pcie: msi#0x2 address_hi 0x0 address_lo 0x11280c00 data 2
[ 2.729794] mtk-pcie-gen3 11280000.pcie: msi#0x3 address_hi 0x0 address_lo 0x11280c00 data 3
[ 2.738212] mtk-pcie-gen3 11280000.pcie: msi#0x4 address_hi 0x0 address_lo 0x11280c00 data 4
[ 2.746629] mtk-pcie-gen3 11280000.pcie: msi#0x5 address_hi 0x0 address_lo 0x11280c00 data 5
[ 2.755049] mtk-pcie-gen3 11280000.pcie: msi#0x6 address_hi 0x0 address_lo 0x11280c00 data 6
[ 2.763466] mtk-pcie-gen3 11280000.pcie: msi#0x7 address_hi 0x0 address_lo 0x11280c00 data 7
[ 2.771880] mtk-pcie-gen3 11280000.pcie: msi#0x8 address_hi 0x0 address_lo 0x11280c00 data 8
[ 2.780299] mtk-pcie-gen3 11280000.pcie: msi#0x9 address_hi 0x0 address_lo 0x11280c00 data 9
[ 2.788716] mtk-pcie-gen3 11280000.pcie: msi#0xa address_hi 0x0 address_lo 0x11280c00 data 10
[ 2.797221] mtk-pcie-gen3 11280000.pcie: msi#0xb address_hi 0x0 address_lo 0x11280c00 data 11
[ 2.805725] mtk-pcie-gen3 11280000.pcie: msi#0xc address_hi 0x0 address_lo 0x11280c00 data 12
[ 2.814228] mtk-pcie-gen3 11280000.pcie: msi#0xd address_hi 0x0 address_lo 0x11280c00 data 13
[ 2.822732] mtk-pcie-gen3 11280000.pcie: msi#0xe address_hi 0x0 address_lo 0x11280c00 data 14
[ 2.831233] mtk-pcie-gen3 11280000.pcie: msi#0xf address_hi 0x0 address_lo 0x11280c00 data 15
[ 2.839738] mtk-pcie-gen3 11280000.pcie: msi#0x10 address_hi 0x0 address_lo 0x11280c00 data 16
[ 2.848328] mtk-pcie-gen3 11280000.pcie: msi#0x11 address_hi 0x0 address_lo 0x11280c00 data 17
[ 2.856919] mtk-pcie-gen3 11280000.pcie: msi#0x12 address_hi 0x0 address_lo 0x11280c00 data 18
[ 2.865510] mtk-pcie-gen3 11280000.pcie: msi#0x13 address_hi 0x0 address_lo 0x11280c00 data 19
[ 2.874104] mtk-pcie-gen3 11280000.pcie: msi#0x14 address_hi 0x0 address_lo 0x11280c00 data 20
[ 2.882695] mtk-pcie-gen3 11280000.pcie: msi#0x15 address_hi 0x0 address_lo 0x11280c00 data 21
[ 2.891282] mtk-pcie-gen3 11280000.pcie: msi#0x16 address_hi 0x0 address_lo 0x11280c00 data 22
[ 2.899872] mtk-pcie-gen3 11280000.pcie: msi#0x17 address_hi 0x0 address_lo 0x11280c00 data 23
[ 2.908463] mtk-pcie-gen3 11280000.pcie: msi#0x18 address_hi 0x0 address_lo 0x11280c00 data 24
[ 2.917054] mtk-pcie-gen3 11280000.pcie: msi#0x19 address_hi 0x0 address_lo 0x11280c00 data 25
[ 2.925644] mtk-pcie-gen3 11280000.pcie: msi#0x1a address_hi 0x0 address_lo 0x11280c00 data 26
[ 2.934235] mtk-pcie-gen3 11280000.pcie: msi#0x1b address_hi 0x0 address_lo 0x11280c00 data 27
[ 2.942826] mtk-pcie-gen3 11280000.pcie: msi#0x1c address_hi 0x0 address_lo 0x11280c00 data 28
[ 2.951413] mtk-pcie-gen3 11280000.pcie: msi#0x1d address_hi 0x0 address_lo 0x11280c00 data 29
[ 2.960003] mtk-pcie-gen3 11280000.pcie: msi#0x1e address_hi 0x0 address_lo 0x11280c00 data 30
[ 2.968593] mtk-pcie-gen3 11280000.pcie: msi#0x1f address_hi 0x0 address_lo 0x11280c00 data 31
[ 2.977680] mtk-pcie-gen3 11280000.pcie: msi#0x0 address_hi 0x0 address_lo 0x11280c00 data 0
[ 2.986215] pcieport 0000:00:00.0: PME: Signaling with IRQ 129
[ 2.992213] pcieport 0000:00:00.0: AER: enabled with IRQ 129
[ 2.997936] pcieport 0000:00:00.0: save config 0x00: 0x1f3214c3
[ 3.003848] pcieport 0000:00:00.0: save config 0x04: 0x00100406
[ 3.009749] pcieport 0000:00:00.0: save config 0x08: 0x06040001
[ 3.015653] pcieport 0000:00:00.0: save config 0x0c: 0x00010000
[ 3.021553] pcieport 0000:00:00.0: save config 0x10: 0x20100004
[ 3.027457] pcieport 0000:00:00.0: save config 0x14: 0x00000000
[ 3.033366] pcieport 0000:00:00.0: save config 0x18: 0x00010100
[ 3.039267] pcieport 0000:00:00.0: save config 0x1c: 0x000001f1
[ 3.045171] pcieport 0000:00:00.0: save config 0x20: 0x20002000
[ 3.051071] pcieport 0000:00:00.0: save config 0x24: 0x0001fff1
[ 3.056974] pcieport 0000:00:00.0: save config 0x28: 0x00000000
[ 3.062877] pcieport 0000:00:00.0: save config 0x2c: 0x00000000
[ 3.068777] pcieport 0000:00:00.0: save config 0x30: 0x00000000
[ 3.074680] pcieport 0000:00:00.0: save config 0x34: 0x00000080
[ 3.080581] pcieport 0000:00:00.0: save config 0x38: 0x00000000
[ 3.086485] pcieport 0000:00:00.0: save config 0x3c: 0x00020180
[ 3.093560] FIT: Detected U-Boot 2024.10-ImmortalWrt-r32566-56e91d0bbea5
[ 3.100252] FIT: Selected configuration: "config-mt7986a-bananapi-bpi-r3-mini" (OpenWrt
bananapi_bpi-r3-mini)
[ 3.110162] FIT: kernel sub-image 0x00001000..0x007875e7 "kernel-1" (ARM64 OpenWrt Linux-6.6.110)
[ 3.119976] FIT: flat_dt sub-image 0x00788000..0x0078f2c1 "fdt-1" (ARM64 OpenWrt
bananapi_bpi-r3-mini device tree blob)
[ 3.131607] FIT: filesystem sub-image 0x00790000..0x01c57fff "rootfs-1" (ARM64
OpenWrt bananapi_bpi-r3-mini rootfs)
[ 3.142994] block mmcblk0p5: mapped 1 uImage.FIT filesystem sub-image as /dev/fit0
[ 3.150807] block mmcblk0p5: mapped remaining space as /dev/fitrw
[ 3.157125] clk: Disabling unused clocks
[ 3.164160] VFS: Mounted root (squashfs filesystem) readonly on device 259:1.
[ 3.171459] Freeing unused kernel memory: 512K
[ 3.175943] Run /sbin/init as init process
[ 3.180022] with arguments:
[ 3.182978] /sbin/init
[ 3.185670] with environment:
[ 3.188793] HOME=/
[ 3.191138] TERM=linux
[ 3.290793] init: Console is alive
[ 3.294307] init: - watchdog -
The PCIe link is limited:
8.000 Gb/s available PCIe bandwidth, limited by 5.0 GT/s PCIe x2 link at 0000:00:00.0
So PCIe enumeration works, but the controller is running with missing clocks and incomplete initialization.
It looks like the device-tree for `pcie@11280000` on MT7986/BPI-R3 Mini is missing required clock definitions (`pcie`, `pcie_pipe`, `pcie_aux`, and `top_axi`). This causes the host bridge to probe too early, fail to obtain clocks (EPROBE_DEFER = -517), and continue in a degraded state where NVMe cannot bind.
Can you update the DTS so that all required PCIe clocks are included, or ensure the PCIe driver properly defers probe until clocks are ready? Without this fix, NVMe SSDs cannot work on the R3 Mini.
Thanks!
Where is the output of the above command?
If you are convinced this is the problem, you should ask the guys from immortalwrt?

