@SuperKali I have the original NanoPC-T6 - purchased around 2 years ago.
While it does negotiate HS400 mode, it's not stable - medium or heavy I/O activity like performing an apt upgrade or even booting will cause I/O errors to be logged by the kernel.
I've just tried switching to 6.16.4-edge-rockchip64 via armbian-config. It took a few attempts to get it booted - it hung several times at "begin: running /scripts/init-bottom ... done". On the successful boot, I could see quite a few I/O errors during boot. Here's the kernel logs showing HS400 mode was negotiated along with the I/O errors:
root@nanopct6:~# dmesg | grep mmc
[ 1.776595] mmc0: SDHCI controller on fe2e0000.mmc [fe2e0000.mmc] using ADMA
[ 1.875696] mmc0: new HS400 Enhanced strobe MMC card at address 0001
[ 1.876758] mmcblk0: mmc0:0001 A3A444 230 GiB
[ 1.880737] mmcblk0: p1
[ 1.881457] mmcblk0boot0: mmc0:0001 A3A444 4.00 MiB
[ 1.883682] mmcblk0boot1: mmc0:0001 A3A444 4.00 MiB
[ 1.885887] mmcblk0rpmb: mmc0:0001 A3A444 4.00 MiB, chardev (243:0)
[ 2.191107] dwmmc_rockchip fe2c0000.mmc: IDMAC supports 32-bit address mode.
[ 2.191125] dwmmc_rockchip fe2c0000.mmc: Using internal DMA controller.
[ 2.191132] dwmmc_rockchip fe2c0000.mmc: Version ID is 270a
[ 2.191158] dwmmc_rockchip fe2c0000.mmc: DW MMC controller at irq 122,32 bit host data width,256 deep fifo
[ 2.191894] dwmmc_rockchip fe2c0000.mmc: Got CD GPIO
[ 2.204956] mmc_host mmc1: Bus speed (slot 0) = 400000Hz (slot req 400000Hz, actual 400000HZ div = 0)
[ 4.370210] EXT4-fs (mmcblk0p1): mounted filesystem a4f48be8-f667-4cac-a9a7-61ce8f9035d1 ro with ordered data mode. Quota mode: none.
[ 5.796770] I/O error, dev mmcblk0, sector 261857 op 0x0:(READ) flags 0x80700 phys_seg 1 prio class 2
[ 5.819713] I/O error, dev mmcblk0, sector 261857 op 0x0:(READ) flags 0x0 phys_seg 1 prio class 2
[ 5.848297] I/O error, dev mmcblk0, sector 261857 op 0x0:(READ) flags 0x0 phys_seg 1 prio class 2
[ 7.379796] I/O error, dev mmcblk0, sector 221648 op 0x0:(READ) flags 0x80700 phys_seg 2 prio class 2
[ 7.538332] I/O error, dev mmcblk0, sector 183451920 op 0x0:(READ) flags 0x80700 phys_seg 5 prio class 2
[ 7.727265] I/O error, dev mmcblk0, sector 182816073 op 0x0:(READ) flags 0x80700 phys_seg 4 prio class 2
[ 7.889544] I/O error, dev mmcblk0, sector 182816073 op 0x0:(READ) flags 0x0 phys_seg 1 prio class 2
[ 8.181746] I/O error, dev mmcblk0, sector 182816073 op 0x0:(READ) flags 0x0 phys_seg 1 prio class 2
[ 8.325932] I/O error, dev mmcblk0, sector 182816073 op 0x0:(READ) flags 0x0 phys_seg 1 prio class 2
[ 8.865460] I/O error, dev mmcblk0, sector 189262696 op 0x0:(READ) flags 0x80700 phys_seg 5 prio class 2
[ 9.097362] EXT4-fs (mmcblk0p1): re-mounted a4f48be8-f667-4cac-a9a7-61ce8f9035d1 r/w.
[ 11.883700] I/O error, dev mmcblk0, sector 189160184 op 0x0:(READ) flags 0x80700 phys_seg 3 prio class 2
[ 13.327491] I/O error, dev mmcblk0, sector 189233040 op 0x0:(READ) flags 0x80700 phys_seg 1 prio class 2
[ 13.534473] I/O error, dev mmcblk0, sector 189247499 op 0x0:(READ) flags 0x80700 phys_seg 1 prio class 2
[ 14.342633] I/O error, dev mmcblk0, sector 214158 op 0x0:(READ) flags 0x80700 phys_seg 2 prio class 2
[ 16.773905] I/O error, dev mmcblk0, sector 189145145 op 0x0:(READ) flags 0x80700 phys_seg 2 prio class 2
[ 16.943465] I/O error, dev mmcblk0, sector 189142964 op 0x0:(READ) flags 0x80700 phys_seg 2 prio class 2
[ 16.946051] I/O error, dev mmcblk0, sector 189142966 op 0x0:(READ) flags 0x80700 phys_seg 2 prio class 2
[ 17.923621] I/O error, dev mmcblk0, sector 182816073 op 0x0:(READ) flags 0x0 phys_seg 1 prio class 2
[ 17.943695] I/O error, dev mmcblk0, sector 182816073 op 0x0:(READ) flags 0x0 phys_seg 1 prio class 2
Once booted it's pretty easy to trigger on-demand with a lightweight fio test:
fio --filename=fio.bin --size=1GB --direct=1 --rw=randrw --bs=64k --ioengine=libaio --iodepth=1 --runtime=120 --numjobs=1 --time_based --group_reporting --name=rw --eta-newline=1
rw: (g=0): rw=randrw, bs=(R) 64.0KiB-64.0KiB, (W) 64.0KiB-64.0KiB, (T) 64.0KiB-64.0KiB, ioengine=libaio, iodepth=1
fio-3.36
Starting 1 process
fio: io_u error on file fio.bin: Input/output error: read offset=705167360, buflen=65536
fio: pid=2237, err=5/file:io_u.c:1896, func=io_u error, error=Input/output error
(with similar I/O errors logged in to the kernel logs at the same time).
When running in HS200 mode using the DTB provided by @usual user, I can't trigger any I/O errors - no matter how hard I push it via fio.
I then tried switching to the vendor kernel ("linux-image-vendor-rk35xx=25.8.1 v6.1.115"). That did result in a bunch of I/O errors being logged (including on the apt output), and when rebooting in to the new kernel there was no output whatsoever (I assume it got corrupted and couldn't boot).
So instead, I booted back off the SD card and switched that to the same vendor kernel - which did work. And in better news, I was able to mount the MMC partition from there and run the same fio test without issue.
fio --filename=/mnt/mmc/root/fio.bin --size=1GB --direct=1 --rw=randrw --bs=64k --ioengine=libaio --iodepth=1 --runtime=120 --numjobs=1 --time_based --group_reporting --name=rw --eta-newline=1
rw: (g=0): rw=randrw, bs=(R) 64.0KiB-64.0KiB, (W) 64.0KiB-64.0KiB, (T) 64.0KiB-64.0KiB, ioengine=libaio, iodepth=1
fio-3.36
Starting 1 process
Jobs: 1 (f=1): [m(1)][2.5%][r=40.8MiB/s,w=42.6MiB/s][r=653,w=682 IOPS][eta 01m:57s]
Jobs: 1 (f=1): [m(1)][4.2%][r=43.1MiB/s,w=42.8MiB/s][r=690,w=685 IOPS][eta 01m:55s]
<snip - it continues like this>
The kernel log output is slightly different on this vendor kernel. While it also negotiated in HS400 mode, there's a few extra things - e.g. CQHCI, a second Bus speed line etc.
dmesg | grep mmc
[ 8.561754] sdhci-dwcmshc fe2e0000.mmc: Looking up vmmc-supply from device tree
[ 8.561774] sdhci-dwcmshc fe2e0000.mmc: Looking up vmmc-supply property in node /mmc@fe2e0000 failed
[ 8.565806] sdhci-dwcmshc fe2e0000.mmc: Looking up vqmmc-supply from device tree
[ 8.565834] sdhci-dwcmshc fe2e0000.mmc: Looking up vqmmc-supply property in node /mmc@fe2e0000 failed
[ 8.566361] mmc0: CQHCI version 5.10
[ 8.597464] mmc0: SDHCI controller on fe2e0000.mmc [fe2e0000.mmc] using ADMA
[ 8.729576] mmc0: Command Queue Engine enabled
[ 8.729603] mmc0: new HS400 Enhanced strobe MMC card at address 0001
[ 8.731147] mmcblk0: mmc0:0001 A3A444 230 GiB
[ 8.739493] mmcblk0: p1
[ 8.740546] mmcblk0boot0: mmc0:0001 A3A444 4.00 MiB
[ 8.742822] mmcblk0boot1: mmc0:0001 A3A444 4.00 MiB
[ 8.744487] mmcblk0rpmb: mmc0:0001 A3A444 4.00 MiB, chardev (234:0)
[ 8.946192] dwmmc_rockchip fe2c0000.mmc: No normal pinctrl state
[ 8.946214] dwmmc_rockchip fe2c0000.mmc: No idle pinctrl state
[ 8.946285] dwmmc_rockchip fe2c0000.mmc: IDMAC supports 32-bit address mode.
[ 8.946331] dwmmc_rockchip fe2c0000.mmc: Using internal DMA controller.
[ 8.946345] dwmmc_rockchip fe2c0000.mmc: Version ID is 270a
[ 8.946397] dwmmc_rockchip fe2c0000.mmc: DW MMC controller at irq 154,32 bit host data width,256 deep fifo
[ 8.946494] dwmmc_rockchip fe2c0000.mmc: Looking up vmmc-supply from device tree
[ 8.946761] dwmmc_rockchip fe2c0000.mmc: Looking up vqmmc-supply from device tree
[ 8.960553] mmc_host mmc1: Bus speed (slot 0) = 400000Hz (slot req 400000Hz, actual 400000HZ div = 0)
[ 9.063046] mmc_host mmc1: Bus speed (slot 0) = 198000000Hz (slot req 200000000Hz, actual 198000000HZ div = 0)
[ 9.176670] dwmmc_rockchip fe2c0000.mmc: Successfully tuned phase to 257
[ 9.176684] mmc1: new ultra high speed SDR104 SDXC card at address aaaa
[ 9.177135] mmcblk1: mmc1:aaaa SD256 238 GiB
[ 9.180796] mmcblk1: p1
[ 10.118815] EXT4-fs (mmcblk1p1): mounted filesystem with writeback data mode. Quota mode: none.
[ 11.268903] EXT4-fs (mmcblk1p1): re-mounted. Quota mode: none.
[ 110.819476] EXT4-fs (mmcblk0p1): mounted filesystem with ordered data mode. Quota mode: none.
------
@usual user Thank you for the information about how you compiled the DTB with the overlay built in. It's also good to hear that the board isn't too difficult to remove. I tried to apply a little bit of pressure around the M.2 slot and the board just fell out!
Now I need to find where I put my UART adapter...