From dc5fe5f73f7cef3282fb6f529f4d91b8cf764706 Mon Sep 17 00:00:00 2001 From: John Crispin Date: Mon, 16 Jun 2014 18:57:20 +0000 Subject: ramips: RT-N56U support fixes and factory image creation Signed-off-by: Mikko Hissa SVN-Revision: 41224 --- .../preinit/04_disable_wnce2001_flash_checksumming | 43 ----------------- .../base-files/lib/preinit/04_handle_checksumming | 56 ++++++++++++++++++++++ target/linux/ramips/dts/RTN56U.dts | 8 ++++ target/linux/ramips/image/Makefile | 8 +++- .../patches-3.10/0135-mtd-add-rtn56u-support.patch | 28 +++++++++++ 5 files changed, 99 insertions(+), 44 deletions(-) delete mode 100644 target/linux/ramips/base-files/lib/preinit/04_disable_wnce2001_flash_checksumming create mode 100644 target/linux/ramips/base-files/lib/preinit/04_handle_checksumming create mode 100644 target/linux/ramips/patches-3.10/0135-mtd-add-rtn56u-support.patch (limited to 'target/linux') diff --git a/target/linux/ramips/base-files/lib/preinit/04_disable_wnce2001_flash_checksumming b/target/linux/ramips/base-files/lib/preinit/04_disable_wnce2001_flash_checksumming deleted file mode 100644 index 67a1746f1d..0000000000 --- a/target/linux/ramips/base-files/lib/preinit/04_disable_wnce2001_flash_checksumming +++ /dev/null @@ -1,43 +0,0 @@ -#!/bin/sh - -# Netgear WNCE2001 has does a checksum check on boot and goes into recovery -# tftp mode when the check fails. Initializing the JFFS2 partition triggers -# this, so we make sure to zero checksum and size to be checksummed before -# that happens, so this needs to run very early during boot. - -do_wnce2001_checksumming_disable() { - . /lib/ramips.sh - - local board=$(ramips_board_name) - - case "$board" in - wnce2001) - echo "Board is WNCE2001, updating checksum partition..." - local zeroes=/dev/zero - local tmpfile=/tmp/wnce2001_checksum - local partname=checksum - local mtd=$(find_mtd_part $partname) - dd if=$mtd of=$tmpfile bs=80 count=1 2>/dev/null - signature=$(dd if=$tmpfile bs=1 skip=24 count=20 2>/dev/null) - checksum=$(dd if=$tmpfile bs=1 count=4 2>/dev/null | hexdump -v -n 4 -e '1/1 "%02x"') - if [ "$signature" != "RT3052-AP-WNCE2001-3" ]; then - echo "Signature of checksum partition is wrong, bailing." - return 0 - fi - if [ "$checksum" != "00000000" ]; then - echo "Checksum is set, zeroing." - # zero out checksum - dd if=$zeroes of=$tmpfile conv=notrunc bs=1 seek=0 count=4 2>/dev/null - # zero out bytecount to be checksummed - dd if=$zeroes of=$tmpfile conv=notrunc bs=1 seek=60 count=4 2>/dev/null - mtd write $tmpfile $partname - else - echo "Checksum is already zero, nothing to do." - fi - ;; - esac - - return 0 -} - -boot_hook_add preinit_main do_wnce2001_checksumming_disable diff --git a/target/linux/ramips/base-files/lib/preinit/04_handle_checksumming b/target/linux/ramips/base-files/lib/preinit/04_handle_checksumming new file mode 100644 index 0000000000..fd06d20c99 --- /dev/null +++ b/target/linux/ramips/base-files/lib/preinit/04_handle_checksumming @@ -0,0 +1,56 @@ +#!/bin/sh + +# Netgear WNCE2001 has does a checksum check on boot and goes into recovery +# tftp mode when the check fails. Initializing the JFFS2 partition triggers +# this, so we make sure to zero checksum and size to be checksummed before +# that happens, so this needs to run very early during boot. + +do_checksumming_disable() { + . /lib/ramips.sh + + local board=$(ramips_board_name) + + case "$board" in + wnce2001) + echo "Board is WNCE2001, updating checksum partition..." + local zeroes=/dev/zero + local tmpfile=/tmp/wnce2001_checksum + local partname=checksum + local mtd=$(find_mtd_part $partname) + dd if=$mtd of=$tmpfile bs=80 count=1 2>/dev/null + signature=$(dd if=$tmpfile bs=1 skip=24 count=20 2>/dev/null) + checksum=$(dd if=$tmpfile bs=1 count=4 2>/dev/null | hexdump -v -n 4 -e '1/1 "%02x"') + if [ "$signature" != "RT3052-AP-WNCE2001-3" ]; then + echo "Signature of checksum partition is wrong, bailing." + return 0 + fi + if [ "$checksum" != "00000000" ]; then + echo "Checksum is set, zeroing." + # zero out checksum + dd if=$zeroes of=$tmpfile conv=notrunc bs=1 seek=0 count=4 2>/dev/null + # zero out bytecount to be checksummed + dd if=$zeroes of=$tmpfile conv=notrunc bs=1 seek=60 count=4 2>/dev/null + mtd write $tmpfile $partname + else + echo "Checksum is already zero, nothing to do." + fi + ;; + rt-n56u) + echo "Board is ASUS RT-N56U, replacing uImage header..." + local firmware_mtd=$(find_mtd_part firmware) + local rootfs_mtd=$(find_mtd_part rootfs) + local rootfs_data_mtd=$(find_mtd_part rootfs_data) + local rootfs_len=$(grep \"rootfs\" /proc/mtd | awk -F' ' '{print "0x"$2}') + local rootfs_data_len=$(grep \"rootfs_data\" /proc/mtd | awk -F' ' '{print "0x"$2}') + local offset=$(echo "$rootfs_len $rootfs_data_len 0x40" | awk -F' ' '{printf "%i",$1-$2-$3}') + local signature=$(dd if=$rootfs_mtd skip=$offset bs=1 count=4 2>/dev/null | hexdump -v -n 4 -e '1/1 "%02x"') + if [ "$signature" == "27051956" ]; then + dd conv=notrunc if=$rootfs_mtd skip=$offset of=$firmware_mtd bs=1 count=64 2>/dev/null + fi + ;; + esac + + return 0 +} + +boot_hook_add preinit_main do_checksumming_disable diff --git a/target/linux/ramips/dts/RTN56U.dts b/target/linux/ramips/dts/RTN56U.dts index b962aa0d23..305e36e85b 100644 --- a/target/linux/ramips/dts/RTN56U.dts +++ b/target/linux/ramips/dts/RTN56U.dts @@ -43,12 +43,20 @@ host-bridge { pci-bridge@1 { status = "okay"; + wmac@0,0 { + compatible = "ralink,rt2880-pci", "pciclass060400", "pciclass0604"; + reg = < 0x10000 0 0 0 0 >; + ralink,eeprom = "rt2x00pci_1_0.eeprom"; + }; + }; }; }; wmac@10180000 { + status = "okay"; ralink,2ghz = <0>; + ralink,eeprom = "soc_wmac.eeprom"; }; ehci@101c0000 { diff --git a/target/linux/ramips/image/Makefile b/target/linux/ramips/image/Makefile index 58a54773c2..1b342deb7a 100644 --- a/target/linux/ramips/image/Makefile +++ b/target/linux/ramips/image/Makefile @@ -665,7 +665,13 @@ Image/Build/Profile/DIR645=$(call BuildFirmware/Seama/$(1),$(1),dir-645,DIR-645, omniembhpm_mtd_size=16449536 Image/Build/Profile/OMNIEMBHPM=$(call BuildFirmware/CustomFlash/$(1),$(1),omni-emb-hpm,OMNI-EMB-HPM,$(omniembhpm_mtd_size)) -Image/Build/Profile/RTN56U=$(call BuildFirmware/Default8M/$(1),$(1),rt-n56u,RTN56U) +define BuildFirmware/RTN56U/squashfs + $(call BuildFirmware/Default8M/$(1),$(1),rt-n56u,RTN56U) + -mkrtn56uimg -s $(call sysupname,$(1),rt-n56u) + -cp $(call sysupname,$(1),rt-n56u) $(call imgname,$(1),rt-n56u)-factory.bin + -mkrtn56uimg -f $(call imgname,$(1),rt-n56u)-factory.bin +endef +Image/Build/Profile/RTN56U=$(call BuildFirmware/RTN56U/$(1),$(1),rt-n56u,RTN56U) Image/Build/Profile/TEW691GR=$(call BuildFirmware/UMedia/$(1),$(1),tew-691gr,TEW-691GR,0x026910) diff --git a/target/linux/ramips/patches-3.10/0135-mtd-add-rtn56u-support.patch b/target/linux/ramips/patches-3.10/0135-mtd-add-rtn56u-support.patch new file mode 100644 index 0000000000..52379916b9 --- /dev/null +++ b/target/linux/ramips/patches-3.10/0135-mtd-add-rtn56u-support.patch @@ -0,0 +1,28 @@ +--- a/drivers/mtd/mtdpart.c 2014-04-27 10:09:21.566294160 +0300 ++++ b/drivers/mtd/mtdpart.c 2014-06-09 11:27:48.952211672 +0300 +@@ -793,8 +793,11 @@ + { + struct { + __be32 magic; +- __be32 pad[2]; ++ __be32 pad0[2]; + __be32 size; ++ __be32 pad1[4]; ++ __be32 name[7]; ++ __be32 kern_size; + } hdr; + size_t len; + +@@ -804,7 +807,11 @@ + if (len != sizeof(hdr) || hdr.magic != cpu_to_be32(UBOOT_MAGIC)) + return; + +- len = be32_to_cpu(hdr.size) + 0x40; ++ if (hdr.kern_size != 0 && hdr.name[0] == 0) ++ len = be32_to_cpu(hdr.kern_size); ++ else ++ len = be32_to_cpu(hdr.size) + 0x40; ++ + __mtd_add_partition(master, "rootfs", part->offset + len, + part->mtd.size - len, false); + } -- cgit v1.2.3