[PATCH] ramips: add support for Keenetic KN-3211

Paul D newtwen at gmail.com
Thu Nov 7 16:54:34 PST 2024


see in-line

is the device sysupgradeable? 


On 2024-11-07 20:59, lotigara at lotigara.ru wrote:
> From: Ivan Davydov <lotigara at lotigara.ru>
> 
> Keenetic KN-3211 is a 2.4 Ghz band 11n (Wi-Fi 4) Wi-Fi repeater, based on MT7628AN.
> 
> Specification:
> - System-On-Chip: MT7628AN
> - CPU/Speed: 575 MHz
> - Flash-Chip: Winbond w25q256
> - Flash size: 32768 KiB
> - RAM: 64 MiB
> - 1x 10/100 Mbps Ethernet
> - 2x external, non-detachable antennas
> - UART (J1) header on PCB (115200 8n1)
> - Wireless No1 (2T2R): SoC Built-in 2.4 GHz 802.11bgn
> - 3x LED, 1x button, 1x mode switch
> 
> Notes:
> - The device supports dual boot mode
> - The firmware partitions were concatinated into one
concatenated

> - The status button has been reassigned as the WPS button.
> 
> Flash instruction:
> The only way to flash OpenWrt image is to use tftp recovery mode in U-Boot:
> 
> 1. Configure PC with static IP 192.168.1.2/24 and tftp server.
> 2. Rename "openwrt-ramips-mt76x8-keenetic_kn-3211-squashfs-factory.bin"
>    to "KN-3211.bin" and place it in tftp server directory.
> 3. Connect PC with the ethernet port, press the reset button, power up
>    the router and keep button pressed until power led start blinking.
starts

> 4. Router will download file from server, write it to flash and reboot.
> 
> Signed-off-by: Ivan Davydov <lotigara at lotigara.ru>
> ---
>  .../ramips/dts/mt7628an_keenetic_kn-3211.dts  | 218 ++++++++++++++++++
>  target/linux/ramips/image/mt76x8.mk           |  11 +
>  .../mt76x8/base-files/etc/board.d/02_network  |   5 +
>  3 files changed, 234 insertions(+)
>  create mode 100644 target/linux/ramips/dts/mt7628an_keenetic_kn-3211.dts
> 
> diff --git a/target/linux/ramips/dts/mt7628an_keenetic_kn-3211.dts b/target/linux/ramips/dts/mt7628an_keenetic_kn-3211.dts
> new file mode 100644
> index 0000000000..a856099ee1
> --- /dev/null
> +++ b/target/linux/ramips/dts/mt7628an_keenetic_kn-3211.dts
> @@ -0,0 +1,218 @@
> +// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
> +#include "mt7628an.dtsi"
> +
> +#include <dt-bindings/gpio/gpio.h>
> +#include <dt-bindings/input/input.h>
> +#include <dt-bindings/leds/common.h>
> +

indent using tabs

