mediatek: add alternative stock layout for Xiaomi Redmi Router AX6000
authorChen Minqiang <ptpt52@gmail.com>
Tue, 13 Sep 2022 05:46:20 +0000 (13:46 +0800)
committerChuanhong Guo <gch981213@gmail.com>
Sat, 17 Dec 2022 07:04:16 +0000 (15:04 +0800)
In this implementation, the flash partition layout is adjusted to avoid
modifying the uboot environment of mtdparts. This ensures that the 30M
ubi_kernel partition remains aligned with the stock ubi partition, and
the kernel volume is placed in it. This allows the stock uboot to boot
from it without changing the mtdparts, which is useful for reverting back
to the stock firmware using Xiaomi Firmware Tools. In actual testing,
modifying mtdparts has been found to break Xiaomi Firmware Tools.

1. use ARTIFACTS to generate initramfs-factory.ubi for easy installation.
2. The NAND flash layout is changed to allow for reverting back to the
   stock firmware.
3. Before performing sysupgrade, do some cleanup in platform_pre_upgrade
   to ensure a clean installation of OpenWRT.
4. Setup the uboot env to ensure that the system always boot, which can
   be helpful for users who may forget to do this before sysupgrade in
   the initramfs.

New flash instructions:
1. Gain ssh access. Please refer to:
   https://openwrt.org/toh/xiaomi/redmi_ax6000#installation)

2. Check which system current u-boot is loading from:
   COMMAND: `cat /proc/cmdline`
   sample OUTPUT: `console=ttyS0,115200n1 loglevel=8 firmware=1 uart_en=1`
   if firmware=1, current system is ubi1
   if firmware=0, current system is ubi0

3. Setup nvram and write the firmware:
   If the current system is ubi1, please set it up so that the next time
   it will boot from ubi, and write the firmware to ubi:
```
nvram set boot_wait=on
nvram set uart_en=1
nvram set flag_boot_rootfs=0
nvram set flag_last_success=0
nvram set flag_boot_success=1
nvram set flag_try_sys1_failed=0
nvram set flag_try_sys2_failed=0
nvram commit
ubiformat /dev/mtd8 -y -f /tmp/initramfs-factory.ubi
```
   If the current system is ubi, please set it up so that the next time
   it will boot from ubi1, and write the firmware to ubi1:
```
nvram set boot_wait=on
nvram set uart_en=1
nvram set flag_boot_rootfs=1
nvram set flag_last_success=1
nvram set flag_boot_success=1
nvram set flag_try_sys1_failed=0
nvram set flag_try_sys2_failed=0
nvram commit
ubiformat /dev/mtd9 -y -f /tmp/initramfs-factory.ubi
```

4. After rebooting, the system should now boot into the openwrt initramfs.
   Flash the squashfs-sysupgrade.bin via using ssh or luci.
```
sysupgrade -n /tmp/squashfs-sysupgrade.bin
```
Done.

For existing users of the Redmi AX6000 running OpenWrt, here are the steps to
switch to this new layout:

1. Flash initramfs-factory.ubi
```
mtd -r -e ubi write /tmp/initramfs-factory.ubi ubi
```

2. After rebooting, the system will boot into the new openwrt-initramfs.
Log in and perform a sysupgrade to complete the process.
```
sysupgrade -n /tmp/squashfs-sysupgrade.bin
```

Signed-off-by: Chen Minqiang <ptpt52@gmail.com>
Signed-off-by: Chuanhong Guo <gch981213@gmail.com>
package/boot/uboot-envtools/files/mediatek_filogic
target/linux/mediatek/dts/mt7986a-xiaomi-redmi-router-ax6000-stock.dts [new file with mode: 0644]
target/linux/mediatek/dts/mt7986a-xiaomi-redmi-router-ax6000.dts
target/linux/mediatek/dts/mt7986a-xiaomi-redmi-router-ax6000.dtsi [new file with mode: 0644]
target/linux/mediatek/filogic/base-files/etc/board.d/01_leds
target/linux/mediatek/filogic/base-files/etc/board.d/02_network
target/linux/mediatek/filogic/base-files/lib/upgrade/platform.sh
target/linux/mediatek/image/filogic.mk

