From: Linus Walleij Date: Thu, 12 Feb 2026 08:47:21 +0000 (+0100) Subject: gemini: add support for Raidsonic IB-4210-B X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ef5985167cbf9bc736736d9bac35e5477019f87b;p=thirdparty%2Fopenwrt.git gemini: add support for Raidsonic IB-4210-B There has been some modified device trees floating on forums to make this device work, collect the work and integrate it into OpenWrt so it hopefully works for users. Link: https://github.com/openwrt/openwrt/pull/21998 Signed-off-by: Linus Walleij --- diff --git a/target/linux/gemini/base-files/etc/board.d/02_network b/target/linux/gemini/base-files/etc/board.d/02_network index 9a39b386e87..85efd9af932 100644 --- a/target/linux/gemini/base-files/etc/board.d/02_network +++ b/target/linux/gemini/base-files/etc/board.d/02_network @@ -11,6 +11,7 @@ dlink,dir-685) ;; dlink,dns-313|\ edimax,ns-2502|\ +raidsonic,ib-4210-b|\ raidsonic,ib-4220-b|\ verbatim,s08v1901-d1|\ wiliboard,wbd111|\ diff --git a/target/linux/gemini/base-files/lib/upgrade/platform.sh b/target/linux/gemini/base-files/lib/upgrade/platform.sh index 6b49652a57e..753708ac06f 100644 --- a/target/linux/gemini/base-files/lib/upgrade/platform.sh +++ b/target/linux/gemini/base-files/lib/upgrade/platform.sh @@ -94,6 +94,7 @@ platform_check_image() { dlink,dir-685|\ itian,sq201|\ storlink,gemini324|\ + raidsonic,ib-4210-b|\ raidsonic,ib-4220-b|\ verbatim,s08v1901-d1) return 0 @@ -112,6 +113,7 @@ platform_do_upgrade() { PART_NAME=firmware default_do_upgrade "$1" ;; + raidsonic,ib-4210-b|\ raidsonic,ib-4220-b|\ storlink,gemini324|\ verbatim,s08v1901-d1) diff --git a/target/linux/gemini/image/ImageInfo-raidsonic_ib-4210-b b/target/linux/gemini/image/ImageInfo-raidsonic_ib-4210-b new file mode 100644 index 00000000000..1e397d012fa --- /dev/null +++ b/target/linux/gemini/image/ImageInfo-raidsonic_ib-4210-b @@ -0,0 +1,19 @@ +Distribution="OpenWrt" +Layout="Compact" +UpgradeImages="zImage rd.gz hddapp.tgz" +productName="IB-NAS4210-B" +hardwareName="MP-LNU23SL" +productVendor=" " +VendorID="macpower" +ProductID="pddlan" +UpgradeVersion="300" +ExtraVersion="" +manufacturerURL=" " +Description="IB-NAS4210-B" +hostname="IB-NAS4210-B" +softwareVersion="3.0" +TSS="enabled" +DIRECT_MODE="disabled" +Raid_Support="raid0_raid1_raid5_linear" +RaidTestDiskSize="0" +Raid_Show_Disk="2" diff --git a/target/linux/gemini/image/Makefile b/target/linux/gemini/image/Makefile index 38fda2eca9b..49d42ac26a1 100644 --- a/target/linux/gemini/image/Makefile +++ b/target/linux/gemini/image/Makefile @@ -243,15 +243,22 @@ define Device/itian_sq201 endef TARGET_DEVICES += itian_sq201 +define Device/raidsonic_ib-4210-b + $(Device/storlink-reference) + DEVICE_VENDOR := Raidsonic + DEVICE_MODEL := NAS IB-4210-B + DEVICE_DTS := gemini-nas4210b + IMAGE/factory.bin := storlink-3072k-factory-image $(1) + IMAGE/sysupgrade.bin := storlink-3072k-sysupgrade-image $(1) |\ + append-metadata +endef +TARGET_DEVICES += raidsonic_ib-4210-b + define Device/raidsonic_ib-4220-b $(Device/storlink-reference) DEVICE_VENDOR := Raidsonic DEVICE_MODEL := NAS IB-4220-B DEVICE_DTS := gemini-nas4220b - # The IB-4220-B has a deviating flash layout - # Kern 3072k - 512 | = 3145216 - # Ramdisk 6144k | = 9216k - # Application 6144k | = 15360k IMAGE/factory.bin := storlink-3072k-factory-image $(1) IMAGE/sysupgrade.bin := storlink-3072k-sysupgrade-image $(1) |\ append-metadata diff --git a/target/linux/gemini/patches-6.12/0003-ARM-dts-Add-a-Raidsonic-IB-4210-B-DTS.patch b/target/linux/gemini/patches-6.12/0003-ARM-dts-Add-a-Raidsonic-IB-4210-B-DTS.patch new file mode 100644 index 00000000000..d97e0abc08b --- /dev/null +++ b/target/linux/gemini/patches-6.12/0003-ARM-dts-Add-a-Raidsonic-IB-4210-B-DTS.patch @@ -0,0 +1,234 @@ +From e6619c1d068dea0d4d29cf770a85bb8bfcfd104b Mon Sep 17 00:00:00 2001 +From: Linus Walleij +Date: Thu, 12 Feb 2026 00:17:53 +0100 +Subject: [PATCH 1/2] ARM: dts: Add a Raidsonic IB-4210-B DTS + +This adds a device tree for the Raidsonic IB-4210-B NAS, a slightly +under-powered version of IB-4220-B with half the memory and +the cheaper version of the SoC. + +Signed-off-by: Linus Walleij +--- + arch/arm/boot/dts/gemini/Makefile | 1 + + arch/arm/boot/dts/gemini/gemini-nas4210b.dts | 205 +++++++++++++++++++ + 2 files changed, 206 insertions(+) + create mode 100644 arch/arm/boot/dts/gemini/gemini-nas4210b.dts + +--- a/arch/arm/boot/dts/gemini/Makefile ++++ b/arch/arm/boot/dts/gemini/Makefile +@@ -2,6 +2,7 @@ + dtb-$(CONFIG_ARCH_GEMINI) += \ + gemini-dlink-dir-685.dtb \ + gemini-dlink-dns-313.dtb \ ++ gemini-nas4210b.dtb \ + gemini-nas4220b.dtb \ + gemini-ns2502.dtb \ + gemini-rut1xx.dtb \ +--- /dev/null ++++ b/arch/arm/boot/dts/gemini/gemini-nas4210b.dts +@@ -0,0 +1,205 @@ ++// SPDX-License-Identifier: GPL-2.0 ++/* ++ * Device Tree file for the Gemini-based Raidsonic NAS IB-4210-B ++ * Based on the NAS Forum experiments by user "CptSpock". ++ */ ++ ++/dts-v1/; ++ ++#include "gemini.dtsi" ++#include ++ ++/ { ++ model = "Raidsonic NAS IB-4210-B"; ++ compatible = "raidsonic,ib-4210-b", "cortina,gemini"; ++ #address-cells = <1>; ++ #size-cells = <1>; ++ ++ memory@0 { /* 64 MB */ ++ device_type = "memory"; ++ reg = <0x00000000 0x4000000>; ++ }; ++ ++ chosen { ++ bootargs = "console=ttyS0,19200n8 root=/dev/sda1 rw rootwait"; ++ stdout-path = &uart0; ++ }; ++ ++ gpio_keys { ++ compatible = "gpio-keys"; ++ ++ button-setup { ++ debounce-interval = <100>; ++ wakeup-source; ++ linux,code = ; ++ label = "Backup button"; ++ /* Conflict with TVC */ ++ gpios = <&gpio1 29 GPIO_ACTIVE_LOW>; ++ }; ++ button-restart { ++ debounce-interval = <100>; ++ wakeup-source; ++ linux,code = ; ++ label = "Softreset button"; ++ /* Conflict with TVC */ ++ gpios = <&gpio1 31 GPIO_ACTIVE_LOW>; ++ }; ++ }; ++ ++ leds { ++ compatible = "gpio-leds"; ++ led-orange-hdd { ++ label = "nas4220b:orange:hdd"; ++ /* Conflict with TVC */ ++ gpios = <&gpio1 28 GPIO_ACTIVE_HIGH>; ++ default-state = "on"; ++ linux,default-trigger = "disk-activity"; ++ }; ++ led-green-os { ++ label = "nas4220b:green:os"; ++ /* Conflict with TVC */ ++ gpios = <&gpio1 30 GPIO_ACTIVE_HIGH>; ++ default-state = "on"; ++ linux,default-trigger = "heartbeat"; ++ }; ++ }; ++ ++ mdio0: mdio { ++ compatible = "virtual,mdio-gpio"; ++ gpios = <&gpio0 22 GPIO_ACTIVE_HIGH>, /* MDC */ ++ <&gpio0 21 GPIO_ACTIVE_HIGH>; /* MDIO */ ++ #address-cells = <1>; ++ #size-cells = <0>; ++ ++ /* Realtek RTL8211B */ ++ phy0: ethernet-phy@1 { ++ reg = <1>; ++ device_type = "ethernet-phy"; ++ }; ++ }; ++ ++ soc { ++ flash@30000000 { ++ status = "okay"; ++ /* 16MB of flash */ ++ reg = <0x30000000 0x01000000>; ++ ++ partitions { ++ compatible = "redboot-fis"; ++ /* Eraseblock at 0xfe0000 */ ++ fis-index-block = <0x7f>; ++ }; ++ }; ++ ++ syscon: syscon@40000000 { ++ pinctrl { ++ gpio0_default_pins: pinctrl-gpio0 { ++ mux { ++ function = "gpio0"; ++ groups = ++ "gpio0egrp", ++ /* Used by MDIO */ ++ "gpio0igrp"; ++ }; ++ }; ++ gpio1_default_pins: pinctrl-gpio1 { ++ mux { ++ function = "gpio1"; ++ /* Lines 28-31 used by LEDs and buttons */ ++ groups = "gpio1dgrp"; ++ }; ++ }; ++ pinctrl-gmii { ++ mux { ++ function = "gmii"; ++ groups = "gmii_gmac0_grp"; ++ }; ++ conf0 { ++ pins = "R8 GMAC0 RXDV", "U11 GMAC1 RXDV"; ++ skew-delay = <0>; ++ }; ++ conf1 { ++ pins = "T8 GMAC0 RXC"; ++ skew-delay = <10>; ++ }; ++ conf2 { ++ pins = "T11 GMAC1 RXC"; ++ skew-delay = <15>; ++ }; ++ conf3 { ++ pins = "P8 GMAC0 TXEN", "V11 GMAC1 TXEN"; ++ skew-delay = <7>; ++ }; ++ conf4 { ++ pins = "V7 GMAC0 TXC", "P10 GMAC1 TXC"; ++ skew-delay = <10>; ++ }; ++ conf5 { ++ /* The data lines all have default skew */ ++ pins = "U8 GMAC0 RXD0", "V8 GMAC0 RXD1", ++ "P9 GMAC0 RXD2", "R9 GMAC0 RXD3", ++ "R11 GMAC1 RXD0", "P11 GMAC1 RXD1", ++ "V12 GMAC1 RXD2", "U12 GMAC1 RXD3", ++ "R10 GMAC1 TXD0", "T10 GMAC1 TXD1", ++ "U10 GMAC1 TXD2", "V10 GMAC1 TXD3"; ++ skew-delay = <7>; ++ }; ++ conf6 { ++ pins = "U7 GMAC0 TXD0", "T7 GMAC0 TXD1", ++ "R7 GMAC0 TXD2", "P7 GMAC0 TXD3"; ++ skew-delay = <5>; ++ }; ++ /* Set up drive strength on GMAC0 to 16 mA */ ++ conf7 { ++ groups = "gmii_gmac0_grp"; ++ drive-strength = <16>; ++ }; ++ }; ++ }; ++ }; ++ ++ sata: sata@46000000 { ++ cortina,gemini-ata-muxmode = <0>; ++ cortina,gemini-enable-sata-bridge; ++ status = "okay"; ++ }; ++ ++ gpio0: gpio@4d000000 { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&gpio0_default_pins>; ++ }; ++ ++ gpio1: gpio@4e000000 { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&gpio1_default_pins>; ++ }; ++ ++ ethernet@60000000 { ++ status = "okay"; ++ ++ ethernet-port@0 { ++ phy-mode = "rgmii"; ++ phy-handle = <&phy0>; ++ }; ++ ethernet-port@1 { ++ /* Not used in this platform */ ++ }; ++ }; ++ ++ ide@63000000 { ++ status = "okay"; ++ }; ++ ++ ide@63400000 { ++ status = "okay"; ++ }; ++ ++ usb@68000000 { ++ status = "okay"; ++ }; ++ ++ usb@69000000 { ++ status = "okay"; ++ }; ++ }; ++}; diff --git a/target/linux/gemini/patches-6.12/307-gemini-augment-NAS4210-DTS-with-botched-partitions.patch b/target/linux/gemini/patches-6.12/307-gemini-augment-NAS4210-DTS-with-botched-partitions.patch new file mode 100644 index 00000000000..c7c2507d683 --- /dev/null +++ b/target/linux/gemini/patches-6.12/307-gemini-augment-NAS4210-DTS-with-botched-partitions.patch @@ -0,0 +1,59 @@ +From fdfaeca6b5eed05e446f298c5e597df39b96629a Mon Sep 17 00:00:00 2001 +From: Linus Walleij +Date: Thu, 12 Feb 2026 00:22:30 +0100 +Subject: [PATCH 2/2] gemini: augment NAS4210 DTS with botched partitions + +Same botched partitions as the Raidsonic IB-4220-B. + +Signed-off-by: Linus Walleij +--- + arch/arm/boot/dts/gemini/gemini-nas4210b.dts | 37 ++++++++++++++++++-- + 1 file changed, 34 insertions(+), 3 deletions(-) + +--- a/arch/arm/boot/dts/gemini/gemini-nas4210b.dts ++++ b/arch/arm/boot/dts/gemini/gemini-nas4210b.dts +@@ -84,10 +84,41 @@ + /* 16MB of flash */ + reg = <0x30000000 0x01000000>; + ++ /* ++ * Override the RedBoot partition table with fixed partitions ++ * in order to create a coherent "firmware" partition so that ++ * we can have optimal flash usage with OpenWrt in a big ++ * MTD-splitted "firmware" partition. ++ */ + partitions { +- compatible = "redboot-fis"; +- /* Eraseblock at 0xfe0000 */ +- fis-index-block = <0x7f>; ++ compatible = "fixed-partitions"; ++ #address-cells = <1>; ++ #size-cells = <1>; ++ partition@0 { ++ label = "BOOT"; ++ reg = <0x00000000 0x00020000>; ++ read-only; ++ }; ++ partition@1 { ++ compatible = "openwrt,executable-prolog"; ++ label = "firmware"; ++ reg = <0x00020000 0x00f00000>; ++ }; ++ partition@2 { ++ label = "VCTL"; ++ reg = <0x00f20000 0x00020000>; ++ read-only; ++ }; ++ partition@3 { ++ label = "CurConf"; ++ reg = <0x00f40000 0x000a0000>; ++ read-only; ++ }; ++ partition@4 { ++ label = "FIS directory"; ++ reg = <0x00fe0000 0x00020000>; ++ read-only; ++ }; + }; + }; +