Changeset 35632


Ignore:
Timestamp:
2013-02-16T21:28:24+01:00 (5 years ago)
Author:
hauke
Message:

brcm47xx: add initial support for kernel 3.8

This contains the following new bigger changes:

  • new partition parser which still could lake some features or have bugs
  • new nand flash driver
  • using physmap-flash flash driver for parallel flash
  • some changes to the serial flash driver

With these changes OpenWrt starts using more of the mainline flash drivers.

Location:
trunk/target/linux
Files:
17 added
18 deleted
22 edited
2 copied

Legend:

Unmodified
Added
Removed
  • trunk/target/linux/brcm47xx/config-3.8

    r35631 r35632  
    2626CONFIG_CC_OPTIMIZE_FOR_SIZE=y 
    2727CONFIG_CEVT_R4K=y 
    28 CONFIG_CEVT_R4K_LIB=y 
    29 CONFIG_CFE=y 
    30 CONFIG_CMDLINE="root=/dev/mtdblock2 rootfstype=squashfs,jffs2 noinitrd console=ttyS0,115200" 
     28CONFIG_CMDLINE="noinitrd console=ttyS0,115200" 
    3129CONFIG_CMDLINE_BOOL=y 
    3230# CONFIG_CMDLINE_OVERRIDE is not set 
     31CONFIG_CPU_GENERIC_DUMP_TLB=y 
    3332CONFIG_CPU_HAS_PREFETCH=y 
    3433CONFIG_CPU_HAS_SYNC=y 
     
    3837# CONFIG_CPU_MIPS32_R2 is not set 
    3938CONFIG_CPU_MIPSR1=y 
     39CONFIG_CPU_R4K_CACHE_TLB=y 
     40CONFIG_CPU_R4K_FPU=y 
    4041CONFIG_CPU_SUPPORTS_32BIT_KERNEL=y 
    4142CONFIG_CPU_SUPPORTS_HIGHMEM=y 
    4243CONFIG_CSRC_R4K=y 
    43 CONFIG_CSRC_R4K_LIB=y 
    4444CONFIG_DECOMPRESS_LZMA=y 
    4545CONFIG_DMA_NONCOHERENT=y 
     46CONFIG_FW_CFE=y 
    4647CONFIG_GENERIC_ATOMIC64=y 
    4748CONFIG_GENERIC_CLOCKEVENTS=y 
     
    6162CONFIG_HAVE_ARCH_JUMP_LABEL=y 
    6263CONFIG_HAVE_ARCH_KGDB=y 
     64CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE=y 
    6365CONFIG_HAVE_C_RECORDMCOUNT=y 
     66CONFIG_HAVE_DEBUG_KMEMLEAK=y 
    6467CONFIG_HAVE_DMA_API_DEBUG=y 
    6568CONFIG_HAVE_DMA_ATTRS=y 
     
    7578CONFIG_HAVE_MEMBLOCK=y 
    7679CONFIG_HAVE_MEMBLOCK_NODE_MAP=y 
     80CONFIG_HAVE_MOD_ARCH_SPECIFIC=y 
     81CONFIG_HAVE_NET_DSA=y 
    7782CONFIG_HAVE_OPROFILE=y 
    7883CONFIG_HAVE_PERF_EVENTS=y 
     
    8994CONFIG_MDIO_BOARDINFO=y 
    9095CONFIG_MIPS=y 
     96# CONFIG_MIPS_HUGE_TLB_SUPPORT is not set 
    9197CONFIG_MIPS_L1_CACHE_SHIFT=5 
    9298# CONFIG_MIPS_MACHINE is not set 
    9399CONFIG_MIPS_MT_DISABLED=y 
     100# CONFIG_MIPS_SEAD3 is not set 
     101CONFIG_MODULES_USE_ELF_REL=y 
     102CONFIG_MTD_BCM47XXSFLASH=y 
    94103CONFIG_MTD_BCM47XX_PARTS=y 
    95 CONFIG_MTD_BCM47XX_PFLASH=y 
    96 CONFIG_MTD_BCM47XX_SFLASH=y 
    97104CONFIG_MTD_NAND=y 
    98 CONFIG_MTD_NAND_BCM47XX=y 
     105CONFIG_MTD_NAND_BCM47XXNFLASH=y 
    99106CONFIG_MTD_NAND_ECC=y 
     107CONFIG_MTD_PHYSMAP=y 
    100108# CONFIG_MTD_SM_COMMON is not set 
    101109CONFIG_NEED_DMA_MAP_STATE=y 
     
    107115CONFIG_PCI_DISABLE_COMMON_QUIRKS=y 
    108116CONFIG_PCI_DOMAINS=y 
     117CONFIG_PERCPU_RWSEM=y 
    109118CONFIG_PERF_USE_VMALLOC=y 
    110119CONFIG_PHYLIB=y 
     
    138147CONFIG_SYS_SUPPORTS_ARBIT_HZ=y 
    139148CONFIG_SYS_SUPPORTS_LITTLE_ENDIAN=y 
     149CONFIG_TICK_CPU_ACCOUNTING=y 
     150CONFIG_UIDGID_CONVERTED=y 
    140151CONFIG_USB_ARCH_HAS_XHCI=y 
    141152# CONFIG_USB_HCD_BCMA is not set 
  • trunk/target/linux/brcm47xx/patches-3.8/052-mtd-add-serial-flash-driver.patch

    r34252 r35632  
    1 --- a/drivers/mtd/maps/Kconfig 
    2 +++ b/drivers/mtd/maps/Kconfig 
    3 @@ -258,6 +258,15 @@ config MTD_BCM47XX_PFLASH 
    4         help 
    5           Support for bcm47xx parallel flash 
    6   
    7 +config MTD_BCM47XX_SFLASH 
    8 +       tristate "bcm47xx serial flash support" 
    9 +       default y 
    10 +       depends on BCM47XX 
    11 +       select MTD_PARTITIONS 
    12 +       select MTD_BCM47XX_PARTS 
    13 +       help 
    14 +         Support for bcm47xx parallel flash 
    15 + 
    16  config MTD_DILNETPC 
    17         tristate "CFI Flash device mapped on DIL/Net PC" 
    18         depends on X86 && MTD_CFI_INTELEXT && BROKEN 
    19 --- a/drivers/mtd/maps/Makefile 
    20 +++ b/drivers/mtd/maps/Makefile 
    21 @@ -58,3 +58,4 @@ obj-$(CONFIG_MTD_GPIO_ADDR)   += gpio-addr 
    22  obj-$(CONFIG_MTD_LATCH_ADDR)   += latch-addr-flash.o 
    23  obj-$(CONFIG_MTD_LANTIQ)       += lantiq-flash.o 
    24  obj-$(CONFIG_MTD_BCM47XX_PFLASH)+= bcm47xx-pflash.o 
    25 +obj-$(CONFIG_MTD_BCM47XX_SFLASH)+= bcm47xx-sflash.o 
    26 --- /dev/null 
    27 +++ b/drivers/mtd/maps/bcm47xx-sflash.c 
    28 @@ -0,0 +1,270 @@ 
     1--- a/drivers/mtd/devices/bcm47xxsflash.c 
     2+++ b/drivers/mtd/devices/bcm47xxsflash.c 
     3@@ -1,47 +1,153 @@ 
     4-#include <linux/kernel.h> 
    295+/* 
    306+ * Broadcom SiliconBackplane chipcommon serial flash interface 
     
    3713+ */ 
    3814+ 
    39 +#define pr_fmt(fmt) "bcm47xx_sflash: " fmt 
    40 +#include <linux/module.h> 
    41 +#include <linux/slab.h> 
     15+#define pr_fmt(fmt) "bcm47xxsflash: " fmt 
     16 #include <linux/module.h> 
     17 #include <linux/slab.h> 
    4218+#include <linux/ioport.h> 
    4319+#include <linux/sched.h> 
    44 +#include <linux/mtd/mtd.h> 
     20 #include <linux/mtd/mtd.h> 
    4521+#include <linux/mtd/map.h> 
    4622+#include <linux/mtd/partitions.h> 
    4723+#include <linux/errno.h> 
    4824+#include <linux/delay.h> 
    49 +#include <linux/platform_device.h> 
    50 +#include <linux/mtd/bcm47xx_sflash.h> 
    51 + 
     25 #include <linux/platform_device.h> 
     26-#include <linux/bcma/bcma.h> 
     27- 
     28-#include "bcm47xxsflash.h" 
     29+#include <linux/mtd/bcm47xxsflash.h> 
     30  
     31 MODULE_LICENSE("GPL"); 
     32-MODULE_DESCRIPTION("Serial flash driver for BCMA bus"); 
     33+MODULE_DESCRIPTION("BCM47XX serial flash driver"); 
     34  
     35 static const char *probes[] = { "bcm47xxpart", NULL }; 
     36  
    5237+static int 
    53 +sflash_mtd_poll(struct bcm47xx_sflash *sflash, unsigned int offset, int timeout) 
     38+sflash_mtd_poll(struct bcm47xxsflash *sflash, unsigned int offset, int timeout) 
    5439+{ 
    5540+       unsigned long now = jiffies; 
     
    7156+} 
    7257+ 
    73 +static int 
    74 +sflash_mtd_read(struct mtd_info *mtd, loff_t from, size_t len, size_t *retlen, u_char *buf) 
    75 +{ 
    76 +       struct bcm47xx_sflash *sflash = (struct bcm47xx_sflash *)mtd->priv; 
    77 + 
    78 +       /* Check address range */ 
     58 static int bcm47xxsflash_read(struct mtd_info *mtd, loff_t from, size_t len, 
     59                              size_t *retlen, u_char *buf) 
     60 { 
     61-       struct bcm47xxsflash *b47s = mtd->priv; 
     62+       struct bcm47xxsflash *sflash = (struct bcm47xxsflash *)mtd->priv; 
     63  
     64        /* Check address range */ 
    7965+       if (!len) 
    8066+               return 0; 
    8167+ 
    82 +       if ((from + len) > mtd->size) 
    83 +               return -EINVAL; 
    84 + 
    85 +       *retlen = 0; 
    86 +       while (len) { 
    87 +               int ret = sflash->read(sflash, from, len, buf); 
    88 +               if (ret < 0) 
    89 +                       return ret; 
    90 + 
    91 +               from += (loff_t) ret; 
    92 +               len -= ret; 
    93 +               buf += ret; 
    94 +               *retlen += ret; 
    95 +       } 
    96 + 
    97 +       return 0; 
    98 +} 
    99 + 
     68        if ((from + len) > mtd->size) 
     69                return -EINVAL; 
     70  
     71-       memcpy_fromio(buf, (void __iomem *)KSEG0ADDR(b47s->window + from), 
     72+       memcpy_fromio(buf, (void __iomem *)KSEG0ADDR(sflash->window + from), 
     73                      len); 
     74        *retlen = len; 
     75  
     76        return len; 
     77 } 
     78  
     79-static void bcm47xxsflash_fill_mtd(struct bcm47xxsflash *b47s) 
    10080+static int 
    10181+sflash_mtd_write(struct mtd_info *mtd, loff_t to, size_t len, size_t *retlen, const u_char *buf) 
    102 +{ 
     82 { 
     83-       struct mtd_info *mtd = &b47s->mtd; 
    10384+       int bytes; 
    10485+       int ret; 
    105 +       struct bcm47xx_sflash *sflash = (struct bcm47xx_sflash *)mtd->priv; 
    106 + 
     86+       struct bcm47xxsflash *sflash = (struct bcm47xxsflash *)mtd->priv; 
     87  
     88-       mtd->priv = b47s; 
     89-       mtd->name = "bcm47xxsflash"; 
     90-       mtd->owner = THIS_MODULE; 
     91-       mtd->type = MTD_ROM; 
     92-       mtd->size = b47s->size; 
     93-       mtd->_read = bcm47xxsflash_read; 
    10794+       /* Check address range */ 
    10895+       if (!len) 
     
    129116+               *retlen += bytes; 
    130117+       } 
    131 + 
     118  
     119-       /* TODO: implement writing support and verify/change following code */ 
     120-       mtd->flags = MTD_CAP_ROM; 
     121-       mtd->writebufsize = mtd->writesize = 1; 
    132122+       return 0; 
    133123+} 
     
    136126+sflash_mtd_erase(struct mtd_info *mtd, struct erase_info *erase) 
    137127+{ 
    138 +       struct bcm47xx_sflash *sflash = (struct bcm47xx_sflash *) mtd->priv; 
     128+       struct bcm47xxsflash *sflash = (struct bcm47xxsflash *) mtd->priv; 
    139129+       int i, j, ret = 0; 
    140130+       unsigned int addr, len; 
     
    180170+ 
    181171+       return ret; 
    182 +} 
    183 + 
    184 +static const char *probes[] = { "bcm47xx", NULL }; 
    185 + 
    186 +static int bcm47xx_sflash_probe(struct platform_device *pdev) 
    187 +{ 
    188 +       struct bcm47xx_sflash *sflash = dev_get_platdata(&pdev->dev); 
     172 } 
     173  
     174 /************************************************** 
     175@@ -50,53 +156,94 @@ static void bcm47xxsflash_fill_mtd(struc 
     176  
     177 static int bcm47xxsflash_bcma_probe(struct platform_device *pdev) 
     178 { 
     179-       struct bcma_sflash *sflash = dev_get_platdata(&pdev->dev); 
     180-       struct bcm47xxsflash *b47s; 
     181-       int err; 
     182+       struct bcm47xxsflash *sflash = dev_get_platdata(&pdev->dev); 
    189183+       struct mtd_info *mtd; 
    190184+       struct mtd_erase_region_info *eraseregions; 
     
    196190+               goto err_out; 
    197191+       } 
    198 + 
     192  
     193-       b47s = kzalloc(sizeof(*b47s), GFP_KERNEL); 
     194-       if (!b47s) { 
     195-               err = -ENOMEM; 
     196-               goto out; 
     197-       } 
     198-       sflash->priv = b47s; 
     199- 
     200-       b47s->window = sflash->window; 
     201-       b47s->blocksize = sflash->blocksize; 
     202-       b47s->numblocks = sflash->numblocks; 
     203-       b47s->size = sflash->size; 
     204-       bcm47xxsflash_fill_mtd(b47s); 
     205- 
     206-       err = mtd_device_parse_register(&b47s->mtd, probes, NULL, NULL, 0); 
     207-       if (err) { 
     208-               pr_err("Failed to register MTD device: %d\n", err); 
     209-               goto err_dev_reg; 
    199210+       eraseregions = kzalloc(sizeof(struct mtd_erase_region_info), GFP_KERNEL); 
    200211+       if (!eraseregions) { 
    201212+               ret =  -ENOMEM; 
    202213+               goto err_free_mtd; 
    203 +       } 
    204 + 
     214        } 
     215  
    205216+       pr_info("found serial flash: blocksize=%dKB, numblocks=%d, size=%dKB\n", 
    206217+               sflash->blocksize / 1024, sflash->numblocks, sflash->size / 1024); 
     
    221232+       mtd->eraseregions = eraseregions; 
    222233+       mtd->_erase = sflash_mtd_erase; 
    223 +       mtd->_read = sflash_mtd_read; 
     234+       mtd->_read = bcm47xxsflash_read; 
    224235+       mtd->_write = sflash_mtd_write; 
    225236+       mtd->writesize = 1; 
     
    238249+               goto err_free_eraseregions; 
    239250+       } 
    240 +       return 0; 
    241 + 
     251        return 0; 
     252  
     253-err_dev_reg: 
     254-       kfree(&b47s->mtd); 
     255-out: 
     256-       return err; 
    242257+err_free_eraseregions: 
    243258+       kfree(eraseregions); 
     
    246261+err_out: 
    247262+       return ret; 
    248 +} 
    249 + 
    250 +static int __devexit bcm47xx_sflash_remove(struct platform_device *pdev) 
    251 +{ 
     263 } 
     264  
     265 static int bcm47xxsflash_bcma_remove(struct platform_device *pdev) 
     266 { 
     267-       struct bcma_sflash *sflash = dev_get_platdata(&pdev->dev); 
     268-       struct bcm47xxsflash *b47s = sflash->priv; 
     269- 
     270-       mtd_device_unregister(&b47s->mtd); 
     271-       kfree(b47s); 
    252272+       struct mtd_info *mtd = dev_get_drvdata(&pdev->dev); 
    253 + 
     273  
    254274+       if (mtd) { 
    255275+               mtd_device_unregister(mtd); 
     
    259279+               dev_set_drvdata(&pdev->dev, NULL); 
    260280+       } 
    261 +       return 0; 
    262 +} 
    263 + 
    264 +static const struct platform_device_id bcm47xx_sflash_table[] = { 
     281        return 0; 
     282 } 
     283  
     284+static const struct platform_device_id bcm47xxsflash_table[] = { 
    265285+       { "bcm47xx-sflash", 0 }, 
    266286+       { } 
    267287+}; 
    268 +MODULE_DEVICE_TABLE(platform, bcm47xx_sflash_table); 
    269 + 
    270 +static struct platform_driver bcm47xx_sflash_driver = { 
    271 +       .id_table       = bcm47xx_sflash_table, 
    272 +       .probe  = bcm47xx_sflash_probe, 
    273 +       .remove = __devexit_p(bcm47xx_sflash_remove), 
    274 +       .driver = { 
     288+MODULE_DEVICE_TABLE(platform, bcm47xxsflash_table); 
     289+ 
     290 static struct platform_driver bcma_sflash_driver = { 
     291+       .id_table       = bcm47xxsflash_table, 
     292        .probe  = bcm47xxsflash_bcma_probe, 
     293        .remove = bcm47xxsflash_bcma_remove, 
     294        .driver = { 
     295-               .name = "bcma_sflash", 
    275296+               .name = "bcm47xx-sflash", 
    276 +               .owner = THIS_MODULE, 
    277 +       }, 
    278 +}; 
    279 + 
    280 +static int __init init_bcm47xx_sflash(void) 
    281 +{ 
    282 +       int ret = platform_driver_register(&bcm47xx_sflash_driver); 
    283 + 
    284 +       if (ret) 
    285 +               pr_err("error registering platform driver: %i\n", ret); 
    286 +       return ret; 
    287 +} 
    288 + 
    289 +static void __exit exit_bcm47xx_sflash(void) 
    290 +{ 
    291 +       platform_driver_unregister(&bcm47xx_sflash_driver); 
    292 +} 
    293 + 
    294 +module_init(init_bcm47xx_sflash); 
    295 +module_exit(exit_bcm47xx_sflash); 
    296 + 
    297 +MODULE_LICENSE("GPL"); 
    298 +MODULE_DESCRIPTION("BCM47XX serial flash driver"); 
     297                .owner = THIS_MODULE, 
     298        }, 
     299 }; 
     300@@ -111,8 +258,7 @@ static int __init bcm47xxsflash_init(voi 
     301  
     302        err = platform_driver_register(&bcma_sflash_driver); 
     303        if (err) 
     304-               pr_err("Failed to register BCMA serial flash driver: %d\n", 
     305-                      err); 
     306+               pr_err("error registering platform driver: %i\n", err); 
     307  
     308        return err; 
     309 } 
    299310--- /dev/null 
    300 +++ b/include/linux/mtd/bcm47xx_sflash.h 
    301 @@ -0,0 +1,34 @@ 
     311+++ b/include/linux/mtd/bcm47xxsflash.h 
     312@@ -0,0 +1,33 @@ 
    302313+#ifndef LINUX_MTD_BCM47XX_SFLASH_H_ 
    303314+#define LINUX_MTD_BCM47XX_SFLASH_H_ 
     
    305316+#include <linux/mtd/mtd.h> 
    306317+ 
    307 +enum bcm47xx_sflash_type { 
     318+enum bcm47xxsflash_type { 
    308319+       BCM47XX_SFLASH_SSB, 
    309320+       BCM47XX_SFLASH_BCMA, 
     
    313324+struct bcma_drv_cc; 
    314325+ 
    315 +struct bcm47xx_sflash { 
    316 +       enum bcm47xx_sflash_type type; 
     326+struct bcm47xxsflash { 
     327+       enum bcm47xxsflash_type type; 
    317328+       union { 
    318329+               struct ssb_chipcommon *scc; 
     
    326337+       u32 size; 
    327338+ 
    328 +       int (*read)(struct bcm47xx_sflash *dev, u32 offset, u32 len, u8 *buf); 
    329 +       int (*poll)(struct bcm47xx_sflash *dev, u32 offset); 
    330 +       int (*write)(struct bcm47xx_sflash *dev, u32 offset, u32 len, const u8 *buf); 
    331 +       int (*erase)(struct bcm47xx_sflash *dev, u32 offset); 
     339+       int (*poll)(struct bcm47xxsflash *dev, u32 offset); 
     340+       int (*write)(struct bcm47xxsflash *dev, u32 offset, u32 len, const u8 *buf); 
     341+       int (*erase)(struct bcm47xxsflash *dev, u32 offset); 
    332342+ 
    333343+       struct mtd_info *mtd; 
  • trunk/target/linux/brcm47xx/patches-3.8/060-ssb-add-serial-flash-driver.patch

    r35080 r35632  
    1212--- a/drivers/ssb/driver_chipcommon_sflash.c 
    1313+++ b/drivers/ssb/driver_chipcommon_sflash.c 
    14 @@ -1,18 +1,395 @@ 
     14@@ -1,14 +1,35 @@ 
    1515 /* 
    1616  * Sonics Silicon Backplane 
     
    3030 #include "ssb_private.h" 
    3131  
    32 -/* Initialize serial flash access */ 
    33 -int ssb_sflash_init(struct ssb_chipcommon *cc) 
    3432+#define NUM_RETRIES    3 
    3533+ 
     
    4745+}; 
    4846+ 
    49 +struct ssb_sflash_tbl_e { 
    50 +       char *name; 
    51 +       u32 id; 
    52 +       u32 blocksize; 
    53 +       u16 numblocks; 
    54 +}; 
    55 + 
     47 struct ssb_sflash_tbl_e { 
     48        char *name; 
     49        u32 id; 
     50@@ -16,7 +37,7 @@ struct ssb_sflash_tbl_e { 
     51        u16 numblocks; 
     52 }; 
     53  
     54-static struct ssb_sflash_tbl_e ssb_sflash_st_tbl[] = { 
    5655+static const struct ssb_sflash_tbl_e ssb_sflash_st_tbl[] = { 
    57 +       { "M25P20", 0x11, 0x10000, 4, }, 
    58 +       { "M25P40", 0x12, 0x10000, 8, }, 
    59 + 
    60 +       { "M25P16", 0x14, 0x10000, 32, }, 
    61 +       { "M25P32", 0x14, 0x10000, 64, }, 
    62 +       { "M25P64", 0x16, 0x10000, 128, }, 
    63 +       { "M25FL128", 0x17, 0x10000, 256, }, 
    64 +       { 0 }, 
    65 +}; 
    66 + 
     56        { "M25P20", 0x11, 0x10000, 4, }, 
     57        { "M25P40", 0x12, 0x10000, 8, }, 
     58  
     59@@ -27,7 +48,7 @@ static struct ssb_sflash_tbl_e ssb_sflas 
     60        { 0 }, 
     61 }; 
     62  
     63-static struct ssb_sflash_tbl_e ssb_sflash_sst_tbl[] = { 
    6764+static const struct ssb_sflash_tbl_e ssb_sflash_sst_tbl[] = { 
    68 +       { "SST25WF512", 1, 0x1000, 16, }, 
    69 +       { "SST25VF512", 0x48, 0x1000, 16, }, 
    70 +       { "SST25WF010", 2, 0x1000, 32, }, 
    71 +       { "SST25VF010", 0x49, 0x1000, 32, }, 
    72 +       { "SST25WF020", 3, 0x1000, 64, }, 
    73 +       { "SST25VF020", 0x43, 0x1000, 64, }, 
    74 +       { "SST25WF040", 4, 0x1000, 128, }, 
    75 +       { "SST25VF040", 0x44, 0x1000, 128, }, 
    76 +       { "SST25VF040B", 0x8d, 0x1000, 128, }, 
    77 +       { "SST25WF080", 5, 0x1000, 256, }, 
    78 +       { "SST25VF080B", 0x8e, 0x1000, 256, }, 
    79 +       { "SST25VF016", 0x41, 0x1000, 512, }, 
    80 +       { "SST25VF032", 0x4a, 0x1000, 1024, }, 
    81 +       { "SST25VF064", 0x4b, 0x1000, 2048, }, 
    82 +       { 0 }, 
    83 +}; 
    84 + 
     65        { "SST25WF512", 1, 0x1000, 16, }, 
     66        { "SST25VF512", 0x48, 0x1000, 16, }, 
     67        { "SST25WF010", 2, 0x1000, 32, }, 
     68@@ -45,7 +66,7 @@ static struct ssb_sflash_tbl_e ssb_sflas 
     69        { 0 }, 
     70 }; 
     71  
     72-static struct ssb_sflash_tbl_e ssb_sflash_at_tbl[] = { 
    8573+static const struct ssb_sflash_tbl_e ssb_sflash_at_tbl[] = { 
    86 +       { "AT45DB011", 0xc, 256, 512, }, 
    87 +       { "AT45DB021", 0x14, 256, 1024, }, 
    88 +       { "AT45DB041", 0x1c, 256, 2048, }, 
    89 +       { "AT45DB081", 0x24, 256, 4096, }, 
    90 +       { "AT45DB161", 0x2c, 512, 4096, }, 
    91 +       { "AT45DB321", 0x34, 512, 8192, }, 
    92 +       { "AT45DB642", 0x3c, 1024, 8192, }, 
    93 +       { 0 }, 
    94 +}; 
    95 + 
    96 +static void ssb_sflash_cmd(struct ssb_chipcommon *chipco, u32 opcode) 
    97 +{ 
    98 +       int i; 
    99 +       chipco_write32(chipco, SSB_CHIPCO_FLASHCTL, 
    100 +                       SSB_CHIPCO_FLASHCTL_START | opcode); 
    101 +       for (i = 0; i < 1000; i++) { 
    102 +               if (!(chipco_read32(chipco, SSB_CHIPCO_FLASHCTL) & 
    103 +                     SSB_CHIPCO_FLASHCTL_BUSY)) 
    104 +                       return; 
    105 +               cpu_relax(); 
    106 +       } 
    107 +       pr_err("SFLASH control command failed (timeout)!\n"); 
    108 +} 
    109 + 
     74        { "AT45DB011", 0xc, 256, 512, }, 
     75        { "AT45DB021", 0x14, 256, 1024, }, 
     76        { "AT45DB041", 0x1c, 256, 2048, }, 
     77@@ -70,10 +91,186 @@ static void ssb_sflash_cmd(struct ssb_ch 
     78        pr_err("SFLASH control command failed (timeout)!\n"); 
     79 } 
     80  
    11081+static void ssb_sflash_write_u8(struct ssb_chipcommon *chipco, u32 offset, u8 byte) 
    11182+{ 
     
    11485+} 
    11586+ 
    116 +/* Read len bytes starting at offset into buf. Returns number of bytes read. */ 
    117 +static int ssb_sflash_read(struct bcm47xx_sflash *dev, u32 offset, u32 len, u8 *buf) 
    118 +{ 
    119 +       u8 *from, *to; 
    120 +       u32 cnt, i; 
    121 +       struct ssb_chipcommon *chipco = dev->scc; 
    122 + 
    123 +       if (!len) 
    124 +               return 0; 
    125 + 
    126 +       if ((offset + len) > chipco->sflash.size) 
    127 +               return -EINVAL; 
    128 + 
    129 +       if ((len >= 4) && (offset & 3)) 
    130 +               cnt = 4 - (offset & 3); 
    131 +       else if ((len >= 4) && ((u32)buf & 3)) 
    132 +               cnt = 4 - ((u32)buf & 3); 
    133 +       else 
    134 +               cnt = len; 
    135 + 
    136 +       from = (u8 *)KSEG0ADDR(SSB_FLASH2 + offset); 
    137 + 
    138 +       to = (u8 *)buf; 
    139 + 
    140 +       if (cnt < 4) { 
    141 +               for (i = 0; i < cnt; i++) { 
    142 +                       *to = readb(from); 
    143 +                       from++; 
    144 +                       to++; 
    145 +               } 
    146 +               return cnt; 
    147 +       } 
    148 + 
    149 +       while (cnt >= 4) { 
    150 +               *(u32 *)to = readl(from); 
    151 +               from += 4; 
    152 +               to += 4; 
    153 +               cnt -= 4; 
    154 +       } 
    155 + 
    156 +       return len - cnt; 
    157 +} 
    158 + 
    15987+/* Poll for command completion. Returns zero when complete. */ 
    160 +static int ssb_sflash_poll(struct bcm47xx_sflash *dev, u32 offset) 
    161  { 
    162 -       pr_err("Serial flash support is not implemented yet!\n"); 
     88+static int ssb_sflash_poll(struct bcm47xxsflash *dev, u32 offset) 
     89+{ 
    16390+       struct ssb_chipcommon *chipco = dev->scc; 
    16491+ 
     
    183110+ 
    184111+ 
    185 +static int sflash_st_write(struct bcm47xx_sflash *dev, u32 offset, u32 len, 
     112+static int sflash_st_write(struct bcm47xxsflash *dev, u32 offset, u32 len, 
    186113+                          const u8 *buf) 
    187114+{ 
     
    226153+} 
    227154+ 
    228 +static int sflash_at_write(struct bcm47xx_sflash *dev, u32 offset, u32 len, 
     155+static int sflash_at_write(struct bcm47xxsflash *dev, u32 offset, u32 len, 
    229156+                          const u8 *buf) 
    230157+{ 
     
    263190+ * written. Caller should poll for completion. 
    264191+ */ 
    265 +static int ssb_sflash_write(struct bcm47xx_sflash *dev, u32 offset, u32 len, 
     192+static int ssb_sflash_write(struct bcm47xxsflash *dev, u32 offset, u32 len, 
    266193+                     const u8 *buf) 
    267194+{ 
     
    298225+ * Caller should poll for completion. 
    299226+ */ 
    300 +static int ssb_sflash_erase(struct bcm47xx_sflash *dev, u32 offset) 
     227+static int ssb_sflash_erase(struct bcm47xxsflash *dev, u32 offset) 
    301228+{ 
    302229+       struct ssb_chipcommon *chipco = dev->scc; 
     
    327254+} 
    328255+ 
    329 +/* Initialize serial flash achipcoess */ 
    330 +int ssb_sflash_init(struct ssb_chipcommon *chipco) 
    331 +{ 
    332 +       struct bcm47xx_sflash *sflash = &chipco->sflash; 
     256 /* Initialize serial flash access */ 
     257 int ssb_sflash_init(struct ssb_chipcommon *cc) 
     258 { 
     259-       struct ssb_sflash_tbl_e *e; 
     260+       struct bcm47xxsflash *sflash = &cc->sflash; 
    333261+       const struct ssb_sflash_tbl_e *e; 
    334 +       u32 id, id2; 
    335 + 
    336 +       switch (chipco->capabilities & SSB_CHIPCO_CAP_FLASHT) { 
    337 +       case SSB_CHIPCO_FLASHT_STSER: 
    338 +               ssb_sflash_cmd(chipco, SSB_CHIPCO_FLASHCTL_ST_DP); 
    339 + 
    340 +               chipco_write32(chipco, SSB_CHIPCO_FLASHADDR, 0); 
    341 +               ssb_sflash_cmd(chipco, SSB_CHIPCO_FLASHCTL_ST_RES); 
    342 +               id = chipco_read32(chipco, SSB_CHIPCO_FLASHDATA); 
    343 + 
    344 +               chipco_write32(chipco, SSB_CHIPCO_FLASHADDR, 1); 
    345 +               ssb_sflash_cmd(chipco, SSB_CHIPCO_FLASHCTL_ST_RES); 
    346 +               id2 = chipco_read32(chipco, SSB_CHIPCO_FLASHDATA); 
    347 + 
    348 +               switch (id) { 
    349 +               case 0xbf: 
    350 +                       for (e = ssb_sflash_sst_tbl; e->name; e++) { 
    351 +                               if (e->id == id2) 
    352 +                                       break; 
    353 +                       } 
    354 +                       break; 
    355 +               case 0x13: 
    356 +                       return -ENOTSUPP; 
    357 +               default: 
    358 +                       for (e = ssb_sflash_st_tbl; e->name; e++) { 
    359 +                               if (e->id == id) 
    360 +                                       break; 
    361 +                       } 
    362 +                       break; 
    363 +               } 
    364 +               if (!e->name) { 
    365 +                       pr_err("Unsupported ST serial flash (id: 0x%X, id2: 0x%X)\n", id, id2); 
    366 +                       return -ENOTSUPP; 
    367 +               } 
    368 + 
    369 +               break; 
    370 +       case SSB_CHIPCO_FLASHT_ATSER: 
    371 +               ssb_sflash_cmd(chipco, SSB_CHIPCO_FLASHCTL_AT_STATUS); 
    372 +               id = chipco_read32(chipco, SSB_CHIPCO_FLASHDATA) & 0x3c; 
    373 + 
    374 +               for (e = ssb_sflash_at_tbl; e->name; e++) { 
    375 +                       if (e->id == id) 
    376 +                               break; 
    377 +               } 
    378 +               if (!e->name) { 
    379 +                       pr_err("Unsupported Atmel serial flash (id: 0x%X)\n", id); 
    380 +                       return -ENOTSUPP; 
    381 +               } 
    382 + 
    383 +               break; 
    384 +       default: 
    385 +               pr_err("Unsupported flash type\n"); 
    386 +               return -ENOTSUPP; 
    387 +       } 
    388 + 
     262        u32 id, id2; 
     263  
     264        switch (cc->capabilities & SSB_CHIPCO_CAP_FLASHT) { 
     265@@ -131,10 +328,26 @@ int ssb_sflash_init(struct ssb_chipcommo 
     266                return -ENOTSUPP; 
     267        } 
     268  
     269-       pr_info("Found %s serial flash (blocksize: 0x%X, blocks: %d)\n", 
     270-               e->name, e->blocksize, e->numblocks); 
     271- 
     272-       pr_err("Serial flash support is not implemented yet!\n"); 
    389273+       sflash->window = SSB_FLASH2; 
    390274+       sflash->blocksize = e->blocksize; 
     
    392276+       sflash->size = sflash->blocksize * sflash->numblocks; 
    393277+       sflash->present = true; 
    394 +       sflash->read = ssb_sflash_read; 
    395278+       sflash->poll = ssb_sflash_poll; 
    396279+       sflash->write = ssb_sflash_write; 
    397280+       sflash->erase = ssb_sflash_erase; 
    398281+       sflash->type = BCM47XX_SFLASH_SSB; 
    399 +       sflash->scc = chipco; 
     282+       sflash->scc = cc; 
    400283+ 
    401284+       pr_info("Found %s serial flash (size: %dKiB, blocksize: 0x%X, blocks: %d)\n", 
     
    414297--- a/drivers/ssb/main.c 
    415298+++ b/drivers/ssb/main.c 
    416 @@ -19,6 +19,7 @@ 
    417  #include <linux/ssb/ssb_driver_gige.h> 
    418  #include <linux/dma-mapping.h> 
    419  #include <linux/pci.h> 
    420 +#include <linux/platform_device.h> 
    421  #include <linux/mmc/sdio_func.h> 
    422  #include <linux/slab.h> 
    423   
    424 @@ -540,6 +541,15 @@ static int ssb_devices_register(struct s 
     299@@ -549,6 +549,15 @@ static int ssb_devices_register(struct s 
    425300                dev_idx++; 
    426301        } 
     
    435310+#endif 
    436311+ 
    437         return 0; 
    438  error: 
    439         /* Unwind the already registered devices. */ 
     312 #ifdef CONFIG_SSB_DRIVER_MIPS 
     313        if (bus->mipscore.pflash.present) { 
     314                err = platform_device_register(&ssb_pflash_dev); 
    440315--- a/drivers/ssb/ssb_private.h 
    441316+++ b/drivers/ssb/ssb_private.h 
     
    454329  */ 
    455330  
    456 +#include <linux/mtd/bcm47xx_sflash.h> 
     331+#include <linux/mtd/bcm47xxsflash.h> 
    457332+ 
    458333 /** ChipCommon core registers. **/ 
     
    491366        u32 max_timer_ms; 
    492367+#ifdef CONFIG_SSB_SFLASH 
    493 +       struct bcm47xx_sflash sflash; 
     368+       struct bcm47xxsflash sflash; 
    494369+#endif 
    495370 }; 
  • trunk/target/linux/brcm47xx/patches-3.8/070-bcma-add-functions-to-write-to-serial-flash.patch

    r35080 r35632  
    11--- a/drivers/bcma/driver_chipcommon_sflash.c 
    22+++ b/drivers/bcma/driver_chipcommon_sflash.c 
    3 @@ -1,15 +1,22 @@ 
     3@@ -1,6 +1,9 @@ 
    44 /* 
    55  * Broadcom specific AMBA 
     
    1111  * Licensed under the GNU/GPL. See COPYING for details. 
    1212  */ 
     13@@ -8,7 +11,11 @@ 
     14 #include "bcma_private.h" 
    1315  
    1416 #include <linux/platform_device.h> 
     
    1618 #include <linux/bcma/bcma.h> 
    1719+#include <linux/bcma/bcma_driver_chipcommon.h> 
    18   
    19  #include "bcma_private.h" 
    20   
     20+ 
    2121+#define NUM_RETRIES    3 
    22 + 
     22  
    2323 static struct resource bcma_sflash_resource = { 
    2424        .name   = "bcma_sflash", 
    25         .start  = BCMA_SOC_FLASH2, 
    2625@@ -18,7 +25,7 @@ static struct resource bcma_sflash_resou 
    2726 }; 
     
    6059        { "AT45DB021", 0x14, 256, 1024, }, 
    6160        { "AT45DB041", 0x1c, 256, 2048, }, 
    62 @@ -84,12 +91,230 @@ static void bcma_sflash_cmd(struct bcma_ 
     61@@ -84,12 +91,186 @@ static void bcma_sflash_cmd(struct bcma_ 
    6362        bcma_err(cc->core->bus, "SFLASH control command failed (timeout)!\n"); 
    6463 } 
     
    7069+} 
    7170+ 
    72 +/* Read len bytes starting at offset into buf. Returns number of bytes read. */ 
    73 +static int bcma_sflash_read(struct bcm47xx_sflash *dev, u32 offset, u32 len, u8 *buf) 
    74 +{ 
    75 +       u8 *from, *to; 
    76 +       u32 cnt, i; 
    77 +       struct bcma_drv_cc *cc = dev->bcc; 
    78 + 
    79 +       if (!len) 
    80 +               return 0; 
    81 + 
    82 +       if ((offset + len) > cc->sflash.size) 
    83 +               return -EINVAL; 
    84 + 
    85 +       if ((len >= 4) && (offset & 3)) 
    86 +               cnt = 4 - (offset & 3); 
    87 +       else if ((len >= 4) && ((u32)buf & 3)) 
    88 +               cnt = 4 - ((u32)buf & 3); 
    89 +       else 
    90 +               cnt = len; 
    91 + 
    92 +       from = (u8 *)KSEG0ADDR(BCMA_SOC_FLASH2 + offset); 
    93 + 
    94 +       to = (u8 *)buf; 
    95 + 
    96 +       if (cnt < 4) { 
    97 +               for (i = 0; i < cnt; i++) { 
    98 +                       *to = readb(from); 
    99 +                       from++; 
    100 +                       to++; 
    101 +               } 
    102 +               return cnt; 
    103 +       } 
    104 + 
    105 +       while (cnt >= 4) { 
    106 +               *(u32 *)to = readl(from); 
    107 +               from += 4; 
    108 +               to += 4; 
    109 +               cnt -= 4; 
    110 +       } 
    111 + 
    112 +       return len - cnt; 
    113 +} 
    114 + 
    11571+/* Poll for command completion. Returns zero when complete. */ 
    116 +static int bcma_sflash_poll(struct bcm47xx_sflash *dev, u32 offset) 
     72+static int bcma_sflash_poll(struct bcm47xxsflash *dev, u32 offset) 
    11773+{ 
    11874+       struct bcma_drv_cc *cc = dev->bcc; 
     
    13793+} 
    13894+ 
    139 + 
    140 +static int sflash_st_write(struct bcm47xx_sflash *dev, u32 offset, u32 len, 
     95+static int sflash_st_write(struct bcm47xxsflash *dev, u32 offset, u32 len, 
    14196+                          const u8 *buf) 
    14297+{ 
     
    181136+} 
    182137+ 
    183 +static int sflash_at_write(struct bcm47xx_sflash *dev, u32 offset, u32 len, 
     138+static int sflash_at_write(struct bcm47xxsflash *dev, u32 offset, u32 len, 
    184139+                          const u8 *buf) 
    185140+{ 
     
    218173+ * written. Caller should poll for completion. 
    219174+ */ 
    220 +static int bcma_sflash_write(struct bcm47xx_sflash *dev, u32 offset, u32 len, 
     175+static int bcma_sflash_write(struct bcm47xxsflash *dev, u32 offset, u32 len, 
    221176+                     const u8 *buf) 
    222177+{ 
     
    253208+ * Caller should poll for completion. 
    254209+ */ 
    255 +static int bcma_sflash_erase(struct bcm47xx_sflash *dev, u32 offset) 
     210+static int bcma_sflash_erase(struct bcm47xxsflash *dev, u32 offset) 
    256211+{ 
    257212+       struct bcma_drv_cc *cc = dev->bcc; 
     
    288243-       struct bcma_sflash *sflash = &cc->sflash; 
    289244-       struct bcma_sflash_tbl_e *e; 
    290 +       struct bcm47xx_sflash *sflash = &cc->sflash; 
     245+       struct bcm47xxsflash *sflash = &cc->sflash; 
    291246+       const struct bcma_sflash_tbl_e *e; 
    292247        u32 id, id2; 
    293248  
    294249        switch (cc->capabilities & BCMA_CC_CAP_FLASHT) { 
    295 @@ -150,6 +375,12 @@ int bcma_sflash_init(struct bcma_drv_cc 
     250@@ -150,6 +331,11 @@ int bcma_sflash_init(struct bcma_drv_cc 
    296251        sflash->numblocks = e->numblocks; 
    297252        sflash->size = sflash->blocksize * sflash->numblocks; 
    298253        sflash->present = true; 
    299 +       sflash->read = bcma_sflash_read; 
    300254+       sflash->poll = bcma_sflash_poll; 
    301255+       sflash->write = bcma_sflash_write; 
     
    308262--- a/include/linux/bcma/bcma_driver_chipcommon.h 
    309263+++ b/include/linux/bcma/bcma_driver_chipcommon.h 
    310 @@ -4,6 +4,8 @@ 
     264@@ -3,6 +3,7 @@ 
     265  
    311266 #include <linux/platform_device.h> 
    312267 #include <linux/gpio.h> 
    313   
    314 +#include <linux/mtd/bcm47xx_sflash.h> 
    315 + 
     268+#include <linux/mtd/bcm47xxsflash.h> 
     269  
    316270 /** ChipCommon core registers. **/ 
    317271 #define BCMA_CC_ID                     0x0000 
    318  #define  BCMA_CC_ID_ID                 0x0000FFFF 
    319 @@ -519,17 +521,6 @@ struct bcma_pflash { 
     272@@ -519,19 +520,6 @@ struct bcma_pflash { 
    320273        u32 window_size; 
    321274 }; 
     
    330283- 
    331284-       struct mtd_info *mtd; 
     285-       void *priv; 
    332286-}; 
    333287-#endif 
    334   
     288- 
    335289 #ifdef CONFIG_BCMA_NFLASH 
    336290 struct mtd_info; 
    337 @@ -564,7 +555,7 @@ struct bcma_drv_cc { 
     291  
     292@@ -565,7 +553,7 @@ struct bcma_drv_cc { 
    338293 #ifdef CONFIG_BCMA_DRIVER_MIPS 
    339294        struct bcma_pflash pflash; 
    340295 #ifdef CONFIG_BCMA_SFLASH 
    341296-       struct bcma_sflash sflash; 
    342 +       struct bcm47xx_sflash sflash; 
     297+       struct bcm47xxsflash sflash; 
    343298 #endif 
    344299 #ifdef CONFIG_BCMA_NFLASH 
  • trunk/target/linux/brcm47xx/patches-3.8/080-MIPS-BCM47XX-rewrite-nvram-probing.patch

    r35080 r35632  
    400400- 
    401401-#endif 
     402--- a/drivers/mtd/bcm47xxpart.c 
     403+++ b/drivers/mtd/bcm47xxpart.c 
     404@@ -14,7 +14,7 @@ 
     405 #include <linux/slab.h> 
     406 #include <linux/mtd/mtd.h> 
     407 #include <linux/mtd/partitions.h> 
     408-#include <asm/mach-bcm47xx/nvram.h> 
     409+#include <bcm47xx_nvram.h> 
     410  
     411 /* 10 parts were found on sflash on Netgear WNDR4500 */ 
     412 #define BCM47XXPART_MAX_PARTS          12 
    402413--- a/drivers/net/ethernet/broadcom/b44.c 
    403414+++ b/drivers/net/ethernet/broadcom/b44.c 
  • trunk/target/linux/brcm47xx/patches-3.8/116-MIPS-BCM47xx-Remove-CFE-console.patch

    r35080 r35632  
    1717--- a/arch/mips/Kconfig 
    1818+++ b/arch/mips/Kconfig 
    19 @@ -109,7 +109,6 @@ config BCM47XX 
     19@@ -115,7 +115,6 @@ config BCM47XX 
    2020        select IRQ_CPU 
    2121        select SYS_SUPPORTS_32BIT_KERNEL 
    2222        select SYS_SUPPORTS_LITTLE_ENDIAN 
    2323-       select SYS_HAS_EARLY_PRINTK 
    24         select CFE 
    2524        help 
    2625         Support for BCM47XX based boards 
     26  
    2727--- a/arch/mips/bcm47xx/prom.c 
    2828+++ b/arch/mips/bcm47xx/prom.c 
  • trunk/target/linux/brcm47xx/patches-3.8/119-fix-boot.patch

    r35080 r35632  
    11--- a/arch/mips/Kconfig 
    22+++ b/arch/mips/Kconfig 
    3 @@ -102,11 +102,13 @@ config ATH79 
     3@@ -107,12 +107,14 @@ config ATH79 
    44 config BCM47XX 
    55        bool "Broadcom BCM47XX based boards" 
     
    99        select CSRC_R4K 
    1010        select DMA_NONCOHERENT 
     11        select FW_CFE 
    1112        select HW_HAS_PCI 
    1213        select IRQ_CPU 
     
    1415        select SYS_SUPPORTS_32BIT_KERNEL 
    1516        select SYS_SUPPORTS_LITTLE_ENDIAN 
    16         select CFE 
     17        help 
  • trunk/target/linux/brcm47xx/patches-3.8/150-cpu_fixes.patch

    r34252 r35632  
    234234--- a/arch/mips/kernel/genex.S 
    235235+++ b/arch/mips/kernel/genex.S 
    236 @@ -52,6 +52,10 @@ NESTED(except_vec1_generic, 0, sp) 
     236@@ -51,6 +51,10 @@ NESTED(except_vec1_generic, 0, sp) 
    237237 NESTED(except_vec3_generic, 0, sp) 
    238238        .set    push 
     
    287287                r4k_blast_dcache = (void *)cache_noop; 
    288288        else if (dc_lsize == 16) 
    289 @@ -682,6 +694,8 @@ static void local_r4k_flush_cache_sigtra 
     289@@ -671,6 +683,8 @@ static void local_r4k_flush_cache_sigtra 
    290290        unsigned long addr = (unsigned long) arg; 
    291291  
     
    296296                protected_writeback_dcache_line(addr & ~(dc_lsize - 1)); 
    297297        if (!cpu_icache_snoops_remote_store && scache_size) 
    298 @@ -1349,6 +1363,17 @@ static void __cpuinit coherency_setup(vo 
     298@@ -1355,6 +1369,17 @@ static void __cpuinit coherency_setup(vo 
    299299         * silly idea of putting something else there ... 
    300300         */ 
     
    314314        case CPU_R4000SC: 
    315315        case CPU_R4000MC: 
    316 @@ -1410,6 +1435,15 @@ void __cpuinit r4k_cache_init(void) 
     316@@ -1416,6 +1441,15 @@ void __cpuinit r4k_cache_init(void) 
    317317        extern void build_copy_page(void); 
    318318        struct cpuinfo_mips *c = &current_cpu_data; 
     
    330330        setup_scache(); 
    331331  
    332 @@ -1470,6 +1504,14 @@ void __cpuinit r4k_cache_init(void) 
     332@@ -1476,6 +1510,14 @@ void __cpuinit r4k_cache_init(void) 
    333333 #if !defined(CONFIG_MIPS_CMP) 
    334334        local_r4k___flush_cache_all(NULL); 
     
    347347--- a/arch/mips/mm/tlbex.c 
    348348+++ b/arch/mips/mm/tlbex.c 
    349 @@ -1267,6 +1267,9 @@ static void __cpuinit build_r4000_tlb_re 
     349@@ -1314,6 +1314,9 @@ static void __cpuinit build_r4000_tlb_re 
    350350                        /* No need for uasm_i_nop */ 
    351351                } 
     
    357357                build_get_pmde64(&p, &l, &r, K0, K1); /* get pmd in K1 */ 
    358358 #else 
    359 @@ -1797,6 +1800,9 @@ build_r4000_tlbchange_handler_head(u32 * 
     359@@ -1845,6 +1848,9 @@ build_r4000_tlbchange_handler_head(u32 * 
    360360 { 
    361361        struct work_registers wr = build_get_work_registers(p); 
  • trunk/target/linux/brcm47xx/patches-3.8/210-b44_phy_fix.patch

    r34988 r35632  
    4444        if (bp->phy_addr == B44_PHY_ADDR_NO_PHY) 
    4545                return 0; 
    46 @@ -2104,6 +2129,8 @@ static int __devinit b44_get_invariants( 
     46@@ -2104,6 +2129,8 @@ static int b44_get_invariants(struct b44 
    4747         * valid PHY address. */ 
    4848        bp->phy_addr &= 0x1F; 
  • trunk/target/linux/brcm47xx/patches-3.8/241-bcma-broadcom-2011-sdk-updates.patch

    r34670 r35632  
    99  
    1010        bcma_awrite32(core, BCMA_IOCTL, (BCMA_IOCTL_CLK | flags)); 
    11 --- a/include/linux/bcma/bcma_driver_pci.h 
    12 +++ b/include/linux/bcma/bcma_driver_pci.h 
    13 @@ -179,6 +179,8 @@ struct pci_dev; 
    14  #define BCMA_CORE_PCI_CFG_FUN_MASK             7       /* Function mask */ 
    15  #define BCMA_CORE_PCI_CFG_OFF_MASK             0xfff   /* Register mask */ 
    16   
    17 +#define BCMA_CORE_PCI_CFG_DEVCTRL              0xd8 
    18 + 
    19  /* PCIE Root Capability Register bits (Host mode only) */ 
    20  #define BCMA_CORE_PCI_RC_CRS_VISIBILITY                0x0001 
    21   
    22 --- a/drivers/bcma/driver_pci_host.c 
    23 +++ b/drivers/bcma/driver_pci_host.c 
    24 @@ -430,7 +430,7 @@ void __devinit bcma_core_pci_hostmode_in 
    25         /* Reset RC */ 
    26         usleep_range(3000, 5000); 
    27         pcicore_write32(pc, BCMA_CORE_PCI_CTL, BCMA_CORE_PCI_CTL_RST_OE); 
    28 -       usleep_range(1000, 2000); 
    29 +       msleep(50); 
    30         pcicore_write32(pc, BCMA_CORE_PCI_CTL, BCMA_CORE_PCI_CTL_RST | 
    31                         BCMA_CORE_PCI_CTL_RST_OE); 
    32   
    33 @@ -492,6 +492,17 @@ void __devinit bcma_core_pci_hostmode_in 
    34   
    35         bcma_core_pci_enable_crs(pc); 
    36   
    37 +       if (bus->chipinfo.id == BCMA_CHIP_ID_BCM4706 || 
    38 +           bus->chipinfo.id == BCMA_CHIP_ID_BCM4716) { 
    39 +               u16 val16; 
    40 +               bcma_extpci_read_config(pc, 0, 0, BCMA_CORE_PCI_CFG_DEVCTRL, 
    41 +                                       &val16, sizeof(val16)); 
    42 +               val16 |= (2 << 5);      /* Max payload size of 512 */ 
    43 +               val16 |= (2 << 12);     /* MRRS 512 */ 
    44 +               bcma_extpci_write_config(pc, 0, 0, BCMA_CORE_PCI_CFG_DEVCTRL, 
    45 +                                        &val16, sizeof(val16)); 
    46 +       } 
    47 + 
    48         /* Enable PCI bridge BAR0 memory & master access */ 
    49         tmp = PCI_COMMAND_MASTER | PCI_COMMAND_MEMORY; 
    50         bcma_extpci_write_config(pc, 0, 0, PCI_COMMAND, &tmp, sizeof(tmp)); 
  • trunk/target/linux/brcm47xx/patches-3.8/260-MIPS-BCM47XX-add-board-detection.patch

    r35492 r35632  
    4242+       {{BCM47XX_BOARD_ASUS_RTN16, "Asus RT-N16"}, "RT-N16-",}, 
    4343+       {{BCM47XX_BOARD_ASUS_WL330GE, "Asus WL330GE"}, "WL330GE-",}, 
    44 +       {{BCM47XX_BOARD_ASUS_WL500GPV1, "Asus WL500GPV1"}, "WL500gp-",}, 
    45 +       {{BCM47XX_BOARD_ASUS_WL500GPV2, "Asus WL500GPV2"}, "WL500GPV2-",}, 
     44+       {{BCM47XX_BOARD_ASUS_WL500GPV1, "Asus WL500GP V1"}, "WL500gp-",}, 
     45+       {{BCM47XX_BOARD_ASUS_WL500GPV2, "Asus WL500GP V2"}, "WL500GPV2-",}, 
    4646+       {{BCM47XX_BOARD_ASUS_WL520GC, "Asus WL520GC"}, "WL520GC-",}, 
    4747+       {{BCM47XX_BOARD_ASUS_WL520GU, "Asus WL520GU"}, "WL520GU-",}, 
     
    9090+       {{BCM47XX_BOARD_CISCO_M10V1, "Cisco M10"}, "M10", "1.0"}, /* like WRT160N v3.0 */ 
    9191+       {{BCM47XX_BOARD_CISCO_M20V1, "Cisco M20"}, "M20", "1.0"}, /* like WRT310N v2.0 */ 
    92 +       {{BCM47XX_BOARD_LINKSYS_E1000V1, "Linksys E100"}, "E100", "1.0"},  /* like WRT160N v3.0 */ 
    93 +       {{BCM47XX_BOARD_LINKSYS_E1000V2, "Linksys E1000"}, "E1000", "2.0"}, 
    94 +       {{BCM47XX_BOARD_LINKSYS_E2000V1, "Linksys E2000"}, "Linksys E2000", "1.0"}, 
    95 +       {{BCM47XX_BOARD_LINKSYS_E3000V1, "Linksys E300"}, "E300", "1.0"}, /* like WRT610N v2.0 */ 
    96 +       {{BCM47XX_BOARD_LINKSYS_E3200V1, "Linksys E3200"}, "E3200", "1.0"}, 
    97 +       {{BCM47XX_BOARD_LINKSYS_E4200V1, "Linksys E4200"}, "E4200", "1.0"}, 
    98 +       {{BCM47XX_BOARD_LINKSYS_WRT150NV11, "Linksys WRT150N"}, "WRT150N", "1.1"}, 
    99 +       {{BCM47XX_BOARD_LINKSYS_WRT150NV1, "Linksys WRT150N"}, "WRT150N", "1"}, 
    100 +       {{BCM47XX_BOARD_LINKSYS_WRT160NV1, "Linksys WRT160N"}, "WRT160N", "1.0"}, 
    101 +       {{BCM47XX_BOARD_LINKSYS_WRT160NV3, "Linksys WRT160N"}, "WRT160N", "3.0"}, 
    102 +       {{BCM47XX_BOARD_LINKSYS_WRT300NV11, "Linksys WRT300N"}, "WRT300N", "1.1"}, 
    103 +       {{BCM47XX_BOARD_LINKSYS_WRT310NV2, "Linksys WRT310N"}, "WRT310N", "2.0"}, 
     92+       {{BCM47XX_BOARD_LINKSYS_E1000V1, "Linksys E1000 V1"}, "E100", "1.0"},  /* like WRT160N v3.0 */ 
     93+       {{BCM47XX_BOARD_LINKSYS_E1000V2, "Linksys E1000 V2"}, "E1000", "2.0"}, 
     94+       {{BCM47XX_BOARD_LINKSYS_E2000V1, "Linksys E2000 V1"}, "Linksys E2000", "1.0"}, 
     95+       {{BCM47XX_BOARD_LINKSYS_E3000V1, "Linksys E3000 V1"}, "E300", "1.0"}, /* like WRT610N v2.0 */ 
     96+       {{BCM47XX_BOARD_LINKSYS_E3200V1, "Linksys E3200 V1"}, "E3200", "1.0"}, 
     97+       {{BCM47XX_BOARD_LINKSYS_E4200V1, "Linksys E4200 V1"}, "E4200", "1.0"}, 
     98+       {{BCM47XX_BOARD_LINKSYS_WRT150NV11, "Linksys WRT150N V1.1"}, "WRT150N", "1.1"}, 
     99+       {{BCM47XX_BOARD_LINKSYS_WRT150NV1, "Linksys WRT150N V1"}, "WRT150N", "1"}, 
     100+       {{BCM47XX_BOARD_LINKSYS_WRT160NV1, "Linksys WRT160N V1"}, "WRT160N", "1.0"}, 
     101+       {{BCM47XX_BOARD_LINKSYS_WRT160NV3, "Linksys WRT160N V3"}, "WRT160N", "3.0"}, 
     102+       {{BCM47XX_BOARD_LINKSYS_WRT300NV11, "Linksys WRT300N V1.1"}, "WRT300N", "1.1"}, 
     103+       {{BCM47XX_BOARD_LINKSYS_WRT310NV2, "Linksys WRT310N V2"}, "WRT310N", "2.0"}, 
    104104+       {{BCM47XX_BOARD_LINKSYS_WRT54G3GV2, "Linksys WRT54G3GV2-VF"}, "WRT54G3GV2-VF", "1.0"}, 
    105 +       {{BCM47XX_BOARD_LINKSYS_WRT610NV1, "Linksys WRT610N"}, "WRT610N", "1.0"}, 
    106 +       {{BCM47XX_BOARD_LINKSYS_WRT610NV2, "Linksys WRT610N"}, "WRT610N", "2.0"}, 
     105+       {{BCM47XX_BOARD_LINKSYS_WRT610NV1, "Linksys WRT610N V1"}, "WRT610N", "1.0"}, 
     106+       {{BCM47XX_BOARD_LINKSYS_WRT610NV2, "Linksys WRT610N V2"}, "WRT610N", "2.0"}, 
    107107+       { {0}, 0}, 
    108108+}; 
    109109+ 
    110110+static const struct bcm47xx_board_type_list bcm47xx_board_list_board_id[] = { 
    111 +       {{BCM47XX_BOARD_NETGEAR_WGR614V8, "Netgear WGR614V8"}, "U12H072T00_NETGEAR",}, 
    112 +       {{BCM47XX_BOARD_NETGEAR_WGR614V9, "Netgear WGR614V9"}, "U12H094T00_NETGEAR",}, 
     111+       {{BCM47XX_BOARD_NETGEAR_WGR614V8, "Netgear WGR614 V8"}, "U12H072T00_NETGEAR",}, 
     112+       {{BCM47XX_BOARD_NETGEAR_WGR614V9, "Netgear WGR614 V9"}, "U12H094T00_NETGEAR",}, 
    113113+       {{BCM47XX_BOARD_NETGEAR_WNDR3300, "Netgear WNDR3300"}, "U12H093T00_NETGEAR",}, 
    114 +       {{BCM47XX_BOARD_NETGEAR_WNDR3400V1, "Netgear WNDR3400V1"}, "U12H155T00_NETGEAR",}, 
    115 +       {{BCM47XX_BOARD_NETGEAR_WNDR3400VCNA, "Netgear WNDR3400VCNA"}, "U12H155T01_NETGEAR",}, 
    116 +       {{BCM47XX_BOARD_NETGEAR_WNDR3700V3, "Netgear WNDR3700V3"}, "U12H194T00_NETGEAR",}, 
     114+       {{BCM47XX_BOARD_NETGEAR_WNDR3400V1, "Netgear WNDR3400 V1"}, "U12H155T00_NETGEAR",}, 
     115+       {{BCM47XX_BOARD_NETGEAR_WNDR3400VCNA, "Netgear WNDR3400 Vcna"}, "U12H155T01_NETGEAR",}, 
     116+       {{BCM47XX_BOARD_NETGEAR_WNDR3700V3, "Netgear WNDR3700 V3"}, "U12H194T00_NETGEAR",}, 
    117117+       {{BCM47XX_BOARD_NETGEAR_WNDR4000, "Netgear WNDR4000"}, "U12H181T00_NETGEAR",}, 
    118118+       {{BCM47XX_BOARD_NETGEAR_WNDR4500, "Netgear WNDR4500"}, "U12H189T00_NETGEAR",}, 
     
    120120+       {{BCM47XX_BOARD_NETGEAR_WNR3500L, "Netgear WNR3500L"}, "U12H136T99_NETGEAR",}, 
    121121+       {{BCM47XX_BOARD_NETGEAR_WNR3500U, "Netgear WNR3500U"}, "U12H136T00_NETGEAR",}, 
    122 +       {{BCM47XX_BOARD_NETGEAR_WNR3500V2, "Netgear WNR3500V2"}, "U12H127T00_NETGEAR",}, 
    123 +       {{BCM47XX_BOARD_NETGEAR_WNR3500V2VC, "Netgear WNR3500V2VC"}, "U12H127T70_NETGEAR",}, 
    124 +       {{BCM47XX_BOARD_NETGEAR_WNR834BV2, "Netgear WNR834BV2"}, "U12H081T00_NETGEAR",}, 
     122+       {{BCM47XX_BOARD_NETGEAR_WNR3500V2, "Netgear WNR3500 V2"}, "U12H127T00_NETGEAR",}, 
     123+       {{BCM47XX_BOARD_NETGEAR_WNR3500V2VC, "Netgear WNR3500 V2vc"}, "U12H127T70_NETGEAR",}, 
     124+       {{BCM47XX_BOARD_NETGEAR_WNR834BV2, "Netgear WNR834B V2"}, "U12H081T00_NETGEAR",}, 
    125125+       { {0}, 0}, 
    126126+}; 
  • trunk/target/linux/brcm47xx/patches-3.8/310-no_highpage.patch

    r34252 r35632  
    11--- a/arch/mips/include/asm/page.h 
    22+++ b/arch/mips/include/asm/page.h 
    3 @@ -48,6 +48,7 @@ 
    4  #ifndef __ASSEMBLY__ 
     3@@ -46,6 +46,7 @@ 
     4 #endif /* CONFIG_MIPS_HUGE_TLB_SUPPORT */ 
    55  
    66 #include <linux/pfn.h> 
     
    99  
    1010 extern void build_clear_page(void); 
    11 @@ -83,13 +84,16 @@ static inline void clear_user_page(void 
     11@@ -81,13 +82,16 @@ static inline void clear_user_page(void 
    1212                flush_data_cache_page((unsigned long)addr); 
    1313 } 
  • trunk/target/linux/brcm47xx/patches-3.8/540-watchdog-bcm47xx_wdt.c-convert-to-watchdog-core-api.patch

    r34651 r35632  
    11--- a/drivers/watchdog/Kconfig 
    22+++ b/drivers/watchdog/Kconfig 
    3 @@ -959,6 +959,7 @@ config ATH79_WDT 
     3@@ -971,6 +971,7 @@ config ATH79_WDT 
    44 config BCM47XX_WDT 
    55        tristate "Broadcom BCM47xx Watchdog Timer" 
  • trunk/target/linux/brcm47xx/patches-3.8/541-watchdog-bcm47xx_wdt.c-use-platform-device.patch

    r34651 r35632  
    166166- 
    167167-static int __init bcm47xx_wdt_init(void) 
    168 +static int __devinit bcm47xx_wdt_probe(struct platform_device *pdev) 
     168+static int bcm47xx_wdt_probe(struct platform_device *pdev) 
    169169 { 
    170170        int ret; 
     
    224224  
    225225-static void __exit bcm47xx_wdt_exit(void) 
    226 +static int __devexit bcm47xx_wdt_remove(struct platform_device *pdev) 
     226+static int bcm47xx_wdt_remove(struct platform_device *pdev) 
    227227 { 
    228228-       watchdog_unregister_device(&bcm47xx_wdt_wdd); 
     
    247247+       }, 
    248248+       .probe          = bcm47xx_wdt_probe, 
    249 +       .remove         = __devexit_p(bcm47xx_wdt_remove), 
     249+       .remove         = bcm47xx_wdt_remove, 
    250250+}; 
    251251+ 
  • trunk/target/linux/brcm47xx/patches-3.8/542-watchdog-bcm47xx_wdt.c-rename-ops-methods.patch

    r34651 r35632  
    8484 }; 
    8585  
    86  static int __devinit bcm47xx_wdt_probe(struct platform_device *pdev) 
    87 @@ -138,10 +138,10 @@ static int __devinit bcm47xx_wdt_probe(s 
     86 static int bcm47xx_wdt_probe(struct platform_device *pdev) 
     87@@ -138,10 +138,10 @@ static int bcm47xx_wdt_probe(struct plat 
    8888        if (!wdt) 
    8989                return -ENXIO; 
  • trunk/target/linux/brcm47xx/patches-3.8/543-watchdog-bcm47xx_wdt.c-rename-wdt_time-to-timeout.patch

    r34651 r35632  
    1616  
    1717 module_param(nowayout, bool, 0); 
    18 @@ -160,7 +160,7 @@ static int __devinit bcm47xx_wdt_probe(s 
     18@@ -160,7 +160,7 @@ static int bcm47xx_wdt_probe(struct plat 
    1919                goto err_notifier; 
    2020  
  • trunk/target/linux/brcm47xx/patches-3.8/544-watchdog-bcm47xx_wdt.c-add-hard-timer.patch

    r34651 r35632  
    6464        struct bcm47xx_wdt *wdt = (struct bcm47xx_wdt *)data; 
    6565@@ -133,15 +181,22 @@ static struct watchdog_ops bcm47xx_wdt_s 
    66  static int __devinit bcm47xx_wdt_probe(struct platform_device *pdev) 
     66 static int bcm47xx_wdt_probe(struct platform_device *pdev) 
    6767 { 
    6868        int ret; 
     
    8989        wdt->wdd.timeout = WDT_DEFAULT_TIME; 
    9090        ret = wdt->wdd.ops->set_timeout(&wdt->wdd, timeout); 
    91 @@ -159,14 +214,16 @@ static int __devinit bcm47xx_wdt_probe(s 
     91@@ -159,14 +214,16 @@ static int bcm47xx_wdt_probe(struct plat 
    9292        if (ret) 
    9393                goto err_notifier; 
  • trunk/target/linux/brcm47xx/patches-3.8/700-ssb-gigabit-ethernet-driver.patch

    r35573 r35632  
    99 #include <linux/hwmon-sysfs.h> 
    1010  
    11 @@ -251,6 +252,7 @@ static DEFINE_PCI_DEVICE_TABLE(tg3_pci_t 
    12         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705F)}, 
     11@@ -263,6 +264,7 @@ static DEFINE_PCI_DEVICE_TABLE(tg3_pci_t 
     12                        TG3_DRV_DATA_FLAG_5705_10_100}, 
    1313        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5721)}, 
    1414        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5722)}, 
     
    1616        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5751)}, 
    1717        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5751M)}, 
    18         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5751F)}, 
    19 @@ -533,7 +535,9 @@ static void _tw32_flush(struct tg3 *tp, 
     18        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5751F), 
     19@@ -570,7 +572,9 @@ static void _tw32_flush(struct tg3 *tp, 
    2020 static inline void tw32_mailbox_flush(struct tg3 *tp, u32 off, u32 val) 
    2121 { 
     
    2828 } 
    2929  
    30 @@ -543,7 +547,8 @@ static void tg3_write32_tx_mbox(struct t 
     30@@ -580,7 +584,8 @@ static void tg3_write32_tx_mbox(struct t 
    3131        writel(val, mbox); 
    3232        if (tg3_flag(tp, TXD_MBOX_HWBUG)) 
     
    3838 } 
    3939  
    40 @@ -1050,7 +1055,8 @@ static void tg3_switch_clocks(struct tg3 
     40@@ -1088,7 +1093,8 @@ static void tg3_switch_clocks(struct tg3 
    4141  
    4242 #define PHY_BUSY_LOOPS 5000 
     
    4848        u32 frame_val; 
    4949        unsigned int loops; 
    50 @@ -1066,7 +1072,7 @@ static int tg3_readphy(struct tg3 *tp, i 
     50@@ -1104,7 +1110,7 @@ static int tg3_readphy(struct tg3 *tp, i 
    5151  
    5252        *val = 0x0; 
     
    5757        frame_val |= ((reg << MI_COM_REG_ADDR_SHIFT) & 
    5858                      MI_COM_REG_ADDR_MASK); 
    59 @@ -1103,7 +1109,13 @@ static int tg3_readphy(struct tg3 *tp, i 
     59@@ -1141,7 +1147,13 @@ static int tg3_readphy(struct tg3 *tp, i 
    6060        return ret; 
    6161 } 
     
    7272        u32 frame_val; 
    7373        unsigned int loops; 
    74 @@ -1121,7 +1133,7 @@ static int tg3_writephy(struct tg3 *tp, 
     74@@ -1159,7 +1171,7 @@ static int tg3_writephy(struct tg3 *tp, 
    7575  
    7676        tg3_ape_lock(tp, tp->phy_ape_lock); 
     
    8181        frame_val |= ((reg << MI_COM_REG_ADDR_SHIFT) & 
    8282                      MI_COM_REG_ADDR_MASK); 
    83 @@ -1156,6 +1168,11 @@ static int tg3_writephy(struct tg3 *tp, 
     83@@ -1194,6 +1206,11 @@ static int tg3_writephy(struct tg3 *tp, 
    8484        return ret; 
    8585 } 
     
    9393 { 
    9494        int err; 
    95 @@ -1728,6 +1745,11 @@ static int tg3_poll_fw(struct tg3 *tp) 
     95@@ -1778,6 +1795,11 @@ static int tg3_poll_fw(struct tg3 *tp) 
    9696        int i; 
    9797        u32 val; 
     
    105105                /* Wait up to 20ms for init done. */ 
    106106                for (i = 0; i < 200; i++) { 
    107 @@ -3385,6 +3407,13 @@ static int tg3_halt_cpu(struct tg3 *tp, 
     107@@ -3447,6 +3469,13 @@ static int tg3_halt_cpu(struct tg3 *tp, 
    108108                tw32_f(offset + CPU_MODE,  CPU_MODE_HALT); 
    109109                udelay(10); 
     
    119119                        tw32(offset + CPU_STATE, 0xffffffff); 
    120120                        tw32(offset + CPU_MODE,  CPU_MODE_HALT); 
    121 @@ -3860,8 +3889,9 @@ static int tg3_power_down_prepare(struct 
     121@@ -3914,8 +3943,9 @@ static int tg3_power_down_prepare(struct 
    122122        tg3_frob_aux_power(tp, true); 
    123123  
     
    131131  
    132132                val &= ~((1 << 16) | (1 << 4) | (1 << 2) | (1 << 1) | 1); 
    133 @@ -4363,6 +4393,15 @@ relink: 
     133@@ -4435,6 +4465,15 @@ relink: 
    134134        if (current_link_up == 0 || (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)) { 
    135135                tg3_phy_copper_begin(tp); 
     
    147147                if ((!tg3_readphy(tp, MII_BMSR, &bmsr) && (bmsr & BMSR_LSTATUS)) || 
    148148                    (tp->mac_mode & MAC_MODE_PORT_INT_LPBACK)) 
    149 @@ -4381,6 +4420,26 @@ relink: 
     149@@ -4453,6 +4492,26 @@ relink: 
    150150        else 
    151151                tp->mac_mode |= MAC_MODE_PORT_MODE_GMII; 
     
    174174        if (tp->link_config.active_duplex == DUPLEX_HALF) 
    175175                tp->mac_mode |= MAC_MODE_HALF_DUPLEX; 
    176 @@ -8108,6 +8167,16 @@ static int tg3_chip_reset(struct tg3 *tp 
     176@@ -8431,6 +8490,16 @@ static int tg3_chip_reset(struct tg3 *tp 
    177177                tw32(0x5000, 0x400); 
    178178        } 
     
    191191  
    192192        if (tp->pci_chip_rev_id == CHIPREV_ID_5705_A0) { 
    193 @@ -9720,6 +9789,11 @@ static void tg3_timer(unsigned long __op 
     193@@ -10064,6 +10133,11 @@ static void tg3_timer(unsigned long __op 
    194194            tg3_flag(tp, 57765_CLASS)) 
    195195                tg3_chk_missed_msi(tp); 
     
    203203                /* All of this garbage is because when using non-tagged 
    204204                 * IRQ status the mailbox/status_block protocol the chip 
    205 @@ -12387,7 +12461,8 @@ static int tg3_ioctl(struct net_device * 
     205@@ -12937,7 +13011,8 @@ static int tg3_ioctl(struct net_device * 
    206206                        return -EAGAIN; 
    207207  
     
    213213  
    214214                data->val_out = mii_regval; 
    215 @@ -12403,7 +12478,8 @@ static int tg3_ioctl(struct net_device * 
     215@@ -12953,7 +13028,8 @@ static int tg3_ioctl(struct net_device * 
    216216                        return -EAGAIN; 
    217217  
     
    223223  
    224224                return err; 
    225 @@ -13251,6 +13327,14 @@ static void __devinit tg3_get_5720_nvram 
     225@@ -13806,6 +13882,14 @@ static void tg3_get_5720_nvram_info(stru 
    226226 /* Chips other than 5700/5701 use the NVRAM for fetching info. */ 
    227  static void __devinit tg3_nvram_init(struct tg3 *tp) 
     227 static void tg3_nvram_init(struct tg3 *tp) 
    228228 { 
    229229+       if (tg3_flag(tp, IS_SSB_CORE)) { 
     
    238238             (EEPROM_ADDR_FSM_RESET | 
    239239              (EEPROM_DEFAULT_CLOCK_PERIOD << 
    240 @@ -13743,10 +13827,19 @@ static int __devinit tg3_phy_probe(struc 
     240@@ -14298,10 +14382,19 @@ static int tg3_phy_probe(struct tg3 *tp) 
    241241                         * subsys device table. 
    242242                         */ 
     
    260260                            tp->phy_id == TG3_PHY_ID_BCM8002) 
    261261                                tp->phy_flags |= TG3_PHYFLG_PHY_SERDES; 
    262 @@ -14756,6 +14849,11 @@ static int __devinit tg3_get_invariants( 
     262@@ -15346,6 +15439,11 @@ static int tg3_get_invariants(struct tg3 
    263263                } 
    264264        } 
     
    272272         * In particular, the TG3_FLAG_IS_NIC flag must be 
    273273         * determined before calling tg3_set_power_state() so that 
    274 @@ -15104,12 +15202,19 @@ static int __devinit tg3_get_device_addr 
     274@@ -15679,12 +15777,19 @@ static int tg3_get_device_address(struct 
    275275        struct net_device *dev = tp->dev; 
    276276        u32 hi, lo, mac_offset; 
     
    292292        if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704 || 
    293293            tg3_flag(tp, 5780_CLASS)) { 
    294 @@ -15469,6 +15574,8 @@ static int __devinit tg3_test_dma(struct 
     294@@ -16045,6 +16150,8 @@ static int tg3_test_dma(struct tg3 *tp) 
    295295                        tp->dma_rwctrl |= 0x001b000f; 
    296296                } 
     
    301301        if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703 || 
    302302            GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) 
    303 @@ -15812,6 +15919,18 @@ static int __devinit tg3_init_one(struct 
     303@@ -16389,6 +16496,18 @@ static int tg3_init_one(struct pci_dev * 
    304304        else 
    305305                tp->msg_enable = TG3_DEF_MSG_ENABLE; 
     
    322322--- a/drivers/net/ethernet/broadcom/tg3.h 
    323323+++ b/drivers/net/ethernet/broadcom/tg3.h 
    324 @@ -2973,6 +2973,11 @@ enum TG3_FLAGS { 
     324@@ -3030,6 +3030,11 @@ enum TG3_FLAGS { 
    325325        TG3_FLAG_57765_PLUS, 
    326326        TG3_FLAG_57765_CLASS, 
     
    336336--- a/include/linux/pci_ids.h 
    337337+++ b/include/linux/pci_ids.h 
    338 @@ -2121,6 +2121,7 @@ 
     338@@ -2127,6 +2127,7 @@ 
    339339 #define PCI_DEVICE_ID_TIGON3_5754M     0x1672 
    340340 #define PCI_DEVICE_ID_TIGON3_5755M     0x1673 
  • trunk/target/linux/brcm47xx/patches-3.8/750-bgmac.patch

    r35083 r35632  
    6363--- a/drivers/net/ethernet/broadcom/Kconfig 
    6464+++ b/drivers/net/ethernet/broadcom/Kconfig 
    65 @@ -120,4 +120,13 @@ config BNX2X 
     65@@ -121,4 +121,13 @@ config BNX2X 
    6666          To compile this driver as a module, choose M here: the module 
    6767          will be called bnx2x.  This is recommended. 
     
    19701970--- a/include/linux/bcma/bcma_driver_chipcommon.h 
    19711971+++ b/include/linux/bcma/bcma_driver_chipcommon.h 
    1972 @@ -624,4 +624,6 @@ int bcma_nflash_erase(struct bcma_drv_cc 
    1973  int bcma_nflash_commit(struct bcma_drv_cc *cc, u32 offset, u32 len, const u8 *buf); 
    1974  #endif 
     1972@@ -623,4 +623,6 @@ extern void bcma_chipco_regctl_maskset(s 
     1973                                       u32 offset, u32 mask, u32 set); 
     1974 extern void bcma_pmu_spuravoid_pllupdate(struct bcma_drv_cc *cc, int spuravoid); 
    19751975  
    19761976+extern u32 bcma_pmu_get_bus_clock(struct bcma_drv_cc *cc); 
  • trunk/target/linux/brcm47xx/patches-3.8/760-bgmac-fixes.patch

    r35621 r35632  
    11--- a/drivers/net/ethernet/broadcom/bgmac.c 
    22+++ b/drivers/net/ethernet/broadcom/bgmac.c 
    3 @@ -301,8 +301,9 @@ static int bgmac_dma_rx_read(struct bgma 
     3@@ -301,7 +301,7 @@ static int bgmac_dma_rx_read(struct bgma 
    44                        bgmac_err(bgmac, "Found poisoned packet at slot %d, DMA issue!\n", 
    55                                  ring->start); 
    66                } else { 
    77-                       new_skb = netdev_alloc_skb(bgmac->net_dev, len); 
    8 +                       new_skb = netdev_alloc_skb(bgmac->net_dev, len + 2); 
     8+                       new_skb = netdev_alloc_skb_ip_align(bgmac->net_dev, len); 
    99                        if (new_skb) { 
    10 +                               skb_reserve(new_skb, 2); 
    1110                                skb_put(new_skb, len); 
    1211                                skb_copy_from_linear_data_offset(skb, BGMAC_RX_FRAME_OFFSET, 
    13                                                                  new_skb->data, 
    14 @@ -535,7 +536,7 @@ static void bgmac_dma_init(struct bgmac 
     12@@ -535,7 +535,7 @@ static void bgmac_dma_init(struct bgmac 
    1513  * PHY ops 
    1614  **************************************************/ 
     
    2119        struct bcma_device *core; 
    2220        u16 phy_access_addr; 
    23 @@ -584,7 +585,7 @@ u16 bgmac_phy_read(struct bgmac *bgmac, 
     21@@ -584,7 +584,7 @@ u16 bgmac_phy_read(struct bgmac *bgmac, 
    2422 } 
    2523  
     
    3028        struct bcma_device *core; 
    3129        u16 phy_access_addr; 
    32 @@ -617,9 +618,13 @@ void bgmac_phy_write(struct bgmac *bgmac 
     30@@ -617,9 +617,13 @@ void bgmac_phy_write(struct bgmac *bgmac 
    3331        tmp |= value; 
    3432        bcma_write32(core, phy_access_addr, tmp); 
     
    4543  
    4644 /* http://bcm-v4.sipsolutions.net/mac-gbit/gmac/chipphyforce */ 
    47 @@ -761,6 +766,26 @@ static void bgmac_cmdcfg_maskset(struct 
     45@@ -761,6 +765,26 @@ static void bgmac_cmdcfg_maskset(struct 
    4846        udelay(2); 
    4947 } 
     
    7270 static void bgmac_chip_stats_update(struct bgmac *bgmac) 
    7371 { 
    74 @@ -889,8 +914,10 @@ static void bgmac_chip_reset(struct bgma 
     72@@ -889,8 +913,10 @@ static void bgmac_chip_reset(struct bgma 
    7573                        sw_type = et_swtype; 
    7674                } else if (ci->id == BCMA_CHIP_ID_BCM5357 && ci->pkg == 9) { 
     
    8583                bcma_chipco_chipctl_maskset(cc, 1, 
    8684                                            ~(BGMAC_CHIPCTL_1_IF_TYPE_MASK | 
    87 @@ -948,6 +975,7 @@ static void bgmac_chip_intrs_on(struct b 
     85@@ -948,6 +974,7 @@ static void bgmac_chip_intrs_on(struct b 
    8886 static void bgmac_chip_intrs_off(struct bgmac *bgmac) 
    8987 { 
     
    9391  
    9492 /* http://bcm-v4.sipsolutions.net/mac-gbit/gmac/gmac_enable */ 
    95 @@ -1004,8 +1032,6 @@ static void bgmac_enable(struct bgmac *b 
     93@@ -1004,8 +1031,6 @@ static void bgmac_enable(struct bgmac *b 
    9694 static void bgmac_chip_init(struct bgmac *bgmac, bool full_init) 
    9795 { 
     
    102100  
    103101        /* 1 interrupt per received frame */ 
    104 @@ -1014,21 +1040,14 @@ static void bgmac_chip_init(struct bgmac 
     102@@ -1014,21 +1039,14 @@ static void bgmac_chip_init(struct bgmac 
    105103        /* Enable 802.3x tx flow control (honor received PAUSE frames) */ 
    106104        bgmac_cmdcfg_maskset(bgmac, ~BGMAC_CMDCFG_RPI, 0, true); 
     
    128126        bgmac_write(bgmac, BGMAC_RXMAX_LENGTH, 32 + ETHER_MAX_LEN); 
    129127  
    130 @@ -1160,6 +1179,19 @@ static netdev_tx_t bgmac_start_xmit(stru 
     128@@ -1160,6 +1178,19 @@ static netdev_tx_t bgmac_start_xmit(stru 
    131129        return bgmac_dma_tx_add(bgmac, ring, skb); 
    132130 } 
     
    148146 { 
    149147        struct bgmac *bgmac = netdev_priv(net_dev); 
    150 @@ -1190,7 +1222,9 @@ static const struct net_device_ops bgmac 
     148@@ -1190,7 +1221,9 @@ static const struct net_device_ops bgmac 
    151149        .ndo_open               = bgmac_open, 
    152150        .ndo_stop               = bgmac_stop, 
     
    159157 }; 
    160158  
    161 @@ -1290,6 +1324,12 @@ static int bgmac_probe(struct bcma_devic 
     159@@ -1290,6 +1323,12 @@ static int bgmac_probe(struct bcma_devic 
    162160                return -ENOTSUPP; 
    163161        } 
  • trunk/target/linux/brcm47xx/patches-3.8/920-cache-wround.patch

    r34252 r35632  
    3535--- a/arch/mips/mm/tlbex.c 
    3636+++ b/arch/mips/mm/tlbex.c 
    37 @@ -917,6 +917,9 @@ build_get_pgde32(u32 **p, unsigned int t 
     37@@ -972,6 +972,9 @@ build_get_pgde32(u32 **p, unsigned int t 
    3838 #endif 
    3939        uasm_i_addu(p, ptr, tmp, ptr); 
     
    4545 #endif 
    4646        uasm_i_mfc0(p, tmp, C0_BADVADDR); /* get faulting address */ 
    47 @@ -1267,12 +1270,12 @@ static void __cpuinit build_r4000_tlb_re 
     47@@ -1314,12 +1317,12 @@ static void __cpuinit build_r4000_tlb_re 
    4848                        /* No need for uasm_i_nop */ 
    4949                } 
     
    6161 #endif 
    6262  
    63 @@ -1284,6 +1287,9 @@ static void __cpuinit build_r4000_tlb_re 
     63@@ -1331,6 +1334,9 @@ static void __cpuinit build_r4000_tlb_re 
    6464                build_update_entries(&p, K0, K1); 
    6565                build_tlb_write_entry(&p, &l, &r, tlb_random); 
     
    7070                uasm_i_eret(&p); /* return from trap */ 
    7171        } 
    72  #ifdef CONFIG_HUGETLB_PAGE 
    73 @@ -1800,12 +1806,12 @@ build_r4000_tlbchange_handler_head(u32 * 
     72 #ifdef CONFIG_MIPS_HUGE_TLB_SUPPORT 
     73@@ -1848,12 +1854,12 @@ build_r4000_tlbchange_handler_head(u32 * 
    7474 { 
    7575        struct work_registers wr = build_get_work_registers(p); 
     
    8787 #endif 
    8888  
    89 @@ -1844,6 +1850,9 @@ build_r4000_tlbchange_handler_tail(u32 * 
     89@@ -1892,6 +1898,9 @@ build_r4000_tlbchange_handler_tail(u32 * 
    9090        build_tlb_write_entry(p, l, r, tlb_indexed); 
    9191        uasm_l_leave(l, *p); 
     
    9999--- a/arch/mips/kernel/genex.S 
    100100+++ b/arch/mips/kernel/genex.S 
    101 @@ -22,6 +22,19 @@ 
    102  #include <asm/page.h> 
     101@@ -21,6 +21,19 @@ 
     102 #include <asm/war.h> 
    103103 #include <asm/thread_info.h> 
    104104  
     
    119119                .set push;                              \ 
    120120                .set    reorder;                        \ 
    121 @@ -54,7 +67,6 @@ NESTED(except_vec3_generic, 0, sp) 
     121@@ -53,7 +66,6 @@ NESTED(except_vec3_generic, 0, sp) 
    122122        .set    noat 
    123123 #ifdef CONFIG_BCM47XX 
     
    127127 #if R5432_CP0_INTERRUPT_WAR 
    128128        mfc0    k0, CP0_INDEX 
    129 @@ -79,6 +91,9 @@ NESTED(except_vec3_r4000, 0, sp) 
     129@@ -78,6 +90,9 @@ NESTED(except_vec3_r4000, 0, sp) 
    130130        .set    push 
    131131        .set    mips3 
  • trunk/target/linux/brcm47xx/patches-3.8/940-bcm47xx-yenta.patch

    r23945 r35632  
    2929                   "ISA IRQ mask 0x%04x, PCI irq %d\n", 
    3030                   socket->socket.irq_mask, socket->cb_irq); 
    31 @@ -1257,6 +1264,15 @@ static int __devinit yenta_probe(struct 
     31@@ -1257,6 +1264,15 @@ static int yenta_probe(struct pci_dev *d 
    3232        dev_printk(KERN_INFO, &dev->dev, 
    3333                   "Socket status: %08x\n", cb_readl(socket, CB_SOCKET_STATE)); 
  • trunk/target/linux/brcm47xx/patches-3.8/976-ssb_increase_pci_delay.patch

    r30481 r35632  
    11--- a/drivers/ssb/driver_pcicore.c 
    22+++ b/drivers/ssb/driver_pcicore.c 
    3 @@ -376,7 +376,7 @@ static void __devinit ssb_pcicore_init_h 
     3@@ -376,7 +376,7 @@ static void ssb_pcicore_init_hostmode(st 
    44        set_io_port_base(ssb_pcicore_controller.io_map_base); 
    55        /* Give some time to the PCI controller to configure itself with the new 
Note: See TracChangeset for help on using the changeset viewer.