index fe986b2e4ead3e22c4cceded172531da2f9409ce..f73ea80109a42365ea51376cc46fd9a073a70041 100644 (file)
@@ -34,7 +34,8 @@ bananapi,bpi-r3)
                ;;
        esac
        ;;
-xiaomi,redmi-router-ax6000)
+xiaomi,redmi-router-ax6000|\
+xiaomi,redmi-router-ax6000-stock)
        ubootenv_add_uci_config "/dev/mtd1" "0x0" "0x10000" "0x20000"
        ubootenv_add_uci_sys_config "/dev/mtd2" "0x0" "0x10000" "0x20000"
        ;;
diff --git a/target/linux/mediatek/dts/mt7986a-xiaomi-redmi-router-ax6000-stock.dts b/target/linux/mediatek/dts/mt7986a-xiaomi-redmi-router-ax6000-stock.dts
new file mode 100644 (file)
index 0000000..6434267
--- /dev/null
@@ -0,0 +1,21 @@
+// SPDX-License-Identifier: (GPL-2.0 OR MIT)
+
+/dts-v1/;
+#include "mt7986a-xiaomi-redmi-router-ax6000.dtsi"
+
+/ {
+       model = "Xiaomi Redmi Router AX6000 (stock layout)";
+       compatible = "xiaomi,redmi-router-ax6000-stock", "mediatek,mt7986a";
+};
+
+&partitions {
+       partition@600000 {
+               label = "ubi_kernel";
+               reg = <0x600000 0x1e00000>;
+       };
+
+       partition@2400000 {
+               label = "ubi";
+               reg = <0x2400000 0x5000000>;
+       };
+};
index 31112664c2e13653bbc32275448921a481370fb9..a8df7866320ea96151c04049f8a432cf098c3ecc 100644 (file)
 // SPDX-License-Identifier: (GPL-2.0 OR MIT)
 
 /dts-v1/;
-#include <dt-bindings/input/input.h>
-#include <dt-bindings/gpio/gpio.h>
-#include <dt-bindings/leds/common.h>
-
-#include "mt7986a.dtsi"
+#include "mt7986a-xiaomi-redmi-router-ax6000.dtsi"
 
 / {
        model = "Xiaomi Redmi Router AX6000";
        compatible = "xiaomi,redmi-router-ax6000", "mediatek,mt7986a";
-
-       aliases {
-               serial0 = &uart0;
-               led-boot = &led_status_rgb;
-               led-failsafe = &led_status_rgb;
-               led-running = &led_status_rgb;
-               led-upgrade = &led_status_rgb;
-       };
-
-       chosen {
-               stdout-path = "serial0:115200n8";
-       };
-
-       memory {
-               reg = <0 0x40000000 0 0x20000000>;
-       };
-
-       keys {
-               compatible = "gpio-keys";
-
-               reset {
-                       label = "reset";
-                       gpios = <&pio 9 GPIO_ACTIVE_LOW>;
-                       linux,code = <KEY_RESTART>;
-               };
-
-               mesh {
-                       label = "mesh";
-                       gpios = <&pio 10 GPIO_ACTIVE_LOW>;
-                       linux,code = <BTN_9>;
-                       linux,input-type = <EV_SW>;
-               };
-       };
-};
-
-&eth {
-       status = "okay";
-
-       gmac0: mac@0 {
-               compatible = "mediatek,eth-mac";
-               reg = <0>;
-               phy-mode = "2500base-x";
-
-               nvmem-cells = <&macaddr_factory_4>;
-               nvmem-cell-names = "mac-address";
-               mac-address-increment = <(-1)>;
-
-               fixed-link {
-                       speed = <2500>;
-                       full-duplex;
-                       pause;
-               };
-       };
-
-       mdio: mdio-bus {
-               #address-cells = <1>;
-               #size-cells = <0>;
-       };
-};
-
-&mdio {
-       switch: switch@0 {
-               compatible = "mediatek,mt7531";
-               reg = <31>;
-               reset-gpios = <&pio 5 GPIO_ACTIVE_HIGH>;
-               interrupt-controller;
-               #interrupt-cells = <1>;
-               interrupt-parent = <&pio>;
-               interrupts = <66 IRQ_TYPE_LEVEL_HIGH>;
-       };
 };
 
-&pio {
-       spi_flash_pins: spi-flash-pins-33-to-38 {
-               mux {
-                       function = "spi";
-                       groups = "spi0", "spi0_wp_hold";
-               };
-               conf-pu {
-                       pins = "SPI2_CS", "SPI2_HOLD", "SPI2_WP";
-                       drive-strength = <8>;
-                       mediatek,pull-up-adv = <0>; /* bias-disable */
-               };
-               conf-pd {
-                       pins = "SPI2_CLK", "SPI2_MOSI", "SPI2_MISO";
-                       drive-strength = <8>;
-                       mediatek,pull-down-adv = <0>; /* bias-disable */
-               };
-       };
-
-       spi_led_pins: spic-pins-29-to-32 {
-               mux {
-                       function = "spi";
-                       groups = "spi1_2";
-               };
+&partitions {
+       /* ubi partition is the result of squashing
+        * consecutive stock partitions:
+        * - ubi
+        * - ubi1
+        * - overlay
+        */
+       partition@600000 {
+               label = "ubi";
+               reg = <0x600000 0x6e00000>;
        };
 
-       wf_2g_5g_pins: wf_2g_5g-pins {
-               mux {
-                       function = "wifi";
-                       groups = "wf_2g", "wf_5g";
-               };
-               conf {
-                       pins = "WF0_HB1", "WF0_HB2", "WF0_HB3", "WF0_HB4",
-                              "WF0_HB0", "WF0_HB0_B", "WF0_HB5", "WF0_HB6",
-                              "WF0_HB7", "WF0_HB8", "WF0_HB9", "WF0_HB10",
-                              "WF0_TOP_CLK", "WF0_TOP_DATA", "WF1_HB1",
-                              "WF1_HB2", "WF1_HB3", "WF1_HB4", "WF1_HB0",
-                              "WF1_HB5", "WF1_HB6", "WF1_HB7", "WF1_HB8",
-                              "WF1_TOP_CLK", "WF1_TOP_DATA";
-                       drive-strength = <4>;
-               };
-       };
-};
-
-&spi0 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&spi_flash_pins>;
-       cs-gpios = <0>, <0>;
-       status = "okay";
-
-       flash@0 {
-               compatible = "spi-nand";
-               #address-cells = <1>;
-               #size-cells = <1>;
-               reg = <0>;
-
-               mediatek,nmbm;
-               mediatek,bmt-max-ratio = <1>;
-               mediatek,bmt-max-reserved-blocks = <64>;
-
-               spi-max-frequency = <20000000>;
-               spi-tx-buswidth = <4>;
-               spi-rx-buswidth = <4>;
-
-               partitions {
-                       compatible = "fixed-partitions";
-                       #address-cells = <1>;
-                       #size-cells = <1>;
-
-                       partition@0 {
-                               label = "BL2";
-                               reg = <0x0 0x100000>;
-                               read-only;
-                       };
-
-                       partition@100000 {
-                               label = "Nvram";
-                               reg = <0x100000 0x40000>;
-                       };
-
-                       partition@140000 {
-                               label = "Bdata";
-                               reg = <0x140000 0x40000>;
-                       };
-
-                       factory: partition@180000 {
-                               label = "Factory";
-                               reg = <0x180000 0x200000>;
-                               read-only;
-
-                               compatible = "nvmem-cells";
-                               #address-cells = <1>;
-                               #size-cells = <1>;
-
-                               macaddr_factory_4: macaddr@4 {
-                                       reg = <0x4 0x6>;
-                               };
-                       };
-
-                       partition@380000 {
-                               label = "FIP";
-                               reg = <0x380000 0x200000>;
-                               read-only;
-                       };
-
-                       partition@580000 {
-                               label = "crash";
-                               reg = <0x580000 0x40000>;
-                               read-only;
-                       };
-
-                       partition@5c0000 {
-                               label = "crash_log";
-                               reg = <0x5c0000 0x40000>;
-                               read-only;
-                       };
-
-                       /* ubi partition is the result of squashing
-                        * consecutive stock partitions:
-                        * - ubi
-                        * - ubi1
-                        * - overlay
-                        */
-                       partition@600000 {
-                               label = "ubi";
-                               reg = <0x600000 0x6e00000>;
-                       };
-
-                       /* last 12 MiB is reserved for NMBM bad block table */
-               };
-       };
-};
-
-&spi1 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&spi_led_pins>;
-       status = "okay";
-
-       ws2812b@0 {
-               #address-cells = <1>;
-               #size-cells = <0>;
-               compatible = "worldsemi,ws2812b";
-               reg = <0>;
-               spi-max-frequency = <3000000>;
-
-               led_status_rgb: led@0 {
-                       reg = <0>;
-                       label = "rgb:status";
-                       color-index = <LED_COLOR_ID_RED LED_COLOR_ID_GREEN LED_COLOR_ID_BLUE>;
-               };
-
-               led_network_rgb: led@1 {
-                       reg = <1>;
-                       label = "rgb:network";
-                       color-index = <LED_COLOR_ID_RED LED_COLOR_ID_GREEN LED_COLOR_ID_BLUE>;
-               };
-       };
-};
-
-&switch {
-       ports {
-               #address-cells = <1>;
-               #size-cells = <0>;
-
-               port@1 {
-                       reg = <1>;
-                       label = "lan4";
-               };
-
-               port@2 {
-                       reg = <2>;
-                       label = "lan3";
-               };
-
-               port@3 {
-                       reg = <3>;
-                       label = "lan2";
-               };
-
-               port@4 {
-                       reg = <4>;
-                       label = "wan";
-               };
-
-               port@6 {
-                       reg = <6>;
-                       label = "cpu";
-                       ethernet = <&gmac0>;
-                       phy-mode = "2500base-x";
-
-                       fixed-link {
-                               speed = <2500>;
-                               full-duplex;
-                               pause;
-                       };
-               };
-       };
-};
-
-&wmac {
-       status = "okay";
-       pinctrl-names = "default";
-       pinctrl-0 = <&wf_2g_5g_pins>;
-
-       mediatek,mtd-eeprom = <&factory 0x0>;
-};
-
-&uart0 {
-       status = "okay";
+       /* last 12 MiB is reserved for NMBM bad block table */
 };
