* [PATCH 1/1] ARM: dts: sunxi: add support for NetCube Systems Kumquat
@ 2025-01-02 11:54 Lukas Schmid
0 siblings, 0 replies; 5+ messages in thread
From: Lukas Schmid @ 2025-01-02 11:54 UTC (permalink / raw)
To: linux-sunxi; +Cc: Lukas Schmid
NetCube Systems Kumquat is a board based on the Allwinner V3s SoC,
including:
- 64MB DDR2 included in SoC
- 10/100 Mbps Ethernet
- USB-C DRD
- Audio Codec
- Isolated CAN-FD
- ESP32 over SDIO
- 8MB SPI-NOR Flash for bootloader
- I2C EEPROM for MAC addresses
- SDIO Connector for eMMC or SD-Card
- 8x 12/24V IOs, 4x normally open relays
- DS3232 RTC
- QWIIC connectors for external I2C devices
Signed-off-by: Lukas Schmid <lukas.schmid@netcube.li>
---
arch/arm/boot/dts/allwinner/Makefile | 2 +
.../allwinner/sun8i-v3s-netcube-kumquat.dts | 269 ++++++++++++++++++
2 files changed, 271 insertions(+)
create mode 100644 arch/arm/boot/dts/allwinner/sun8i-v3s-netcube-kumquat.dts
diff --git a/arch/arm/boot/dts/allwinner/Makefile b/arch/arm/boot/dts/allwinner/Makefile
index 48666f73e638..d799ad153b37 100644
--- a/arch/arm/boot/dts/allwinner/Makefile
+++ b/arch/arm/boot/dts/allwinner/Makefile
@@ -199,6 +199,7 @@ DTC_FLAGS_sun8i-h3-nanopi-r1 := -@
DTC_FLAGS_sun8i-h3-orangepi-pc := -@
DTC_FLAGS_sun8i-h3-bananapi-m2-plus-v1.2 := -@
DTC_FLAGS_sun8i-h3-orangepi-pc-plus := -@
+DTC_FLAGS_sun8i-v3s-netcube-kumquat := -@
dtb-$(CONFIG_MACH_SUN8I) += \
sun8i-a23-evb.dtb \
sun8i-a23-gt90h-v4.dtb \
@@ -261,6 +262,7 @@ dtb-$(CONFIG_MACH_SUN8I) += \
sun8i-v3s-anbernic-rg-nano.dtb \
sun8i-v3s-licheepi-zero.dtb \
sun8i-v3s-licheepi-zero-dock.dtb \
+ sun8i-v3s-netcube-kumquat.dtb \
sun8i-v40-bananapi-m2-berry.dtb
dtb-$(CONFIG_MACH_SUN9I) += \
sun9i-a80-optimus.dtb \
diff --git a/arch/arm/boot/dts/allwinner/sun8i-v3s-netcube-kumquat.dts b/arch/arm/boot/dts/allwinner/sun8i-v3s-netcube-kumquat.dts
new file mode 100644
index 000000000000..1793a9b7f796
--- /dev/null
+++ b/arch/arm/boot/dts/allwinner/sun8i-v3s-netcube-kumquat.dts
@@ -0,0 +1,269 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (C) 2025 Lukas Schmid <lukas.schmid@netcube.li>
+ */
+
+/dts-v1/;
+#include "sun8i-v3s.dtsi"
+
+#include <dt-bindings/input/input.h>
+#include <dt-bindings/leds/common.h>
+#include <dt-bindings/gpio/gpio.h>
+
+/{
+ model = "NetCube Systems Kumquat";
+ compatible = "netcube,kumquat", "allwinner,sun8i-v3s";
+
+ aliases {
+ serial0 = &uart0;
+ ethernet0 = &emac;
+ rtc0 = &ds3232;
+ };
+
+ chosen {
+ stdout-path = "serial0:115200n8";
+ };
+
+ cpus {
+ cpu0: cpu@0 {
+ clock-frequency = <1200000000>;
+ };
+ };
+
+ leds {
+ compatible = "gpio-leds";
+
+ heartbeat_led {
+ gpios = <&pio 4 4 GPIO_ACTIVE_HIGH>; /* PE4 */
+ linux,default-trigger = "heartbeat";
+ function = LED_FUNCTION_HEARTBEAT;
+ color = <LED_COLOR_ID_GREEN>;
+ };
+
+ mmc0_act_led {
+ gpios = <&pio 5 6 GPIO_ACTIVE_HIGH>; /* PF6 */
+ linux,default-trigger = "mmc0";
+ function = LED_FUNCTION_DISK;
+ color = <LED_COLOR_ID_GREEN>;
+ };
+ };
+
+ gpio-keys {
+ compatible = "gpio-keys";
+ autorepeat;
+
+ key-user {
+ label = "GPIO Key User";
+ linux,code = <KEY_PROG1>;
+ gpios = <&pio 1 2 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; /* PB2 */
+ };
+ };
+
+ reg_vcc5v0: vcc5v0 {
+ compatible = "regulator-fixed";
+ regulator-name = "vcc5v0";
+ regulator-min-microvolt = <5000000>;
+ regulator-max-microvolt = <5000000>;
+ };
+
+ reg_vcc3v3: vcc3v3 {
+ compatible = "regulator-fixed";
+ regulator-name = "vcc3v3";
+ regulator-min-microvolt = <3300000>;
+ regulator-max-microvolt = <3300000>;
+ vin-supply = <®_vcc5v0>;
+ };
+
+ reg_vcc3v0: vcc3v0 {
+ compatible = "regulator-fixed";
+ regulator-name = "vcc3v0";
+ regulator-min-microvolt = <3000000>;
+ regulator-max-microvolt = <3000000>;
+ vin-supply = <®_vcc3v3>;
+ };
+
+ can0_osc: can0_osc {
+ compatible = "fixed-clock";
+ #clock-cells = <0>;
+ clock-frequency = <40000000>;
+ };
+};
+
+&mmc0 {
+ pinctrl-names = "default";
+ pinctrl-0 = <&mmc0_pins>;
+ vmmc-supply = <®_vcc3v3>;
+ bus-width = <4>;
+ broken-cd;
+ status = "okay";
+};
+
+&mmc1 {
+ pinctrl-names = "default";
+ pinctrl-0 = <&mmc1_pins>;
+ vmmc-supply = <®_vcc3v3>;
+ bus-width = <4>;
+ broken-cd;
+ status = "okay";
+};
+
+&usb_otg {
+ extcon = <&tusb320 0>;
+ dr_mode = "otg";
+ status = "okay";
+};
+
+&usbphy {
+ usb0_id_det-gpios = <&pio 1 4 GPIO_ACTIVE_HIGH>; /* PB4 */
+ status = "okay";
+};
+
+&ehci {
+ /delete-property/ phys;
+ /delete-property/ phy-names;
+ status = "okay";
+};
+
+&ohci {
+ /delete-property/ phys;
+ /delete-property/ phy-names;
+ status = "okay";
+};
+
+&lradc {
+ vref-supply = <®_vcc3v0>;
+ status = "disabled";
+};
+
+&codec {
+ allwinner,audio-routing =
+ "Headphone", "HP",
+ "Headphone", "HPCOM",
+ "MIC1", "Mic",
+ "Mic", "HBIAS";
+ status = "okay";
+};
+
+&uart0 {
+ pinctrl-0 = <&uart0_pb_pins>;
+ pinctrl-names = "default";
+ status = "okay";
+};
+
+&uart1 {
+ pinctrl-0 = <&uart1_pins>;
+ pinctrl-names = "default";
+ status = "okay";
+};
+
+&i2c0 {
+ pinctrl-0 = <&i2c0_pins>;
+ pinctrl-names = "default";
+ status = "okay";
+
+ eeprom0: eeprom@50 {
+ compatible = "atmel,24c02"; /* actually it's a 24AA02E48 */
+ pagesize = <16>;
+ read-only;
+ reg = <0x50>;
+ vcc-supply = <®_vcc3v3>;
+
+ #address-cells = <1>;
+ #size-cells = <1>;
+
+ eth0_macaddress: eth0_macaddress@FA {
+ reg = <0xFA 0x06>;
+ };
+ };
+
+ tusb320: tusb320@60 {
+ compatible = "ti,tusb320";
+ reg = <0x60>;
+ interrupt-parent = <&pio>;
+ interrupts = <1 5 IRQ_TYPE_EDGE_FALLING>;
+ };
+
+ ds3232: rtc@68 {
+ compatible = "dallas,ds3232";
+ reg = <0x68>;
+ };
+};
+
+&emac {
+ allwinner,leds-active-low;
+ nvmem-cells = <ð0_macaddress>; /* custom nvmem reference */
+ nvmem-cell-names = "mac-address"; /* see ethernet-controller.yaml */
+ status = "okay";
+};
+
+&spi0 {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&spi0_pins>;
+ cs-gpios = <0>, <&pio 1 0 GPIO_ACTIVE_LOW>; /* PB0 */
+ status = "okay";
+
+ flash@0 {
+ #address-cells = <1>;
+ #size-cells = <1>;
+ reg = <0>;
+ compatible = "jedec,spi-nor";
+ label = "firmware";
+ spi-max-frequency = <40000000>;
+ };
+
+ can@1 {
+ compatible = "microchip,mcp2518fd";
+ reg = <1>;
+ clocks = <&can0_osc>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&can0_pins>;
+ spi-max-frequency = <20000000>;
+ interrupt-parent = <&pio>;
+ interrupts = <1 1 IRQ_TYPE_LEVEL_LOW>;
+ vdd-supply = <®_vcc3v3>;
+ xceiver-supply = <®_vcc3v3>;
+ };
+};
+
+&rtc {
+ status = "disabled";
+};
+
+&pio {
+ vcc-pb-supply = <®_vcc3v3>;
+ vcc-pc-supply = <®_vcc3v3>;
+ vcc-pe-supply = <®_vcc3v3>;
+ vcc-pf-supply = <®_vcc3v3>;
+ vcc-pg-supply = <®_vcc3v3>;
+
+ gpio-reserved-ranges = <0 32>, <42 22>, <68 28>, <96 32>, <153 7>, <167 25>, <198 26>;
+ gpio-line-names = "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", //PA
+ "CAN_nCS", "CAN_nINT", "USER_SW", "PB3", "USB_ID", "USBC_nINT", "I2C0_SCL", "I2C0_SDA", "UART0_TX", "UART0_RX", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", //PB
+ "SPI_MISO", "SPI_SCK", "FLASH_nCS", "SPI_MOSI", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", //PC
+ "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", //PD
+ "Q12", "Q11", "Q10", "Q9", "LED_SYS0", "I1", "Q1", "Q2", "I2", "I3", "Q3", "Q4", "I4", "I5", "Q5", "Q6", "I6", "I7", "Q7", "Q8", "I8", "UART1_TXD", "UART1_RXD", "ESP_nRST", "ESP_nBOOT", "", "", "", "", "", "", "", //PE
+ "SD_D1", "SD_D0", "SD_CLK", "SD_CMD", "SD_D3", "SD_D2", "LED_SYS1", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", //PF
+ "ESP_CLK", "ESP_CMD", "ESP_D0", "ESP_D1", "ESP_D2", "ESP_D3", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""; //PG
+
+ uart0_pins: uart0-pins {
+ pins = "PB8", "PB9";
+ function = "uart0";
+ };
+
+ uart1_pins: uart1-pins {
+ pins = "PE21", "PE22";
+ function = "uart1";
+ };
+
+ spi0_pins: spi0-pins {
+ pins = "PC0", "PC1", "PC2", "PC3";
+ function = "spi0";
+ };
+
+ can0_pins: can0-pins {
+ pins = "PB1";
+ function = "gpio_in";
+ };
+};
--
2.47.1
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH 1/1] ARM: dts: sunxi: add support for NetCube Systems Kumquat
@ 2025-01-02 12:18 Lukas Schmid
2025-01-02 13:02 ` Rob Herring (Arm)
2025-01-02 14:31 ` Andre Przywara
0 siblings, 2 replies; 5+ messages in thread
From: Lukas Schmid @ 2025-01-02 12:18 UTC (permalink / raw)
To: linux-sunxi; +Cc: Lukas Schmid
NetCube Systems Kumquat is a board based on the Allwinner V3s SoC,
including:
- 64MB DDR2 included in SoC
- 10/100 Mbps Ethernet
- USB-C DRD
- Audio Codec
- Isolated CAN-FD
- ESP32 over SDIO
- 8MB SPI-NOR Flash for bootloader
- I2C EEPROM for MAC addresses
- SDIO Connector for eMMC or SD-Card
- 8x 12/24V IOs, 4x normally open relays
- DS3232 RTC
- QWIIC connectors for external I2C devices
Signed-off-by: Lukas Schmid <lukas.schmid@netcube.li>
---
arch/arm/boot/dts/allwinner/Makefile | 2 +
.../allwinner/sun8i-v3s-netcube-kumquat.dts | 269 ++++++++++++++++++
2 files changed, 271 insertions(+)
create mode 100644 arch/arm/boot/dts/allwinner/sun8i-v3s-netcube-kumquat.dts
diff --git a/arch/arm/boot/dts/allwinner/Makefile b/arch/arm/boot/dts/allwinner/Makefile
index 48666f73e638..d799ad153b37 100644
--- a/arch/arm/boot/dts/allwinner/Makefile
+++ b/arch/arm/boot/dts/allwinner/Makefile
@@ -199,6 +199,7 @@ DTC_FLAGS_sun8i-h3-nanopi-r1 := -@
DTC_FLAGS_sun8i-h3-orangepi-pc := -@
DTC_FLAGS_sun8i-h3-bananapi-m2-plus-v1.2 := -@
DTC_FLAGS_sun8i-h3-orangepi-pc-plus := -@
+DTC_FLAGS_sun8i-v3s-netcube-kumquat := -@
dtb-$(CONFIG_MACH_SUN8I) += \
sun8i-a23-evb.dtb \
sun8i-a23-gt90h-v4.dtb \
@@ -261,6 +262,7 @@ dtb-$(CONFIG_MACH_SUN8I) += \
sun8i-v3s-anbernic-rg-nano.dtb \
sun8i-v3s-licheepi-zero.dtb \
sun8i-v3s-licheepi-zero-dock.dtb \
+ sun8i-v3s-netcube-kumquat.dtb \
sun8i-v40-bananapi-m2-berry.dtb
dtb-$(CONFIG_MACH_SUN9I) += \
sun9i-a80-optimus.dtb \
diff --git a/arch/arm/boot/dts/allwinner/sun8i-v3s-netcube-kumquat.dts b/arch/arm/boot/dts/allwinner/sun8i-v3s-netcube-kumquat.dts
new file mode 100644
index 000000000000..1793a9b7f796
--- /dev/null
+++ b/arch/arm/boot/dts/allwinner/sun8i-v3s-netcube-kumquat.dts
@@ -0,0 +1,269 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (C) 2025 Lukas Schmid <lukas.schmid@netcube.li>
+ */
+
+/dts-v1/;
+#include "sun8i-v3s.dtsi"
+
+#include <dt-bindings/input/input.h>
+#include <dt-bindings/leds/common.h>
+#include <dt-bindings/gpio/gpio.h>
+
+/{
+ model = "NetCube Systems Kumquat";
+ compatible = "netcube,kumquat", "allwinner,sun8i-v3s";
+
+ aliases {
+ serial0 = &uart0;
+ ethernet0 = &emac;
+ rtc0 = &ds3232;
+ };
+
+ chosen {
+ stdout-path = "serial0:115200n8";
+ };
+
+ cpus {
+ cpu0: cpu@0 {
+ clock-frequency = <1200000000>;
+ };
+ };
+
+ leds {
+ compatible = "gpio-leds";
+
+ heartbeat_led {
+ gpios = <&pio 4 4 GPIO_ACTIVE_HIGH>; /* PE4 */
+ linux,default-trigger = "heartbeat";
+ function = LED_FUNCTION_HEARTBEAT;
+ color = <LED_COLOR_ID_GREEN>;
+ };
+
+ mmc0_act_led {
+ gpios = <&pio 5 6 GPIO_ACTIVE_HIGH>; /* PF6 */
+ linux,default-trigger = "mmc0";
+ function = LED_FUNCTION_DISK;
+ color = <LED_COLOR_ID_GREEN>;
+ };
+ };
+
+ gpio-keys {
+ compatible = "gpio-keys";
+ autorepeat;
+
+ key-user {
+ label = "GPIO Key User";
+ linux,code = <KEY_PROG1>;
+ gpios = <&pio 1 2 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; /* PB2 */
+ };
+ };
+
+ reg_vcc5v0: vcc5v0 {
+ compatible = "regulator-fixed";
+ regulator-name = "vcc5v0";
+ regulator-min-microvolt = <5000000>;
+ regulator-max-microvolt = <5000000>;
+ };
+
+ reg_vcc3v3: vcc3v3 {
+ compatible = "regulator-fixed";
+ regulator-name = "vcc3v3";
+ regulator-min-microvolt = <3300000>;
+ regulator-max-microvolt = <3300000>;
+ vin-supply = <®_vcc5v0>;
+ };
+
+ reg_vcc3v0: vcc3v0 {
+ compatible = "regulator-fixed";
+ regulator-name = "vcc3v0";
+ regulator-min-microvolt = <3000000>;
+ regulator-max-microvolt = <3000000>;
+ vin-supply = <®_vcc3v3>;
+ };
+
+ can0_osc: can0_osc {
+ compatible = "fixed-clock";
+ #clock-cells = <0>;
+ clock-frequency = <40000000>;
+ };
+};
+
+&mmc0 {
+ pinctrl-names = "default";
+ pinctrl-0 = <&mmc0_pins>;
+ vmmc-supply = <®_vcc3v3>;
+ bus-width = <4>;
+ broken-cd;
+ status = "okay";
+};
+
+&mmc1 {
+ pinctrl-names = "default";
+ pinctrl-0 = <&mmc1_pins>;
+ vmmc-supply = <®_vcc3v3>;
+ bus-width = <4>;
+ broken-cd;
+ status = "okay";
+};
+
+&usb_otg {
+ extcon = <&tusb320 0>;
+ dr_mode = "otg";
+ status = "okay";
+};
+
+&usbphy {
+ usb0_id_det-gpios = <&pio 1 4 GPIO_ACTIVE_HIGH>; /* PB4 */
+ status = "okay";
+};
+
+&ehci {
+ /delete-property/ phys;
+ /delete-property/ phy-names;
+ status = "okay";
+};
+
+&ohci {
+ /delete-property/ phys;
+ /delete-property/ phy-names;
+ status = "okay";
+};
+
+&lradc {
+ vref-supply = <®_vcc3v0>;
+ status = "disabled";
+};
+
+&codec {
+ allwinner,audio-routing =
+ "Headphone", "HP",
+ "Headphone", "HPCOM",
+ "MIC1", "Mic",
+ "Mic", "HBIAS";
+ status = "okay";
+};
+
+&uart0 {
+ pinctrl-0 = <&uart0_pb_pins>;
+ pinctrl-names = "default";
+ status = "okay";
+};
+
+&uart1 {
+ pinctrl-0 = <&uart1_pins>;
+ pinctrl-names = "default";
+ status = "okay";
+};
+
+&i2c0 {
+ pinctrl-0 = <&i2c0_pins>;
+ pinctrl-names = "default";
+ status = "okay";
+
+ eeprom0: eeprom@50 {
+ compatible = "atmel,24c02"; /* actually it's a 24AA02E48 */
+ pagesize = <16>;
+ read-only;
+ reg = <0x50>;
+ vcc-supply = <®_vcc3v3>;
+
+ #address-cells = <1>;
+ #size-cells = <1>;
+
+ eth0_macaddress: eth0_macaddress@FA {
+ reg = <0xFA 0x06>;
+ };
+ };
+
+ tusb320: tusb320@60 {
+ compatible = "ti,tusb320";
+ reg = <0x60>;
+ interrupt-parent = <&pio>;
+ interrupts = <1 5 IRQ_TYPE_EDGE_FALLING>;
+ };
+
+ ds3232: rtc@68 {
+ compatible = "dallas,ds3232";
+ reg = <0x68>;
+ };
+};
+
+&emac {
+ allwinner,leds-active-low;
+ nvmem-cells = <ð0_macaddress>; /* custom nvmem reference */
+ nvmem-cell-names = "mac-address"; /* see ethernet-controller.yaml */
+ status = "okay";
+};
+
+&spi0 {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&spi0_pins>;
+ cs-gpios = <0>, <&pio 1 0 GPIO_ACTIVE_LOW>; /* PB0 */
+ status = "okay";
+
+ flash@0 {
+ #address-cells = <1>;
+ #size-cells = <1>;
+ reg = <0>;
+ compatible = "jedec,spi-nor";
+ label = "firmware";
+ spi-max-frequency = <40000000>;
+ };
+
+ can@1 {
+ compatible = "microchip,mcp2518fd";
+ reg = <1>;
+ clocks = <&can0_osc>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&can0_pins>;
+ spi-max-frequency = <20000000>;
+ interrupt-parent = <&pio>;
+ interrupts = <1 1 IRQ_TYPE_LEVEL_LOW>;
+ vdd-supply = <®_vcc3v3>;
+ xceiver-supply = <®_vcc3v3>;
+ };
+};
+
+&rtc {
+ status = "disabled";
+};
+
+&pio {
+ vcc-pb-supply = <®_vcc3v3>;
+ vcc-pc-supply = <®_vcc3v3>;
+ vcc-pe-supply = <®_vcc3v3>;
+ vcc-pf-supply = <®_vcc3v3>;
+ vcc-pg-supply = <®_vcc3v3>;
+
+ gpio-reserved-ranges = <0 32>, <42 22>, <68 28>, <96 32>, <153 7>, <167 25>, <198 26>;
+ gpio-line-names = "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", //PA
+ "CAN_nCS", "CAN_nINT", "USER_SW", "PB3", "USB_ID", "USBC_nINT", "I2C0_SCL", "I2C0_SDA", "UART0_TX", "UART0_RX", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", //PB
+ "SPI_MISO", "SPI_SCK", "FLASH_nCS", "SPI_MOSI", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", //PC
+ "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", //PD
+ "Q12", "Q11", "Q10", "Q9", "LED_SYS0", "I1", "Q1", "Q2", "I2", "I3", "Q3", "Q4", "I4", "I5", "Q5", "Q6", "I6", "I7", "Q7", "Q8", "I8", "UART1_TXD", "UART1_RXD", "ESP_nRST", "ESP_nBOOT", "", "", "", "", "", "", "", //PE
+ "SD_D1", "SD_D0", "SD_CLK", "SD_CMD", "SD_D3", "SD_D2", "LED_SYS1", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", //PF
+ "ESP_CLK", "ESP_CMD", "ESP_D0", "ESP_D1", "ESP_D2", "ESP_D3", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""; //PG
+
+ uart0_pins: uart0-pins {
+ pins = "PB8", "PB9";
+ function = "uart0";
+ };
+
+ uart1_pins: uart1-pins {
+ pins = "PE21", "PE22";
+ function = "uart1";
+ };
+
+ spi0_pins: spi0-pins {
+ pins = "PC0", "PC1", "PC2", "PC3";
+ function = "spi0";
+ };
+
+ can0_pins: can0-pins {
+ pins = "PB1";
+ function = "gpio_in";
+ };
+};
--
2.47.1
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH 1/1] ARM: dts: sunxi: add support for NetCube Systems Kumquat
2025-01-02 12:18 [PATCH 1/1] ARM: dts: sunxi: add support for NetCube Systems Kumquat Lukas Schmid
@ 2025-01-02 13:02 ` Rob Herring (Arm)
2025-01-02 14:31 ` Andre Przywara
1 sibling, 0 replies; 5+ messages in thread
From: Rob Herring (Arm) @ 2025-01-02 13:02 UTC (permalink / raw)
To: Lukas Schmid; +Cc: linux-sunxi
On Thu, 02 Jan 2025 12:18:59 +0000, Lukas Schmid wrote:
> NetCube Systems Kumquat is a board based on the Allwinner V3s SoC,
> including:
>
> - 64MB DDR2 included in SoC
> - 10/100 Mbps Ethernet
> - USB-C DRD
> - Audio Codec
> - Isolated CAN-FD
> - ESP32 over SDIO
> - 8MB SPI-NOR Flash for bootloader
> - I2C EEPROM for MAC addresses
> - SDIO Connector for eMMC or SD-Card
> - 8x 12/24V IOs, 4x normally open relays
> - DS3232 RTC
> - QWIIC connectors for external I2C devices
>
> Signed-off-by: Lukas Schmid <lukas.schmid@netcube.li>
> ---
> arch/arm/boot/dts/allwinner/Makefile | 2 +
> .../allwinner/sun8i-v3s-netcube-kumquat.dts | 269 ++++++++++++++++++
> 2 files changed, 271 insertions(+)
> create mode 100644 arch/arm/boot/dts/allwinner/sun8i-v3s-netcube-kumquat.dts
>
My bot found new DTB warnings on the .dts files added or changed in this
series.
Some warnings may be from an existing SoC .dtsi. Or perhaps the warnings
are fixed by another series. Ultimately, it is up to the platform
maintainer whether these warnings are acceptable or not. No need to reply
unless the platform maintainer has comments.
If you already ran DT checks and didn't see these error(s), then
make sure dt-schema is up to date:
pip3 install dtschema --upgrade
New warnings running 'make CHECK_DTBS=y allwinner/sun8i-v3s-netcube-kumquat.dtb' for 20250102121859.3547-1-lukas.schmid@netcube.li:
arch/arm/boot/dts/allwinner/sun8i-v3s-netcube-kumquat.dtb: /: compatible: 'oneOf' conditional failed, one must be fixed:
['netcube,kumquat', 'allwinner,sun8i-v3s'] is too short
'allwinner,a100-perf1' was expected
'allwinner,sun8i-a23-evb' was expected
'allwinner,app4-evb1' was expected
'allwinner,h8homlet-v2' was expected
'allwinner,ga10h-v1.1' was expected
'allwinner,gt90h-v4' was expected
'allwinner,parrot' was expected
'anbernic,rg-nano' was expected
'anbernic,rg35xx-2024' was expected
'anbernic,rg35xx-h' was expected
'anbernic,rg35xx-plus' was expected
'anbernic,rg35xx-sp' was expected
'amarula,a64-relic' was expected
'allwinner,auxtek-t003' was expected
'allwinner,auxtek-t004' was expected
'allwinner,ba10-tvbox' was expected
'lemaker,bananapi' was expected
'sinovoip,bpi-m1-plus' was expected
'sinovoip,bpi-m2' was expected
'sinovoip,bpi-m2-berry' was expected
'sinovoip,bpi-m2-plus' was expected
'bananapi,bpi-m2-plus-v1.2' was expected
'sinovoip,bananapi-m2m' was expected
'sinovoip,bpi-m2-ultra' was expected
'sinovoip,bpi-m2-zero' was expected
'sinovoip,bpi-m3' was expected
'sinovoip,bananapi-m64' was expected
'lemaker,bananapro' was expected
'azw,beelink-gs1' was expected
'roofull,beelink-x2' was expected
'bigtreetech,cb1-manta' was expected
'bigtreetech,pi' was expected
'chuwi,v7-cw0825' was expected
'colorfly,e708-q1' was expected
'csq,cs908' was expected
'cubietech,a10-cubieboard' was expected
'cubietech,cubieboard2' was expected
'cubietech,a80-cubieboard4' was expected
'cubietech,cubietruck' was expected
'cubietech,cubietruck-plus' was expected
'difrnce,dit4350' was expected
'dserve,dsrv9703c' was expected
'elimo,impetus' was expected
'elimo,initium' was expected
'empire-electronix,d709' was expected
'empire-electronix,m712' was expected
'forlinx,oka40i-c' was expected
'friendlyarm,nanopi-a64' was expected
'friendlyarm,nanopi-duo2' was expected
'friendlyarm,nanopi-m1' was expected
'friendlyarm,nanopi-m1-plus' was expected
'friendlyarm,nanopi-neo' was expected
'friendlyarm,nanopi-neo2' was expected
'friendlyarm,nanopi-neo-air' was expected
'friendlyarm,nanopi-neo-plus2' was expected
'friendlyarm,nanopi-r1' was expected
'friendlyarm,nanopi-r1s-h5' was expected
'friendlyarm,zeropi' was expected
'gemei,g9' was expected
'hyundai,a7hd' was expected
'hsg,h702' was expected
'allwinner,i12-tvbox' was expected
'incircuit,icnova-a20-adb4006' was expected
'incircuit,icnova-a20-swac' was expected
'inet-tek,inet1' was expected
'primux,inet86dz' was expected
'inet-tek,inet9f-rev03' was expected
'primux,inet97fv2' was expected
'primux,inet98v-rev2' was expected
'primux,inet-d978-rev2' was expected
'inet-tek,inet-q972' was expected
'itead,itead-ibox-a20' was expected
'itead,iteaduino-plus-a10' was expected
'jesurun,q5' was expected
'lamobo,lamobo-r1' was expected
'lctech,pi-f1c200s' was expected
'libretech,all-h3-cc-h2-plus' was expected
'libretech,all-h3-cc-h3' was expected
'libretech,all-h3-cc-h5' was expected
'libretech,all-h3-it-h5' was expected
'libretech,all-h5-cc-h5' was expected
'licheepi,licheepi-nano' was expected
'licheepi,licheepi-one' was expected
'licheepi,licheepi-zero' was expected
'licheepi,licheepi-zero-dock' was expected
'sipeed,lichee-zero-plus' was expected
'linksprite,a10-pcduino' was expected
'linksprite,a10-pcduino2' was expected
'linksprite,pcduino3' was expected
'linksprite,pcduino3-nano' was expected
'linutronix,testbox-v2' was expected
'haoyu,a10-marsboard' was expected
'haoyu,a20-marsboard' was expected
'mapleboard,mp130' was expected
'mele,a1000' was expected
'mele,a1000g-quad' was expected
'mele,i7' was expected
'mele,m3' was expected
'mele,m9' was expected
'merrii,a20-hummingbird' was expected
'merrii,a31-hummingbird' was expected
'merrii,a80-optimus' was expected
'miniand,hackberry' was expected
'allwinner,mk802' was expected
'allwinner,a10s-mk802' was expected
'allwinner,mk802ii' was expected
'allwinner,mk808c' was expected
'msi,primo81' was expected
'emlid,neutis-n5-devboard' was expected
'emlid,neutis-n5h3-devboard' was expected
'nextthing,chip' was expected
'nextthing,chip-pro' was expected
'nextthing,gr8-evb' was expected
'nintendo,nes-classic' was expected
'nintendo,super-nes-classic' was expected
'oceanic,5205-5inmfd' was expected
'olimex,a10-olinuxino-lime' was expected
'olimex,a10s-olinuxino-micro' was expected
'olimex,a13-olinuxino' was expected
'olimex,a13-olinuxino-micro' was expected
'olimex,a20-olimex-som-evb' was expected
'olimex,a20-olimex-som-evb-emmc' was expected
'olimex,a20-olinuxino-lime' was expected
'olimex,a20-olinuxino-lime-emmc' was expected
'olimex,a20-olinuxino-lime2' was expected
'olimex,a20-olinuxino-lime2-emmc' was expected
'olimex,a20-olinuxino-micro' was expected
'olimex,a20-olinuxino-micro-emmc' was expected
'olimex,a20-olimex-som204-evb' was expected
'olimex,a20-olimex-som204-evb-emmc' was expected
'olimex,a33-olinuxino' was expected
'olimex,a64-olinuxino' was expected
'olimex,a64-olinuxino-emmc' was expected
'olimex,a64-teres-i' was expected
'pine64,pine64' was expected
'pine64,pine64-plus' was expected
'pine64,pinecube' was expected
'pine64,pine-h64' was expected
'pine64,pine-h64-model-b' was expected
'pine64,pine64-lts' was expected
'pine64,pinebook' was expected
'pine64,pinephone-1.0' was expected
'pine64,pinephone-1.1' was expected
'pine64,pinephone-1.2' was expected
'pine64,pinetab' was expected
'pine64,pinetab-early-adopter' was expected
'pine64,sopine-baseboard' was expected
'pineriver,mini-xplus' was expected
'pocketbook,touch-lux-3' was expected
'pocketbook,614-plus' was expected
'pov,protab2-ips9' was expected
'polaroid,mid2407pxe03' was expected
'polaroid,mid2809pxe04' was expected
'allwinner,q8-a13' was expected
'allwinner,q8-a23' was expected
'allwinner,q8-a33' was expected
'qihua,t3-cqa3t-bv3' was expected
'allwinner,r7-tv-dongle' was expected
'jide,remix-mini-pc' was expected
'rervision,a33-vstar' was expected
'rervision,h3-dvk' was expected
'sinlinx,sina31s' was expected
'sinlinx,sina31s-sdk' was expected
'sinlinx,sina33' was expected
'sipeed,longan-pi-3h' was expected
'sourceparts,popstick-v1.1' was expected
'allwinner,sl631-imx179' was expected
'oranth,tanix-tx1' was expected
'oranth,tanix-tx6' was expected
'oranth,tanix-tx6-mini' was expected
'tbs-biometrics,a711' was expected
'topwise,a721' was expected
'transpeed,8k618-t' was expected
'utoo,p66' was expected
'wexler,tab7200' was expected
'widora,mangopi-mq-r-t113' was expected
'wits,colombus' was expected
'wits,pro-a20-dkt' was expected
'wobo,a10s-wobo-i5' was expected
'yones-toptech,bs1078-v2' was expected
'hechuang,x96-mate' was expected
'xunlong,orangepi' was expected
'xunlong,orangepi-2' was expected
'xunlong,orangepi-3' was expected
'xunlong,orangepi-lite' was expected
'xunlong,orangepi-lite2' was expected
'xunlong,orangepi-mini' was expected
'xunlong,orangepi-one' was expected
'xunlong,orangepi-one-plus' was expected
'xunlong,orangepi-pc' was expected
'xunlong,orangepi-pc2' was expected
'xunlong,orangepi-pc-plus' was expected
'xunlong,orangepi-plus' was expected
'xunlong,orangepi-plus2e' was expected
'xunlong,orangepi-prime' was expected
'xunlong,orangepi-r1' was expected
'xunlong,orangepi-win' was expected
'xunlong,orangepi-zero' was expected
'xunlong,orangepi-zero-plus' was expected
'xunlong,orangepi-zero-plus2' was expected
'xunlong,orangepi-zero-plus2-h3' was expected
'xunlong,orangepi-zero2' was expected
'xunlong,orangepi-zero2w' was expected
'xunlong,orangepi-zero3' was expected
'allwinner,sun50i-a100' was expected
'allwinner,sun8i-a23' was expected
'allwinner,sun6i-a31' was expected
'allwinner,sun8i-a83t' was expected
'allwinner,sun8i-a33' was expected
'allwinner,sun50i-h700' was expected
'allwinner,sun50i-a64' was expected
'allwinner,sun5i-a10s' was expected
'allwinner,sun4i-a10' was expected
'allwinner,sun7i-a20' was expected
'allwinner,sun6i-a31s' was expected
'allwinner,sun8i-r40' was expected
'allwinner,sun8i-h3' was expected
'allwinner,sun50i-h5' was expected
'allwinner,sun8i-h2-plus' was expected
'allwinner,sun50i-h6' was expected
'bigtreetech,cb1' was expected
'allwinner,sun50i-h616' was expected
'allwinner,sun9i-a80' was expected
'allwinner,sun5i-a13' was expected
'sochip,s3' was expected
'forlinx,feta40i-c' was expected
'incircuit,icnova-a20' was expected
'allwinner,suniv-f1c200s' was expected
'allwinner,suniv-f1c100s' was expected
'emlid,neutis-n5' was expected
'emlid,neutis-n5h3' was expected
'allwinner,sun5i-r8' was expected
'nextthing,gr8' was expected
'allwinner,sun8i-r16' was expected
'allwinner,sun50i-r18' was expected
'pine64,pinephone' was expected
'pine64,sopine' was expected
'allwinner,sun8i-t3' was expected
'allwinner,sun50i-h64' was expected
'rervision,a33-core1' was expected
'sipeed,longan-module-3h' was expected
'sourceparts,popstick' was expected
'allwinner,sl631' was expected
'allwinner,sun50i-h618' was expected
'allwinner,sun8i-t113s' was expected
from schema $id: http://devicetree.org/schemas/arm/sunxi.yaml#
arch/arm/boot/dts/allwinner/sun8i-v3s-netcube-kumquat.dtb: /: failed to match any schema with compatible: ['netcube,kumquat', 'allwinner,sun8i-v3s']
arch/arm/boot/dts/allwinner/sun8i-v3s-netcube-kumquat.dtb: pinctrl@1c20800: 'gpio-reserved-ranges' does not match any of the regexes: '^([rs]-)?(([a-z0-9]{3,}|[a-oq-z][a-z0-9]*?)?-)+?(p[a-ilm][0-9]*?-)??pins?$', '^vcc-p[a-ilm]-supply$', 'pinctrl-[0-9]+'
from schema $id: http://devicetree.org/schemas/pinctrl/allwinner,sun4i-a10-pinctrl.yaml#
arch/arm/boot/dts/allwinner/sun8i-v3s-netcube-kumquat.dtb: eeprom@50: Unevaluated properties are not allowed ('eth0_macaddress@FA' was unexpected)
from schema $id: http://devicetree.org/schemas/eeprom/at24.yaml#
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH 1/1] ARM: dts: sunxi: add support for NetCube Systems Kumquat
2025-01-02 12:18 [PATCH 1/1] ARM: dts: sunxi: add support for NetCube Systems Kumquat Lukas Schmid
2025-01-02 13:02 ` Rob Herring (Arm)
@ 2025-01-02 14:31 ` Andre Przywara
2025-01-25 14:10 ` Lukas Schmid
1 sibling, 1 reply; 5+ messages in thread
From: Andre Przywara @ 2025-01-02 14:31 UTC (permalink / raw)
To: Lukas Schmid; +Cc: linux-sunxi
On Thu, 2 Jan 2025 12:18:59 +0000
Lukas Schmid <lukas.schmid@netcube.li> wrote:
Hi Lukas,
thanks for taking care and sending a patch!
I guess you want the DT merged into the official repositories? Then you
would need to send the patch to the Linux kernel mailing lists, having the
sunxi maintainers in To:, and the lists in Cc:.
$ scripts/get_maintainer.pl 0001-name.patch
would give you the exact list.
Also you would need to add the vendor name and the board name to the
bindings, see patches 12 and 13 for an example here:
https://lore.kernel.org/linux-sunxi/20241111013033.22793-13-andre.przywara@arm.com/T/#u
So this would make this patch a 3-patch series (vendor prefix, board name,
dts file).
> NetCube Systems Kumquat is a board based on the Allwinner V3s SoC,
> including:
>
> - 64MB DDR2 included in SoC
> - 10/100 Mbps Ethernet
> - USB-C DRD
> - Audio Codec
> - Isolated CAN-FD
> - ESP32 over SDIO
> - 8MB SPI-NOR Flash for bootloader
> - I2C EEPROM for MAC addresses
> - SDIO Connector for eMMC or SD-Card
> - 8x 12/24V IOs, 4x normally open relays
> - DS3232 RTC
> - QWIIC connectors for external I2C devices
>
> Signed-off-by: Lukas Schmid <lukas.schmid@netcube.li>
> ---
> arch/arm/boot/dts/allwinner/Makefile | 2 +
> .../allwinner/sun8i-v3s-netcube-kumquat.dts | 269 ++++++++++++++++++
> 2 files changed, 271 insertions(+)
> create mode 100644 arch/arm/boot/dts/allwinner/sun8i-v3s-netcube-kumquat.dts
>
> diff --git a/arch/arm/boot/dts/allwinner/Makefile b/arch/arm/boot/dts/allwinner/Makefile
> index 48666f73e638..d799ad153b37 100644
> --- a/arch/arm/boot/dts/allwinner/Makefile
> +++ b/arch/arm/boot/dts/allwinner/Makefile
> @@ -199,6 +199,7 @@ DTC_FLAGS_sun8i-h3-nanopi-r1 := -@
> DTC_FLAGS_sun8i-h3-orangepi-pc := -@
> DTC_FLAGS_sun8i-h3-bananapi-m2-plus-v1.2 := -@
> DTC_FLAGS_sun8i-h3-orangepi-pc-plus := -@
> +DTC_FLAGS_sun8i-v3s-netcube-kumquat := -@
> dtb-$(CONFIG_MACH_SUN8I) += \
> sun8i-a23-evb.dtb \
> sun8i-a23-gt90h-v4.dtb \
> @@ -261,6 +262,7 @@ dtb-$(CONFIG_MACH_SUN8I) += \
> sun8i-v3s-anbernic-rg-nano.dtb \
> sun8i-v3s-licheepi-zero.dtb \
> sun8i-v3s-licheepi-zero-dock.dtb \
> + sun8i-v3s-netcube-kumquat.dtb \
> sun8i-v40-bananapi-m2-berry.dtb
> dtb-$(CONFIG_MACH_SUN9I) += \
> sun9i-a80-optimus.dtb \
> diff --git a/arch/arm/boot/dts/allwinner/sun8i-v3s-netcube-kumquat.dts b/arch/arm/boot/dts/allwinner/sun8i-v3s-netcube-kumquat.dts
> new file mode 100644
> index 000000000000..1793a9b7f796
> --- /dev/null
> +++ b/arch/arm/boot/dts/allwinner/sun8i-v3s-netcube-kumquat.dts
> @@ -0,0 +1,269 @@
> +// SPDX-License-Identifier: GPL-2.0
DT files should have a dual license header:
SPDX-License-Identifier: (GPL-2.0+ OR MIT)
> +/*
> + * Copyright (C) 2025 Lukas Schmid <lukas.schmid@netcube.li>
> + */
> +
> +/dts-v1/;
> +#include "sun8i-v3s.dtsi"
> +
> +#include <dt-bindings/input/input.h>
> +#include <dt-bindings/leds/common.h>
> +#include <dt-bindings/gpio/gpio.h>
> +
> +/{
> + model = "NetCube Systems Kumquat";
> + compatible = "netcube,kumquat", "allwinner,sun8i-v3s";
> +
> + aliases {
> + serial0 = &uart0;
> + ethernet0 = &emac;
> + rtc0 = &ds3232;
> + };
> +
> + chosen {
> + stdout-path = "serial0:115200n8";
> + };
> +
> + cpus {
> + cpu0: cpu@0 {
> + clock-frequency = <1200000000>;
> + };
> + };
Please remove this node. I do understand that the kernel complains about
the missing property, but this warning is severely outdated (in the age of
DVFS) and should be removed instead.
> +
> + leds {
> + compatible = "gpio-leds";
> +
> + heartbeat_led {
> + gpios = <&pio 4 4 GPIO_ACTIVE_HIGH>; /* PE4 */
> + linux,default-trigger = "heartbeat";
> + function = LED_FUNCTION_HEARTBEAT;
> + color = <LED_COLOR_ID_GREEN>;
> + };
> +
> + mmc0_act_led {
> + gpios = <&pio 5 6 GPIO_ACTIVE_HIGH>; /* PF6 */
> + linux,default-trigger = "mmc0";
> + function = LED_FUNCTION_DISK;
> + color = <LED_COLOR_ID_GREEN>;
> + };
> + };
> +
> + gpio-keys {
> + compatible = "gpio-keys";
> + autorepeat;
> +
> + key-user {
> + label = "GPIO Key User";
> + linux,code = <KEY_PROG1>;
> + gpios = <&pio 1 2 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; /* PB2 */
> + };
> + };
> +
> + reg_vcc5v0: vcc5v0 {
Can you add a comment here where this voltage comes from? I guess it's the
primary board power supply, via some USB or barrel plug? Just add a
one-liner comment here to make it clear this is the root of the power tree.
> + compatible = "regulator-fixed";
> + regulator-name = "vcc5v0";
> + regulator-min-microvolt = <5000000>;
> + regulator-max-microvolt = <5000000>;
> + };
> +
> + reg_vcc3v3: vcc3v3 {
What kind of regulator is this? Some discrete linear or buck regulator?
Can you add a one-line comment stating the type, and maybe the model?
Those always-on fixed regulators are sometimes sketchy, so we would like
to know why they cannot be controlled.
> + compatible = "regulator-fixed";
> + regulator-name = "vcc3v3";
> + regulator-min-microvolt = <3300000>;
> + regulator-max-microvolt = <3300000>;
> + vin-supply = <®_vcc5v0>;
> + };
> +
> + reg_vcc3v0: vcc3v0 {
Same here, please give people an idea what kind of regulator this is.
> + compatible = "regulator-fixed";
> + regulator-name = "vcc3v0";
> + regulator-min-microvolt = <3000000>;
> + regulator-max-microvolt = <3000000>;
> + vin-supply = <®_vcc3v3>;
> + };
> +
> + can0_osc: can0_osc {
Is that a crystal oscillator on the board? Can you state that in a brief
comment, please?
> + compatible = "fixed-clock";
> + #clock-cells = <0>;
> + clock-frequency = <40000000>;
> + };
> +};
> +
> +&mmc0 {
> + pinctrl-names = "default";
> + pinctrl-0 = <&mmc0_pins>;
> + vmmc-supply = <®_vcc3v3>;
> + bus-width = <4>;
> + broken-cd;
> + status = "okay";
> +};
> +
> +&mmc1 {
> + pinctrl-names = "default";
> + pinctrl-0 = <&mmc1_pins>;
> + vmmc-supply = <®_vcc3v3>;
> + bus-width = <4>;
> + broken-cd;
> + status = "okay";
> +};
> +
> +&usb_otg {
> + extcon = <&tusb320 0>;
> + dr_mode = "otg";
> + status = "okay";
> +};
> +
> +&usbphy {
> + usb0_id_det-gpios = <&pio 1 4 GPIO_ACTIVE_HIGH>; /* PB4 */
> + status = "okay";
> +};
> +
> +&ehci {
> + /delete-property/ phys;
> + /delete-property/ phy-names;
Why is this?
> + status = "okay";
> +};
> +
> +&ohci {
> + /delete-property/ phys;
> + /delete-property/ phy-names;
> + status = "okay";
> +};
> +
> +&lradc {
> + vref-supply = <®_vcc3v0>;
> + status = "disabled";
Why would you specify the supply voltage, but then keep it disabled?
Either it's not working or not usable, then you wouldn't need to do
anything (since the status is already "disabled", so that's definitely
redundant), or it's good, then you should say 'status = "okay";'
> +};
> +
> +&codec {
> + allwinner,audio-routing =
> + "Headphone", "HP",
> + "Headphone", "HPCOM",
> + "MIC1", "Mic",
> + "Mic", "HBIAS";
> + status = "okay";
> +};
> +
> +&uart0 {
> + pinctrl-0 = <&uart0_pb_pins>;
> + pinctrl-names = "default";
> + status = "okay";
> +};
> +
> +&uart1 {
> + pinctrl-0 = <&uart1_pins>;
> + pinctrl-names = "default";
> + status = "okay";
> +};
> +
> +&i2c0 {
> + pinctrl-0 = <&i2c0_pins>;
> + pinctrl-names = "default";
> + status = "okay";
> +
> + eeprom0: eeprom@50 {
> + compatible = "atmel,24c02"; /* actually it's a 24AA02E48 */
> + pagesize = <16>;
> + read-only;
> + reg = <0x50>;
> + vcc-supply = <®_vcc3v3>;
> +
> + #address-cells = <1>;
> + #size-cells = <1>;
> +
> + eth0_macaddress: eth0_macaddress@FA {
> + reg = <0xFA 0x06>;
> + };
> + };
> +
> + tusb320: tusb320@60 {
> + compatible = "ti,tusb320";
> + reg = <0x60>;
> + interrupt-parent = <&pio>;
> + interrupts = <1 5 IRQ_TYPE_EDGE_FALLING>;
> + };
> +
> + ds3232: rtc@68 {
> + compatible = "dallas,ds3232";
> + reg = <0x68>;
> + };
> +};
> +
> +&emac {
> + allwinner,leds-active-low;
> + nvmem-cells = <ð0_macaddress>; /* custom nvmem reference */
> + nvmem-cell-names = "mac-address"; /* see ethernet-controller.yaml */
> + status = "okay";
> +};
> +
> +&spi0 {
> + #address-cells = <1>;
> + #size-cells = <0>;
> + pinctrl-names = "default";
> + pinctrl-0 = <&spi0_pins>;
> + cs-gpios = <0>, <&pio 1 0 GPIO_ACTIVE_LOW>; /* PB0 */
> + status = "okay";
> +
> + flash@0 {
> + #address-cells = <1>;
> + #size-cells = <1>;
> + reg = <0>;
> + compatible = "jedec,spi-nor";
> + label = "firmware";
> + spi-max-frequency = <40000000>;
> + };
> +
> + can@1 {
> + compatible = "microchip,mcp2518fd";
> + reg = <1>;
The indentation is not right for the two lines above.
> + clocks = <&can0_osc>;
> + pinctrl-names = "default";
> + pinctrl-0 = <&can0_pins>;
What is this pin for? If I get this correctly, this is a SPI to CAN
bridge, right? Why would it require a GPIO on the host SoC?
(see below)
> + spi-max-frequency = <20000000>;
> + interrupt-parent = <&pio>;
> + interrupts = <1 1 IRQ_TYPE_LEVEL_LOW>;
Ah, I guess it's for the interrupt? In this case I think you do not
declare this via pinctrl, as the PIO interrupt controller should reserve
this pin, configuring it with the EINT pinmux.
And please add a comment with the pin name in it (PB1).
> + vdd-supply = <®_vcc3v3>;
> + xceiver-supply = <®_vcc3v3>;
> + };
> +};
> +
> +&rtc {
> + status = "disabled";
I don't think you can do that, since we rely on some clocks provided by
the RTC device. I guess you want to say that the kernel should use the I2C
RTC instead of the built-in one, but this should already be covered by the
rtc0 alias above?
> +};
> +
> +&pio {
> + vcc-pb-supply = <®_vcc3v3>;
> + vcc-pc-supply = <®_vcc3v3>;
> + vcc-pe-supply = <®_vcc3v3>;
> + vcc-pf-supply = <®_vcc3v3>;
> + vcc-pg-supply = <®_vcc3v3>;
> +
> + gpio-reserved-ranges = <0 32>, <42 22>, <68 28>, <96 32>, <153 7>, <167 25>, <198 26>;
> + gpio-line-names = "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", //PA
> + "CAN_nCS", "CAN_nINT", "USER_SW", "PB3", "USB_ID", "USBC_nINT", "I2C0_SCL", "I2C0_SDA", "UART0_TX", "UART0_RX", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", //PB
> + "SPI_MISO", "SPI_SCK", "FLASH_nCS", "SPI_MOSI", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", //PC
> + "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", //PD
> + "Q12", "Q11", "Q10", "Q9", "LED_SYS0", "I1", "Q1", "Q2", "I2", "I3", "Q3", "Q4", "I4", "I5", "Q5", "Q6", "I6", "I7", "Q7", "Q8", "I8", "UART1_TXD", "UART1_RXD", "ESP_nRST", "ESP_nBOOT", "", "", "", "", "", "", "", //PE
> + "SD_D1", "SD_D0", "SD_CLK", "SD_CMD", "SD_D3", "SD_D2", "LED_SYS1", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", //PF
> + "ESP_CLK", "ESP_CMD", "ESP_D0", "ESP_D1", "ESP_D2", "ESP_D3", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""; //PG
> +
> + uart0_pins: uart0-pins {
> + pins = "PB8", "PB9";
> + function = "uart0";
> + };
Why would you need that node? There is already uart0_pb_pins in the .dtsi.
> +
> + uart1_pins: uart1-pins {
> + pins = "PE21", "PE22";
> + function = "uart1";
> + };
Please specify those pinmux in the .dtsi file, as they can be shared
across boards. It's typically the first user adding them to the .dtsi. For
rare pins, we add a /omit-if-no-ref/ tag.
> +
> + spi0_pins: spi0-pins {
> + pins = "PC0", "PC1", "PC2", "PC3";
> + function = "spi0";
> + };
Same redundancy again, it's already in the .dtsi.
> +
> + can0_pins: can0-pins {
> + pins = "PB1";
> + function = "gpio_in";
> + };
As mentioned above, this wouldn't be needed, and in particular gpio_in
looks wrong. It would need to be the EINT pinmux (0x6), but the PIO IRQ
controller code takes care of that already.
Cheers,
Andre
> +};
IMPORTANT NOTICE: The contents of this email and any attachments are confidential and may also be privileged. If you are not the intended recipient, please notify the sender immediately and do not disclose the contents to any other person, use it for any purpose, or store or copy the information in any medium. Thank you.
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH 1/1] ARM: dts: sunxi: add support for NetCube Systems Kumquat
2025-01-02 14:31 ` Andre Przywara
@ 2025-01-25 14:10 ` Lukas Schmid
0 siblings, 0 replies; 5+ messages in thread
From: Lukas Schmid @ 2025-01-25 14:10 UTC (permalink / raw)
To: Andre Przywara; +Cc: linux-sunxi
[-- Attachment #1: Type: text/plain, Size: 15257 bytes --]
On Thursday, January 2, 2025 3:31:16 PM CET Andre Przywara wrote:
> On Thu, 2 Jan 2025 12:18:59 +0000
> Lukas Schmid <lukas.schmid@netcube.li> wrote:
>
> Hi Lukas,
>
> thanks for taking care and sending a patch!
>
> I guess you want the DT merged into the official repositories? Then you
> would need to send the patch to the Linux kernel mailing lists, having the
> sunxi maintainers in To:, and the lists in Cc:.
> $ scripts/get_maintainer.pl 0001-name.patch
> would give you the exact list.
>
> Also you would need to add the vendor name and the board name to the
> bindings, see patches 12 and 13 for an example here:
> https://lore.kernel.org/linux-sunxi/20241111013033.22793-13-andre.przywara@a
> rm.com/T/#u
>
> So this would make this patch a 3-patch series (vendor prefix, board name,
> dts file).
>
> > NetCube Systems Kumquat is a board based on the Allwinner V3s SoC,
> > including:
> >
> > - 64MB DDR2 included in SoC
> > - 10/100 Mbps Ethernet
> > - USB-C DRD
> > - Audio Codec
> > - Isolated CAN-FD
> > - ESP32 over SDIO
> > - 8MB SPI-NOR Flash for bootloader
> > - I2C EEPROM for MAC addresses
> > - SDIO Connector for eMMC or SD-Card
> > - 8x 12/24V IOs, 4x normally open relays
> > - DS3232 RTC
> > - QWIIC connectors for external I2C devices
> >
> > Signed-off-by: Lukas Schmid <lukas.schmid@netcube.li>
> > ---
> >
> > arch/arm/boot/dts/allwinner/Makefile | 2 +
> > .../allwinner/sun8i-v3s-netcube-kumquat.dts | 269 ++++++++++++++++++
> > 2 files changed, 271 insertions(+)
> > create mode 100644
> > arch/arm/boot/dts/allwinner/sun8i-v3s-netcube-kumquat.dts>
> > diff --git a/arch/arm/boot/dts/allwinner/Makefile
> > b/arch/arm/boot/dts/allwinner/Makefile index 48666f73e638..d799ad153b37
> > 100644
> > --- a/arch/arm/boot/dts/allwinner/Makefile
> > +++ b/arch/arm/boot/dts/allwinner/Makefile
> > @@ -199,6 +199,7 @@ DTC_FLAGS_sun8i-h3-nanopi-r1 := -@
> >
> > DTC_FLAGS_sun8i-h3-orangepi-pc := -@
> > DTC_FLAGS_sun8i-h3-bananapi-m2-plus-v1.2 := -@
> > DTC_FLAGS_sun8i-h3-orangepi-pc-plus := -@
> >
> > +DTC_FLAGS_sun8i-v3s-netcube-kumquat := -@
> >
> > dtb-$(CONFIG_MACH_SUN8I) += \
> >
> > sun8i-a23-evb.dtb \
> > sun8i-a23-gt90h-v4.dtb \
> >
> > @@ -261,6 +262,7 @@ dtb-$(CONFIG_MACH_SUN8I) += \
> >
> > sun8i-v3s-anbernic-rg-nano.dtb \
> > sun8i-v3s-licheepi-zero.dtb \
> > sun8i-v3s-licheepi-zero-dock.dtb \
> >
> > + sun8i-v3s-netcube-kumquat.dtb \
> >
> > sun8i-v40-bananapi-m2-berry.dtb
> >
> > dtb-$(CONFIG_MACH_SUN9I) += \
> >
> > sun9i-a80-optimus.dtb \
> >
> > diff --git a/arch/arm/boot/dts/allwinner/sun8i-v3s-netcube-kumquat.dts
> > b/arch/arm/boot/dts/allwinner/sun8i-v3s-netcube-kumquat.dts new file mode
> > 100644
> > index 000000000000..1793a9b7f796
> > --- /dev/null
> > +++ b/arch/arm/boot/dts/allwinner/sun8i-v3s-netcube-kumquat.dts
> > @@ -0,0 +1,269 @@
> > +// SPDX-License-Identifier: GPL-2.0
>
> DT files should have a dual license header:
> SPDX-License-Identifier: (GPL-2.0+ OR MIT)
>
> > +/*
> > + * Copyright (C) 2025 Lukas Schmid <lukas.schmid@netcube.li>
> > + */
> > +
> > +/dts-v1/;
> > +#include "sun8i-v3s.dtsi"
> > +
> > +#include <dt-bindings/input/input.h>
> > +#include <dt-bindings/leds/common.h>
> > +#include <dt-bindings/gpio/gpio.h>
> > +
> > +/{
> > + model = "NetCube Systems Kumquat";
> > + compatible = "netcube,kumquat", "allwinner,sun8i-v3s";
> > +
> > + aliases {
> > + serial0 = &uart0;
> > + ethernet0 = &emac;
> > + rtc0 = &ds3232;
> > + };
> > +
> > + chosen {
> > + stdout-path = "serial0:115200n8";
> > + };
> > +
> > + cpus {
> > + cpu0: cpu@0 {
> > + clock-frequency = <1200000000>;
> > + };
> > + };
>
> Please remove this node. I do understand that the kernel complains about
> the missing property, but this warning is severely outdated (in the age of
> DVFS) and should be removed instead.
>
> > +
> > + leds {
> > + compatible = "gpio-leds";
> > +
> > + heartbeat_led {
> > + gpios = <&pio 4 4 GPIO_ACTIVE_HIGH>; /* PE4 */
> > + linux,default-trigger = "heartbeat";
> > + function = LED_FUNCTION_HEARTBEAT;
> > + color = <LED_COLOR_ID_GREEN>;
> > + };
> > +
> > + mmc0_act_led {
> > + gpios = <&pio 5 6 GPIO_ACTIVE_HIGH>; /* PF6 */
> > + linux,default-trigger = "mmc0";
> > + function = LED_FUNCTION_DISK;
> > + color = <LED_COLOR_ID_GREEN>;
> > + };
> > + };
> > +
> > + gpio-keys {
> > + compatible = "gpio-keys";
> > + autorepeat;
> > +
> > + key-user {
> > + label = "GPIO Key User";
> > + linux,code = <KEY_PROG1>;
> > + gpios = <&pio 1 2 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>;
> > /* PB2 */ + };
> > + };
> > +
> > + reg_vcc5v0: vcc5v0 {
>
> Can you add a comment here where this voltage comes from? I guess it's the
> primary board power supply, via some USB or barrel plug? Just add a
> one-liner comment here to make it clear this is the root of the power tree.
>
> > + compatible = "regulator-fixed";
> > + regulator-name = "vcc5v0";
> > + regulator-min-microvolt = <5000000>;
> > + regulator-max-microvolt = <5000000>;
> > + };
> > +
> > + reg_vcc3v3: vcc3v3 {
>
> What kind of regulator is this? Some discrete linear or buck regulator?
> Can you add a one-line comment stating the type, and maybe the model?
>
> Those always-on fixed regulators are sometimes sketchy, so we would like
> to know why they cannot be controlled.
>
> > + compatible = "regulator-fixed";
> > + regulator-name = "vcc3v3";
> > + regulator-min-microvolt = <3300000>;
> > + regulator-max-microvolt = <3300000>;
> > + vin-supply = <®_vcc5v0>;
> > + };
> > +
> > + reg_vcc3v0: vcc3v0 {
>
> Same here, please give people an idea what kind of regulator this is.
>
> > + compatible = "regulator-fixed";
> > + regulator-name = "vcc3v0";
> > + regulator-min-microvolt = <3000000>;
> > + regulator-max-microvolt = <3000000>;
> > + vin-supply = <®_vcc3v3>;
> > + };
> > +
> > + can0_osc: can0_osc {
>
> Is that a crystal oscillator on the board? Can you state that in a brief
> comment, please?
>
> > + compatible = "fixed-clock";
> > + #clock-cells = <0>;
> > + clock-frequency = <40000000>;
> > + };
> > +};
> > +
> > +&mmc0 {
> > + pinctrl-names = "default";
> > + pinctrl-0 = <&mmc0_pins>;
> > + vmmc-supply = <®_vcc3v3>;
> > + bus-width = <4>;
> > + broken-cd;
> > + status = "okay";
> > +};
> > +
> > +&mmc1 {
> > + pinctrl-names = "default";
> > + pinctrl-0 = <&mmc1_pins>;
> > + vmmc-supply = <®_vcc3v3>;
> > + bus-width = <4>;
> > + broken-cd;
> > + status = "okay";
> > +};
> > +
> > +&usb_otg {
> > + extcon = <&tusb320 0>;
> > + dr_mode = "otg";
> > + status = "okay";
> > +};
> > +
> > +&usbphy {
> > + usb0_id_det-gpios = <&pio 1 4 GPIO_ACTIVE_HIGH>; /* PB4 */
> > + status = "okay";
> > +};
> > +
> > +&ehci {
> > + /delete-property/ phys;
> > + /delete-property/ phy-names;
>
> Why is this?
>
> > + status = "okay";
> > +};
> > +
> > +&ohci {
> > + /delete-property/ phys;
> > + /delete-property/ phy-names;
> > + status = "okay";
> > +};
> > +
> > +&lradc {
> > + vref-supply = <®_vcc3v0>;
> > + status = "disabled";
>
> Why would you specify the supply voltage, but then keep it disabled?
> Either it's not working or not usable, then you wouldn't need to do
> anything (since the status is already "disabled", so that's definitely
> redundant), or it's good, then you should say 'status = "okay";'
>
> > +};
> > +
> > +&codec {
> > + allwinner,audio-routing =
> > + "Headphone", "HP",
> > + "Headphone", "HPCOM",
> > + "MIC1", "Mic",
> > + "Mic", "HBIAS";
> > + status = "okay";
> > +};
> > +
> > +&uart0 {
> > + pinctrl-0 = <&uart0_pb_pins>;
> > + pinctrl-names = "default";
> > + status = "okay";
> > +};
> > +
> > +&uart1 {
> > + pinctrl-0 = <&uart1_pins>;
> > + pinctrl-names = "default";
> > + status = "okay";
> > +};
> > +
> > +&i2c0 {
> > + pinctrl-0 = <&i2c0_pins>;
> > + pinctrl-names = "default";
> > + status = "okay";
> > +
> > + eeprom0: eeprom@50 {
> > + compatible = "atmel,24c02"; /* actually it's a
> > 24AA02E48 */ + pagesize = <16>;
> > + read-only;
> > + reg = <0x50>;
> > + vcc-supply = <®_vcc3v3>;
> > +
> > + #address-cells = <1>;
> > + #size-cells = <1>;
> > +
> > + eth0_macaddress: eth0_macaddress@FA {
> > + reg = <0xFA 0x06>;
> > + };
> > + };
> > +
> > + tusb320: tusb320@60 {
> > + compatible = "ti,tusb320";
> > + reg = <0x60>;
> > + interrupt-parent = <&pio>;
> > + interrupts = <1 5 IRQ_TYPE_EDGE_FALLING>;
> > + };
> > +
> > + ds3232: rtc@68 {
> > + compatible = "dallas,ds3232";
> > + reg = <0x68>;
> > + };
> > +};
> > +
> > +&emac {
> > + allwinner,leds-active-low;
> > + nvmem-cells = <ð0_macaddress>; /* custom nvmem
> > reference */ + nvmem-cell-names = "mac-address"; /* see
> > ethernet-controller.yaml */ + status = "okay";
> > +};
> > +
> > +&spi0 {
> > + #address-cells = <1>;
> > + #size-cells = <0>;
> > + pinctrl-names = "default";
> > + pinctrl-0 = <&spi0_pins>;
> > + cs-gpios = <0>, <&pio 1 0 GPIO_ACTIVE_LOW>; /* PB0 */
> > + status = "okay";
> > +
> > + flash@0 {
> > + #address-cells = <1>;
> > + #size-cells = <1>;
> > + reg = <0>;
> > + compatible = "jedec,spi-nor";
> > + label = "firmware";
> > + spi-max-frequency = <40000000>;
> > + };
> > +
> > + can@1 {
> > + compatible = "microchip,mcp2518fd";
> > + reg = <1>;
>
> The indentation is not right for the two lines above.
>
> > + clocks = <&can0_osc>;
> > + pinctrl-names = "default";
> > + pinctrl-0 = <&can0_pins>;
>
> What is this pin for? If I get this correctly, this is a SPI to CAN
> bridge, right? Why would it require a GPIO on the host SoC?
> (see below)
>
> > + spi-max-frequency = <20000000>;
> > + interrupt-parent = <&pio>;
> > + interrupts = <1 1 IRQ_TYPE_LEVEL_LOW>;
>
> Ah, I guess it's for the interrupt? In this case I think you do not
> declare this via pinctrl, as the PIO interrupt controller should reserve
> this pin, configuring it with the EINT pinmux.
>
> And please add a comment with the pin name in it (PB1).
>
> > + vdd-supply = <®_vcc3v3>;
> > + xceiver-supply = <®_vcc3v3>;
> > + };
> > +};
> > +
> > +&rtc {
> > + status = "disabled";
>
> I don't think you can do that, since we rely on some clocks provided by
> the RTC device. I guess you want to say that the kernel should use the I2C
> RTC instead of the built-in one, but this should already be covered by the
> rtc0 alias above?
>
> > +};
> > +
> > +&pio {
> > + vcc-pb-supply = <®_vcc3v3>;
> > + vcc-pc-supply = <®_vcc3v3>;
> > + vcc-pe-supply = <®_vcc3v3>;
> > + vcc-pf-supply = <®_vcc3v3>;
> > + vcc-pg-supply = <®_vcc3v3>;
> > +
> > + gpio-reserved-ranges = <0 32>, <42 22>, <68 28>, <96 32>, <153 7>,
> > <167 25>, <198 26>; + gpio-line-names = "", "", "", "", "", "", "",
> > "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
> > "", "", "", "", "", "", "", //PA +
> > "CAN_nCS", "CAN_nINT", "USER_SW", "PB3", "USB_ID", "USBC_nINT",
> > "I2C0_SCL", "I2C0_SDA", "UART0_TX", "UART0_RX", "", "", "", "", "", "",
> > "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", //PB +
> > "SPI_MISO", "SPI_SCK",
> > "FLASH_nCS", "SPI_MOSI", "", "", "", "", "", "", "", "", "", "", "", "",
> > "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", //PC +
> > "", "", "", "", "", "", "", "",
> > "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
> > "", "", "", "", "", "", //PD +
> > "Q12", "Q11", "Q10", "Q9", "LED_SYS0", "I1", "Q1", "Q2", "I2", "I3",
> > "Q3", "Q4", "I4", "I5", "Q5", "Q6", "I6", "I7", "Q7", "Q8", "I8",
> > "UART1_TXD", "UART1_RXD", "ESP_nRST", "ESP_nBOOT", "", "", "", "", "",
> > "", "", //PE + "SD_D1",
> > "SD_D0", "SD_CLK", "SD_CMD", "SD_D3", "SD_D2", "LED_SYS1", "", "", "",
> > "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
> > "", "", "", "", //PF +
> > "ESP_CLK", "ESP_CMD", "ESP_D0", "ESP_D1", "ESP_D2", "ESP_D3", "", "", "",
> > "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
> > "", "", "", "", ""; //PG +
> > + uart0_pins: uart0-pins {
> > + pins = "PB8", "PB9";
> > + function = "uart0";
> > + };
>
> Why would you need that node? There is already uart0_pb_pins in the .dtsi.
>
> > +
> > + uart1_pins: uart1-pins {
> > + pins = "PE21", "PE22";
> > + function = "uart1";
> > + };
>
> Please specify those pinmux in the .dtsi file, as they can be shared
> across boards. It's typically the first user adding them to the .dtsi. For
> rare pins, we add a /omit-if-no-ref/ tag.
>
> > +
> > + spi0_pins: spi0-pins {
> > + pins = "PC0", "PC1", "PC2", "PC3";
> > + function = "spi0";
> > + };
>
> Same redundancy again, it's already in the .dtsi.
>
> > +
> > + can0_pins: can0-pins {
> > + pins = "PB1";
> > + function = "gpio_in";
> > + };
>
> As mentioned above, this wouldn't be needed, and in particular gpio_in
> looks wrong. It would need to be the EINT pinmux (0x6), but the PIO IRQ
> controller code takes care of that already.
Hi,
I had just tried the can-bus on my board again. It is not getting any messages
with this removed. I do not get any interrupts according to /proc/interrupts
now.
Is this an issue with the pio or do I just add the pinctrl back?
>
> Cheers,
> Andre
>
> > +};
>
> IMPORTANT NOTICE: The contents of this email and any attachments are
> confidential and may also be privileged. If you are not the intended
> recipient, please notify the sender immediately and do not disclose the
> contents to any other person, use it for any purpose, or store or copy the
> information in any medium. Thank you.
[-- Attachment #2: This is a digitally signed message part. --]
[-- Type: application/pgp-signature, Size: 488 bytes --]
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2025-01-25 15:10 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-01-02 12:18 [PATCH 1/1] ARM: dts: sunxi: add support for NetCube Systems Kumquat Lukas Schmid
2025-01-02 13:02 ` Rob Herring (Arm)
2025-01-02 14:31 ` Andre Przywara
2025-01-25 14:10 ` Lukas Schmid
-- strict thread matches above, loose matches on Subject: below --
2025-01-02 11:54 Lukas Schmid
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox