From: Zoltan HERPAI Date: Fri, 30 May 2025 21:30:38 +0000 (+0000) Subject: sunxi: add F1C100 (arm926ej-s) support X-Git-Url: http://git.openwrt.org/?a=commitdiff_plain;h=3ec468ff4fa3106d459ae58ec4bc4833715118c6;p=openwrt%2Fstaging%2Fwigyori.git 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 --- 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 +Date: Thu, 16 Jun 2022 00:28:41 +0800 +Subject: [PATCH 1/2] add USB support and PopStick support + +Signed-off-by: Icenowy Zheng +--- + 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 ++ */ ++ ++/dts-v1/; ++#include "suniv-f1c100s.dtsi" ++ ++#include ++ ++/ { ++ 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@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@0 { ++ label = "u-boot-with-spl"; ++ reg = <0x0 0x100000>; ++ }; ++ ++ ubi@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 +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 +Acked-by: Maxime Ripard +--- + 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 +--- + 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);