> +/ {
> +       compatible = "keenetic,kn-3211", "mediatek,mt7628an-soc";
> +       model = "Keenetic KN-3211";
> +
> +       aliases {
> +               led-boot = &led_status_green;
> +               led-failsafe = &led_status_red;
> +               led-running = &led_status_green;
> +               led-upgrade = &led_status_blue;
> +       };
> +
> +       chosen {
> +               bootargs = "console=ttyS0,115200";
> +       };
> +
> +       leds {
> +               compatible = "gpio-leds";
> +
> +               led_status_blue: status_blue {
> +                       function = LED_FUNCTION_STATUS;
> +                       color = <LED_COLOR_ID_BLUE>;
> +                       gpios = <&gpio 4 GPIO_ACTIVE_LOW>;
> +               };
> +
> +               led_status_green: status_green {
> +                       function = LED_FUNCTION_STATUS;
> +                       color = <LED_COLOR_ID_GREEN>;
> +                       gpios = <&gpio 11 GPIO_ACTIVE_HIGH>;
> +               };
> +
> +               led_status_red: status_red {
> +                       function = LED_FUNCTION_STATUS;
> +                       color = <LED_COLOR_ID_RED>;
> +                       gpios = <&gpio 38 GPIO_ACTIVE_LOW>;
> +               };
> +       };
> +
> +       keys {
> +               compatible = "gpio-keys";
> +
> +	       wps {
> +			label = "wps";
> +			gpios = <&gpio 37 GPIO_ACTIVE_LOW>;
> +			linux,code = <KEY_WPS_BUTTON>;
> +               };
> +       };
> +
> +       virtual_flash {
> +               compatible = "mtd-concat";
> +               devices = <&firmware1 &firmware2>;
> +
> +               partitions {
> +                       compatible = "fixed-partitions";
> +                       #address-cells = <1>;
> +                       #size-cells = <1>;
> +
> +                       partition at 0 {
> +                               compatible = "denx,uimage";
> +                               label = "firmware";
> +                               reg = <0x0 0x1ec0000>;
> +                       };
> +               };
> +       };
> +};
> +
> +&state_default {
> +       gpio {
> +               groups = "i2s", "i2c", "gpio", "refclk", "wdt", "wled_an";
> +               function = "gpio";
> +       };
> +};
> +
> +&usbphy {
> +       status = "disabled";
> +};
> +
> +&ehci {
> +       status = "disabled";
> +};
> +
> +&ohci {
> +       status = "disabled";
> +};
> +
> +&spi0 {
> +       status = "okay";
> +
> +       flash at 0 {
> +               compatible = "jedec,spi-nor";
> +               reg = <0>;
> +               spi-max-frequency = <32000000>;
> +
> +               partitions {
> +                       compatible = "fixed-partitions";
> +                       #address-cells = <1>;
> +                       #size-cells = <1>;
> +
> +                       partition at 0 {
> +                               label = "u-boot";
> +                               reg = <0x0 0x30000>;
> +                               read-only;
> +                       };
> +
> +                       partition at 30000 {
> +                               label = "u-config";
> +                               reg = <0x30000 0x10000>;
> +                               read-only;
> +                       };
> +
> +                       partition at 40000 {
> +                               label = "rf-eeprom";
> +                               reg = <0x40000 0x10000>;
> +                               read-only;
> +
> +                               nvmem-layout {
> +                                       compatible = "fixed-layout";
> +                                       #address-cells = <1>;
> +                                       #size-cells = <1>;
> +
> +                                       eeprom_factory_0: eeprom at 0 {
> +                                               reg = <0x0 0x400>;
> +                                       };
> +
> +                                       eeprom_factory_400: eeprom at 400 {
> +                                               reg = <0x400 0x4da8>;
> +                                       };
> +
> +                                       macaddr_factory_4: macaddr at 4 {
> +                                               reg = <0x4 0x6>;
> +                                       };
> +                               };
> +                       };
> +
> +                       firmware1: partition at 50000 {
> +                               label = "firmware_1";
> +                               reg = <0x50000 0xf60000>;
> +                       };
> +
> +                       partition at fb0000 {
> +                               label = "config_1";
> +                               reg = <0xfb0000 0x40000>;
> +                               read-only;
> +                       };
> +
> +                       partition at ff0000 {
> +                               label = "dump";
> +                               reg = <0xff0000 0x10000>;
> +                               read-only;
> +                       };
> +
> +                       partition at 1000000 {
> +                               label = "u-state";
> +                               reg = <0x1000000 0x30000>;
> +                               read-only;
> +                       };
> +
> +                       partition at 1030000 {
> +                               label = "u-config_res";
> +                               reg = <0x1030000 0x10000>;
> +                               read-only;
> +                       };
> +
> +                       partition at 1040000 {
> +                               label = "rf-eeprom_res";
> +                               reg = <0x1040000 0x10000>;
> +                               read-only;
> +                       };
> +
> +                       firmware2: partition at 1050000 {
> +                               label = "firmware_2";
> +                               reg = <0x1050000 0xf60000>;
> +                       };
> +
> +                       partition at 1fb0000 {
> +                               label = "config_2";
> +                               reg = <0x1fb0000 0x40000>;
> +                               read-only;
> +                       };
> +               };
> +       };
> +};
> +
> +&ethernet {
> +       nvmem-cells = <&macaddr_factory_4>;
> +       nvmem-cell-names = "mac-address";
> +};
> +
> +&esw {
> +       mediatek,portmap = <0x3e>;
> +};
> +
> +&wmac {
> +       status = "okay";
> +
> +       nvmem-cells = <&eeprom_factory_0>;
> +       nvmem-cell-names = "eeprom";
> +};
> +
> +&pcie {
> +       status = "okay";
> +};
> +
> +&pcie0 {
> +       wifi at 0,0 {
> +               compatible = "mediatek,mt76";
> +               reg = <0x0000 0 0 0 0>;
> +               nvmem-cells = <&eeprom_factory_400>;
> +               nvmem-cell-names = "eeprom";
> +               ieee80211-freq-limit = <5000000 6000000>;
> +       };
> +};
> diff --git a/target/linux/ramips/image/mt76x8.mk b/target/linux/ramips/image/mt76x8.mk
> index 8ad840ddfe..96a6ecf5a9 100644
> --- a/target/linux/ramips/image/mt76x8.mk
> +++ b/target/linux/ramips/image/mt76x8.mk
> @@ -365,6 +365,17 @@ define Device/keenetic_kn-1613
>  endef
>  TARGET_DEVICES += keenetic_kn-1613
>  
> +define Device/keenetic_kn-3211
> +  IMAGE_SIZE := 31488k
> +  DEVICE_VENDOR := Keenetic
> +  DEVICE_MODEL := KN-3211
> +  DEVICE_PACKAGES := kmod-mt76
> +  IMAGES += factory.bin
> +  IMAGE/factory.bin := $$(sysupgrade_bin) | pad-to $$$$(BLOCKSIZE) | \
> +        check-size | zyimage -d 0x803211 -v "KN-3211"
> +endef
> +TARGET_DEVICES += keenetic_kn-3211
> +
>  define Device/kroks_kndrt31r16
>    IMAGE_SIZE := 16064k
>    DEVICE_VENDOR := Kroks
> diff --git a/target/linux/ramips/mt76x8/base-files/etc/board.d/02_network b/target/linux/ramips/mt76x8/base-files/etc/board.d/02_network
> index cb0983b9dc..567f70de6b 100644
> --- a/target/linux/ramips/mt76x8/base-files/etc/board.d/02_network
> +++ b/target/linux/ramips/mt76x8/base-files/etc/board.d/02_network
> @@ -134,6 +134,10 @@ ramips_setup_interfaces()
>  		ucidef_add_switch "switch0" \
>  			"1:lan" "2:lan" "3:lan" "0:wan" "6 at eth0"
>  		;;
> +	keenetic,kn-3211)
> +		ucidef_add_switch "switch0" \
> +			"2:lan" "6 at eth0"
> +		;;
>  	kroks,kndrt31r19)
>  		ucidef_add_switch "switch0" \
>  			"0:lan" "6 at eth0"
> @@ -277,6 +281,7 @@ ramips_setup_macs()
>  	totolink,lr1200)
>  		wan_mac=$(mtd_get_mac_binary factory 0x2e)
>  		;;
> +	keenetic,kn-3211|\
>  	keenetic,kn-1613|\
>  	zyxel,keenetic-extra-ii)
>  		wan_mac=$(mtd_get_mac_binary rf-eeprom 0x28)




More information about the openwrt-devel mailing list