Ticket #10741: bcm63xx_hg556a.patch

File bcm63xx_hg556a.patch, 12.7 KB (added by danitool <dgcbueu@…>, 6 years ago)
  • build_dir/linux-brcm63xx/compat-wireless-2011-12-01/drivers/net/wireless/ath/ath9k/init.c

    old new  
    572572        ah->reg_ops.rmw = ath9k_reg_rmw; 
    573573        atomic_set(&ah->intr_ref_cnt, -1); 
    574574        sc->sc_ah = ah; 
    575  
     575        ah->ah_flags |= AH_USE_EEPROM; //HW556 
    576576        if (!pdata) { 
    577577                ah->ah_flags |= AH_USE_EEPROM; 
    578578                sc->sc_ah->led_pin = -1; 
  • build_dir/linux-brcm63xx/linux-2.6.39.4/arch/mips/bcm63xx/boards/board_bcm963xx.c

    old new  
    2020#include <linux/spi/spi.h> 
    2121#include <linux/spi/spi_gpio.h> 
    2222#include <linux/spi/74x164.h> 
     23#include <linux/pci.h> 
     24#include <linux/ath9k_platform.h> 
    2325#include <asm/addrspace.h> 
    2426#include <bcm63xx_board.h> 
    2527#include <bcm63xx_cpu.h> 
     
    3638#include <bcm63xx_dev_spi.h> 
    3739#include <board_bcm963xx.h> 
    3840#include <bcm_tag.h> 
     41#include <pci-ath9k-fixup.h> 
    3942 
    4043#define PFX     "board_bcm963xx: " 
    4144 
     
    19761979        }, 
    19771980}; 
    19781981 
     1982static struct board_info __initdata board_HW556 = { 
     1983        .name                           = "HW556", 
     1984        .expected_cpu_id                = 0x6358, 
     1985 
     1986        .has_uart0                      = 1, 
     1987 
     1988        .has_enet1                      = 1, 
     1989        .has_pci                        = 1, 
     1990 
     1991        .enet1 = { 
     1992                .force_speed_100        = 1, 
     1993                .force_duplex_full      = 1, 
     1994        }, 
     1995 
     1996        .has_ohci0 = 1, 
     1997        .has_ehci0 = 1, 
     1998 
     1999        //TODO Si3050 DAA rstGpioPin=25, rlyGpioPin=14  
     2000 
     2001        .leds = { 
     2002                { 
     2003                        .name           = "message", 
     2004                        .gpio           = 0, 
     2005                        .active_low     = 1, 
     2006                }, 
     2007                { 
     2008                        .name           = "hspa", 
     2009                        .gpio           = 1, 
     2010                        .active_low     = 1, 
     2011                }, 
     2012                { 
     2013                        .name           = "dsl", 
     2014                        .gpio           = 2, 
     2015                        .active_low     = 1, 
     2016                }, 
     2017                { 
     2018                        .name           = "power", 
     2019                        .gpio           = 3, 
     2020                        .active_low     = 1, 
     2021                        .default_trigger = "default-on", 
     2022                }, 
     2023                { 
     2024                        .name           = "all_leds", 
     2025                        .gpio           = 6, 
     2026                        .active_low     = 1, 
     2027                        .default_trigger = "default-on", 
     2028                }, 
     2029        }, 
     2030        .buttons = { 
     2031                { 
     2032                        .desc           = "diagnostic", 
     2033                        .gpio           = 8, 
     2034                        .active_low     = 1, 
     2035                        .type           = EV_KEY, 
     2036                        .code           = BTN_0, 
     2037                        .threshold      = 3, 
     2038                }, 
     2039                { 
     2040                        .desc           = "wifi", 
     2041                        .gpio           = 9, 
     2042                        .active_low     = 1, 
     2043                        .type           = EV_KEY, 
     2044                        .code           = KEY_WPS_BUTTON, 
     2045                        .threshold      = 3, 
     2046                }, 
     2047                { 
     2048                        .desc           = "restart", 
     2049                        .gpio           = 10, 
     2050                        .active_low     = 1, 
     2051                        .type           = EV_KEY, 
     2052                        .code           = BTN_1, 
     2053                        .threshold      = 3, 
     2054                }, 
     2055                { 
     2056                        .desc           = "reset", 
     2057                        .gpio           = 11, 
     2058                        .active_low     = 1, 
     2059                        .type           = EV_KEY, 
     2060                        .code           = KEY_RESTART, 
     2061                        .threshold      = 3, 
     2062                }, 
     2063        }, 
     2064}; 
     2065 
    19792066 /* T-Home Speedport W 303V Typ B */ 
    19802067static struct board_info __initdata board_spw303v = { 
    19812068        .name                   = "96358-502V", 
     
    20882175        &board_nb4_fxc_r1, 
    20892176        &board_nb4_fxc_r2, 
    20902177        &board_HW553, 
     2178        &board_HW556, 
    20912179        &board_spw303v, 
    20922180#endif 
    20932181}; 
     
    23802468        .id             = 0, 
    23812469        .dev.platform_data = &bcm63xx_gpio_buttons_data, 
    23822470}; 
     2471/* 
     2472 * Atheros chipset (AR9223) fixup for the BCM96358 board. 
     2473 */ 
     2474#ifdef CONFIG_PCI 
     2475/*big trouble here, since we have two different ath calibration data offsets 
     2476maybe a good idea to detect the chip ID and choose one with a conditional*/ 
     2477#define BCM96358_ATH_DATA_ADDR  0x1EEFE000 /*MX29GL128EH: chipid=0x00227e, 0x1E000000+0x00EFE000=0x1eefe000*/ 
     2478//#define BCM96358_ATH_DATA_ADDR  0x1EF7E000 /*MX29LV128DB: chipid=0x00227a, 0x1E000000+0x00F7E000=0x1EF7E000*/ 
     2479#define ATH_DATA_CAPS           0x105 /*0x20a>>1*/ 
     2480#define ATH_DATA_REGDOMAIN      0x104 /*0x208>>1*/ 
     2481 
     2482static struct ath9k_platform_data bcm96358gw_ath9k_platform_data = { 
     2483        .led_pin = 2, // firmware original (cat /proc/sys/dev/wifi0/ledpin ) 
     2484}; 
     2485 
     2486void __init bcm96358gw_register_ath9k(unsigned char *mac, u16 regdomain, u16 caps) 
     2487{ 
     2488        int i; 
     2489        u16 *eepdata, sum, el; 
     2490 
     2491        memcpy_fromio( 
     2492                bcm96358gw_ath9k_platform_data.eeprom_data,  
     2493                (void *) KSEG1ADDR(BCM96358_ATH_DATA_ADDR), 
     2494                sizeof(bcm96358gw_ath9k_platform_data.eeprom_data) 
     2495        ); 
     2496        if (regdomain) { 
     2497                bcm96358gw_ath9k_platform_data.eeprom_data[ATH_DATA_REGDOMAIN] = regdomain; 
     2498                printk("changed ath9k regdomain to 0x%x\n", regdomain); 
     2499        } 
     2500        if (caps) { 
     2501                bcm96358gw_ath9k_platform_data.eeprom_data[ATH_DATA_CAPS] = caps; 
     2502                printk("changed ath9k caps to 0x%x\n", caps); 
     2503        } 
     2504        if (regdomain | caps) { 
     2505                // recalc checksum for new regdomain 
     2506                sum = bcm96358gw_ath9k_platform_data.eeprom_data[0x200>>1]; 
     2507                el = sum / sizeof(u16) - 2;  // skip length and (old) checksum  
     2508                eepdata = (u16 *) (&bcm96358gw_ath9k_platform_data.eeprom_data[0x204>>1]); // after checksum 
     2509                for (i = 0; i < el; i++) 
     2510                        sum ^= *eepdata++; 
     2511                sum ^= 0xffff; 
     2512                bcm96358gw_ath9k_platform_data.eeprom_data[0x202>>1] = sum; 
     2513        }        
     2514 
     2515        bcm96358gw_ath9k_platform_data.macaddr = mac;  
     2516        pci_enable_ath9k_fixup(1, bcm96358gw_ath9k_platform_data.eeprom_data); 
     2517} 
     2518 
     2519void bcm96358gw_pci_plat_dev_init(struct pci_dev *dev) 
     2520{ 
     2521        printk(KERN_INFO PFX "Setting device platform data\n"); 
     2522        dev->dev.platform_data = &bcm96358gw_ath9k_platform_data; 
     2523} 
     2524DECLARE_PCI_FIXUP_ENABLE(PCI_VENDOR_ID_ATHEROS, PCI_ANY_ID, bcm96358gw_pci_plat_dev_init); 
     2525#endif 
    23832526 
    23842527/* 
    23852528 * third stage init callback, register all board devices. 
     
    24762619                platform_device_register(&bcm63xx_gpio_buttons_device); 
    24772620        } 
    24782621 
     2622#ifdef CONFIG_PCI 
     2623        if (!strcmp(board.name, "HW556")) { 
     2624                board_get_mac_address(board.enet0.mac_addr); 
     2625                bcm96358gw_register_ath9k(board.enet0.mac_addr, 0xFF, 0); 
     2626        } 
     2627#endif 
     2628 
    24792629        return 0; 
    24802630} 
  • build_dir/linux-brcm63xx/linux-2.6.39.4/arch/mips/bcm63xx/Makefile

    old new  
    11obj-y           += clk.o cpu.o cs.o gpio.o irq.o prom.o setup.o timer.o \ 
    22                   dev-dsp.o dev-enet.o dev-pcmcia.o dev-uart.o dev-wdt.o \ 
    3                    dev-usb-ohci.o dev-usb-ehci.o dev-usb-udc.o dev-spi.o 
     3                   dev-usb-ohci.o dev-usb-ehci.o dev-usb-udc.o dev-spi.o \ 
     4                   pci-ath9k-fixup.o 
    45obj-$(CONFIG_EARLY_PRINTK)      += early_printk.o 
    56 
    67obj-y           += boards/ 
  • new file trunk1/build_dir/linux-brcm63xx/linux-2.6.39.4/arch/mips/bcm63xx/pci-ath9k-fixup.c

    - +  
     1/* 
     2 *  Atheros AP94 reference board PCI initialization 
     3 * 
     4 *  Copyright (C) 2009-2010 Gabor Juhos <juhosg@openwrt.org> 
     5 * 
     6 *  This program is free software; you can redistribute it and/or modify it 
     7 *  under the terms of the GNU General Public License version 2 as published 
     8 *  by the Free Software Foundation. 
     9 */ 
     10 
     11#include <linux/pci.h> 
     12#include <linux/delay.h> 
     13 
     14#include <asm/mach-bcm63xx/bcm63xx_io.h> 
     15 
     16struct ath9k_fixup { 
     17        u16             *cal_data; 
     18        unsigned        slot; 
     19}; 
     20 
     21static int ath9k_num_fixups; 
     22static struct ath9k_fixup ath9k_fixups[2]; 
     23 
     24static void ath9k_pci_fixup(struct pci_dev *dev) 
     25{ 
     26        void __iomem *mem; 
     27        u16 *cal_data = NULL; 
     28        u16 cmd; 
     29        u32 bar0; 
     30        u32 val; 
     31        unsigned i; 
     32 
     33        for (i = 0; i < ath9k_num_fixups; i++) { 
     34                if (ath9k_fixups[i].cal_data == NULL) 
     35                        continue; 
     36 
     37                if (ath9k_fixups[i].slot != PCI_SLOT(dev->devfn)) 
     38                        continue; 
     39 
     40                cal_data = ath9k_fixups[i].cal_data; 
     41                break; 
     42        } 
     43 
     44        if (cal_data == NULL) 
     45                return; 
     46 
     47        if (*cal_data != 0xa55a) { 
     48                pr_err("pci %s: invalid calibration data\n", pci_name(dev)); 
     49                return; 
     50        } 
     51 
     52        pr_info("pci %s: fixup device configuration\n", pci_name(dev)); 
     53 
     54#define ESTIMATED_PCI_MEM_BASE 0x30000000 
     55 
     56        mem = ioremap(ESTIMATED_PCI_MEM_BASE, 0x10000); 
     57        if (!mem) { 
     58                pr_err("pci %s: ioremap error\n", pci_name(dev)); 
     59                return; 
     60        } 
     61 
     62        pci_read_config_dword(dev, PCI_BASE_ADDRESS_0, &bar0); 
     63        pci_write_config_dword(dev, PCI_BASE_ADDRESS_0, ESTIMATED_PCI_MEM_BASE); 
     64        /* pci_write_config_dword(dev, PCI_BASE_ADDRESS_0, 0xffff); */ 
     65        /* pci_write_config_dword(dev, PCI_BASE_ADDRESS_0, 0x1000ffff); */ 
     66 
     67        pci_read_config_word(dev, PCI_COMMAND, &cmd); 
     68        cmd |= PCI_COMMAND_MASTER | PCI_COMMAND_MEMORY; 
     69        pci_write_config_word(dev, PCI_COMMAND, cmd); 
     70 
     71        /* set pointer to first reg address */ 
     72        cal_data += 3; 
     73        while (*cal_data != 0xffff) { 
     74                u32 reg; 
     75                reg = *cal_data++; 
     76                val = *cal_data++; 
     77                val |= (*cal_data++) << 16; 
     78 
     79                pr_info("pci-ath9k-fixup: Writing 0x%08x to register 0x%04x\n", val, reg); 
     80 
     81                val = cpu_to_le32(val); 
     82                __raw_writel(val, mem + reg); 
     83                udelay(100); 
     84        } 
     85 
     86        pci_read_config_dword(dev, PCI_VENDOR_ID, &val); 
     87        dev->vendor = val & 0xffff; 
     88        dev->device = (val >> 16) & 0xffff; 
     89 
     90        pr_info("pci-ath9k-fixup: Device vendor 0x%04x, id 0x%04x\n", dev->vendor, dev->device); 
     91 
     92        pci_read_config_dword(dev, PCI_CLASS_REVISION, &val); 
     93        dev->revision = val & 0xff; 
     94        dev->class = val >> 8; /* upper 3 bytes */ 
     95 
     96        pci_read_config_word(dev, PCI_COMMAND, &cmd); 
     97        cmd &= ~(PCI_COMMAND_MASTER | PCI_COMMAND_MEMORY); 
     98        pci_write_config_word(dev, PCI_COMMAND, cmd); 
     99 
     100        pci_write_config_dword(dev, PCI_BASE_ADDRESS_0, bar0); 
     101 
     102        iounmap(mem); 
     103} 
     104DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_ATHEROS, PCI_ANY_ID, ath9k_pci_fixup); 
     105 
     106void __init pci_enable_ath9k_fixup(unsigned slot, u16 *cal_data) 
     107{ 
     108        if (ath9k_num_fixups >= ARRAY_SIZE(ath9k_fixups)) 
     109                return; 
     110 
     111        ath9k_fixups[ath9k_num_fixups].slot = slot; 
     112        ath9k_fixups[ath9k_num_fixups].cal_data = cal_data; 
     113        ath9k_num_fixups++; 
     114} 
  • build_dir/linux-brcm63xx/linux-2.6.39.4/arch/mips/include/asm/mach-bcm63xx/board_bcm963xx.h

    old new  
    6060        struct gpio_led leds[14]; 
    6161 
    6262        /* Buttons */ 
    63         struct gpio_button buttons[2]; 
     63        struct gpio_button buttons[4]; 
    6464 
    6565        /* Additional platform devices */ 
    6666        struct platform_device **devs; 
  • new file trunk1/build_dir/linux-brcm63xx/linux-2.6.39.4/arch/mips/include/asm/mach-bcm63xx/pci-ath9k-fixup.h

    - +  
     1#ifndef _PCI_ATH9K_FIXUP 
     2#define _PCI_ATH9K_FIXUP 
     3 
     4void pci_enable_ath9k_fixup(unsigned slot, u16 *cal_data) __init; 
     5 
     6#endif /* _PCI_ATH9K_FIXUP */ 
  • build_dir/linux-brcm63xx/linux-2.6.39.4/drivers/mtd/maps/bcm963xx-flash.c

    old new  
    6363        struct mtd_partition *parts; 
    6464        int ret; 
    6565        size_t retlen; 
    66         unsigned int rootfsaddr, kerneladdr, spareaddr; 
    67         unsigned int rootfslen, kernellen, sparelen; 
     66        unsigned int rootfsaddr, kerneladdr, spareaddr, athaddr; 
     67        unsigned int rootfslen, kernellen, sparelen, athlen; 
    6868        int namelen = 0; 
    6969        int i; 
    7070        char *boardid; 
     
    7676                return -ENOMEM; 
    7777 
    7878        /* Get the tag */ 
     79        master->erasesize = 0x20000; //HW556, MX29LV128DB 
    7980        ret = master->read(master, master->erasesize, sizeof(struct bcm_tag), 
    8081                                                        &retlen, (void *)buf); 
    8182        if (retlen != sizeof(struct bcm_tag)) { 
     
    9697        rootfsaddr = kerneladdr + kernellen; 
    9798        rootfslen = roundup(rootfslen, master->erasesize); 
    9899        spareaddr = rootfsaddr + rootfslen; 
    99         sparelen = master->size - spareaddr - master->erasesize; 
     100        sparelen = 0x00E00000 - spareaddr; 
    100101        rootfslen = spareaddr - rootfsaddr; 
     102        athaddr = 0x00E00000; 
     103        athlen = master->size - 0x00E00000 - master->erasesize; 
    101104 
    102105        /* Determine number of partitions */ 
    103106        namelen = 8; 
     
    109112                nrparts++; 
    110113                namelen += 6; 
    111114        }; 
     115        nrparts++; //HW556 
    112116 
     117         
    113118        /* Ask kernel for more memory */ 
    114119        parts = kzalloc(sizeof(*parts) * nrparts + 10 * nrparts, GFP_KERNEL); 
    115120        if (!parts) { 
     
    139144                curpart++; 
    140145        }; 
    141146 
     147        parts[curpart].name = "ath_data"; 
     148        parts[curpart].offset = athaddr;  
     149        parts[curpart].size = athlen;  
     150        curpart++;  
     151 
     152 
    142153        parts[curpart].name = "nvram"; 
    143154        parts[curpart].offset = master->size - master->erasesize; 
    144155        parts[curpart].size = master->erasesize; 
     
    147158        curpart++; 
    148159        parts[curpart].name = "linux"; 
    149160        parts[curpart].offset = parts[0].size; 
    150         parts[curpart].size = master->size - parts[0].size - parts[3].size; 
     161        parts[curpart].size = parts[3].offset - parts[0].size; //Hw556 
    151162 
    152163        for (i = 0; i < nrparts; i++) 
    153164                printk(KERN_INFO PFX "Partition %d is %s offset %lx and " 
  • new file trunk1/target/linux/brcm63xx/base-files/etc/defconfig/HW556/network

    - +  
     1# Copyright (C) 2012 OpenWrt.org 
     2 
     3config interface loopback 
     4        option ifname   lo 
     5        option proto    static 
     6        option ipaddr   127.0.0.1 
     7        option netmask  255.0.0.0 
     8 
     9config interface lan 
     10        option ifname   eth0 
     11        option type     bridge 
     12        option proto    static 
     13        option ipaddr   192.168.1.1 
     14        option netmask  255.255.255.0 
  • target/linux/brcm63xx/image/Makefile

    old new  
    6060                --block-size 0x20000 --image-offset $(4) 
    6161endef 
    6262 
     63 
     64define Image/Build/CFEHW556 
     65        # Generate the tagged image 
     66        $(STAGING_DIR_HOST)/bin/imagetag -i $(KDIR)/vmlinux.lzma.cfe -f $(KDIR)/root.$(1) \ 
     67                --output $(BIN_DIR)/openwrt-$(2)-$(1)-cfe.bin \ 
     68                --boardid $(2) --chipid $(3) --entry $(LOADADDR) \ 
     69                --load-addr $(LOADADDR) --tag-version 8 --rsa-signature "$(5)" \ 
     70                --image-offset $(4) --info1 "$(6)" 
     71endef 
     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) \ 
     
    233243        #HW553 
    234244        $(call Image/Build/CFEHW553,$(1),HW553,6358,0x20000,HW553) 
    235245 
     246        #HW556 
     247        $(call Image/Build/CFEHW556,$(1),HW556,6358,0x20000,EchoLife_HG556a,OpenWRT-$(REVISION)) 
     248 
    236249        # T-Com Speedport W 303V Typ B 
    237250        $(call Image/Build/SPW303V,$(1),96358-502V,6358,SPW303V) 
    238251endef