Ticket #10741: hw556_svn_all.2.patch

File hw556_svn_all.2.patch, 15.4 KB (added by noltari@…, 6 years ago)

Patches v3 (Supports atheros and ralink). Avoids removing caldata on any device.

  • target/linux/brcm63xx/image/Makefile

     
    6060                --block-size 0x20000 --image-offset $(4) 
    6161endef 
    6262 
     63define Image/Build/CFEHW556 
     64        # Generate the tagged image 
     65        $(STAGING_DIR_HOST)/bin/imagetag -i $(KDIR)/vmlinux.lzma.cfe -f $(KDIR)/root.$(1) \ 
     66        --output $(BIN_DIR)/openwrt-$(2)-$(1)-cfe.bin \ 
     67        --boardid $(2) --chipid $(3) --entry $(LOADADDR) \ 
     68        --load-addr $(LOADADDR) --tag-version 8 --rsa-signature "$(5)" \ 
     69        --image-offset $(4) --info1 "$(6)" --block-size 0x20000 
     70endef 
     71 
     72 
    6373define Image/Build/CFEAGPF 
    6474        # Generate the tagged image 
    6575        $(STAGING_DIR_HOST)/bin/imagetag -i $(KDIR)/vmlinux.lzma.cfe -f $(KDIR)/root.$(1) \ 
     
    247257 
    248258        #HW553 
    249259        $(call Image/Build/CFEHW553,$(1),HW553,6358,0x20000,HW553) 
     260        #HW556  
     261        $(call Image/Build/CFEHW556,$(1),HW556,6358,0x20000,EchoLife_HG556a,OpenWRT-$(REVISION))  
    250262 
    251263        # T-Com Speedport W 303V Typ B 
    252264        $(call Image/Build/SPW303V,$(1),96358-502V,6358,SPW303V) 
  • target/linux/brcm63xx/profiles/300-HW556.mk

     
     1# 
     2# Copyright (C) 2009 OpenWrt.org 
     3# 
     4# This is free software, licensed under the GNU General Public License v2. 
     5# See /LICENSE for more information. 
     6# 
     7 
     8define Profile/HW556 
     9  NAME:=HW556 WiFi 
     10  PACKAGES:=kmod-rt2800-pci kmod-ath9k wpad-mini 
     11endef 
     12 
     13define Profile/HW556/Description 
     14        Package set compatible with hardware using Atheros or Ralink WiFi cards (Huawei HG556a) 
     15endef 
     16$(eval $(call Profile,HW556)) 
     17 
  • target/linux/brcm63xx/patches-3.3/903-board_hw556.patch

     
     1--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c 
     2+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c 
     3@@ -2363,6 +2363,90 @@ static struct board_info __initdata boar 
     4        }, 
     5 }; 
     6  
     7+static struct board_info __initdata board_HW556 = { 
     8+       .name                           = "HW556", 
     9+       .expected_cpu_id        = 0x6358, 
     10+ 
     11+       .cfe_len                        = 0x20000, 
     12+       .linux_end                      = 0xE00000, 
     13+ 
     14+       .has_uart0                      = 1, 
     15+       .has_pci                        = 1, 
     16+       .has_ohci0                      = 1, 
     17+       .has_ehci0                      = 1, 
     18+ 
     19+       .has_enet1 = 1, 
     20+       .enet1 = { 
     21+               .force_speed_100        = 1, 
     22+               .force_duplex_full      = 1, 
     23+       }, 
     24+ 
     25+       .leds = { 
     26+               { 
     27+                       .name           = "HW556:red:message",  
     28+                       .gpio           = 0, 
     29+                       .active_low     = 1, 
     30+               }, 
     31+               { 
     32+                       .name           = "HW556:red:hspa",  
     33+                       .gpio           = 1, 
     34+                       .active_low     = 1, 
     35+               }, 
     36+               {  
     37+                       .name           = "HW556:red:dsl",  
     38+                       .gpio           = 2, 
     39+                       .active_low     = 1, 
     40+               }, 
     41+               { 
     42+                       .name           = "HW556:red:power",  
     43+                       .gpio           = 3, 
     44+                       .active_low     = 1, 
     45+                       .default_trigger = "default-on", 
     46+               }, 
     47+               { 
     48+                       .name           = "HW556:red:all",  
     49+                       .gpio           = 6, 
     50+                       .active_low     = 1, 
     51+                       .default_trigger = "default-on",  
     52+               }, 
     53+       }, 
     54+ 
     55+       .buttons = { 
     56+               { 
     57+                       .desc           = "diagnostic", 
     58+                       .gpio           = 8, 
     59+                       .active_low = 1,  
     60+                       .type           = EV_KEY, 
     61+                       .code           = BTN_0, 
     62+                       .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL, 
     63+               }, 
     64+               { 
     65+                       .desc   =        "wlan",  
     66+                       .gpio           = 9,  
     67+                       .active_low = 1,  
     68+                       .type           = EV_KEY,  
     69+                       .code           = KEY_WLAN,  
     70+                       .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,  
     71+               }, 
     72+               { 
     73+                       .desc           = "restart", 
     74+                       .gpio           = 10, 
     75+                       .active_low = 1,  
     76+                       .type           = EV_KEY, 
     77+                       .code           = BTN_1, 
     78+                       .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL, 
     79+               }, 
     80+               { 
     81+                       .desc           = "reset", 
     82+                       .gpio           = 11, 
     83+                       .active_low = 1,  
     84+                       .type           = EV_KEY, 
     85+                       .code           = KEY_RESTART, 
     86+                       .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL, 
     87+               }, 
     88+       }, 
     89+}; 
     90+ 
     91  /* T-Home Speedport W 303V Typ B */ 
     92 static struct board_info __initdata board_spw303v = { 
     93        .name                   = "96358-502V", 
     94@@ -2623,6 +2707,7 @@ static const struct board_info __initdat 
     95        &board_nb4_fxc_r1, 
     96        &board_nb4_fxc_r2, 
     97        &board_HW553, 
     98+       &board_HW556, 
     99        &board_spw303v, 
     100 #endif 
     101  
  • target/linux/brcm63xx/patches-3.3/901-hw556_caldata.patch

     
     1--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c 
     2+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c 
     3@@ -2719,6 +2719,33 @@ static void __init boardid_fixup(u8 *boo 
     4        printk(KERN_INFO "Overriding boardid with '%s'\n", board_name); 
     5 } 
     6  
     7+#define HW556_FLASH_ADDR       0x1e000000 
     8+#define ATH9K_CALDATA_ID       0xa55a0000 
     9+u32 hw556_caldata_offsets[2] = {0xefe000, 0xf7e000}; 
     10+static void __init hw556_caldata_fixup(void) { 
     11+       u32 *flash_addr; 
     12+       int i; 
     13+       char *board_name = (char *) bcm63xx_nvram_get_name(); 
     14+ 
     15+       if (BCMCPU_IS_6358() && !strcmp(board_name, "HW556")) { 
     16+               for(i = 0; i < ARRAY_SIZE(hw556_caldata_offsets); i++) { 
     17+                       flash_addr = (u32 *) KSEG1ADDR(HW556_FLASH_ADDR + hw556_caldata_offsets[i]); 
     18+ 
     19+                       if(*flash_addr == ATH9K_CALDATA_ID) { 
     20+                               printk("HW556: ath9k caldata offset 0x%x\n", hw556_caldata_offsets[i]); 
     21+                               board.has_caldata = 1; 
     22+                               board.caldata[0].slot = 1; 
     23+                               board.caldata[0].caldata_offset = hw556_caldata_offsets[i]; 
     24+                               break; 
     25+                       } 
     26+               } 
     27+ 
     28+               if(!board.has_caldata) { 
     29+                       printk("HW556: Unable to find ath9k caldata.\n"); 
     30+               } 
     31+       } 
     32+} 
     33+ 
     34 /* 
     35  * early init callback, read nvram data from flash and checksum it 
     36  */ 
     37@@ -2801,6 +2828,8 @@ void __init board_prom_init(void) 
     38                return; 
     39        } 
     40  
     41+       hw556_caldata_fixup(); 
     42+ 
     43        /* setup pin multiplexing depending on board enabled device, 
     44         * this has to be done this early since PCI init is done 
     45         * inside arch_initcall */ 
  • target/linux/brcm63xx/patches-3.3/902-hw556_ralink_eeprom.patch

     
     1--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c 
     2+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c 
     3@@ -37,6 +37,7 @@ 
     4 #include <board_bcm963xx.h> 
     5 #include <bcm_tag.h> 
     6 #include <pci_ath9k_fixup.h> 
     7+#include <dev-wifi-rt2x00.h> 
     8  
     9 #define PFX    "board_bcm963xx: " 
     10  
     11@@ -2999,5 +3000,13 @@ int __init board_register_devices(void) 
     12        for (i = 0; i < board.has_caldata; i++) 
     13                pci_enable_ath9k_fixup(board.caldata[i].slot, board.caldata[i].caldata_offset); 
     14  
     15+       /* HW556 Ralink EEPROM */ 
     16+       if(!strncmp(board.name, "HW556", 5) && !board.has_caldata) { 
     17+               u8 mac[ETH_ALEN]; 
     18+               if (!bcm63xx_nvram_get_mac_address(mac)) { 
     19+                       bcm63xx_register_rt2x00("rt3062.bin", mac); 
     20+               } 
     21+       } 
     22+ 
     23        return 0; 
     24 } 
     25--- /dev/null 
     26+++ b/arch/mips/bcm63xx/dev-wifi-rt2x00.c 
     27@@ -0,0 +1,28 @@ 
     28+/* 
     29+ *  Copyright (C) 2011 John Crispin <blogic@openwrt.org> 
     30+ * 
     31+ *  This program is free software; you can redistribute it and/or modify it 
     32+ *  under the terms of the GNU General Public License version 2 as published 
     33+ *  by the Free Software Foundation. 
     34+ */ 
     35+ 
     36+#include <linux/init.h> 
     37+#include <linux/platform_device.h> 
     38+#include <linux/rt2x00_platform.h> 
     39+#include <linux/pci.h> 
     40+ 
     41+#include <dev-wifi-rt2x00.h> 
     42+ 
     43+struct rt2x00_platform_data rt2x00_pdata; 
     44+ 
     45+static void rt2x00_pci_plat_dev_init(struct pci_dev *dev) { 
     46+       dev->dev.platform_data = &rt2x00_pdata; 
     47+} 
     48+ 
     49+DECLARE_PCI_FIXUP_FINAL(0x1814, 0x3592,  rt2x00_pci_plat_dev_init); 
     50+ 
     51+void __init bcm63xx_register_rt2x00(const char *firmware, const u8 *mac) { 
     52+       rt2x00_pdata.eeprom_file_name = kstrdup(firmware, GFP_KERNEL); 
     53+       rt2x00_pdata.mac_address = mac; 
     54+} 
     55+ 
     56--- a/arch/mips/bcm63xx/Makefile 
     57+++ b/arch/mips/bcm63xx/Makefile 
     58@@ -1,7 +1,7 @@ 
     59 obj-y          += clk.o cpu.o cs.o gpio.o irq.o nvram.o prom.o setup.o \ 
     60                   timer.o dev-dsp.o dev-enet.o dev-flash.o dev-hsspi.o \ 
     61                   dev-pcmcia.o dev-rng.o dev-spi.o dev-uart.o dev-usb-ehci.o \ 
     62-                  dev-usb-ohci.o dev-wdt.o pci-ath9k-fixup.o 
     63+                  dev-usb-ohci.o dev-wdt.o pci-ath9k-fixup.o dev-wifi-rt2x00.o 
     64 obj-$(CONFIG_EARLY_PRINTK)     += early_printk.o 
     65  
     66 obj-y          += boards/ 
     67--- /dev/null 
     68+++ b/arch/mips/include/asm/mach-bcm63xx/dev-wifi-rt2x00.h 
     69@@ -0,0 +1,15 @@ 
     70+/* 
     71+ *  Copyright (C) 2011 John Crispin <blogic@openwrt.org> 
     72+ * 
     73+ *  This program is free software; you can redistribute it and/or modify it 
     74+ *  under the terms of the GNU General Public License version 2 as published 
     75+ *  by the Free Software Foundation. 
     76+ */ 
     77+ 
     78+#ifndef _DEV_WIFI_RT2X00_H__ 
     79+#define _DEV_WIFI_RT2X00_H__ 
     80+ 
     81+extern void bcm63xx_register_rt2x00(const char *firmware, const u8 *mac); 
     82+ 
     83+#endif 
     84+ 
  • target/linux/brcm63xx/patches-3.3/900-brcm63xx_cfelen_caldata.patch

     
     1--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c 
     2+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c 
     3@@ -2944,7 +2944,7 @@ int __init board_register_devices(void) 
     4        if (board.num_spis) 
     5                spi_register_board_info(board.spis, board.num_spis); 
     6  
     7-       bcm63xx_flash_register(board.has_caldata, board.caldata); 
     8+       bcm63xx_flash_register(board.has_caldata, board.caldata, board.cfe_len, board.linux_end); 
     9  
     10        /* count number of LEDs defined by this device */ 
     11        while (led_count < ARRAY_SIZE(board.leds) && board.leds[led_count].name) 
     12--- a/arch/mips/bcm63xx/dev-flash.c 
     13+++ b/arch/mips/bcm63xx/dev-flash.c 
     14@@ -135,11 +135,14 @@ static int __init bcm63xx_detect_flash_t 
     15        return 0; 
     16 } 
     17  
     18-int __init bcm63xx_flash_register(int num_caldata, struct ath9k_caldata *caldata) 
     19+int __init bcm63xx_flash_register(int num_caldata, struct ath9k_caldata *caldata, u32 cfe_len, u32 linux_end) 
     20 { 
     21        u32 val; 
     22        unsigned int i; 
     23  
     24+       bcm63xx_parser_data.cfe_len = cfe_len; 
     25+       bcm63xx_parser_data.linux_end = linux_end; 
     26+ 
     27        for (i = 0; i < num_caldata; i++) 
     28                bcm63xx_parser_data.caldata[i] = caldata[i].caldata_offset; 
     29  
     30--- a/arch/mips/include/asm/mach-bcm63xx/bcm63xx_dev_flash.h 
     31+++ b/arch/mips/include/asm/mach-bcm63xx/bcm63xx_dev_flash.h 
     32@@ -11,6 +11,6 @@ enum { 
     33  
     34 extern int bcm63xx_attached_flash; 
     35  
     36-int __init bcm63xx_flash_register(int num_caldata, struct ath9k_caldata *caldata); 
     37+int __init bcm63xx_flash_register(int num_caldata, struct ath9k_caldata *caldata, u32 cfe_len, u32 linux_end); 
     38  
     39 #endif /* __BCM63XX_FLASH_H */ 
     40--- a/arch/mips/include/asm/mach-bcm63xx/board_bcm963xx.h 
     41+++ b/arch/mips/include/asm/mach-bcm63xx/board_bcm963xx.h 
     42@@ -40,6 +40,9 @@ struct board_info { 
     43        unsigned int    has_uart1:1; 
     44        unsigned int    has_caldata:2; 
     45  
     46+       u32             cfe_len; 
     47+       u32             linux_end; 
     48+ 
     49        /* wifi calibration data config */ 
     50        struct ath9k_caldata caldata[2]; 
     51  
     52--- a/drivers/mtd/bcm63xxpart.c 
     53+++ b/drivers/mtd/bcm63xxpart.c 
     54@@ -92,7 +92,12 @@ static int bcm63xx_parse_cfe_partitions( 
     55        cfe_erasesize = max_t(uint32_t, master->erasesize, 
     56                              BCM63XX_CFE_BLOCK_SIZE); 
     57  
     58-       cfelen = cfe_erasesize; 
     59+       if(data->cfe_len) { 
     60+               cfelen = data->cfe_len; 
     61+       } 
     62+       else { 
     63+               cfelen = cfe_erasesize; 
     64+       } 
     65        nvramlen = bcm63xx_nvram_get_psi_size() * 1024; 
     66        nvramlen = roundup(nvramlen, cfe_erasesize); 
     67  
     68@@ -163,7 +168,13 @@ static int bcm63xx_parse_cfe_partitions( 
     69                rootfsaddr = 0; 
     70                spareaddr = cfelen; 
     71        } 
     72-       sparelen = master->size - spareaddr - nvramlen - caldatalen1 - caldatalen2; 
     73+ 
     74+       if(data->linux_end) { 
     75+               sparelen = data->linux_end - spareaddr; 
     76+       } 
     77+       else { 
     78+               sparelen = master->size - spareaddr - nvramlen - caldatalen1 - caldatalen2; 
     79+       } 
     80  
     81        /* Determine number of partitions */ 
     82        if (rootfslen > 0) 
     83@@ -215,21 +226,29 @@ static int bcm63xx_parse_cfe_partitions( 
     84                curpart++; 
     85        } 
     86  
     87-       if (caldatalen1 > 0) { 
     88-               if (caldatalen2 > 0) 
     89-                       parts[curpart].name = "cal_data1"; 
     90-               else 
     91-                       parts[curpart].name = "cal_data"; 
     92-               parts[curpart].offset = caldataaddr1; 
     93-               parts[curpart].size = caldatalen1; 
     94+       if(data->linux_end) { 
     95+               parts[curpart].name = "cal_data"; 
     96+               parts[curpart].offset = data->linux_end; 
     97+               parts[curpart].size = master->size - nvramlen - parts[curpart].offset; 
     98                curpart++; 
     99        } 
     100+       else { 
     101+               if (caldatalen1 > 0) { 
     102+                       if (caldatalen2 > 0) 
     103+                               parts[curpart].name = "cal_data1"; 
     104+                       else 
     105+                               parts[curpart].name = "cal_data"; 
     106+                       parts[curpart].offset = caldataaddr1; 
     107+                       parts[curpart].size = caldatalen1; 
     108+                       curpart++; 
     109+               } 
     110  
     111-       if (caldatalen2 > 0) { 
     112-               parts[curpart].name = "cal_data2"; 
     113-               parts[curpart].offset = caldataaddr2; 
     114-               parts[curpart].size = caldatalen2; 
     115-               curpart++; 
     116+               if (caldatalen2 > 0) { 
     117+                       parts[curpart].name = "cal_data2"; 
     118+                       parts[curpart].offset = caldataaddr2; 
     119+                       parts[curpart].size = caldatalen2; 
     120+                       curpart++; 
     121+               } 
     122        } 
     123  
     124        parts[curpart].name = "nvram"; 
     125@@ -240,8 +259,13 @@ static int bcm63xx_parse_cfe_partitions( 
     126        /* Global partition "linux" to make easy firmware upgrade */ 
     127        parts[curpart].name = "linux"; 
     128        parts[curpart].offset = cfelen; 
     129-       parts[curpart].size = master->size - cfelen - nvramlen 
     130-                             - caldatalen1 - caldatalen2; 
     131+       if(data->linux_end) { 
     132+               parts[curpart].size = data->linux_end - parts[curpart].offset; 
     133+       } 
     134+       else { 
     135+               parts[curpart].size = master->size - cfelen - nvramlen 
     136+                         - caldatalen1 - caldatalen2; 
     137+       } 
     138  
     139        for (i = 0; i < nrparts; i++) 
     140                pr_info("Partition %d is %s offset %llx and length %llx\n", i, 
     141--- a/include/linux/mtd/partitions.h 
     142+++ b/include/linux/mtd/partitions.h 
     143@@ -64,6 +64,8 @@ struct device_node; 
     144 struct mtd_part_parser_data { 
     145        unsigned long origin; 
     146        unsigned long caldata[2]; 
     147+       u32 cfe_len; 
     148+       u32 linux_end; 
     149        struct device_node *of_node; 
     150 }; 
     151  
  • target/linux/brcm63xx/patches-3.3/428-BCM63XX-add-a-fixup-for-ath9k-devices.patch

     
    2424 obj-y          += boards/ 
    2525--- /dev/null 
    2626+++ b/arch/mips/bcm63xx/pci-ath9k-fixup.c 
    27 @@ -0,0 +1,190 @@ 
     27@@ -0,0 +1,191 @@ 
    2828+/* 
    2929+ *  Broadcom BCM63XX Ath9k EEPROM fixup helper. 
    3030+ * 
     
    205205+               return; 
    206206+ 
    207207+       ath9k_fixups[ath9k_num_fixups].slot = slot; 
     208+       ath9k_fixups[ath9k_num_fixups].pdata.endian_check = 1; 
    208209+ 
    209210+       if (!bcm63xx_read_eeprom(ath9k_fixups[ath9k_num_fixups].pdata.eeprom_data, offset)) 
    210211+               return; 
  • target/linux/brcm63xx/base-files/lib/brcm63xx.sh

     
    4141                brcm63xx_has_reset_button="true" 
    4242                ifname=eth1 
    4343                ;; 
     44        HW556) 
     45                status_led="power" 
     46                brcm63xx_has_reset_button="true" 
     47                ifname=eth0 
     48                ;; 
    4449        96348GW-11) 
    4550                status_led="power" 
    4651                brcm63xx_has_reset_button="true" 
  • target/linux/brcm63xx/base-files/etc/uci-defaults/network

     
    2121AW4339U |\ 
    2222CPVA642 |\ 
    2323CT536_CT5621 |\ 
     24HW556 |\ 
    2425D-4P-W |\ 
    2526SPW303V |\ 
    2627SPW500V |\