[PATCH v2] ramips: add support for Keenetic KN-3211
Ivan Davydov
lotigara at lotigara.ru
Tue Nov 19 21:07:27 PST 2024
So, can someone review the patch?
On November 8, 2024 5:43:35 PM UTC, 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 concatenated into one
>- The status button has been reassigned as the WPS button.
>
>Flash instruction:
>This device doesn't support sysupgrades, so 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 starts blinking.
>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..1a06cd94bc
>--- /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>
>+
>+/ {
>+ 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;
>+ };
>+ };
>+ };
>+};
>+
>+ðernet {
>+ 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..5b7a1d69ae 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