|
@@ -1,60 +0,0 @@
|
|
|
---- a/drivers/mtd/redboot.c
|
|
|
|
|
-+++ b/drivers/mtd/redboot.c
|
|
|
|
|
-@@ -30,6 +30,8 @@
|
|
|
|
|
- #include <linux/mtd/partitions.h>
|
|
|
|
|
- #include <linux/module.h>
|
|
|
|
|
-
|
|
|
|
|
-+#define BOARD_CONFIG_PART "boardconfig"
|
|
|
|
|
-+
|
|
|
|
|
- struct fis_image_desc {
|
|
|
|
|
- unsigned char name[16]; // Null terminated name
|
|
|
|
|
- uint32_t flash_base; // Address within FLASH of image
|
|
|
|
|
-@@ -60,6 +62,7 @@ static int parse_redboot_partitions(stru
|
|
|
|
|
- struct mtd_partition **pparts,
|
|
|
|
|
- struct mtd_part_parser_data *data)
|
|
|
|
|
- {
|
|
|
|
|
-+ unsigned long max_offset = 0;
|
|
|
|
|
- int nrparts = 0;
|
|
|
|
|
- struct fis_image_desc *buf;
|
|
|
|
|
- struct mtd_partition *parts;
|
|
|
|
|
-@@ -225,14 +228,14 @@ static int parse_redboot_partitions(stru
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- #endif
|
|
|
|
|
-- parts = kzalloc(sizeof(*parts)*nrparts + nulllen + namelen, GFP_KERNEL);
|
|
|
|
|
-+ parts = kzalloc(sizeof(*parts) * (nrparts + 1) + nulllen + namelen + sizeof(BOARD_CONFIG_PART), GFP_KERNEL);
|
|
|
|
|
-
|
|
|
|
|
- if (!parts) {
|
|
|
|
|
- ret = -ENOMEM;
|
|
|
|
|
- goto out;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
-- nullname = (char *)&parts[nrparts];
|
|
|
|
|
-+ nullname = (char *)&parts[nrparts + 1];
|
|
|
|
|
- #ifdef CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED
|
|
|
|
|
- if (nulllen > 0) {
|
|
|
|
|
- strcpy(nullname, nullstring);
|
|
|
|
|
-@@ -251,6 +254,8 @@ static int parse_redboot_partitions(stru
|
|
|
|
|
- }
|
|
|
|
|
- #endif
|
|
|
|
|
- for ( ; i<nrparts; i++) {
|
|
|
|
|
-+ if(max_offset < buf[i].flash_base + buf[i].size)
|
|
|
|
|
-+ max_offset = buf[i].flash_base + buf[i].size;
|
|
|
|
|
- parts[i].size = fl->img->size;
|
|
|
|
|
- parts[i].offset = fl->img->flash_base;
|
|
|
|
|
- parts[i].name = names;
|
|
|
|
|
-@@ -284,6 +289,14 @@ static int parse_redboot_partitions(stru
|
|
|
|
|
- fl = fl->next;
|
|
|
|
|
- kfree(tmp_fl);
|
|
|
|
|
- }
|
|
|
|
|
-+ if(master->size - max_offset >= master->erasesize)
|
|
|
|
|
-+ {
|
|
|
|
|
-+ parts[nrparts].size = master->size - max_offset;
|
|
|
|
|
-+ parts[nrparts].offset = max_offset;
|
|
|
|
|
-+ parts[nrparts].name = names;
|
|
|
|
|
-+ strcpy(names, BOARD_CONFIG_PART);
|
|
|
|
|
-+ nrparts++;
|
|
|
|
|
-+ }
|
|
|
|
|
- ret = nrparts;
|
|
|
|
|
- *pparts = parts;
|
|
|
|
|
- out:
|
|
|