it is the correct list, just been real busy this week with other stuff. i'll be merging stuff again as of the weekend, sorry for the delay.
On 09/12/2015 16:34, Nikolay Martynov wrote: > Hi. > > I know you guys a probably very busy, but could you please confirm > that this is the right list to submit such patches and format of this > patch is correct - so I could fix it if it's not. > > Thanks! > > 2015-12-03 2:16 GMT-05:00 Nikolay Martynov <[email protected]>: >> This router is based on MT7621 SoC, no wifi, nand. >> >> Works: >> * Boots. >> * Ethernet. >> * Switch. >> * Button (reset). >> * Flashing OpenWrt from stock firmware. >> * Upgrading OpenWrt. >> >> Doesn't work: >> * No GPIO leds. All leds are controlled by switch, >> but stock firmware was able to control them. >> * SoC has crypto engine but no open driver. >> * SoC has nat acceleration, but no open driver. >> * This router has 2MB spi flash soldered in but MT >> nand/spi drivers do not support pin sharing, >> so it is not accessable and disabled. Stock >> firmware could read it and it was empty. >> >> Unknown status: PoE support. >> >> Router has serial pins populated. If looking at the top >> of the router, then counting from Eth sockets pins go as: >> 'GND, RX, TX, GND'. 3.3v, 57600. >> >> U-boot bootloader supports tftpboot, controlled from serial. >> This router has two kernel partitions: 'live' and 'backup'. >> They are swapped during flashing (on both stock and OpenWrt). >> Active partition is controlled by a flag in factory partition. >> U-boot has cusotm command to switch active kernel partition. >> Kernel partitions are 'bare flash' 3MB. Stock bootloader has >> no UBI support. Stock rootfs is UBIFS. >> >> Flashing procedure. >> Stock firmware uses custom kernel patch to mount squashfs >> from a file that is located on UBIFS volume. This makes wiping >> out this volume from within stock firmware difficult. >> Instead this patch builds image that is flashable by stock firmware >> and contains initrams image (with minimal set of packages >> to fit into kernel partition). Once this is flashed one can reboot >> into initramfs OpenWrt and use sysupgrade to flash OpenWrt including >> rootfs into nand. >> Note: factory image is only built if initramfs image is enabled. >> >> v2: Fix building all mt7621 targets along with ubnt-erx. >> v3: Undo change to MT7621 nand partitions, make nand detection >> less likely to affect other nands. >> v4: Update as per Piotr Dymacz comments. >> v5: Fix upgrading code to actually upgrade kernel. >> >> Signed-off-by: Nikolay Martynov <[email protected]> >> --- >> package/system/procd/files/nand.sh | 4 + >> .../linux/ramips/base-files/etc/board.d/02_network | 1 + >> target/linux/ramips/base-files/lib/ramips.sh | 5 +- >> .../ramips/base-files/lib/upgrade/platform.sh | 24 +++++ >> target/linux/ramips/base-files/lib/upgrade/ubnt.sh | 71 +++++++++++++ >> target/linux/ramips/dts/MT7621.dts | 22 ++++ >> target/linux/ramips/dts/UBNT-ERX.dts | 117 >> +++++++++++++++++++++ >> target/linux/ramips/dts/mt7621.dtsi | 20 ---- >> target/linux/ramips/image/Makefile | 61 ++++++++++- >> target/linux/ramips/mt7621/profiles/ubnt.mk | 17 +++ >> .../patches-3.18/0901-spansion_nand_id_fix.patch | 43 ++++++++ >> 11 files changed, 363 insertions(+), 22 deletions(-) >> create mode 100644 target/linux/ramips/base-files/lib/upgrade/ubnt.sh >> create mode 100644 target/linux/ramips/dts/UBNT-ERX.dts >> create mode 100644 target/linux/ramips/mt7621/profiles/ubnt.mk >> create mode 100644 >> target/linux/ramips/patches-3.18/0901-spansion_nand_id_fix.patch >> >> diff --git a/package/system/procd/files/nand.sh >> b/package/system/procd/files/nand.sh >> index 0c179cb..67867da 100644 >> --- a/package/system/procd/files/nand.sh >> +++ b/package/system/procd/files/nand.sh >> @@ -275,6 +275,10 @@ nand_upgrade_tar() { >> nand_do_upgrade_stage2() { >> local file_type=$(identify $1) >> >> + if type 'platform_nand_pre_upgrade' >/dev/null 2>/dev/null; then >> + platform_nand_pre_upgrade "$1" >> + fi >> + >> [ ! "$(find_mtd_index "$CI_UBIPART")" ] && CI_UBIPART="rootfs" >> >> case "$file_type" in >> diff --git a/target/linux/ramips/base-files/etc/board.d/02_network >> b/target/linux/ramips/base-files/etc/board.d/02_network >> index 7e51229..de81553 100755 >> --- a/target/linux/ramips/base-files/etc/board.d/02_network >> +++ b/target/linux/ramips/base-files/etc/board.d/02_network >> @@ -122,6 +122,7 @@ ramips_setup_interfaces() >> f5d8235-v2|\ >> hg255d|\ >> rt-n14u|\ >> + ubnt-erx|\ >> ur-326n4g|\ >> wrtnode|\ >> wt3020|\ >> diff --git a/target/linux/ramips/base-files/lib/ramips.sh >> b/target/linux/ramips/base-files/lib/ramips.sh >> index 92e13c0..ba23939 100755 >> --- a/target/linux/ramips/base-files/lib/ramips.sh >> +++ b/target/linux/ramips/base-files/lib/ramips.sh >> @@ -349,6 +349,9 @@ ramips_board_detect() { >> *"TEW-692GR") >> name="tew-692gr" >> ;; >> + *"UBNT-ERX") >> + name="ubnt-erx" >> + ;; >> *"UR-326N4G") >> name="ur-326n4g" >> ;; >> @@ -396,7 +399,7 @@ ramips_board_detect() { >> ;; >> *"WizFi630A") >> name="wizfi630a" >> - ;; >> + ;; >> *"WL-330N") >> name="wl-330n" >> ;; >> diff --git a/target/linux/ramips/base-files/lib/upgrade/platform.sh >> b/target/linux/ramips/base-files/lib/upgrade/platform.sh >> index 073593a..b0d624e 100755 >> --- a/target/linux/ramips/base-files/lib/upgrade/platform.sh >> +++ b/target/linux/ramips/base-files/lib/upgrade/platform.sh >> @@ -181,12 +181,36 @@ platform_check_image() { >> } >> return 0 >> ;; >> + ubnt-erx) >> + nand_do_platform_check "$board" "$1" >> + return $?; >> + ;; >> esac >> >> echo "Sysupgrade is not yet supported on $board." >> return 1 >> } >> >> +platform_nand_pre_upgrade() { >> + local board=$(ramips_board_name) >> + >> + case "$board" in >> + ubnt-erx) >> + platform_upgrade_ubnt_erx "$ARGV" >> + ;; >> + esac >> +} >> + >> +platform_pre_upgrade() { >> + local board=$(ramips_board_name) >> + >> + case "$board" in >> + ubnt-erx) >> + nand_do_upgrade "$ARGV" >> + ;; >> + esac >> +} >> + >> platform_do_upgrade() { >> local board=$(ramips_board_name) >> >> diff --git a/target/linux/ramips/base-files/lib/upgrade/ubnt.sh >> b/target/linux/ramips/base-files/lib/upgrade/ubnt.sh >> new file mode 100644 >> index 0000000..0dc602b >> --- /dev/null >> +++ b/target/linux/ramips/base-files/lib/upgrade/ubnt.sh >> @@ -0,0 +1,71 @@ >> +# >> +# Copyright (C) 2015 OpenWrt.org >> +# >> + >> +UBNT_ERX_KERNEL_INDEX_OFFSET=160 >> + >> +ubnt_get_target_kernel() { >> + local factory_mtd=$1 >> + local current_kernel_index=$(dd if=${factory_mtd} bs=1 count=1 >> skip=$UBNT_ERX_KERNEL_INDEX_OFFSET 2>/dev/null|hexdump -e '/1 "%X "') >> + >> + if [ $current_kernel_index == "0" ]; then >> + echo 'kernel2' >> + elif [ $current_kernel_index == "1" ]; then >> + echo 'kernel1' >> + fi >> +} >> + >> +ubnt_update_target_kernel() { >> + local factory_mtd=$1 >> + local kernel_part=$2 >> + >> + local new_kernel_index >> + if [ $kernel_part == "kernel1" ]; then >> + new_kernel_index="\x00" >> + elif [ $kernel_part == "kernel2" ]; then >> + new_kernel_index="\x01" >> + else >> + echo 'Unknown kernel image index' >> + exit 1 >> + fi >> + >> + if ! (echo -e $new_kernel_index | dd of=${factory_mtd} bs=1 count=1 >> seek=$UBNT_ERX_KERNEL_INDEX_OFFSET); then >> + echo 'Failed to update kernel bootup index' >> + exit 1 >> + fi >> +} >> + >> +platform_upgrade_ubnt_erx() { >> + local factory_mtd=$(find_mtd_part factory) >> + if [ ! -n "$factory_mtd" ]; then >> + echo "cannot find factory partition" >> + exit 1 >> + fi >> + >> + local kernel_part="$(ubnt_get_target_kernel ${factory_mtd})" >> + if [ ! -n "$kernel_part" ]; then >> + echo "cannot find factory partition" >> + exit 1 >> + fi >> + >> + CI_KERNPART=${kernel_part} >> + >> + #Remove volume possibly left over from stock firmware >> + local ubidev="$( nand_find_ubi "$CI_UBIPART" )" >> + if [ ! "$ubidev" ]; then >> + local mtdnum="$( find_mtd_index "$CI_UBIPART" )" >> + if [ ! "$mtdnum" ]; then >> + echo "cannot find ubi mtd partition $CI_UBIPART" >> + return 1 >> + fi >> + ubiattach -m "$mtdnum" >> + sync >> + ubidev="$( nand_find_ubi "$CI_UBIPART" )" >> + fi >> + if [ -n "$ubidev" ]; then >> + local troot_ubivol="$( nand_find_volume $ubidev troot )" >> + [ "$troot_ubivol" ] && ubirmvol /dev/$ubidev -N troot || true >> + fi >> + >> + ubnt_update_target_kernel ${factory_mtd} ${kernel_part} >> +} >> diff --git a/target/linux/ramips/dts/MT7621.dts >> b/target/linux/ramips/dts/MT7621.dts >> index c90fc95..96f3416 100644 >> --- a/target/linux/ramips/dts/MT7621.dts >> +++ b/target/linux/ramips/dts/MT7621.dts >> @@ -31,4 +31,26 @@ >> }; >> }; >> }; >> + >> + nand@1e003000 { >> + partition@0 { >> + label = "uboot"; >> + reg = <0x00000 0x80000>; /* 64 KB */ >> + }; >> + >> + partition@80000 { >> + label = "uboot_env"; >> + reg = <0x80000 0x80000>; /* 64 KB */ >> + }; >> + >> + partition@100000 { >> + label = "factory"; >> + reg = <0x100000 0x40000>; >> + }; >> + >> + partition@140000 { >> + label = "rootfs"; >> + reg = <0x140000 0xec0000>; >> + }; >> + }; >> }; >> diff --git a/target/linux/ramips/dts/UBNT-ERX.dts >> b/target/linux/ramips/dts/UBNT-ERX.dts >> new file mode 100644 >> index 0000000..4aa3be9 >> --- /dev/null >> +++ b/target/linux/ramips/dts/UBNT-ERX.dts >> @@ -0,0 +1,117 @@ >> +/dts-v1/; >> + >> +/include/ "mt7621.dtsi" >> + >> +/ { >> + compatible = "mediatek,mt7621-eval-board", "mediatek,mt7621-soc"; >> + model = "UBNT-ERX"; >> + >> + memory@0 { >> + device_type = "memory"; >> + reg = <0x0 0x10000000>; >> + }; >> + >> + chosen { >> + bootargs = "console=ttyS0,57600"; >> + }; >> + >> + palmbus@1E000000 { >> + spi@b00 { >> + /* This board has 2Mb spi flash soldered in and >> visible >> + from manufacturer's firmware. >> + But this SoC shares spi and nand pins, >> + and current driver desn't handle this sharing >> well */ >> + status = "disabled"; >> + m25p80@0 { >> + #address-cells = <1>; >> + #size-cells = <1>; >> + compatible = "m25p80"; >> + reg = <1>; >> + linux,modalias = "m25p80"; >> + spi-max-frequency = <10000000>; >> + >> + partition@0 { >> + label = "spi"; >> + reg = <0x0 0x200000>; >> + read-only; >> + }; >> + }; >> + }; >> + }; >> + >> + nand@1e003000 { >> + compatible = "mtk,mt7621-nand"; >> + bank-width = <2>; >> + reg = <0x1e003000 0x800 >> + 0x1e003800 0x800>; >> + #address-cells = <1>; >> + #size-cells = <1>; >> + >> + partition@0 { >> + label = "u-boot"; >> + reg = <0x0 0x80000>; >> + read-only; >> + }; >> + >> + partition@80000 { >> + label = "u-boot-env"; >> + reg = <0x80000 0x60000>; >> + read-only; >> + }; >> + >> + factory: partition@e0000 { >> + label = "factory"; >> + reg = <0xe0000 0x60000>; >> + }; >> + >> + partition@140000 { >> + label = "kernel1"; >> + reg = <0x140000 0x300000>; >> + }; >> + >> + partition@440000 { >> + label = "kernel2"; >> + reg = <0x440000 0x300000>; >> + }; >> + >> + partition@740000 { >> + label = "ubi"; >> + reg = <0x740000 0xf7c0000>; >> + }; >> + >> + }; >> + >> + ethernet@1e100000 { >> + mtd-mac-address = <&factory 0x22>; >> + }; >> + >> + pinctrl { >> + state_default: pinctrl0 { >> + gpio { >> + ralink,group = "uart2", "uart3", "i2c", >> "pcie", "rgmii2", "jtag"; >> + ralink,function = "gpio"; >> + }; >> + }; >> + }; >> + >> + sdhci@1E130000 { >> + status = "disabled"; >> + }; >> + >> + pcie@1e140000 { >> + status = "disabled"; >> + }; >> + >> + gpio-keys-polled { >> + compatible = "gpio-keys-polled"; >> + #address-cells = <1>; >> + #size-cells = <0>; >> + poll-interval = <20>; >> + >> + reset { >> + label = "reset"; >> + gpios = <&gpio0 12 1>; >> + linux,code = <0x198>; >> + }; >> + }; >> +}; >> diff --git a/target/linux/ramips/dts/mt7621.dtsi >> b/target/linux/ramips/dts/mt7621.dtsi >> index fd2e100..c29a040 100644 >> --- a/target/linux/ramips/dts/mt7621.dtsi >> +++ b/target/linux/ramips/dts/mt7621.dtsi >> @@ -241,26 +241,6 @@ >> 0x1e003800 0x800>; >> #address-cells = <1>; >> #size-cells = <1>; >> - >> - partition@0 { >> - label = "uboot"; >> - reg = <0x00000 0x80000>; /* 64 KB */ >> - }; >> - >> - partition@80000 { >> - label = "uboot_env"; >> - reg = <0x80000 0x80000>; /* 64 KB */ >> - }; >> - >> - partition@100000 { >> - label = "factory"; >> - reg = <0x100000 0x40000>; >> - }; >> - >> - partition@140000 { >> - label = "rootfs"; >> - reg = <0x140000 0xec0000>; >> - }; >> }; >> >> ethernet@1e100000 { >> diff --git a/target/linux/ramips/image/Makefile >> b/target/linux/ramips/image/Makefile >> index 00a2923..6230688 100644 >> --- a/target/linux/ramips/image/Makefile >> +++ b/target/linux/ramips/image/Makefile >> @@ -69,6 +69,51 @@ define Build/relocate-kernel >> mv [email protected] $@ >> endef >> >> +define Build/ubnt-erx-factory-compat >> + echo '21001:6' > [email protected] >> + $(TAR) -cf $@ --transform='s/^.*/compat/' [email protected] >> + $(RM) [email protected] >> +endef >> + >> +define Build/ubnt-erx-factory-kernel >> + if [ -e $(BIN_DIR)/$(KERNEL_INITRAMFS_IMAGE) ]; then \ >> + $(TAR) -rf $@ --transform='s/^.*/vmlinux.tmp/' >> $(BIN_DIR)/$(KERNEL_INITRAMFS_IMAGE); \ >> + \ >> + md5sum --binary $(BIN_DIR)/$(KERNEL_INITRAMFS_IMAGE) | awk >> '{print $$1}'> [email protected]; \ >> + $(TAR) -rf $@ --transform='s/^.*/vmlinux.tmp.md5/' [email protected]; \ >> + $(RM) [email protected]; \ >> + fi >> +endef >> + >> +define Build/ubnt-erx-factory-rootfs >> + echo "dummy" > [email protected] >> + $(TAR) -rf $@ --transform='s/^.*/squashfs.tmp/' [email protected] >> + >> + md5sum --binary [email protected] | awk '{print $$1}'> [email protected] >> + $(TAR) -rf $@ --transform='s/^.*/squashfs.tmp.md5/' [email protected] >> + $(RM) [email protected] >> + $(RM) [email protected] >> +endef >> + >> +define Build/ubnt-erx-factory-version >> + echo '$(BOARD) $(VERSION_CODE) $(VERSION_NUMBER)' > [email protected] >> + $(TAR) -rf $@ --transform='s/^.*/version.tmp/' [email protected] >> + $(RM) [email protected] >> +endef >> + >> +#We need kernel+initrams fit into kernel partition >> +define Build/ubnt-erx-factory-check-size >> + @[ $$(($(subst k,* 1024,$(subst m, * 1024k,$(1))))) -ge "$$($(TAR) >> -xf $@ vmlinux.tmp -O | wc -c)" ] || { \ >> + echo "WARNING: Initramfs kernel for image $@ is too big >> (kernel size: $$($(TAR) -xf $@ vmlinux.tmp -O | wc -c), max size $(1))" >&2; >> \ >> + $(RM) -f $@; \ >> + } >> + >> + @[ "$$($(TAR) -xf $@ vmlinux.tmp -O | wc -c)" -gt 0 ] || { \ >> + echo "WARNING: Kernel for image $@ not found" >&2; \ >> + $(RM) -f $@; \ >> + } >> +endef >> + >> define MkCombineduImage >> $(call PatchKernelLzma,$(2),$(3)) >> if [ `stat -c%s "$(KDIR)/vmlinux-$(2).bin.lzma"` -gt `expr $(4) - >> 64` ]; then \ >> @@ -954,7 +999,7 @@ endif >> # >> >> ifeq ($(SUBTARGET),mt7621) >> - TARGET_DEVICES += mt7621 wsr-600 wsr-1166 dir-860l-b1 firewrt pbr-m1 >> re6500 sap-g3200u3 zbt-wg2626 wf-2881 >> + TARGET_DEVICES += mt7621 wsr-600 wsr-1166 dir-860l-b1 firewrt pbr-m1 >> re6500 sap-g3200u3 zbt-wg2626 wf-2881 ubnt-erx >> endif >> >> define Device/mt7621 >> @@ -1018,6 +1063,20 @@ define Device/wf-2881 >> IMAGE/sysupgrade.bin := append-kernel | pad-to $$(KERNEL_SIZE) | >> append-ubi | check-size $$$$(IMAGE_SIZE) >> endef >> >> +define Device/ubnt-erx >> + DTS := UBNT-ERX >> + FILESYSTEMS := squashfs >> + KERNEL_SIZE := 3145728 >> + KERNEL := $(KERNEL_DTB) | uImage lzma >> + IMAGES := sysupgrade.tar factory-initramfs.tar >> + IMAGE/factory-initramfs.tar := ubnt-erx-factory-compat | \ >> + ubnt-erx-factory-kernel | \ >> + ubnt-erx-factory-rootfs | \ >> + ubnt-erx-factory-version | \ >> + ubnt-erx-factory-check-size >> $$$$(KERNEL_SIZE) >> + IMAGE/sysupgrade.tar := sysupgrade-nand >> +endef >> + >> # >> # MT7628 Profiles >> # >> diff --git a/target/linux/ramips/mt7621/profiles/ubnt.mk >> b/target/linux/ramips/mt7621/profiles/ubnt.mk >> new file mode 100644 >> index 0000000..67efa60 >> --- /dev/null >> +++ b/target/linux/ramips/mt7621/profiles/ubnt.mk >> @@ -0,0 +1,17 @@ >> +# >> +# Copyright (C) 2015 OpenWrt.org >> +# >> +# This is free software, licensed under the GNU General Public License v2. >> +# See /LICENSE for more information. >> +# >> + >> +define Profile/UBNT-ERX >> + NAME:=Ubiquiti EdgeRouter X >> + FEATURES += nand >> + PACKAGES:=-kmod-mt76 -wpad-mini >> +endef >> + >> +define Profile/UBNT-ERX/Description >> + Package set compatible with the Ubiquiti EdgeRouter X >> +endef >> +$(eval $(call Profile,UBNT-ERX)) >> diff --git >> a/target/linux/ramips/patches-3.18/0901-spansion_nand_id_fix.patch >> b/target/linux/ramips/patches-3.18/0901-spansion_nand_id_fix.patch >> new file mode 100644 >> index 0000000..a327674 >> --- /dev/null >> +++ b/target/linux/ramips/patches-3.18/0901-spansion_nand_id_fix.patch >> @@ -0,0 +1,43 @@ >> +From 8b61a1a33e41456ebeafa0ebe7ec0fccf859861e Mon Sep 17 00:00:00 2001 >> +From: Nikolay Martynov <[email protected]> >> +Date: Wed, 25 Nov 2015 20:43:46 -0500 >> +Subject: [PATCH] mtd: nand: Fix Spansion sparearea size detection >> + >> +According to datasheet S34ML02G2 and S34ML04G2 have >> +larger sparea area size than was detected. >> + >> +Signed-off-by: Nikolay Martynov <[email protected]> >> +--- >> + drivers/mtd/nand/nand_base.c | 9 +++++++++ >> + 1 file changed, 9 insertions(+) >> + >> +--- a/drivers/mtd/nand/nand_base.c >> ++++ b/drivers/mtd/nand/nand_base.c >> +@@ -3399,6 +3399,7 @@ static void nand_decode_ext_id(struct mt >> + /* >> + * Field definitions are in the following datasheets: >> + * Old style (4,5 byte ID): Samsung K9GAG08U0M (p.32) >> ++ * Spansion S34ML02G2 (p.33) >> + * New Samsung (6 byte ID): Samsung K9GAG08U0F (p.44) >> + * Hynix MLC (6 byte ID): Hynix H27UBG8T2B (p.22) >> + * >> +@@ -3496,6 +3497,19 @@ static void nand_decode_ext_id(struct mt >> + *busw = (extid & 0x01) ? NAND_BUSWIDTH_16 : 0; >> + >> + /* >> ++ * Spansion S34ML0[24]G2 have oobsize twice as large >> ++ * as S34ML01G2 encoded in the same bit. We >> ++ * differinciate them by their ID length >> ++ */ >> ++ if (id_data[0] == NAND_MFR_AMD >> ++ && (id_data[1] == 0xda >> ++ || id_data[1] == 0xdc >> ++ || id_data[1] == 0xca >> ++ || id_data[1] == 0xcc)) { >> ++ mtd->oobsize *= 2; >> ++ } >> ++ >> ++ /* >> + * Toshiba 24nm raw SLC (i.e., not BENAND) have 32B OOB per >> + * 512B page. For Toshiba SLC, we decode the 5th/6th byte as >> + * follows: >> -- >> 2.6.3 >> > > > _______________________________________________ openwrt-devel mailing list [email protected] https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel
