source: trunk/target/linux/generic/patches-2.6.38/421-redboot_boardconfig.patch @ 26690

Last change on this file since 26690 was 26690, checked in by nbd, 6 years ago

kernel: reorganize 2.6.38 patches, clean up block2mtd patches

File size: 1.8 KB
  • drivers/mtd/redboot.c

    a b  
    2929#include <linux/mtd/mtd.h> 
    3030#include <linux/mtd/partitions.h> 
    3131 
     32#define BOARD_CONFIG_PART               "boardconfig" 
     33 
    3234struct fis_image_desc { 
    3335    unsigned char name[16];      // Null terminated name 
    3436    uint32_t      flash_base;    // Address within FLASH of image 
    static int parse_redboot_partitions(stru 
    5961                             struct mtd_partition **pparts, 
    6062                             unsigned long fis_origin) 
    6163{ 
     64        unsigned long max_offset = 0; 
    6265        int nrparts = 0; 
    6366        struct fis_image_desc *buf; 
    6467        struct mtd_partition *parts; 
    static int parse_redboot_partitions(stru 
    227230                } 
    228231        } 
    229232#endif 
    230         parts = kzalloc(sizeof(*parts)*nrparts + nulllen + namelen, GFP_KERNEL); 
     233        parts = kzalloc(sizeof(*parts) * (nrparts + 1) + nulllen + namelen + sizeof(BOARD_CONFIG_PART), GFP_KERNEL); 
    231234 
    232235        if (!parts) { 
    233236                ret = -ENOMEM; 
    234237                goto out; 
    235238        } 
    236239 
    237         nullname = (char *)&parts[nrparts]; 
     240        nullname = (char *)&parts[nrparts + 1]; 
    238241#ifdef CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED 
    239242        if (nulllen > 0) { 
    240243                strcpy(nullname, nullstring); 
    static int parse_redboot_partitions(stru 
    253256        } 
    254257#endif 
    255258        for ( ; i<nrparts; i++) { 
     259                if(max_offset < buf[i].flash_base + buf[i].size) 
     260                        max_offset = buf[i].flash_base + buf[i].size; 
    256261                parts[i].size = fl->img->size; 
    257262                parts[i].offset = fl->img->flash_base; 
    258263                parts[i].name = names; 
    static int parse_redboot_partitions(stru 
    286291                fl = fl->next; 
    287292                kfree(tmp_fl); 
    288293        } 
     294        if(master->size - max_offset >= master->erasesize) 
     295        { 
     296                parts[nrparts].size = master->size - max_offset; 
     297                parts[nrparts].offset = max_offset; 
     298                parts[nrparts].name = names; 
     299                strcpy(names, BOARD_CONFIG_PART); 
     300                nrparts++; 
     301        } 
    289302        ret = nrparts; 
    290303        *pparts = parts; 
    291304 out: 
Note: See TracBrowser for help on using the repository browser.