[OpenWrt-Devel] [PATCH v5] Add support for Ubiquiti EdgeRouter X (UBNT-ERX)
Nikolay Martynov
mar.kolya at gmail.com
Fri Dec 11 09:12:02 EST 2015
Hi Yousong,
Thank you so much for your review.
Unfortunately I've resubmitted this patch as part of 4.3 fixes for
ramips before I've seen this message.
I think I'll update and resubmit this patch again after John merges
CPS changes from series to avoid unnecessary conflicts.
Thanks!
2015-12-11 0:36 GMT-05:00 Yousong Zhou <yszhou4tech at gmail.com>:
> yousong
>
>
> On 11 December 2015 at 13:33, Yousong Zhou <yszhou4tech at gmail.com> wrote:
>> Hi, Nikolay,
>>
>> On 3 December 2015 at 15:16, Nikolay Martynov <mar.kolya at gmail.com> wrote:
>>> 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.
>>
>> Try enabling SWCONFIG_LEDS and configure the trigger with
>> ucidef_set_led_switch like other platforms have done. This works for
>> me with a mt7620 board.
>>
>>> * 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.
>>
>> Most of these info should go to a wiki page for the device.
>>
>>>
>>> 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.
>>
>> The changelog should go below the three-dashes line (---).
>>
>> A few indentation issues were spotted and pointed out inline.
>>
>>>
>>> Signed-off-by: Nikolay Martynov <mar.kolya at gmail.com>
>>> ---
>>> 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"
>>
>> bad indentation (tab replaced with blank spaces). And this should be
>> in a separate patch
>>
>>> + 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"
>>
>> bad indentation
>>
>>> + 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)
>>
>> bad indentation
>>
>>> + 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
>>
>> Indentation issues exist in this file.
>>
>>> @@ -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 "')
>>
>> hexdump alone can do the job with option -s <offset> -n <count>
>>
>>> +
>>> + 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'
>>
>> Should echo to stderr >&2
>>
>>> + exit 1
>>
>> Can we "return 1" and let the caller make the decision?
>>
>>> + 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
>>
>> ditto
>>
>>> + fi
>>> +}
>>> +
>>> +platform_upgrade_ubnt_erx() {
>>> + local factory_mtd=$(find_mtd_part factory)
>>
>> find_mtd_part is in another file, so better source it again here.
>>
>>> + if [ ! -n "$factory_mtd" ]; then
>>
>> [ -z xxx ] should do
>>
>>> + 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}
>>
>> this variable is not referenced in the whole patch?
>
> ok, it's a global defined by procd nand.sh. the comment still slipped in...
>
>>
>>> +
>>> + #Remove volume possibly left over from stock firmware
>>> + local ubidev="$( nand_find_ubi "$CI_UBIPART" )"
>>> + if [ ! "$ubidev" ]; then
>>
>> I thought [ -z "$ubidev" ] is the convention
>>
>>> + local mtdnum="$( find_mtd_index "$CI_UBIPART" )"
>>> + if [ ! "$mtdnum" ]; then
>>
>> ditto
>>
>>> + 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
>>
>> ditto
>>
>>> + 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 at 1e003000 {
>>> + partition at 0 {
>>> + label = "uboot";
>>> + reg = <0x00000 0x80000>; /* 64 KB */
>>> + };
>>> +
>>> + partition at 80000 {
>>> + label = "uboot_env";
>>> + reg = <0x80000 0x80000>; /* 64 KB */
>>> + };
>>> +
>>> + partition at 100000 {
>>> + label = "factory";
>>> + reg = <0x100000 0x40000>;
>>> + };
>>> +
>>> + partition at 140000 {
>>> + label = "rootfs";
>>> + reg = <0x140000 0xec0000>;
>>> + };
>>> + };
>>> };
>>
>> moving something from mt7621.dtsi to MT7621.dts should be in a
>> separate patch with explanation.
>>
>>> 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 at 0 {
>>> + device_type = "memory";
>>> + reg = <0x0 0x10000000>;
>>> + };
>>> +
>>> + chosen {
>>> + bootargs = "console=ttyS0,57600";
>>> + };
>>> +
>>> + palmbus at 1E000000 {
>>> + spi at 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 at 0 {
>>> + #address-cells = <1>;
>>> + #size-cells = <1>;
>>> + compatible = "m25p80";
>>> + reg = <1>;
>>> + linux,modalias = "m25p80";
>>> + spi-max-frequency = <10000000>;
>>> +
>>> + partition at 0 {
>>> + label = "spi";
>>> + reg = <0x0 0x200000>;
>>> + read-only;
>>> + };
>>> + };
>>> + };
>>> + };
>>> +
>>> + nand at 1e003000 {
>>> + compatible = "mtk,mt7621-nand";
>>> + bank-width = <2>;
>>> + reg = <0x1e003000 0x800
>>> + 0x1e003800 0x800>;
>>> + #address-cells = <1>;
>>> + #size-cells = <1>;
>>> +
>>> + partition at 0 {
>>> + label = "u-boot";
>>> + reg = <0x0 0x80000>;
>>> + read-only;
>>> + };
>>> +
>>> + partition at 80000 {
>>> + label = "u-boot-env";
>>> + reg = <0x80000 0x60000>;
>>> + read-only;
>>> + };
>>> +
>>> + factory: partition at e0000 {
>>> + label = "factory";
>>> + reg = <0xe0000 0x60000>;
>>> + };
>>> +
>>> + partition at 140000 {
>>> + label = "kernel1";
>>> + reg = <0x140000 0x300000>;
>>> + };
>>> +
>>> + partition at 440000 {
>>> + label = "kernel2";
>>> + reg = <0x440000 0x300000>;
>>> + };
>>> +
>>> + partition at 740000 {
>>> + label = "ubi";
>>> + reg = <0x740000 0xf7c0000>;
>>> + };
>>> +
>>> + };
>>> +
>>> + ethernet at 1e100000 {
>>> + mtd-mac-address = <&factory 0x22>;
>>> + };
>>> +
>>> + pinctrl {
>>> + state_default: pinctrl0 {
>>> + gpio {
>>> + ralink,group = "uart2", "uart3", "i2c", "pcie", "rgmii2", "jtag";
>>> + ralink,function = "gpio";
>>> + };
>>> + };
>>> + };
>>> +
>>> + sdhci at 1E130000 {
>>> + status = "disabled";
>>> + };
>>> +
>>> + pcie at 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 at 0 {
>>> - label = "uboot";
>>> - reg = <0x00000 0x80000>; /* 64 KB */
>>> - };
>>> -
>>> - partition at 80000 {
>>> - label = "uboot_env";
>>> - reg = <0x80000 0x80000>; /* 64 KB */
>>> - };
>>> -
>>> - partition at 100000 {
>>> - label = "factory";
>>> - reg = <0x100000 0x40000>;
>>> - };
>>> -
>>> - partition at 140000 {
>>> - label = "rootfs";
>>> - reg = <0x140000 0xec0000>;
>>> - };
>>> };
>>>
>>> ethernet at 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 $@.new $@
>>> endef
>>>
>>> +define Build/ubnt-erx-factory-compat
>>> + echo '21001:6' > $@.compat
>>> + $(TAR) -cf $@ --transform='s/^.*/compat/' $@.compat
>>> + $(RM) $@.compat
>>> +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}'> $@.md5; \
>>> + $(TAR) -rf $@ --transform='s/^.*/vmlinux.tmp.md5/' $@.md5; \
>>> + $(RM) $@.md5; \
>>> + fi
>>> +endef
>>> +
>>> +define Build/ubnt-erx-factory-rootfs
>>> + echo "dummy" > $@.rootfs
>>> + $(TAR) -rf $@ --transform='s/^.*/squashfs.tmp/' $@.rootfs
>>> +
>>> + md5sum --binary $@.rootfs | awk '{print $$1}'> $@.md5
>>> + $(TAR) -rf $@ --transform='s/^.*/squashfs.tmp.md5/' $@.md5
>>> + $(RM) $@.md5
>>> + $(RM) $@.rootfs
>>> +endef
>>> +
>>> +define Build/ubnt-erx-factory-version
>>> + echo '$(BOARD) $(VERSION_CODE) $(VERSION_NUMBER)' > $@.version
>>> + $(TAR) -rf $@ --transform='s/^.*/version.tmp/' $@.version
>>> + $(RM) $@.version
>>> +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 <mar.kolya at gmail.com>
>>> +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 <mar.kolya at gmail.com>
>>> +---
>>> + 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
>>> openwrt-devel at lists.openwrt.org
>>> https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel
--
Martynov Nikolay.
Email: mar.kolya at gmail.com
_______________________________________________
openwrt-devel mailing list
openwrt-devel at lists.openwrt.org
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel
More information about the openwrt-devel
mailing list