lede/target/linux/ath25/patches-5.4/140-redboot_boardconfig.patch
AmadeusGhost 86bc29e4a8
kernel: bump 5.4 to 5.4.68 (#5555)
[mac80211]
 ca5ee6e mac80211: Fix potential endless loop
 2c14710 mac80211: add more AQL fixes/improvements
 91fb3ce mac80211: remove an obsolete patch that is no longer doing anything useful
 acf1733 mac80211: add preliminary support for enabling 802.11ax in config
 d717343 mac80211: update encap offload patches to the latest version
 673062f mac80211: allow bigger A-MSDU sizes in VHT, even if HT is limited
 caf7277 mac80211: do not allow bigger VHT MPDUs than the hardware supports
 cd36c0d mac80211: select the first available channel for 5GHz interfaces
 1c6d456 mac80211: fix regression in station connection monitor optimization
 4bd7689 mac80211: update sta connection monitor regression fix

[target]
 Sync: at91, ath25, ath79, lantiq, mediatek, mvebu.
2020-10-03 00:36:16 +08:00

61 lines
1.8 KiB
Diff

--- a/drivers/mtd/parsers/redboot.c
+++ b/drivers/mtd/parsers/redboot.c
@@ -16,6 +16,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
@@ -67,6 +69,7 @@ static int parse_redboot_partitions(stru
const 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;
@@ -234,14 +237,15 @@ 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);
@@ -260,6 +264,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;
@@ -293,6 +299,13 @@ 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: