071-redboot_boardconfig.patch 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. --- a/drivers/mtd/redboot.c
  2. +++ b/drivers/mtd/redboot.c
  3. @@ -11,6 +11,8 @@
  4. #include <linux/mtd/mtd.h>
  5. #include <linux/mtd/partitions.h>
  6. +#define BOARD_CONFIG_PART "boardconfig"
  7. +
  8. struct fis_image_desc {
  9. unsigned char name[16]; // Null terminated name
  10. uint32_t flash_base; // Address within FLASH of image
  11. @@ -41,6 +43,7 @@ static int parse_redboot_partitions(stru
  12. struct mtd_partition **pparts,
  13. unsigned long fis_origin)
  14. {
  15. + unsigned long max_offset = 0;
  16. int nrparts = 0;
  17. struct fis_image_desc *buf;
  18. struct mtd_partition *parts;
  19. @@ -209,14 +212,14 @@ static int parse_redboot_partitions(stru
  20. }
  21. }
  22. #endif
  23. - parts = kzalloc(sizeof(*parts)*nrparts + nulllen + namelen, GFP_KERNEL);
  24. + parts = kzalloc(sizeof(*parts) * (nrparts + 1) + nulllen + namelen + sizeof(BOARD_CONFIG_PART), GFP_KERNEL);
  25. if (!parts) {
  26. ret = -ENOMEM;
  27. goto out;
  28. }
  29. - nullname = (char *)&parts[nrparts];
  30. + nullname = (char *)&parts[nrparts + 1];
  31. #ifdef CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED
  32. if (nulllen > 0) {
  33. strcpy(nullname, nullstring);
  34. @@ -235,6 +238,8 @@ static int parse_redboot_partitions(stru
  35. }
  36. #endif
  37. for ( ; i<nrparts; i++) {
  38. + if(max_offset < buf[i].flash_base + buf[i].size)
  39. + max_offset = buf[i].flash_base + buf[i].size;
  40. parts[i].size = fl->img->size;
  41. parts[i].offset = fl->img->flash_base;
  42. parts[i].name = names;
  43. @@ -268,6 +273,14 @@ static int parse_redboot_partitions(stru
  44. fl = fl->next;
  45. kfree(tmp_fl);
  46. }
  47. + if(master->size - max_offset >= master->erasesize)
  48. + {
  49. + parts[nrparts].size = master->size - max_offset;
  50. + parts[nrparts].offset = max_offset;
  51. + parts[nrparts].name = names;
  52. + strcpy(names, BOARD_CONFIG_PART);
  53. + nrparts++;
  54. + }
  55. ret = nrparts;
  56. *pparts = parts;
  57. out: