[openwrt/openwrt] sunxi: add F1C100 (arm926ej-s) support
LEDE Commits
lede-commits at lists.infradead.org
Mon Oct 6 01:28:25 PDT 2025
wigyori pushed a commit to openwrt/openwrt.git, branch main:
https://git.openwrt.org/3ec468ff4fa3106d459ae58ec4bc4833715118c6
commit 3ec468ff4fa3106d459ae58ec4bc4833715118c6
Author: Zoltan HERPAI <wigyori at uid0.hu>
AuthorDate: Fri May 30 21:30:38 2025 +0000
sunxi: add F1C100 (arm926ej-s) support
This is Allwinner's ARM926EJ-S core, which is one of its early
products, reappearing in recent compact designs. The SoC includes
32/64Mb memory in the same physical package, and has display and USB
interfaces, allowing for very small footprint boards.
The target consists of basic 6.12 support, with u-boot. Instead of creating
a separate suniv target, as both the kernel and u-boot supports enough of
this SoC by now with minimal patching, add it into sunxi as a subtarget.
Link: https://github.com/openwrt/openwrt/pull/15022
Signed-off-by: Zoltan HERPAI <wigyori at uid0.hu>
---
package/boot/uboot-sunxi/Makefile | 17 ++-
...unxi-add-USB-support-and-PopStick-support.patch | 120 +++++++++++++++++++++
.../patches/261-sunxi-add-popstick-defconfig.patch | 51 +++++++++
package/boot/uboot-sunxi/uEnv-f1c.txt | 6 ++
target/linux/sunxi/Makefile | 2 +-
target/linux/sunxi/arm926ejs/config-6.12 | 56 ++++++++++
target/linux/sunxi/arm926ejs/target.mk | 11 ++
target/linux/sunxi/config-6.12 | 2 -
target/linux/sunxi/cortexa7/config-6.12 | 2 +
target/linux/sunxi/cortexa8/config-6.12 | 2 +
target/linux/sunxi/image/arm926ejs.mk | 26 +++++
.../patches-6.12/460-f1c100s-sram-driver.patch | 33 ++++++
.../patches-6.12/461-f1c100s-watchdog-compat.patch | 18 ++++
13 files changed, 342 insertions(+), 4 deletions(-)
diff --git a/package/boot/uboot-sunxi/Makefile b/package/boot/uboot-sunxi/Makefile
index aa1cc48dc0..02a951e550 100644
--- a/package/boot/uboot-sunxi/Makefile
+++ b/package/boot/uboot-sunxi/Makefile
@@ -140,6 +140,13 @@ define U-Boot/OLIMEX_A13_SOM
BUILD_DEVICES:=olimex_a13-olimex-som
endef
+define U-Boot/licheepi_nano
+ BUILD_SUBTARGET:=arm926ejs
+ NAME:=LicheePi Nano
+ UENV:=f1c
+ BUILD_DEVICES:=licheepi-nano
+endef
+
define U-Boot/Linksprite_pcDuino
BUILD_SUBTARGET:=cortexa8
NAME:=Linksprite pcDuino
@@ -257,6 +264,13 @@ define U-Boot/pangolin
UENV:=pangolin
endef
+define U-Boot/popstick
+ BUILD_SUBTARGET:=arm926ejs
+ NAME:=PopStick
+ UENV:=f1c
+ BUILD_DEVICES:=popstick-v1.1
+endef
+
define U-Boot/libretech_all_h3_cc_h5
BUILD_SUBTARGET:=cortexa53
NAME:=Libre Computer ALL-H3-CC H5
@@ -323,7 +337,6 @@ define U-Boot/sopine_baseboard
ATF:=a64
endef
-
define U-Boot/orangepi_zero_plus
BUILD_SUBTARGET:=cortexa53
NAME:=Xunlong Orange Pi Zero Plus
@@ -411,6 +424,7 @@ UBOOT_TARGETS := \
Marsboard_A10 \
Mele_M9 \
OLIMEX_A13_SOM \
+ licheepi_nano \
LicheePi_Zero \
Linksprite_pcDuino \
Linksprite_pcDuino3 \
@@ -437,6 +451,7 @@ UBOOT_TARGETS := \
orangepi_zero2w \
orangepi_zero3 \
pangolin \
+ popstick \
pine64_plus \
Sinovoip_BPI_M3 \
sopine_baseboard \
diff --git a/package/boot/uboot-sunxi/patches/260-sunxi-add-USB-support-and-PopStick-support.patch b/package/boot/uboot-sunxi/patches/260-sunxi-add-USB-support-and-PopStick-support.patch
new file mode 100644
index 0000000000..ecc2eb2d25
--- /dev/null
+++ b/package/boot/uboot-sunxi/patches/260-sunxi-add-USB-support-and-PopStick-support.patch
@@ -0,0 +1,120 @@
+From 08d194d881e10e09cba7551da8079734d89ed16d Mon Sep 17 00:00:00 2001
+From: Icenowy Zheng <uwu at icenowy.me>
+Date: Thu, 16 Jun 2022 00:28:41 +0800
+Subject: [PATCH 1/2] add USB support and PopStick support
+
+Signed-off-by: Icenowy Zheng <uwu at icenowy.me>
+---
+ arch/arm/dts/Makefile | 3 +-
+ arch/arm/dts/suniv-f1c100s-licheepi-nano.dts | 16 ++++
+ arch/arm/dts/suniv-f1c100s.dtsi | 26 ++++++
+ arch/arm/dts/suniv-f1c200s-popstick.dts | 89 ++++++++++++++++++++
+ drivers/phy/allwinner/phy-sun4i-usb.c | 14 +++
+ drivers/usb/musb-new/sunxi.c | 6 ++
+ 6 files changed, 153 insertions(+), 1 deletion(-)
+ create mode 100644 arch/arm/dts/suniv-f1c200s-popstick.dts
+
+--- a/arch/arm/dts/Makefile
++++ b/arch/arm/dts/Makefile
+@@ -647,7 +647,8 @@ dtb-$(CONFIG_STM32H7) += stm32h743i-disc
+ stm32h750i-art-pi.dtb
+
+ dtb-$(CONFIG_MACH_SUNIV) += \
+- suniv-f1c100s-licheepi-nano.dtb
++ suniv-f1c100s-licheepi-nano.dtb \
++ suniv-f1c200s-popstick.dtb
+ dtb-$(CONFIG_MACH_SUN4I) += \
+ sun4i-a10-a1000.dtb \
+ sun4i-a10-ba10-tvbox.dtb \
+--- /dev/null
++++ b/arch/arm/dts/suniv-f1c200s-popstick.dts
+@@ -0,0 +1,89 @@
++// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
++/*
++ * Copyright 2022 Icenowy Zheng <uwu at icenowy.me>
++ */
++
++/dts-v1/;
++#include "suniv-f1c100s.dtsi"
++
++#include <dt-bindings/gpio/gpio.h>
++
++/ {
++ model = "Popcorn Computer PopStick";
++ compatible = "sourceparts,popstick", "allwinner,suniv-f1c200s",
++ "allwinner,suniv-f1c100s";
++
++ aliases {
++ mmc0 = &mmc0;
++ serial0 = &uart0;
++ spi0 = &spi0;
++ };
++
++ chosen {
++ stdout-path = "serial0:115200n8";
++ };
++
++ reg_vcc3v3: vcc3v3 {
++ compatible = "regulator-fixed";
++ regulator-name = "vcc3v3";
++ regulator-min-microvolt = <3300000>;
++ regulator-max-microvolt = <3300000>;
++ };
++};
++
++&mmc0 {
++ broken-cd;
++ bus-width = <4>;
++ disable-wp;
++ status = "okay";
++ vmmc-supply = <®_vcc3v3>;
++};
++
++&spi0 {
++ pinctrl-names = "default";
++ pinctrl-0 = <&spi0_pc_pins>;
++ status = "okay";
++
++ flash at 0 {
++ #address-cells = <1>;
++ #size-cells = <1>;
++ compatible = "spi-nand";
++ reg = <0>;
++ spi-max-frequency = <1000000>;
++
++ partitions {
++ compatible = "fixed-partitions";
++ #address-cells = <1>;
++ #size-cells = <1>;
++
++ partition at 0 {
++ label = "u-boot-with-spl";
++ reg = <0x0 0x100000>;
++ };
++
++ ubi at 100000 {
++ label = "ubi";
++ reg = <0x100000 0x7f00000>;
++ };
++ };
++ };
++};
++
++&otg_sram {
++ status = "okay";
++};
++
++&uart0 {
++ pinctrl-names = "default";
++ pinctrl-0 = <&uart0_pe_pins>;
++ status = "okay";
++};
++
++&usb_otg {
++ dr_mode = "peripheral";
++ status = "okay";
++};
++
++&usbphy {
++ status = "okay";
++};
diff --git a/package/boot/uboot-sunxi/patches/261-sunxi-add-popstick-defconfig.patch b/package/boot/uboot-sunxi/patches/261-sunxi-add-popstick-defconfig.patch
new file mode 100644
index 0000000000..56f8192160
--- /dev/null
+++ b/package/boot/uboot-sunxi/patches/261-sunxi-add-popstick-defconfig.patch
@@ -0,0 +1,51 @@
+From 0d263e1071ee3f63d2047a8bb9af4434f1cd4bb1 Mon Sep 17 00:00:00 2001
+From: Icenowy Zheng <uwu at icenowy.me>
+Date: Thu, 16 Jun 2022 09:46:42 +0800
+Subject: [PATCH 2/2] HACK for UBI env and add defconfig
+
+---
+ board/sunxi/board.c | 1 +
+ configs/popstick_defconfig | 37 +++++++++++++++++++++++++++++++++++++
+ 2 files changed, 38 insertions(+)
+ create mode 100644 configs/popstick_defconfig
+
+--- /dev/null
++++ b/configs/popstick_defconfig
+@@ -0,0 +1,37 @@
++CONFIG_ARM=y
++CONFIG_SKIP_LOWLEVEL_INIT_ONLY=y
++CONFIG_SPL_SKIP_LOWLEVEL_INIT_ONLY=y
++CONFIG_ARCH_SUNXI=y
++CONFIG_ENV_SIZE=0x1f000
++CONFIG_DEFAULT_DEVICE_TREE="suniv-f1c200s-popstick"
++CONFIG_SPL=y
++CONFIG_MACH_SUNIV=y
++CONFIG_DRAM_CLK=156
++CONFIG_DRAM_ZQ=0
++# CONFIG_VIDEO_SUNXI is not set
++CONFIG_SPL_SPI_SUNXI=y
++CONFIG_SPL_SPI_SUNXI_NAND=y
++CONFIG_SPL_SPI_SUNXI_NAND_ASSUMED_PAGESIZE=0x800
++# CONFIG_ANDROID_BOOT_IMAGE is not set
++CONFIG_SYS_SPI_U_BOOT_OFFS=0x20000
++CONFIG_CMD_MTD=y
++# CONFIG_CMD_SF is not set
++CONFIG_CMD_MTDPARTS=y
++CONFIG_CMD_UBI=y
++# CONFIG_ENV_IS_IN_FAT is not set
++# CONFIG_ENV_IS_IN_SPI_FLASH is not set
++CONFIG_ENV_IS_IN_UBI=y
++CONFIG_ENV_UBI_PART="ubi"
++CONFIG_ENV_UBI_VOLUME="env"
++# CONFIG_NET is not set
++CONFIG_MTD=y
++CONFIG_DM_MTD=y
++CONFIG_MTD_SPI_NAND=y
++# CONFIG_SPI_FLASH is not set
++CONFIG_SF_DEFAULT_SPEED=25000000
++# CONFIG_UBI_SILENCE_MSG is not set
++CONFIG_PHY_SUN4I_USB=y
++CONFIG_SPI=y
++CONFIG_USB_MUSB_GADGET=y
++CONFIG_USB_FUNCTION_SDP=y
++# CONFIG_UBIFS_SILENCE_MSG is not set
diff --git a/package/boot/uboot-sunxi/uEnv-f1c.txt b/package/boot/uboot-sunxi/uEnv-f1c.txt
new file mode 100644
index 0000000000..535d576d87
--- /dev/null
+++ b/package/boot/uboot-sunxi/uEnv-f1c.txt
@@ -0,0 +1,6 @@
+setenv mmc_rootpart 2
+part uuid mmc ${mmc_bootdev}:${mmc_rootpart} uuid
+setenv loadkernel fatload mmc \$mmc_bootdev \$ramdisk_addr_r uImage
+setenv bootargs console=ttyS0,115200 earlyprintk root=PARTUUID=${uuid} rootwait
+setenv uenvcmd run loadkernel \&\& bootm \$ramdisk_addr_r
+run uenvcmd
diff --git a/target/linux/sunxi/Makefile b/target/linux/sunxi/Makefile
index 0f07274d38..a40a495900 100644
--- a/target/linux/sunxi/Makefile
+++ b/target/linux/sunxi/Makefile
@@ -8,7 +8,7 @@ ARCH:=arm
BOARD:=sunxi
BOARDNAME:=Allwinner ARM SoCs
FEATURES:=ext4 display ramdisk rootfs-part rtc squashfs usb usbgadget
-SUBTARGETS:=cortexa8 cortexa7 cortexa53
+SUBTARGETS:=cortexa8 cortexa7 cortexa53 arm926ejs
KERNEL_PATCHVER:=6.12
diff --git a/target/linux/sunxi/arm926ejs/config-6.12 b/target/linux/sunxi/arm926ejs/config-6.12
new file mode 100644
index 0000000000..8625b9751b
--- /dev/null
+++ b/target/linux/sunxi/arm926ejs/config-6.12
@@ -0,0 +1,56 @@
+# CONFIG_ARCH_MULTI_V4 is not set
+# CONFIG_ARCH_MULTI_V4T is not set
+CONFIG_ARCH_MULTI_V4_V5=y
+CONFIG_ARCH_MULTI_V5=y
+CONFIG_ARCH_MULTIPLATFORM=y
+CONFIG_ARCH_MULTI_CPU_AUTO=y
+CONFIG_ARCH_NR_GPIO=416
+CONFIG_ARCH_OPTIONAL_KERNEL_RWX=y
+CONFIG_ARCH_SELECT_MEMORY_MODEL=y
+CONFIG_ARCH_SPARSEMEM_ENABLE=y
+CONFIG_ARCH_SUNXI=y
+CONFIG_ARCH_32BIT_OFF_T=y
+CONFIG_ARCH_HAS_BINFMT_FLAT=y
+CONFIG_ARCH_HAS_TEARDOWN_DMA_OPS=y
+CONFIG_BINFMT_FLAT_ARGVP_ENVP_ON_STACK=y
+CONFIG_COMPAT_32BIT_TIME=y
+# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
+# CONFIG_CPU_CACHE_ROUND_ROBIN is not set
+CONFIG_MACH_SUNIV=y
+# CONFIG_MACH_SUN4I is not set
+# CONFIG_MACH_SUN5I is not set
+# CONFIG_MACH_SUN6I is not set
+# CONFIG_MACH_SUN7I is not set
+# CONFIG_MACH_SUN8I is not set
+# CONFIG_MACH_SUN9I is not set
+CONFIG_MDIO_BUS_MUX=y
+CONFIG_MTD_SPI_NAND=y
+CONFIG_MUSB_PIO_ONLY=y
+CONFIG_NOP_USB_XCEIV=y
+# CONFIG_PHY_SUN9I_USB is not set
+# CONFIG_PINCTRL_SUN4I_A10 is not set
+# CONFIG_PINCTRL_SUN50I_A64 is not set
+# CONFIG_PINCTRL_SUN50I_A64_R is not set
+# CONFIG_PINCTRL_SUN50I_H5 is not set
+# CONFIG_PINCTRL_SUN50I_H6 is not set
+# CONFIG_PINCTRL_SUN50I_H6_R is not set
+# CONFIG_PINCTRL_SUN5I is not set
+# CONFIG_PINCTRL_SUN6I_A31 is not set
+# CONFIG_PINCTRL_SUN6I_A31_R is not set
+# CONFIG_PINCTRL_SUN8I_A23 is not set
+# CONFIG_PINCTRL_SUN8I_A23_R is not set
+# CONFIG_PINCTRL_SUN8I_A33 is not set
+# CONFIG_PINCTRL_SUN8I_A83T is not set
+# CONFIG_PINCTRL_SUN8I_A83T_R is not set
+# CONFIG_PINCTRL_SUN8I_H3 is not set
+# CONFIG_PINCTRL_SUN8I_H3_R is not set
+# CONFIG_PINCTRL_SUN8I_V3S is not set
+# CONFIG_PINCTRL_SUN9I_A80 is not set
+# CONFIG_PINCTRL_SUN9I_A80_R is not set
+CONFIG_PINCTRL_SUNIV_F1C100S=y
+CONFIG_PINCTRL_SUNXI=y
+CONFIG_SUNIV_F1C100S_CCU=y
+CONFIG_UNWINDER_ARM=y
+CONFIG_USB_MUSB_HDRC=y
+CONFIG_USB_MUSB_DUAL_ROLE=y
+CONFIG_USB_MUSB_SUNXI=y
diff --git a/target/linux/sunxi/arm926ejs/target.mk b/target/linux/sunxi/arm926ejs/target.mk
new file mode 100644
index 0000000000..f37aa30d70
--- /dev/null
+++ b/target/linux/sunxi/arm926ejs/target.mk
@@ -0,0 +1,11 @@
+#
+# Copyright (C) 2024 Zoltan HERPAI
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+BOARDNAME:=Allwinner F1C100/200s
+CPU_TYPE:=arm926ej-s
diff --git a/target/linux/sunxi/config-6.12 b/target/linux/sunxi/config-6.12
index a13526650a..d470b3f2e7 100644
--- a/target/linux/sunxi/config-6.12
+++ b/target/linux/sunxi/config-6.12
@@ -7,8 +7,6 @@ CONFIG_ARCH_HIBERNATION_POSSIBLE=y
CONFIG_ARCH_KEEP_MEMBLOCK=y
CONFIG_ARCH_MIGHT_HAVE_PC_PARPORT=y
CONFIG_ARCH_MULTIPLATFORM=y
-CONFIG_ARCH_MULTI_V6_V7=y
-CONFIG_ARCH_MULTI_V7=y
CONFIG_ARCH_NR_GPIO=416
CONFIG_ARCH_OPTIONAL_KERNEL_RWX=y
CONFIG_ARCH_OPTIONAL_KERNEL_RWX_DEFAULT=y
diff --git a/target/linux/sunxi/cortexa7/config-6.12 b/target/linux/sunxi/cortexa7/config-6.12
index 1ecc69bc69..d17ea5505f 100644
--- a/target/linux/sunxi/cortexa7/config-6.12
+++ b/target/linux/sunxi/cortexa7/config-6.12
@@ -1,3 +1,5 @@
+CONFIG_ARCH_MULTI_V6_V7=y
+CONFIG_ARCH_MULTI_V7=y
CONFIG_B53=y
CONFIG_B53_MDIO_DRIVER=y
CONFIG_CRYPTO_BLAKE2S_ARM=y
diff --git a/target/linux/sunxi/cortexa8/config-6.12 b/target/linux/sunxi/cortexa8/config-6.12
index b893b3142e..274778dd09 100644
--- a/target/linux/sunxi/cortexa8/config-6.12
+++ b/target/linux/sunxi/cortexa8/config-6.12
@@ -1,3 +1,5 @@
+CONFIG_ARCH_MULTI_V6_V7=y
+CONFIG_ARCH_MULTI_V7=y
# CONFIG_ARM_LPAE is not set
CONFIG_CRYPTO_BLAKE2S_ARM=y
CONFIG_CRYPTO_LIB_BLAKE2S_GENERIC=y
diff --git a/target/linux/sunxi/image/arm926ejs.mk b/target/linux/sunxi/image/arm926ejs.mk
new file mode 100644
index 0000000000..42d3ee6f29
--- /dev/null
+++ b/target/linux/sunxi/image/arm926ejs.mk
@@ -0,0 +1,26 @@
+#
+# Copyright (C) 2013-2024 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+KERNEL_LOADADDR=0x81000000
+
+define Device/licheepi-nano
+ $(call Device/FitImageGzip)
+ DEVICE_VENDOR := LicheePi
+ DEVICE_MODEL := Nano
+ DEVICE_PACKAGES := kmod-rtc-sunxi
+ SOC := suniv-f1c100s
+endef
+TARGET_DEVICES += licheepi-nano
+
+define Device/popstick-v1.1
+ $(call Device/FitImageGzip)
+ DEVICE_VENDOR := PopStick
+ DEVICE_MODEL := v1.1
+ DEVICE_PACKAGES := kmod-rtc-sunxi
+ SOC := suniv-f1c200s
+endef
+TARGET_DEVICES += popstick-v1.1
diff --git a/target/linux/sunxi/patches-6.12/460-f1c100s-sram-driver.patch b/target/linux/sunxi/patches-6.12/460-f1c100s-sram-driver.patch
new file mode 100644
index 0000000000..4bf090a080
--- /dev/null
+++ b/target/linux/sunxi/patches-6.12/460-f1c100s-sram-driver.patch
@@ -0,0 +1,33 @@
+Allwinner ARMv5 F1C100s has similar sram controller to sun4i A10
+Add compatible strings for it.
+
+Signed-off-by: Mesih Kilinc <mesihkilinc at gmail.com>
+Acked-by: Maxime Ripard <maxime.ripard at bootlin.com>
+---
+ drivers/soc/sunxi/sunxi_sram.c | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+--- a/drivers/soc/sunxi/sunxi_sram.c
++++ b/drivers/soc/sunxi/sunxi_sram.c
+@@ -98,6 +98,10 @@ static const struct of_device_id sunxi_s
+ .compatible = "allwinner,sun50i-a64-sram-c",
+ .data = &sun50i_a64_sram_c.data,
+ },
++ {
++ .compatible = "allwinner,suniv-f1c100s-sram-d",
++ .data = &sun4i_a10_sram_d.data,
++ },
+ {}
+ };
+
+@@ -430,6 +434,10 @@ static const struct of_device_id sunxi_s
+ .compatible = "allwinner,sun50i-h616-system-control",
+ .data = &sun50i_h616_sramc_variant,
+ },
++ {
++ .compatible = "allwinner,suniv-f1c100s-system-control",
++ .data = &sun4i_a10_sramc_variant,
++ },
+ { },
+ };
+ MODULE_DEVICE_TABLE(of, sunxi_sram_dt_match);
diff --git a/target/linux/sunxi/patches-6.12/461-f1c100s-watchdog-compat.patch b/target/linux/sunxi/patches-6.12/461-f1c100s-watchdog-compat.patch
new file mode 100644
index 0000000000..8baf969a0f
--- /dev/null
+++ b/target/linux/sunxi/patches-6.12/461-f1c100s-watchdog-compat.patch
@@ -0,0 +1,18 @@
+Allwinner ARMv5 F1C100s has similar watchdog timer to sun6i A31.
+Add compatible string for it.
+
+Signed-off-by: Mesih Kilinc <mesihkilinc at gmail.com>
+---
+ drivers/watchdog/sunxi_wdt.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/drivers/watchdog/sunxi_wdt.c
++++ b/drivers/watchdog/sunxi_wdt.c
+@@ -240,6 +240,7 @@ static const struct of_device_id sunxi_w
+ { .compatible = "allwinner,sun4i-a10-wdt", .data = &sun4i_wdt_reg },
+ { .compatible = "allwinner,sun6i-a31-wdt", .data = &sun6i_wdt_reg },
+ { .compatible = "allwinner,sun20i-d1-wdt", .data = &sun20i_wdt_reg },
++ { .compatible = "allwinner,suniv-f1c100s-wdt", .data = &sun6i_wdt_reg },
+ { /* sentinel */ }
+ };
+ MODULE_DEVICE_TABLE(of, sunxi_wdt_dt_ids);
More information about the lede-commits
mailing list