diff --git a/target/linux/mediatek/dts/mt7986a-xiaomi-redmi-router-ax6000.dtsi b/target/linux/mediatek/dts/mt7986a-xiaomi-redmi-router-ax6000.dtsi
new file mode 100644 (file)
index 0000000..4b2754b
--- /dev/null
@@ -0,0 +1,277 @@
+// SPDX-License-Identifier: (GPL-2.0 OR MIT)
+
+/dts-v1/;
+#include <dt-bindings/input/input.h>
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/leds/common.h>
+
+#include "mt7986a.dtsi"
+
+/ {
+       aliases {
+               serial0 = &uart0;
+               led-boot = &led_status_rgb;
+               led-failsafe = &led_status_rgb;
+               led-running = &led_status_rgb;
+               led-upgrade = &led_status_rgb;
+       };
+
+       chosen {
+               stdout-path = "serial0:115200n8";
+       };
+
+       memory {
+               reg = <0 0x40000000 0 0x20000000>;
+       };
+
+       keys {
+               compatible = "gpio-keys";
+
+               reset {
+                       label = "reset";
+                       gpios = <&pio 9 GPIO_ACTIVE_LOW>;
+                       linux,code = <KEY_RESTART>;
+               };
+
+               mesh {
+                       label = "mesh";
+                       gpios = <&pio 10 GPIO_ACTIVE_LOW>;
+                       linux,code = <BTN_9>;
+                       linux,input-type = <EV_SW>;
+               };
+       };
+};
+
+&eth {
+       status = "okay";
+
+       gmac0: mac@0 {
+               compatible = "mediatek,eth-mac";
+               reg = <0>;
+               phy-mode = "2500base-x";
+
+               nvmem-cells = <&macaddr_factory_4>;
+               nvmem-cell-names = "mac-address";
+               mac-address-increment = <(-1)>;
+
+               fixed-link {
+                       speed = <2500>;
+                       full-duplex;
+                       pause;
+               };
+       };
+
+       mdio: mdio-bus {
+               #address-cells = <1>;
+               #size-cells = <0>;
+       };
+};
+
+&mdio {
+       switch: switch@0 {
+               compatible = "mediatek,mt7531";
+               reg = <31>;
+               reset-gpios = <&pio 5 GPIO_ACTIVE_HIGH>;
+               interrupt-controller;
+               #interrupt-cells = <1>;
+               interrupt-parent = <&pio>;
+               interrupts = <66 IRQ_TYPE_LEVEL_HIGH>;
+       };
+};
+
+&pio {
+       spi_flash_pins: spi-flash-pins-33-to-38 {
+               mux {
+                       function = "spi";
+                       groups = "spi0", "spi0_wp_hold";
+               };
+               conf-pu {
+                       pins = "SPI2_CS", "SPI2_HOLD", "SPI2_WP";
+                       drive-strength = <8>;
+                       mediatek,pull-up-adv = <0>; /* bias-disable */
+               };
+               conf-pd {
+                       pins = "SPI2_CLK", "SPI2_MOSI", "SPI2_MISO";
+                       drive-strength = <8>;
+                       mediatek,pull-down-adv = <0>; /* bias-disable */
+               };
+       };
+
+       spi_led_pins: spic-pins-29-to-32 {
+               mux {
+                       function = "spi";
+                       groups = "spi1_2";
+               };
+       };
+
+       wf_2g_5g_pins: wf_2g_5g-pins {
+               mux {
+                       function = "wifi";
+                       groups = "wf_2g", "wf_5g";
+               };
+               conf {
+                       pins = "WF0_HB1", "WF0_HB2", "WF0_HB3", "WF0_HB4",
+                              "WF0_HB0", "WF0_HB0_B", "WF0_HB5", "WF0_HB6",
+                              "WF0_HB7", "WF0_HB8", "WF0_HB9", "WF0_HB10",
+                              "WF0_TOP_CLK", "WF0_TOP_DATA", "WF1_HB1",
+                              "WF1_HB2", "WF1_HB3", "WF1_HB4", "WF1_HB0",
+                              "WF1_HB5", "WF1_HB6", "WF1_HB7", "WF1_HB8",
+                              "WF1_TOP_CLK", "WF1_TOP_DATA";
+                       drive-strength = <4>;
+               };
+       };
+};
+
+&spi0 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&spi_flash_pins>;
+       cs-gpios = <0>, <0>;
+       status = "okay";
+
+       flash@0 {
+               compatible = "spi-nand";
+               #address-cells = <1>;
+               #size-cells = <1>;
+               reg = <0>;
+
+               mediatek,nmbm;
+               mediatek,bmt-max-ratio = <1>;
+               mediatek,bmt-max-reserved-blocks = <64>;
+
+               spi-max-frequency = <20000000>;
+               spi-tx-buswidth = <4>;
+               spi-rx-buswidth = <4>;
+
+               partitions: partitions {
+                       compatible = "fixed-partitions";
+                       #address-cells = <1>;
+                       #size-cells = <1>;
+
+                       partition@0 {
+                               label = "BL2";
+                               reg = <0x0 0x100000>;
+                               read-only;
+                       };
+
+                       partition@100000 {
+                               label = "Nvram";
+                               reg = <0x100000 0x40000>;
+                       };
+
+                       partition@140000 {
+                               label = "Bdata";
+                               reg = <0x140000 0x40000>;
+                       };
+
+                       factory: partition@180000 {
+                               label = "Factory";
+                               reg = <0x180000 0x200000>;
+                               read-only;
+
+                               compatible = "nvmem-cells";
+                               #address-cells = <1>;
+                               #size-cells = <1>;
+
+                               macaddr_factory_4: macaddr@4 {
+                                       reg = <0x4 0x6>;
+                               };
+                       };
+
+                       partition@380000 {
+                               label = "FIP";
+                               reg = <0x380000 0x200000>;
+                               read-only;
+                       };
+
+                       partition@580000 {
+                               label = "crash";
+                               reg = <0x580000 0x40000>;
+                               read-only;
+                       };
+
+                       partition@5c0000 {
+                               label = "crash_log";
+                               reg = <0x5c0000 0x40000>;
+                               read-only;
+                       };
+               };
+       };
+};
+
+&spi1 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&spi_led_pins>;
+       status = "okay";
+
+       ws2812b@0 {
+               #address-cells = <1>;
+               #size-cells = <0>;
+               compatible = "worldsemi,ws2812b";
+               reg = <0>;
+               spi-max-frequency = <3000000>;
+
+               led_status_rgb: led@0 {
+                       reg = <0>;
+                       label = "rgb:status";
+                       color-index = <LED_COLOR_ID_RED LED_COLOR_ID_GREEN LED_COLOR_ID_BLUE>;
+               };
+
+               led_network_rgb: led@1 {
+                       reg = <1>;
+                       label = "rgb:network";
+                       color-index = <LED_COLOR_ID_RED LED_COLOR_ID_GREEN LED_COLOR_ID_BLUE>;
+               };
+       };
+};
+
+&switch {
+       ports {
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               port@1 {
+                       reg = <1>;
+                       label = "lan4";
+               };
+
+               port@2 {
+                       reg = <2>;
+                       label = "lan3";
+               };
+
+               port@3 {
+                       reg = <3>;
+                       label = "lan2";
+               };
+
+               port@4 {
+                       reg = <4>;
+                       label = "wan";
+               };
+
+               port@6 {
+                       reg = <6>;
+                       label = "cpu";
+                       ethernet = <&gmac0>;
+                       phy-mode = "2500base-x";
+
+                       fixed-link {
+                               speed = <2500>;
+                               full-duplex;
+                               pause;
+                       };
+               };
+       };
+};
+
+&wmac {
+       status = "okay";
+       pinctrl-names = "default";
+       pinctrl-0 = <&wf_2g_5g_pins>;
+
+       mediatek,mtd-eeprom = <&factory 0x0>;
+};
+
+&uart0 {
+       status = "okay";
+};
index f851c7ed54bbfbede82603dad6bef5e02bca0a7c..8cfed15544d06403430392a48ce151c95e67fec5 100644 (file)
@@ -6,7 +6,8 @@ board=$(board_name)
 board_config_update
 
 case $board in
