wongsyrone / openwrt-1

已废弃DEPRECATED-see https://github.com/wongsyrone/lede-1 | modifications on OpenWrt official repository
https://www.lede-project.org/
GNU General Public License v2.0
37 stars 19 forks source link

review patch #9

Closed wongsyrone closed 9 years ago

wongsyrone commented 9 years ago
From 0048e6392c11c7cf1b40ce3c157b80f097c355d2 Mon Sep 17 00:00:00 2001
From: zhouruixi <zhouruixi@gmail.com>
Date: Tue, 13 Jan 2015 11:23:39 +0800
Subject: [PATCH] test-419

Signed-off-by: zhouruixi <zhouruixi@gmail.com>

---
 package/boot/uboot-envtools/files/ar71xx           |  7 +++-
 target/linux/ar71xx/base-files/etc/diag.sh         | 12 +++---
 .../lib/preinit/81_load_ath10k_board_bin           |  6 ++-
 .../ar71xx/files/arch/mips/ath79/mach-qihoo-c301.c | 49 ++++++++++++++++++++--
 target/linux/ar71xx/image/Makefile                 | 13 ++++--
 .../419-mtd-seama-add-c301-part-name-check.patch   | 14 +++++++
 6 files changed, 85 insertions(+), 16 deletions(-)
 create mode 100644 target/linux/ar71xx/patches-3.14/419-mtd-seama-add-c301-part-name-check.patch

diff --git a/package/boot/uboot-envtools/files/ar71xx b/package/boot/uboot-envtools/files/ar71xx
index 30c86fd..48d1329 100644
--- a/package/boot/uboot-envtools/files/ar71xx
+++ b/package/boot/uboot-envtools/files/ar71xx
@@ -45,8 +45,11 @@ wzr-hp-ag300h)
    ubootenv_add_uci_config "/dev/mtd3" "0x0" "0x10000" "0x10000"
    ;;
 qihoo-c301)
-   ubootenv_add_uci_config "/dev/mtd9" "0x0" "0x10000" "0x10000"
-   ;;
+       if cat /proc/mtd | grep action_image_config; then
+               local mtd=$(cat /proc/mtd | grep action_image_config | sed 's/mtd\([0-9]*\):.*/\1/g')
+               ubootenv_add_uci_config "/dev/mtd${mtd}" "0x0" "0x10000" "0x10000"
+       fi
+       ;;
 esac

 config_load ubootenv
diff --git a/target/linux/ar71xx/base-files/etc/diag.sh b/target/linux/ar71xx/base-files/etc/diag.sh
index 06b96a3..0e5d17b 100755
--- a/target/linux/ar71xx/base-files/etc/diag.sh
+++ b/target/linux/ar71xx/base-files/etc/diag.sh
@@ -314,11 +314,13 @@ set_state() {
    done)
        status_led_on
        case $(ar71xx_board_name) in
-       qihoo-c301)
-           local n=$(fw_printenv activeregion | cut -d = -f 2)
-           fw_setenv "image${n}trynum" 0
-           ;;
-       esac
+                qihoo-c301)
+                       if cat /proc/mtd | grep action_image_config; then
+                               local n=$(fw_printenv activeregion | cut -d = -f 2)
+                               fw_setenv "image${n}trynum" 0
+                       fi
+                       ;;
+               esac
        ;;
    esac
 }
diff --git a/target/linux/ar71xx/base-files/lib/preinit/81_load_ath10k_board_bin b/target/linux/ar71xx/base-files/lib/preinit/81_load_ath10k_board_bin
index 7190820..c6258dd 100644
--- a/target/linux/ar71xx/base-files/lib/preinit/81_load_ath10k_board_bin
+++ b/target/linux/ar71xx/base-files/lib/preinit/81_load_ath10k_board_bin
@@ -36,18 +36,20 @@ do_load_ath10k_board_bin() {
        ;;
        qihoo-c301)
            local mac
+                        local mtd

+                        mtd=$(cat /proc/mtd | grep radiocfg | sed 's/mtd\([0-9]*\):.*/\1/g')
            mac=$(mtd_get_mac_ascii devdata wlan5mac)

            if [ -z "$mac" ]; then
                mac=$(macaddr_add $(cat /sys/class/net/eth0/address) -2)
            fi

-           dd if=/dev/mtdblock10 \
+           dd if=/dev/mtdblock${mtd} \
                bs=1 skip=20480 count=6 \
                of=/tmp/ath10k-board.bin
            macaddr_2bin $mac >> /tmp/ath10k-board.bin
-           dd if=/dev/mtdblock10 \
+           dd if=/dev/mtdblock${mtd} \
                bs=1 skip=20492 count=2104 >> /tmp/ath10k-board.bin

        ;;
diff --git a/target/linux/ar71xx/files/arch/mips/ath79/mach-qihoo-c301.c b/target/linux/ar71xx/files/arch/mips/ath79/mach-qihoo-c301.c
index 08a602f..2896033 100644
--- a/target/linux/ar71xx/files/arch/mips/ath79/mach-qihoo-c301.c
+++ b/target/linux/ar71xx/files/arch/mips/ath79/mach-qihoo-c301.c
@@ -14,6 +14,8 @@
 #include <linux/gpio.h>
 #include <linux/platform_device.h>
 #include <linux/ath9k_platform.h>
+#include <linux/crc32.h>
+#include <linux/mtd/mtd.h>

 #include <asm/mach-ath79/ar71xx_regs.h>

