August 1Aug 1 Hi, I'm trying to get Armbian fully working on an MX10 F1 TV Box (Allwinner H313, 2GB LPDDR3, 16GB eMMC). The box boots using the X96Q LPDDR3 DTB (X96Q TV-Box LPDDR3), but several onboard devices are not working: ❌ Ethernet ❌ Built-in WiFi ❌ Bluetooth ❌ CPU frequency scaling Working: ✅HDMI ✅GPU (Panfrost / OpenGL ES 3.1) ✅USB ✅SD card ✅eMMC I've extracted the original Android DTB and DTS, and I'm attaching them together with the Armbian dmesg. Could someone familiar with Allwinner Device Trees help identify what is missing or needs to be changed to create proper support for this board? Thanks! dmesg.txt mx10-f1-android.dtb mx10-f1-android.dts
August 2Aug 2 Author Hello @Nick A, Thanks for the quick reply. The WiFi/BT chip is an AIC8800D40L. Board photos attached 😉
August 2Aug 2 Hi Norbert, Found the actual issue. The X96Q LPDDR3 DTB your box is booting (sun50i-h313-x96-q-lpddr3.dts) has WiFi nodes that are roughly right for an AIC8800-style chip, but its Bluetooth node assumes a completely different, discrete chip: Quote bluetooth { compatible = "brcm,bcm43438-bt"; ... }; That's a Broadcom BT binding on separate R_PIO pins (PL4/PL5/PL6). Since your board has a single AIC8800D40L combo chip doing both WiFi and BT, that node is trying to bring up hardware that doesn't exist on your board — which explains why BT isn't working, and makes me want to double check the WiFi bring-up too rather than assume it's board-accurate. Using the pin values decoded from your own mx10-f1-android.dts, here's a corrected wifi + BT block: dts Quote / { reg_vcc_wifi: reg_vcc_wifi { compatible = "regulator-fixed"; regulator-name = "vcc-wifi"; regulator-min-microvolt = <3300000>; regulator-max-microvolt = <3300000>; gpio = <&pio 7 5 GPIO_ACTIVE_HIGH>; /* PH5 = wlan_pwr */ enable-active-high; regulator-always-on; status = "okay"; }; wifi_pwrseq: wifi_pwrseq { compatible = "mmc-pwrseq-simple"; reset-gpios = <&pio 6 18 GPIO_ACTIVE_LOW>; /* PG18 WL_REG_ON */ clocks = <&rtc CLK_OSC32K_FANOUT>; clock-names = "ext_clock"; pinctrl-names = "default"; pinctrl-0 = <&x32clk_fanout_pin>; /* PG10, MUX3 */ }; }; &mmc1 { vmmc-supply = <®_vcc_wifi>; /* chip power, PH5 */ vqmmc-supply = <®_dldo1>; /* IO rail — not declared anywhere in the android dts for this slot, see note below */ mmc-pwrseq = <&wifi_pwrseq>; bus-width = <4>; non-removable; status = "okay"; wlan: wifi@1 { reg = <1>; interrupt-parent = <&pio>; interrupts = <6 15 IRQ_TYPE_EDGE_RISING>; /* PG15 WL_HOSTWAKE */ interrupt-names = "host-wake"; }; }; &uart1 { pinctrl-names = "default"; pinctrl-0 = <&uart1_pins>, <&uart1_rts_cts_pins>; uart-has-rtscts; status = "okay"; bluetooth { compatible = "allwinner,sunxi-btlpm"; clocks = <&rtc 1>; clock-names = "lpo"; vbat-supply = <®_dldo1>; vddio-supply = <®_dldo1>; reset-gpios = <&pio 6 19 GPIO_ACTIVE_LOW>; /* PG19 bt_rst_n, per your android dts */ device-wakeup-gpios = <&pio 6 17 GPIO_ACTIVE_HIGH>; /* PG17 bt_wake */ host-wakeup-gpios = <&pio 6 16 GPIO_ACTIVE_HIGH>; /* PG16 bt_hostwake */ }; }; Two real uncertainties I want to flag rather than gloss over, since both are unverified against your actual hardware: 1. **`vqmmc-supply`** — your android dts doesn't declare a vmmc/vqmmc supply for the wifi mmc slot at all (unlike sdc0/sdc2, which do). The vendor driver powers the chip imperatively through the wlan node's own GPIOs instead. So `reg_dldo1` here is a guess, not a confirmed value — if wifi still doesn't enumerate after this change, this is the first thing to revisit. 2. **BT reset pin role conflict** — your android dts has `bt_rst_n` on PG19 (pio 6, pin 19), which is what I used above. But the X98H reference board's dts uses that same pin (pio 6 19) as an `enable-gpios`, and uses a *different* pin (pio 6 13) for `reset-gpios`. The two reference sources disagree on what PG19 actually does. I went with your own android dts since it's specific to your hardware, but this is worth testing carefully rather than trusting either source blindly — if BT probe fails or misbehaves, that pin assignment is the first suspect. Can you try building with this and post `dmesg | grep -iE "aic|mmc1|bluetooth"` after boot? Edited August 2Aug 2 by Nick A
August 2Aug 2 Author Hello @Nick A Thanks for your reply. I patched the dts. Still only the lo interface is visible. dmesg attached. dmesg_nick1.log sun50i-h313-x96q-lpddr3_nick1.dts Edit: I attached the android dmesg log... (i'm a bit confused. the board has AIC8800 chip, but the armbian dmsg logging marlin/unisoc wifi drivers) android_dmesg.log Edited August 2Aug 2 by Norbert Kett added android dmesg log.
August 2Aug 2 https://github.com/NickAlilovic/build/blob/v20250306/config/boards/x96q-lpddr3.csc Remove this enable_extension "uwe5622-allwinner" https://github.com/NickAlilovic/build/blob/v20250306/config/boards/x98h.csc Add this Quote function post_family_tweaks__x96q() { display_alert "Applying wifi firmware" pushd "$SDCARD/lib/firmware" ln -s "aic8800/SDIO/aic8800D80" "aic8800_sdio" # use armbian-firmware cp -R $SRC/packages/blobs/sunxi/h618/armbian-audio-config $SDCARD/usr/lib/armbian cp -R $SRC/packages/blobs/sunxi/h618/armbian-audio-config $SDCARD/lib/armbian popd } Edited August 2Aug 2 by Nick A Might still need the uart1 node
August 2Aug 2 Author Hello @Nick A Just to confirm: should I add post_family_tweaks__x96q() to x96q-lpddr3.csc, or to x98h.csc? (I'm using the official Armbian build tree.)
August 2Aug 2 You need this in your aliases. At the very top of your DTS. Quote serial1 = &uart1; Edited August 2Aug 2 by Nick A
August 3Aug 3 Author Hello @Nick A Just to confirm: should I add post_family_tweaks__x96q() to x96q-lpddr3.csc, or to x98h.csc? (I'm using the official Armbian build tree.)
August 3Aug 3 You need to edit x96q-lpddr3.csc. Since you are using official Armbian build tree you don't need my post_family_tweaks__x96q(). remove Quote enable_extension "uwe5622-allwinner" add this instead. Quote enable_extension "radxa-aic8800" AIC8800_TYPE="sdio"
August 3Aug 3 Author Hello @Nick A Thank you! 😄 Replacing the WiFi extension solved the issue. wlan0 is now created, scans successfully, connects to my AP, and receives both IPv4 and IPv6 addresses. I've attached a fresh dmesg from the working configuration. Bluetooth doesn't seem to be working yet, but that's not really important for me since I'd like to use this box as a headless server over Ethernet. Do you have any suggestions for enabling CPU frequency scaling and the onboard Ethernet? dmesg_nick2.log
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.