-xiaomi,redmi-router-ax6000)
+xiaomi,redmi-router-ax6000|\
+xiaomi,redmi-router-ax6000-stock)
        ucidef_set_led_netdev "wan" "wan" "rgb:network" "wan"
        ;;
 esac
index 0f0a0fc86b15f3377fed916e15d3bca09c9102ba..1c98dcc7cb31f08b44b2215013bdb2f962bf1e30 100644 (file)
@@ -16,7 +16,8 @@ mediatek_setup_interfaces()
                ucidef_set_interfaces_lan_wan "lan1 lan2 lan3 lan4 sfp2" "eth1 wan"
                ucidef_set_interface_macaddr "wan" "$(macaddr_add $(cat /sys/class/net/eth0/address) 1)"
                ;;
-       xiaomi,redmi-router-ax6000)
+       xiaomi,redmi-router-ax6000|\
+       xiaomi,redmi-router-ax6000-stock)
                ucidef_set_interfaces_lan_wan "lan2 lan3 lan4" wan
                ;;
        *)
@@ -33,7 +34,8 @@ mediatek_setup_macs()
        local label_mac=""
 
        case $board in
-       xiaomi,redmi-router-ax6000)
+       xiaomi,redmi-router-ax6000|\
+       xiaomi,redmi-router-ax6000-stock)
                wan_mac=$(mtd_get_mac_ascii Bdata ethaddr_wan)
                label_mac=$wan_mac
                ;;