@@ -81,6 +83,10 @@ static struct gpio_keys_button qihoo_c301_gpio_keys[] __initdata = {

 struct flash_platform_data flash __initdata = {NULL, NULL, 0};

+static int qihoo_c301_board = 0;
+
+static u8 wlan24mac[ETH_ALEN];
+
 static void qihoo_c301_get_mac(const char *name, char *mac)
 {
    u8 *nvram = (u8 *) KSEG1ADDR(QIHOO_C301_NVRAM_ADDR);
@@ -94,8 +100,6 @@ static void qihoo_c301_get_mac(const char *name, char *mac)

 static void __init qihoo_c301_setup(void)
 {
-   u8 *art = (u8 *) KSEG1ADDR(0x1fff0000);
-   u8 tmpmac[ETH_ALEN];

    ath79_register_m25p80_multi(&flash);

@@ -125,8 +129,7 @@ static void __init qihoo_c301_setup(void)
    ath79_wmac_set_ext_lna_gpio(0, QIHOO_C301_GPIO_EXTERNAL_LNA0);
    ath79_wmac_set_ext_lna_gpio(1, QIHOO_C301_GPIO_EXTERNAL_LNA1);

-   qihoo_c301_get_mac("wlan24mac=", tmpmac);
-   ath79_register_wmac(art + QIHOO_C301_WMAC_CALDATA_OFFSET, tmpmac);
+   qihoo_c301_get_mac("wlan24mac=", wlan24mac);

    ath79_register_pci();

@@ -160,7 +163,45 @@ static void __init qihoo_c301_setup(void)
             GPIOF_OUT_INIT_HIGH | GPIOF_EXPORT_DIR_FIXED,
             "USB power");
    ath79_register_usb();
+
+       qihoo_c301_board = 1;
 }

 MIPS_MACHINE(ATH79_MACH_QIHOO_C301, "QIHOO-C301", "Qihoo 360 C301",
         qihoo_c301_setup);
+
+
+static int qihoo_init_wmac(void)
+{
+       struct mtd_info * mtd;
+       size_t nb = 0;
+       u8 *art;
+       int ret;
+
+       if (!qihoo_c301_board)
+               return 0;
+
+       mtd = get_mtd_device_nm("radiocfg");
+       if (IS_ERR(mtd))
+               return PTR_ERR(mtd);
+
+       if (mtd->size != 0x10000)
+               return -1;
+
+       art = kzalloc(0x1000, GFP_KERNEL);
+       if (!art)
+               return -1;
+
+       ret = mtd_read(mtd, QIHOO_C301_WMAC_CALDATA_OFFSET, 0x1000, &nb, art);
+       if (nb != 0x1000)
+       {
+               kfree(art);
+               return ret;
+       }
+
+       ath79_register_wmac(art, wlan24mac);
+
+       return 0;
+}
+
+late_initcall(qihoo_init_wmac);
\ No newline at end of file
diff --git a/target/linux/ar71xx/image/Makefile b/target/linux/ar71xx/image/Makefile
index ef52f46..e92827e 100644
--- a/target/linux/ar71xx/image/Makefile
+++ b/target/linux/ar71xx/image/Makefile
@@ -403,13 +403,15 @@ wnr2200_mtdlayout=mtdparts=spi0.0:256k(u-boot)ro,64k(u-boot-env)ro,7808k(firmwar
 wnr2000v3_mtdlayout=mtdparts=spi0.0:256k(u-boot)ro,64k(u-boot-env)ro,3712k(firmware),64k(art)ro
 wnr2000v4_mtdlayout=mtdparts=spi0.0:192k(u-boot)ro,64k(u-boot-env)ro,3776k(firmware),64k(art)ro
 r6100_mtdlayout=mtdparts=ar934x-nfc:128k(u-boot)ro,256k(caldata),256k(caldata-backup),512k(config),512k(pot),2048k(kernel),122240k(ubi),25600k@0x1a0000(firmware),2048k(language),3072k(traffic_meter)
-wndr4300_mtdlayout=mtdparts=ar934x-nfc:256k(u-boot)ro,256k(u-boot-env)ro,256k(caldata),512k(pot),2048k(language),512k(config),3072k(traffic_meter),2048k(kernel),23552k(ubi),25600k@0x6c0000(firmware),256k(caldata_backup),-(reserved)
+wndr4300_mtdlayout=mtdparts=ar934x-nfc:256k(u-boot)ro,256k(u-boot-env)ro,256k(caldata),512k(pot),2048k(language),512k(config),3072k(traffic_meter),2048k(kernel),121856k(ubi),123904k@0x6c0000(firmware),256k(caldata_backup),-(reserved)
 zcn1523h_mtdlayout=mtdparts=spi0.0:256k(u-boot)ro,64k(u-boot-env)ro,6208k(rootfs),1472k(kernel),64k(configure)ro,64k(mfg)ro,64k(art)ro,7680k@0x50000(firmware)
 mynet_n600_mtdlayout=mtdparts=spi0.0:256k(u-boot)ro,64k(u-boot-env)ro,64k(devdata)ro,64k(devconf)ro,15872k(firmware),64k(radiocfg)ro
 mynet_rext_mtdlayout=mtdparts=spi0.0:256k(u-boot)ro,7808k(firmware),64k(nvram)ro,64k(ART)ro,6848k@0x130000(filesystem)
 zyx_nbg6716_mtdlayout=mtdparts=spi0.0:256k(u-boot)ro,64k(env)ro,64k(RFdata)ro,-(nbu);ar934x-nfc:2048k(zyxel_rfsd),2048k(romd),1024k(header),2048k(kernel),-(ubi)
-qihoo_c301_mtdlayout=mtdparts=spi0.0:256k(u-boot)ro,64k(u-boot-env),64k(devdata),64k(devconf),15744k(firmware),64k(warm_start),64k(action_image_config),64k(radiocfg)ro;spi0.1:15360k(upgrade2),1024k(privatedata)

+qihoo_c301_mtdlayout=mtdparts=spi0.0:256k(u-boot),64k(u-boot-env),64k(devdata),64k(devconf),15744k(firmware),64k(warm_start),64k(action_image_config),64k(radiocfg);spi0.1:15360k(upgrade2),1024k(privatedata)
+qihoo_c301_flash2_mtdlayout=mtdparts=spi0.0:256k(u-boot),64k(u-boot-env),64k(devdata),64k(devconf),15744k(firmware_backup),64k(warm_start),64k(action_image_config),64k(radiocfg);spi0.1:15360k(firmware),1024k(privatedata)
+qihoo_c301_32m_mtdlayout=mtdparts=flash:256k(u-boot),64k(u-boot-env),64k(devdata),64k(devconf),32256k(firmware),64k(radiocfg)

 define Image/BuildKernel
    cp $(KDIR)/vmlinux.elf $(VMLINUX).elf
@@ -1343,7 +1345,9 @@ $(eval $(call SingleProfile,Planex,64kraw,MZKW300NH,mzk-w300nh,MZK-W300NH,ttyS0,
 $(eval $(call SingleProfile,Seama,64k,MYNETN600,mynet-n600,MYNET-N600,ttyS0,115200,$$(mynet_n600_mtdlayout),wrgnd16_wd_db600,1310720,16187392))
 $(eval $(call SingleProfile,Seama,64k,MYNETN750,mynet-n750,MYNET-N750,ttyS0,115200,$$(mynet_n600_mtdlayout),wrgnd13_wd_av,1310720,16187392))

-$(eval $(call SingleProfile,Seama,64k,QIHOO360,qihoo-c301,QIHOO-C301,ttyS0,115200,$$(qihoo_c301_mtdlayout),wrgac26_qihoo360_360rg,1310720,16121856))
+$(eval $(call SingleProfile,Seama,64k,QIHOO36016M,qihoo-c301,QIHOO-C301,ttyS0,115200,$$(qihoo_c301_mtdlayout),wrgac26_qihoo360_360rg,1310720,16121856))
+$(eval $(call SingleProfile,Seama,64k,QIHOO360FLASH2,qihoo-c301-flash2,QIHOO-C301,ttyS0,115200,$$(qihoo_c301_flash2_mtdlayout),wrgac26_qihoo360_360rg,1310720,15728640))
+$(eval $(call SingleProfile,Seama,64k,QIHOO36032M,qihoo-c301-32m,QIHOO-C301,ttyS0,115200,$$(qihoo_c301_32m_mtdlayout),wrgac26_qihoo360_360rg,1310720,33030144))

 $(eval $(call SingleProfile,Senao,squashfs-only,EAP300V2,eap300v2,EAP300V2,ttyS0,115200,$$(eap300v2_mtdlayout)))

@@ -1468,6 +1472,9 @@ $(eval $(call MultiProfile,EWDORIN, EWDORINAP EWDORINRT EWDORIN16M))
 $(eval $(call MultiProfile,OPENMESH,OM2P OM5P MR600 MR900))
 $(eval $(call MultiProfile,GLINET,GLINET6408A GLINET6416A))
 $(eval $(call MultiProfile,TEW652BRP,TEW652BRP_FW TEW652BRP_RECOVERY))
+
+$(eval $(call MultiProfile,QIHOO360,QIHOO36016M QIHOO360FLASH2 QIHOO36032M))
+
 $(eval $(call MultiProfile,TLMR11U,TLMR11UV1 TLMR11UV2))
 $(eval $(call MultiProfile,TLMR3040,TLMR3040V1 TLMR3040V2))
 $(eval $(call MultiProfile,TLMR3220,TLMR3220V1 TLMR3220V2))
diff --git a/target/linux/ar71xx/patches-3.14/419-mtd-seama-add-c301-part-name-check.patch b/target/linux/ar71xx/patches-3.14/419-mtd-seama-add-c301-part-name-check.patch
new file mode 100644
index 0000000..8e51cff
--- /dev/null
+++ b/target/linux/ar71xx/patches-3.14/419-mtd-seama-add-c301-part-name-check.patch
@@ -0,0 +1,14 @@
+--- a/drivers/mtd/mtdsplit/mtdsplit_seama.c
++++ b/drivers/mtd/mtdsplit/mtdsplit_seama.c
+@@ -38,6 +38,11 @@
+   struct mtd_partition *parts;
+   int err;
+
++  if (!strcmp(master->name, "firmware_backup")
++      ) {
++      return -EINVAL;
++  }
++
+   hdr_len = sizeof(hdr);
+   err = mtd_read(master, 0, hdr_len, &retlen, (void *) &hdr);
+   if (err)
-- 
1.9.1
wongsyrone commented 9 years ago

done