* [PATCH v2 1/4] dt-bindings: riscv: thead: add Milk-V Meles
2026-10-01 7:44 [PATCH v2 0/4] riscv: dts: thead: Add Milk-V Meles support Han Gao
@ 2026-10-01 7:44 ` Han Gao
2026-10-01 19:05 ` Conor Dooley
2026-10-01 19:34 ` Drew Fustini
2026-10-01 7:44 ` [PATCH v2 2/4] riscv: dts: " Han Gao
` (2 subsequent siblings)
3 siblings, 2 replies; 7+ messages in thread
From: Han Gao @ 2026-10-01 7:44 UTC (permalink / raw)
To: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Paul Walmsley,
Palmer Dabbelt, Albert Ou, Alexandre Ghiti, Jisheng Zhang,
Drew Fustini, Guo Ren, Fu Wei
Cc: Han Gao, devicetree, linux-riscv, linux-kernel, Han Gao
Document the Milk-V Meles board compatible with the TH1520 fallback.
Signed-off-by: Han Gao <gaohan@iscas.ac.cn>
---
Documentation/devicetree/bindings/riscv/thead.yaml | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/Documentation/devicetree/bindings/riscv/thead.yaml b/Documentation/devicetree/bindings/riscv/thead.yaml
index 301912dcd290e60f816d380152591106de9415b4..e8170915f4d6d63fbc10a0e6863ea7d5000e3643 100644
--- a/Documentation/devicetree/bindings/riscv/thead.yaml
+++ b/Documentation/devicetree/bindings/riscv/thead.yaml
@@ -17,9 +17,11 @@ properties:
const: '/'
compatible:
oneOf:
- - description: BeagleV Ahead single board computer
+ - description: TH1520 single board computers
items:
- - const: beagle,beaglev-ahead
+ - enum:
+ - beagle,beaglev-ahead
+ - milkv,meles
- const: thead,th1520
- description: Sipeed Lichee Pi 4A board for the Sipeed Lichee Module 4A
items:
--
2.47.3
^ permalink raw reply [flat|nested] 7+ messages in thread* Re: [PATCH v2 1/4] dt-bindings: riscv: thead: add Milk-V Meles
2026-10-01 7:44 ` [PATCH v2 1/4] dt-bindings: riscv: thead: add Milk-V Meles Han Gao
@ 2026-10-01 19:05 ` Conor Dooley
2026-10-01 19:34 ` Drew Fustini
1 sibling, 0 replies; 7+ messages in thread
From: Conor Dooley @ 2026-10-01 19:05 UTC (permalink / raw)
To: Han Gao
Cc: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Paul Walmsley,
Palmer Dabbelt, Albert Ou, Alexandre Ghiti, Jisheng Zhang,
Drew Fustini, Guo Ren, Fu Wei, Han Gao, devicetree, linux-riscv,
linux-kernel
[-- Attachment #1: Type: text/plain, Size: 75 bytes --]
Acked-by: Conor Dooley <conor.dooley@microchip.com>
pw-bot: not-applicable
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v2 1/4] dt-bindings: riscv: thead: add Milk-V Meles
2026-10-01 7:44 ` [PATCH v2 1/4] dt-bindings: riscv: thead: add Milk-V Meles Han Gao
2026-10-01 19:05 ` Conor Dooley
@ 2026-10-01 19:34 ` Drew Fustini
1 sibling, 0 replies; 7+ messages in thread
From: Drew Fustini @ 2026-10-01 19:34 UTC (permalink / raw)
To: Han Gao
Cc: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Paul Walmsley,
Palmer Dabbelt, Albert Ou, Alexandre Ghiti, Jisheng Zhang,
Guo Ren, Fu Wei, Han Gao, devicetree, linux-riscv, linux-kernel
On Thu, Oct 01, 2026 at 03:44:10PM +0800, Han Gao wrote:
> Document the Milk-V Meles board compatible with the TH1520 fallback.
>
> Signed-off-by: Han Gao <gaohan@iscas.ac.cn>
> ---
> Documentation/devicetree/bindings/riscv/thead.yaml | 6 ++++--
> 1 file changed, 4 insertions(+), 2 deletions(-)
>
> diff --git a/Documentation/devicetree/bindings/riscv/thead.yaml b/Documentation/devicetree/bindings/riscv/thead.yaml
> index 301912dcd290e60f816d380152591106de9415b4..e8170915f4d6d63fbc10a0e6863ea7d5000e3643 100644
> --- a/Documentation/devicetree/bindings/riscv/thead.yaml
> +++ b/Documentation/devicetree/bindings/riscv/thead.yaml
> @@ -17,9 +17,11 @@ properties:
> const: '/'
> compatible:
> oneOf:
> - - description: BeagleV Ahead single board computer
> + - description: TH1520 single board computers
> items:
> - - const: beagle,beaglev-ahead
> + - enum:
> + - beagle,beaglev-ahead
> + - milkv,meles
> - const: thead,th1520
Thanks for making the change.
Reviewed-by: Drew Fustini <fustini@kernel.org>
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH v2 2/4] riscv: dts: thead: add Milk-V Meles
2026-10-01 7:44 [PATCH v2 0/4] riscv: dts: thead: Add Milk-V Meles support Han Gao
2026-10-01 7:44 ` [PATCH v2 1/4] dt-bindings: riscv: thead: add Milk-V Meles Han Gao
@ 2026-10-01 7:44 ` Han Gao
2026-10-01 7:44 ` [PATCH v2 3/4] riscv: dts: thead: enable AP6256 Wi-Fi on " Han Gao
2026-10-01 7:44 ` [PATCH v2 4/4] riscv: dts: thead: enable HDMI " Han Gao
3 siblings, 0 replies; 7+ messages in thread
From: Han Gao @ 2026-10-01 7:44 UTC (permalink / raw)
To: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Paul Walmsley,
Palmer Dabbelt, Albert Ou, Alexandre Ghiti, Jisheng Zhang,
Drew Fustini, Guo Ren, Fu Wei
Cc: Han Gao, devicetree, linux-riscv, linux-kernel, Han Gao
Add the Milk-V Meles board with UART0, eMMC, SD, Ethernet and the PWM2
fan. Describe the board pin assignments and the PHY on the GMAC0 MDIO
bus. Give GPIO banks aliases and name the exposed 40-pin header lines.
The eMMC I/O supply is fixed at 1.8 V. Enable DDR52 at that voltage and
retain the 52 MHz board limit. Describe 8 GiB as the default memory
size; firmware updates it to match the detected RAM capacity.
Reviewed-by: Drew Fustini <fustini@kernel.org>
Signed-off-by: Han Gao <gaohan@iscas.ac.cn>
---
arch/riscv/boot/dts/thead/Makefile | 1 +
arch/riscv/boot/dts/thead/th1520-milkv-meles.dts | 227 +++++++++++++++++++++++
2 files changed, 228 insertions(+)
diff --git a/arch/riscv/boot/dts/thead/Makefile b/arch/riscv/boot/dts/thead/Makefile
index b55a17127c2bc06cbfb06d5f7c92dc7296e98437..25f7fe068368c97df2490bedc3eae70276a2e442 100644
--- a/arch/riscv/boot/dts/thead/Makefile
+++ b/arch/riscv/boot/dts/thead/Makefile
@@ -1,2 +1,3 @@
# SPDX-License-Identifier: GPL-2.0
dtb-$(CONFIG_ARCH_THEAD) += th1520-lichee-pi-4a.dtb th1520-beaglev-ahead.dtb
+dtb-$(CONFIG_ARCH_THEAD) += th1520-milkv-meles.dtb
diff --git a/arch/riscv/boot/dts/thead/th1520-milkv-meles.dts b/arch/riscv/boot/dts/thead/th1520-milkv-meles.dts
new file mode 100644
index 0000000000000000000000000000000000000000..3714047190789bfccd8ff6810342d7ff865e74e4
--- /dev/null
+++ b/arch/riscv/boot/dts/thead/th1520-milkv-meles.dts
@@ -0,0 +1,227 @@
+// SPDX-License-Identifier: (GPL-2.0 OR MIT)
+/*
+ * Copyright (C) 2021-2022 Alibaba Group Holding Limited.
+ * Copyright (C) 2026 Han Gao <gaohan@iscas.ac.cn>
+ */
+
+/dts-v1/;
+
+#include "th1520.dtsi"
+
+/ {
+ model = "Milk-V Meles";
+ compatible = "milkv,meles", "thead,th1520";
+
+ aliases {
+ ethernet0 = &gmac0;
+ gpio0 = &gpio0;
+ gpio1 = &gpio1;
+ gpio2 = &gpio2;
+ gpio3 = &gpio3;
+ gpio4 = &gpio4;
+ gpio5 = &aogpio;
+ mmc0 = &emmc;
+ mmc1 = &sdio0;
+ serial0 = &uart0;
+ };
+
+ chosen {
+ stdout-path = "serial0:115200n8";
+ };
+
+ memory@0 {
+ device_type = "memory";
+ reg = <0x0 0x0 0x2 0x0>;
+ };
+
+ fan: pwm-fan {
+ compatible = "pwm-fan";
+ pinctrl-names = "default";
+ pinctrl-0 = <&fan_pins>;
+ pwms = <&pwm 2 10000000 0>;
+ cooling-levels = <0 64 192 255>;
+ #cooling-cells = <2>;
+ };
+};
+
+/* Names follow the 40-pin header signal labels. */
+&aogpio {
+ gpio-line-names = "", "", "", "", "", "", "", "AOGPIO_7",
+ "AOGPIO_8", "", "AOGPIO_10", "AOGPIO_11";
+};
+
+&emmc {
+ bus-width = <8>;
+ max-frequency = <52000000>;
+ cap-mmc-highspeed;
+ mmc-ddr-1_8v;
+ non-removable;
+ no-sdio;
+ no-sd;
+
+ status = "okay";
+};
+
+&gmac0 {
+ pinctrl-names = "default";
+ pinctrl-0 = <&gmac0_pins>, <&mdio0_pins>;
+ phy-handle = <&phy0>;
+ phy-mode = "rgmii-id";
+
+ status = "okay";
+};
+
+&gpio0 {
+ gpio-line-names = "", "", "", "", "", "", "", "", "GPIO0_8",
+ "GPIO0_9", "GPIO0_10", "GPIO0_11", "", "", "",
+ "", "GPIO0_16", "GPIO0_17";
+};
+
+&gpio2 {
+ gpio-line-names = "GPIO2_0", "GPIO2_1", "", "", "", "", "", "",
+ "", "", "", "GPIO2_11", "GPIO2_12", "",
+ "GPIO2_14", "GPIO2_15", "GPIO2_16", "GPIO2_17",
+ "", "", "", "", "GPIO2_22", "GPIO2_23",
+ "GPIO2_24", "GPIO2_25", "", "", "", "", "",
+ "GPIO2_31";
+};
+
+&gpio3 {
+ gpio-line-names = "GPIO3_0", "GPIO3_1", "GPIO3_2", "GPIO3_3";
+};
+
+&mdio0 {
+ phy0: ethernet-phy@1 {
+ reg = <1>;
+ };
+};
+
+&osc {
+ clock-frequency = <24000000>;
+};
+
+&osc_32k {
+ clock-frequency = <32768>;
+};
+
+&padctrl0_apsys {
+ fan_pins: fan-0 {
+ pwm2-pins {
+ pins = "QSPI0_CSN1";
+ function = "pwm";
+ bias-disable;
+ drive-strength = <25>;
+ input-disable;
+ input-schmitt-disable;
+ slew-rate = <0>;
+ };
+ };
+
+ gmac0_pins: gmac0-0 {
+ tx-pins {
+ pins = "GMAC0_TX_CLK",
+ "GMAC0_TXEN",
+ "GMAC0_TXD0",
+ "GMAC0_TXD1",
+ "GMAC0_TXD2",
+ "GMAC0_TXD3";
+ function = "gmac0";
+ bias-disable;
+ drive-strength = <25>;
+ input-disable;
+ input-schmitt-disable;
+ slew-rate = <0>;
+ };
+
+ rx-pins {
+ pins = "GMAC0_RX_CLK",
+ "GMAC0_RXDV",
+ "GMAC0_RXD0",
+ "GMAC0_RXD1",
+ "GMAC0_RXD2",
+ "GMAC0_RXD3";
+ function = "gmac0";
+ bias-disable;
+ drive-strength = <1>;
+ input-enable;
+ input-schmitt-disable;
+ slew-rate = <0>;
+ };
+ };
+
+ mdio0_pins: mdio0-0 {
+ mdc-pins {
+ pins = "GMAC0_MDC";
+ function = "gmac0";
+ bias-disable;
+ drive-strength = <13>;
+ input-disable;
+ input-schmitt-disable;
+ slew-rate = <0>;
+ };
+
+ mdio-pins {
+ pins = "GMAC0_MDIO";
+ function = "gmac0";
+ bias-disable;
+ drive-strength = <13>;
+ input-enable;
+ input-schmitt-enable;
+ slew-rate = <0>;
+ };
+ };
+
+ sdio0_pins: sdio0-0 {
+ detn-pins {
+ pins = "SDIO0_DETN";
+ function = "sdio";
+ bias-disable; /* external pull-up */
+ drive-strength = <1>;
+ input-enable;
+ input-schmitt-enable;
+ slew-rate = <0>;
+ };
+ };
+
+ uart0_pins: uart0-0 {
+ tx-pins {
+ pins = "UART0_TXD";
+ function = "uart";
+ bias-disable;
+ drive-strength = <3>;
+ input-disable;
+ input-schmitt-disable;
+ slew-rate = <0>;
+ };
+
+ rx-pins {
+ pins = "UART0_RXD";
+ function = "uart";
+ bias-disable;
+ drive-strength = <1>;
+ input-enable;
+ input-schmitt-enable;
+ slew-rate = <0>;
+ };
+ };
+};
+
+&sdio0 {
+ pinctrl-names = "default";
+ pinctrl-0 = <&sdio0_pins>;
+ bus-width = <4>;
+ max-frequency = <50000000>;
+ cap-sd-highspeed;
+ no-1-8-v;
+ disable-wp;
+ no-sdio;
+
+ status = "okay";
+};
+
+&uart0 {
+ pinctrl-names = "default";
+ pinctrl-0 = <&uart0_pins>;
+
+ status = "okay";
+};
--
2.47.3
^ permalink raw reply [flat|nested] 7+ messages in thread* [PATCH v2 3/4] riscv: dts: thead: enable AP6256 Wi-Fi on Milk-V Meles
2026-10-01 7:44 [PATCH v2 0/4] riscv: dts: thead: Add Milk-V Meles support Han Gao
2026-10-01 7:44 ` [PATCH v2 1/4] dt-bindings: riscv: thead: add Milk-V Meles Han Gao
2026-10-01 7:44 ` [PATCH v2 2/4] riscv: dts: " Han Gao
@ 2026-10-01 7:44 ` Han Gao
2026-10-01 7:44 ` [PATCH v2 4/4] riscv: dts: thead: enable HDMI " Han Gao
3 siblings, 0 replies; 7+ messages in thread
From: Han Gao @ 2026-10-01 7:44 UTC (permalink / raw)
To: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Paul Walmsley,
Palmer Dabbelt, Albert Ou, Alexandre Ghiti, Jisheng Zhang,
Drew Fustini, Guo Ren, Fu Wei
Cc: Han Gao, devicetree, linux-riscv, linux-kernel, Han Gao
Connect AP6256 to SDIO1 with its fixed supplies and PMIC LPO clock.
Use GPIO0_20 for WL_REG_ON and GPIO0_21 for the host-wake interrupt.
Keep GPIO1_24 low to select the external antenna by default.
Use the existing BCM43456 binding and the 198 MHz board limit.
Keep module power during suspend and assign mmc2 to SDIO1.
Reviewed-by: Drew Fustini <fustini@kernel.org>
Signed-off-by: Han Gao <gaohan@iscas.ac.cn>
---
arch/riscv/boot/dts/thead/th1520-milkv-meles.dts | 94 ++++++++++++++++++++++++
1 file changed, 94 insertions(+)
diff --git a/arch/riscv/boot/dts/thead/th1520-milkv-meles.dts b/arch/riscv/boot/dts/thead/th1520-milkv-meles.dts
index 3714047190789bfccd8ff6810342d7ff865e74e4..bb1be377569063b0f6d6864c8d18d37103c2c7a6 100644
--- a/arch/riscv/boot/dts/thead/th1520-milkv-meles.dts
+++ b/arch/riscv/boot/dts/thead/th1520-milkv-meles.dts
@@ -7,6 +7,7 @@
/dts-v1/;
#include "th1520.dtsi"
+#include <dt-bindings/gpio/gpio.h>
/ {
model = "Milk-V Meles";
@@ -22,6 +23,7 @@ aliases {
gpio5 = &aogpio;
mmc0 = &emmc;
mmc1 = &sdio0;
+ mmc2 = &sdio1;
serial0 = &uart0;
};
@@ -29,6 +31,13 @@ chosen {
stdout-path = "serial0:115200n8";
};
+ wifi_32k: clock-wifi-32k {
+ compatible = "fixed-clock";
+ #clock-cells = <0>;
+ clock-frequency = <32768>;
+ /* The module LPO input is supplied by PMIC_32K_OUT. */
+ };
+
memory@0 {
device_type = "memory";
reg = <0x0 0x0 0x2 0x0>;
@@ -42,6 +51,30 @@ fan: pwm-fan {
cooling-levels = <0 64 192 255>;
#cooling-cells = <2>;
};
+
+ wifi_vbat: regulator-wifi-vbat {
+ compatible = "regulator-fixed";
+ regulator-name = "WIFI_3V3";
+ regulator-min-microvolt = <3300000>;
+ regulator-max-microvolt = <3300000>;
+ regulator-always-on;
+ };
+
+ wifi_vddio: regulator-wifi-vddio {
+ compatible = "regulator-fixed";
+ regulator-name = "WIFI_VDDIO";
+ regulator-min-microvolt = <1800000>;
+ regulator-max-microvolt = <1800000>;
+ regulator-always-on;
+ };
+
+ wifi_pwrseq: wifi-pwrseq {
+ compatible = "mmc-pwrseq-simple";
+ pinctrl-names = "default";
+ pinctrl-0 = <&wifi_enable_pins>;
+ reset-gpios = <&gpio0 20 GPIO_ACTIVE_LOW>;
+ post-power-on-delay-ms = <50>;
+ };
};
/* Names follow the 40-pin header signal labels. */
@@ -77,6 +110,16 @@ &gpio0 {
"", "GPIO0_16", "GPIO0_17";
};
+&gpio1 {
+ /* GPIO1_24 low selects the external antenna through U39. */
+ wifi-antenna-select-hog {
+ gpio-hog;
+ gpios = <24 GPIO_ACTIVE_HIGH>;
+ output-low;
+ line-name = "wifi-external-antenna";
+ };
+};
+
&gpio2 {
gpio-line-names = "GPIO2_0", "GPIO2_1", "", "", "", "", "", "",
"", "", "", "GPIO2_11", "GPIO2_12", "",
@@ -206,6 +249,27 @@ rx-pins {
};
};
+&padctrl1_apsys {
+ wifi_enable_pins: wifi-enable-0 {
+ gpio-pins {
+ pins = "GPIO0_20";
+ bias-disable;
+ drive-strength = <7>;
+ input-disable;
+ };
+ };
+
+ wifi_host_wake_pins: wifi-host-wake-0 {
+ gpio-pins {
+ pins = "GPIO0_21";
+ function = "gpio";
+ bias-disable;
+ input-enable;
+ input-schmitt-enable;
+ };
+ };
+};
+
&sdio0 {
pinctrl-names = "default";
pinctrl-0 = <&sdio0_pins>;
@@ -219,6 +283,36 @@ &sdio0 {
status = "okay";
};
+&sdio1 {
+ bus-width = <4>;
+ max-frequency = <198000000>;
+ cap-sd-highspeed;
+ cap-sdio-irq;
+ non-removable;
+ no-sd;
+ no-mmc;
+ keep-power-in-suspend;
+ vmmc-supply = <&wifi_vbat>;
+ vqmmc-supply = <&wifi_vddio>;
+ mmc-pwrseq = <&wifi_pwrseq>;
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ status = "okay";
+
+ wifi@1 {
+ compatible = "brcm,bcm43456-fmac", "brcm,bcm4329-fmac";
+ reg = <1>;
+ clocks = <&wifi_32k>;
+ clock-names = "lpo";
+ pinctrl-names = "default";
+ pinctrl-0 = <&wifi_host_wake_pins>;
+ interrupt-parent = <&gpio0>;
+ interrupts = <21 IRQ_TYPE_LEVEL_HIGH>;
+ interrupt-names = "host-wake";
+ };
+};
+
&uart0 {
pinctrl-names = "default";
pinctrl-0 = <&uart0_pins>;
--
2.47.3
^ permalink raw reply [flat|nested] 7+ messages in thread* [PATCH v2 4/4] riscv: dts: thead: enable HDMI on Milk-V Meles
2026-10-01 7:44 [PATCH v2 0/4] riscv: dts: thead: Add Milk-V Meles support Han Gao
` (2 preceding siblings ...)
2026-10-01 7:44 ` [PATCH v2 3/4] riscv: dts: thead: enable AP6256 Wi-Fi on " Han Gao
@ 2026-10-01 7:44 ` Han Gao
3 siblings, 0 replies; 7+ messages in thread
From: Han Gao @ 2026-10-01 7:44 UTC (permalink / raw)
To: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Paul Walmsley,
Palmer Dabbelt, Albert Ou, Alexandre Ghiti, Jisheng Zhang,
Drew Fustini, Guo Ren, Fu Wei
Cc: Han Gao, devicetree, linux-riscv, linux-kernel, Han Gao
Enable the DC8200 display controller and DW-HDMI transmitter. Connect
the transmitter to the board Type-A HDMI connector with reciprocal graph
endpoints.
Reviewed-by: Drew Fustini <fustini@kernel.org>
Signed-off-by: Han Gao <gaohan@iscas.ac.cn>
---
arch/riscv/boot/dts/thead/th1520-milkv-meles.dts | 25 ++++++++++++++++++++++++
1 file changed, 25 insertions(+)
diff --git a/arch/riscv/boot/dts/thead/th1520-milkv-meles.dts b/arch/riscv/boot/dts/thead/th1520-milkv-meles.dts
index bb1be377569063b0f6d6864c8d18d37103c2c7a6..1c9de6b37a3e6f7a4ec34fdfa584332c7ab3fc59 100644
--- a/arch/riscv/boot/dts/thead/th1520-milkv-meles.dts
+++ b/arch/riscv/boot/dts/thead/th1520-milkv-meles.dts
@@ -38,6 +38,17 @@ wifi_32k: clock-wifi-32k {
/* The module LPO input is supplied by PMIC_32K_OUT. */
};
+ hdmi-connector {
+ compatible = "hdmi-connector";
+ type = "a";
+
+ port {
+ hdmi_con_in: endpoint {
+ remote-endpoint = <&hdmi_out_con>;
+ };
+ };
+ };
+
memory@0 {
device_type = "memory";
reg = <0x0 0x0 0x2 0x0>;
@@ -83,6 +94,10 @@ &aogpio {
"AOGPIO_8", "", "AOGPIO_10", "AOGPIO_11";
};
+&dpu {
+ status = "okay";
+};
+
&emmc {
bus-width = <8>;
max-frequency = <52000000>;
@@ -133,6 +148,16 @@ &gpio3 {
gpio-line-names = "GPIO3_0", "GPIO3_1", "GPIO3_2", "GPIO3_3";
};
+&hdmi {
+ status = "okay";
+};
+
+&hdmi_out_port {
+ hdmi_out_con: endpoint {
+ remote-endpoint = <&hdmi_con_in>;
+ };
+};
+
&mdio0 {
phy0: ethernet-phy@1 {
reg = <1>;
--
2.47.3
^ permalink raw reply [flat|nested] 7+ messages in thread