index a9327ae282a5de63f4662b5375eb50d359581342..29c7a1475ed2d2cd6886a7d25e1221726a2e65a5 100755 (executable)
@@ -1,5 +1,43 @@
 REQUIRE_IMAGE_METADATA=1
 
+redmi_ax6000_initial_setup()
+{
+       # initialize UBI and setup uboot-env if it's running on initramfs
+       [ "$(rootfs_type)" = "tmpfs" ] || return 0
+
+       local mtdnum="$( find_mtd_index ubi )"
+       if [ ! "$mtdnum" ]; then
+               echo "unable to find mtd partition ubi"
+               return 1
+       fi
+
+       local kern_mtdnum="$( find_mtd_index ubi_kernel )"
+       if [ ! "$kern_mtdnum" ]; then
+               echo "unable to find mtd partition ubi_kernel"
+               return 1
+       fi
+
+       ubidetach -m "$mtdnum"
+       ubiformat /dev/mtd$mtdnum -y
+
+       ubidetach -m "$kern_mtdnum"
+       ubiformat /dev/mtd$kern_mtdnum -y
+
+       if ! fw_printenv -n flag_try_sys2_failed &>/dev/null; then
+               echo "failed to access u-boot-env. skip env setup."
+               return 0
+       fi
+
+       fw_setenv boot_wait on
+       fw_setenv uart_en 1
+       fw_setenv flag_boot_rootfs 0
+       fw_setenv flag_last_success 1
+       fw_setenv flag_boot_success 1
+       fw_setenv flag_try_sys1_failed 8
+       fw_setenv flag_try_sys2_failed 8
+       fw_setenv mtdparts "nmbm0:1024k(bl2),256k(Nvram),256k(Bdata),2048k(factory),2048k(fip),256k(crash),256k(crash_log),30720k(ubi),30720k(ubi1),51200k(overlay)"
+}
+
 platform_do_upgrade() {
        local board=$(board_name)
 
@@ -21,6 +59,11 @@ platform_do_upgrade() {
                        ;;
                esac
                ;;
+       xiaomi,redmi-router-ax6000-stock)
+               CI_KERN_UBIPART=ubi_kernel
+               CI_ROOT_UBIPART=ubi
+               nand_do_upgrade "$1"
+               ;;
        *)
                nand_do_upgrade "$1"
                ;;
