Closed wongsyrone closed 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
done