Changeset 28209


Ignore:
Timestamp:
Nov 15, 2015, 12:11:24 PM (19 months ago)
Author:
BrainSlayer
Message:

fix nvram_getall / show problem on mipsel broadcom devices

Location:
src/linux/universal
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • src/linux/universal/linux-3.10/arch/arm/mach-brcm-hnd/board_ns.c

    r28044 r28209  
    945945        }
    946946
     947//      if (boardnum == 20140309 && nvram_match("boardtype","0xE646") && nvram_match("boardrev","0x1200")) {
     948//              bootossz = 0x4000000;   
     949//              nvsz = 0x100000;
     950//      }
     951
    947952        if (((boardnum == 1) || (nvram_get("boardnum") == NULL)) && nvram_match("boardtype", "0x0646") && nvram_match("boardrev", "0x1100") && !strncmp(nvram_safe_get("modelNumber"),"EA6400",6)) {
    948953                bootossz = 0x3c00000;   
  • src/linux/universal/linux-3.10/arch/mips/brcm-boards/bcm947xx/nvram_linux.c

    r28085 r28209  
    204204                                char *sstr = "model_sku=EA2700";
    205205                                int slen = strlen(sstr);
    206                                 char *checkp = (char*)header;
    207                                 for (c=0;c<0x8000-slen;c++) {
    208                                     if (!memcmp(&checkp[c],sstr,slen)) {
    209                                             printk(KERN_INFO "detected Linksys EA2700 32KB nvram\n");
    210                                             NVRAMSIZEREAL = 0x8000;
    211                                             break;
     206                                char *checkp = (char *)header;
     207                                for (c = 0; c < 0x8000 - slen; c++) {
     208                                        if (!memcmp(&checkp[c], sstr, slen)) {
     209                                                printk(KERN_INFO "detected Linksys EA2700 32KB nvram\n");
     210                                                NVRAMSIZEREAL = 0x8000;
     211                                                break;
    212212                                        }
    213213                                }
     
    267267                                                        NVRAMSIZE = NVRAM_SPACE_32K;
    268268                                                        header_cfe = header_cfe3;
    269                                                 } 
     269                                                }
    270270                                                goto found;
    271271                                        }
     
    295295                                if (nvram_calc_crc(header) == (uint8) header->crc_ver_init) {
    296296                                        printk(KERN_NOTICE "found 256K nvram at %X\n", off - NVRAM_SPACE_60K);
    297 //                                      cfenvram = 1;
     297//                                      cfenvram = 1;
    298298                                        NVRAMSIZE = NVRAM_SPACE_256;
    299299                                        NVRAMSIZEREAL = NVRAM_SPACE_256;
     
    487487
    488488        if (!t) {
    489                 if (!(t = kmalloc(sizeof(struct nvram_tuple) + strlen(name) + 1,GFP_ATOMIC)))
     489                if (!(t = kmalloc(sizeof(struct nvram_tuple) + strlen(name) + 1, GFP_ATOMIC)))
    490490                        return NULL;
    491491
     
    791791        ssize_t ret;
    792792        unsigned long off;
    793 
     793        int v_alloc = 0;
     794
     795        if (count > 65536 * 2)
     796                v_alloc = 1;
    794797        if (count > sizeof(tmp)) {
    795                 if (!(name = kmalloc(count,GFP_ATOMIC)))
    796                         return -ENOMEM;
     798                if (v_alloc) {
     799                        if (!(name = vmalloc(count)))
     800                                return -ENOMEM;
     801                } else {
     802                        if (!(name = kmalloc(count, GFP_ATOMIC)))
     803                                return -ENOMEM;
     804                }
    797805        }
    798806
     
    829837        }
    830838
    831 //      flush_cache_all();
     839//      flush_cache_all();
    832840
    833841done:
    834         if (name != tmp)
    835                 kfree(name);
     842        if (name != tmp) {
     843                if (v_alloc)
     844                        vfree(name);
     845                else
     846                        kfree(name);
     847        }
    836848
    837849        return ret;
     
    842854        char tmp[100], *name = tmp, *value;
    843855        ssize_t ret;
     856        int v_alloc = 0;
     857
     858        if (count > 65536 * 2)
     859                v_alloc = 1;
    844860
    845861        if (count >= sizeof(tmp)) {
    846                 if (!(name = kmalloc(count + 1,GFP_ATOMIC)))
    847                         return -ENOMEM;
     862                if (v_alloc) {
     863                        if (!(name = vmalloc(count + 1)))
     864                                return -ENOMEM;
     865
     866                } else {
     867                        if (!(name = kmalloc(count + 1, GFP_ATOMIC)))
     868                                return -ENOMEM;
     869                }
     870
    848871        }
    849872
     
    861884
    862885done:
    863         if (name != tmp)
    864                 kfree(name);
     886        if (name != tmp) {
     887                if (v_alloc)
     888                        vfree(name);
     889                else
     890                        kfree(name);
     891        }
    865892
    866893        return ret;
     
    887914{
    888915        unsigned long offset = virt_to_phys(nvram_buf);
    889         if (remap_pfn_range(vma,vma->vm_start, offset>>PAGE_SHIFT, vma->vm_end-vma->vm_start,
    890                              vma->vm_page_prot))
    891                 {
     916        if (remap_pfn_range(vma, vma->vm_start, offset >> PAGE_SHIFT, vma->vm_end - vma->vm_start, vma->vm_page_prot)) {
    892917                return -EAGAIN;
    893                 }
    894 
    895 
    896 //      unsigned long offset = __pa(nvram_buf) >> PAGE_SHIFT;
     918        }
     919
     920//      unsigned long offset = __pa(nvram_buf) >> PAGE_SHIFT;
    897921//
    898 //      if (remap_pfn_range(vma, vma->vm_start, offset, vma->vm_end - vma->vm_start, vma->vm_page_prot))
    899 //              return -EAGAIN;
     922//      if (remap_pfn_range(vma, vma->vm_start, offset, vma->vm_end - vma->vm_start, vma->vm_page_prot))
     923//              return -EAGAIN;
    900924
    901925        return 0;
     
    10071031                        goto done_nofree;
    10081032                }
    1009                 mtd_read(nvram_mtd, nvram_mtd->erasesize - NVRAMSIZEREAL,NVRAMSIZEREAL, &len, buf);
     1033                mtd_read(nvram_mtd, nvram_mtd->erasesize - NVRAMSIZEREAL, NVRAMSIZEREAL, &len, buf);
    10101034                header = (struct nvram_header *)buf;
    10111035                len = 0;
  • src/linux/universal/linux-3.18/arch/arm/mach-brcm-hnd/board_ns.c

    r28130 r28209  
    944944        }
    945945
     946//      if (boardnum == 20140309 && nvram_match("boardtype","0xE646") && nvram_match("boardrev","0x1200")) {
     947//              bootossz = 0x4000000;   
     948//              nvsz = 0x100000;
     949//      }
     950
    946951        if (((boardnum == 1) || (nvram_get("boardnum") == NULL)) && nvram_match("boardtype", "0x0646") && nvram_match("boardrev", "0x1100") && !strncmp(nvram_safe_get("modelNumber"),"EA6400",6)) {
    947952                bootossz = 0x3c00000;   
  • src/linux/universal/linux-3.18/arch/mips/brcm-boards/bcm947xx/nvram_linux.c

    r28085 r28209  
    204204                                char *sstr = "model_sku=EA2700";
    205205                                int slen = strlen(sstr);
    206                                 char *checkp = (char*)header;
    207                                 for (c=0;c<0x8000-slen;c++) {
    208                                     if (!memcmp(&checkp[c],sstr,slen)) {
    209                                             printk(KERN_INFO "detected Linksys EA2700 32KB nvram\n");
    210                                             NVRAMSIZEREAL = 0x8000;
    211                                             break;
     206                                char *checkp = (char *)header;
     207                                for (c = 0; c < 0x8000 - slen; c++) {
     208                                        if (!memcmp(&checkp[c], sstr, slen)) {
     209                                                printk(KERN_INFO "detected Linksys EA2700 32KB nvram\n");
     210                                                NVRAMSIZEREAL = 0x8000;
     211                                                break;
    212212                                        }
    213213                                }
     
    267267                                                        NVRAMSIZE = NVRAM_SPACE_32K;
    268268                                                        header_cfe = header_cfe3;
    269                                                 } 
     269                                                }
    270270                                                goto found;
    271271                                        }
     
    295295                                if (nvram_calc_crc(header) == (uint8) header->crc_ver_init) {
    296296                                        printk(KERN_NOTICE "found 256K nvram at %X\n", off - NVRAM_SPACE_60K);
    297 //                                      cfenvram = 1;
     297//                                      cfenvram = 1;
    298298                                        NVRAMSIZE = NVRAM_SPACE_256;
    299299                                        NVRAMSIZEREAL = NVRAM_SPACE_256;
     
    487487
    488488        if (!t) {
    489                 if (!(t = kmalloc(sizeof(struct nvram_tuple) + strlen(name) + 1,GFP_ATOMIC)))
     489                if (!(t = kmalloc(sizeof(struct nvram_tuple) + strlen(name) + 1, GFP_ATOMIC)))
    490490                        return NULL;
    491491
     
    791791        ssize_t ret;
    792792        unsigned long off;
    793 
     793        int v_alloc = 0;
     794
     795        if (count > 65536 * 2)
     796                v_alloc = 1;
    794797        if (count > sizeof(tmp)) {
    795                 if (!(name = kmalloc(count,GFP_ATOMIC)))
    796                         return -ENOMEM;
     798                if (v_alloc) {
     799                        if (!(name = vmalloc(count)))
     800                                return -ENOMEM;
     801                } else {
     802                        if (!(name = kmalloc(count, GFP_ATOMIC)))
     803                                return -ENOMEM;
     804                }
    797805        }
    798806
     
    829837        }
    830838
    831 //      flush_cache_all();
     839//      flush_cache_all();
    832840
    833841done:
    834         if (name != tmp)
    835                 kfree(name);
     842        if (name != tmp) {
     843                if (v_alloc)
     844                        vfree(name);
     845                else
     846                        kfree(name);
     847        }
    836848
    837849        return ret;
     
    842854        char tmp[100], *name = tmp, *value;
    843855        ssize_t ret;
     856        int v_alloc = 0;
     857
     858        if (count > 65536 * 2)
     859                v_alloc = 1;
    844860
    845861        if (count >= sizeof(tmp)) {
    846                 if (!(name = kmalloc(count + 1,GFP_ATOMIC)))
    847                         return -ENOMEM;
     862                if (v_alloc) {
     863                        if (!(name = vmalloc(count + 1)))
     864                                return -ENOMEM;
     865
     866                } else {
     867                        if (!(name = kmalloc(count + 1, GFP_ATOMIC)))
     868                                return -ENOMEM;
     869                }
     870
    848871        }
    849872
     
    861884
    862885done:
    863         if (name != tmp)
    864                 kfree(name);
     886        if (name != tmp) {
     887                if (v_alloc)
     888                        vfree(name);
     889                else
     890                        kfree(name);
     891        }
    865892
    866893        return ret;
     
    887914{
    888915        unsigned long offset = virt_to_phys(nvram_buf);
    889         if (remap_pfn_range(vma,vma->vm_start, offset>>PAGE_SHIFT, vma->vm_end-vma->vm_start,
    890                              vma->vm_page_prot))
    891                 {
     916        if (remap_pfn_range(vma, vma->vm_start, offset >> PAGE_SHIFT, vma->vm_end - vma->vm_start, vma->vm_page_prot)) {
    892917                return -EAGAIN;
    893                 }
    894 
    895 
    896 //      unsigned long offset = __pa(nvram_buf) >> PAGE_SHIFT;
     918        }
     919
     920//      unsigned long offset = __pa(nvram_buf) >> PAGE_SHIFT;
    897921//
    898 //      if (remap_pfn_range(vma, vma->vm_start, offset, vma->vm_end - vma->vm_start, vma->vm_page_prot))
    899 //              return -EAGAIN;
     922//      if (remap_pfn_range(vma, vma->vm_start, offset, vma->vm_end - vma->vm_start, vma->vm_page_prot))
     923//              return -EAGAIN;
    900924
    901925        return 0;
     
    10071031                        goto done_nofree;
    10081032                }
    1009                 mtd_read(nvram_mtd, nvram_mtd->erasesize - NVRAMSIZEREAL,NVRAMSIZEREAL, &len, buf);
     1033                mtd_read(nvram_mtd, nvram_mtd->erasesize - NVRAMSIZEREAL, NVRAMSIZEREAL, &len, buf);
    10101034                header = (struct nvram_header *)buf;
    10111035                len = 0;
Note: See TracChangeset for help on using the changeset viewer.