@@ -63,3 +106,13 @@ platform_copy_config() {
                ;;
        esac
 }
+
+platform_pre_upgrade() {
+       local board=$(board_name)
+
+       case "$board" in
+       xiaomi,redmi-router-ax6000-stock)
+               redmi_ax6000_initial_setup
+               ;;
+       esac
+}
index 5dbeedb64c7d59b1d3cd6cbbd107569348086407..4e3399d120bb801653aedb92149e3067c00c88dd 100644 (file)
@@ -139,3 +139,21 @@ define Device/xiaomi_redmi-router-ax6000
   IMAGE/sysupgrade.bin := sysupgrade-tar | append-metadata
 endef
 TARGET_DEVICES += xiaomi_redmi-router-ax6000
+
+define Device/xiaomi_redmi-router-ax6000-stock
+  DEVICE_VENDOR := Xiaomi
+  DEVICE_MODEL := Redmi Router AX6000 (stock layout)
+  DEVICE_DTS := mt7986a-xiaomi-redmi-router-ax6000-stock
+  DEVICE_DTS_DIR := ../dts
+  DEVICE_PACKAGES := kmod-leds-ws2812b
+  KERNEL_LOADADDR := 0x48000000
+  UBINIZE_OPTS := -E 5
+  BLOCKSIZE := 128k
+  PAGESIZE := 2048
+ifneq ($(CONFIG_TARGET_ROOTFS_INITRAMFS),)
+  ARTIFACTS := initramfs-factory.ubi
+  ARTIFACT/initramfs-factory.ubi := append-image-stage initramfs-kernel.bin | ubinize-kernel
+endif
+  IMAGE/sysupgrade.bin := sysupgrade-tar | append-metadata
+endef
+TARGET_DEVICES += xiaomi_redmi-router-ax6000-stock