[atheros] move redboot boardconfig patch into target folder
authorJohn Crispin <john@openwrt.org>
Mon, 12 Nov 2012 07:56:37 +0000 (07:56 +0000)
committerJohn Crispin <john@openwrt.org>
Mon, 12 Nov 2012 07:56:37 +0000 (07:56 +0000)
SVN-Revision: 34166

target/linux/atheros/patches-3.3/140-redboot_boardconfig.patch [new file with mode: 0644]
target/linux/atheros/patches-3.3/140-redboot_partition_scan.patch [deleted file]
target/linux/atheros/patches-3.3/141-redboot_partition_scan.patch [new file with mode: 0644]
target/linux/atheros/patches-3.3/141-redboot_various_erase_size_fix.patch [deleted file]
target/linux/atheros/patches-3.3/142-redboot_various_erase_size_fix.patch [new file with mode: 0644]
target/linux/generic/patches-3.3/421-redboot_boardconfig.patch [deleted file]
target/linux/generic/patches-3.6/421-redboot_boardconfig.patch [deleted file]

diff --git a/target/linux/atheros/patches-3.3/140-redboot_boardconfig.patch b/target/linux/atheros/patches-3.3/140-redboot_boardconfig.patch
new file mode 100644 (file)
index 0000000..db8377b
--- /dev/null
@@ -0,0 +1,60 @@
+--- 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;
+@@ -227,14 +230,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);
+@@ -253,6 +256,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;
+@@ -286,6 +291,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:
diff --git a/target/linux/atheros/patches-3.3/140-redboot_partition_scan.patch b/target/linux/atheros/patches-3.3/140-redboot_partition_scan.patch
deleted file mode 100644 (file)
index c83823a..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
---- a/drivers/mtd/redboot.c
-+++ b/drivers/mtd/redboot.c
-@@ -79,6 +79,11 @@ static int parse_redboot_partitions(stru
-       static char nullstring[] = "unallocated";
- #endif
-+      buf = vmalloc(master->erasesize);
-+      if (!buf)
-+              return -ENOMEM;
-+              
-+ restart:
-       if ( directory < 0 ) {
-               offset = master->size + directory * master->erasesize;
-               while (mtd_can_have_bb(master) &&
-@@ -86,6 +91,7 @@ static int parse_redboot_partitions(stru
-                       if (!offset) {
-                       nogood:
-                               printk(KERN_NOTICE "Failed to find a non-bad block to check for RedBoot partition table\n");
-+                              vfree(buf);
-                               return -EIO;
-                       }
-                       offset -= master->erasesize;
-@@ -99,10 +105,6 @@ static int parse_redboot_partitions(stru
-                               goto nogood;
-               }
-       }
--      buf = vmalloc(master->erasesize);
--
--      if (!buf)
--              return -ENOMEM;
-       printk(KERN_NOTICE "Searching for RedBoot partition table in %s at offset 0x%lx\n",
-              master->name, offset);
-@@ -175,6 +177,11 @@ static int parse_redboot_partitions(stru
-       }
-       if (i == numslots) {
-               /* Didn't find it */
-+              if (offset + master->erasesize < master->size) {
-+                      /* not at the end of the flash yet, maybe next block :) */
-+                      directory++;
-+                      goto restart;
-+              }
-               printk(KERN_NOTICE "No RedBoot partition table detected in %s\n",
-                      master->name);
-               ret = 0;
diff --git a/target/linux/atheros/patches-3.3/141-redboot_partition_scan.patch b/target/linux/atheros/patches-3.3/141-redboot_partition_scan.patch
new file mode 100644 (file)
index 0000000..c83823a
--- /dev/null
@@ -0,0 +1,45 @@
+--- a/drivers/mtd/redboot.c
++++ b/drivers/mtd/redboot.c
+@@ -79,6 +79,11 @@ static int parse_redboot_partitions(stru
+       static char nullstring[] = "unallocated";
+ #endif
++      buf = vmalloc(master->erasesize);
++      if (!buf)
++              return -ENOMEM;
++              
++ restart:
+       if ( directory < 0 ) {
+               offset = master->size + directory * master->erasesize;
+               while (mtd_can_have_bb(master) &&
+@@ -86,6 +91,7 @@ static int parse_redboot_partitions(stru
+                       if (!offset) {
+                       nogood:
+                               printk(KERN_NOTICE "Failed to find a non-bad block to check for RedBoot partition table\n");
++                              vfree(buf);
+                               return -EIO;
+                       }
+                       offset -= master->erasesize;
+@@ -99,10 +105,6 @@ static int parse_redboot_partitions(stru
+                               goto nogood;
+               }
+       }
+-      buf = vmalloc(master->erasesize);
+-
+-      if (!buf)
+-              return -ENOMEM;
+       printk(KERN_NOTICE "Searching for RedBoot partition table in %s at offset 0x%lx\n",
+              master->name, offset);
+@@ -175,6 +177,11 @@ static int parse_redboot_partitions(stru
+       }
+       if (i == numslots) {
+               /* Didn't find it */
++              if (offset + master->erasesize < master->size) {
++                      /* not at the end of the flash yet, maybe next block :) */
++                      directory++;
++                      goto restart;
++              }
+               printk(KERN_NOTICE "No RedBoot partition table detected in %s\n",
+                      master->name);
+               ret = 0;
diff --git a/target/linux/atheros/patches-3.3/141-redboot_various_erase_size_fix.patch b/target/linux/atheros/patches-3.3/141-redboot_various_erase_size_fix.patch
deleted file mode 100644 (file)
index 0ad155e..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
---- a/drivers/mtd/redboot.c
-+++ b/drivers/mtd/redboot.c
-@@ -58,6 +58,22 @@ static inline int redboot_checksum(struc
-       return 1;
- }
-+static uint32_t mtd_get_offset_erasesize(struct mtd_info *mtd, uint64_t offset)
-+{
-+      struct mtd_erase_region_info *regions = mtd->eraseregions;
-+      int i;
-+
-+      for (i = 0; i < mtd->numeraseregions; i++) {
-+              if (regions[i].offset +
-+                  regions[i].numblocks * regions[i].erasesize <= offset)
-+                      continue;
-+
-+              return regions[i].erasesize;
-+      }
-+
-+      return mtd->erasesize;
-+}
-+
- static int parse_redboot_partitions(struct mtd_info *master,
-                                   struct mtd_partition **pparts,
-                                   struct mtd_part_parser_data *data)
-@@ -74,6 +90,7 @@ static int parse_redboot_partitions(stru
-       int namelen = 0;
-       int nulllen = 0;
-       int numslots;
-+      int first_slot;
-       unsigned long offset;
- #ifdef CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED
-       static char nullstring[] = "unallocated";
-@@ -188,7 +205,10 @@ static int parse_redboot_partitions(stru
-               goto out;
-       }
--      for (i = 0; i < numslots; i++) {
-+      first_slot = (buf[i].flash_base & (master->erasesize - 1)) /
-+                   sizeof(struct fis_image_desc);
-+
-+      for (i = first_slot; i < first_slot + numslots; i++) {
-               struct fis_list *new_fl, **prev;
-               if (buf[i].name[0] == 0xff) {
-@@ -263,12 +283,13 @@ 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;
-+              if (max_offset < parts[i].offset + parts[i].size)
-+                      max_offset = parts[i].offset + parts[i].size;
-+
-               strcpy(names, fl->img->name);
- #ifdef CONFIG_MTD_REDBOOT_PARTS_READONLY
-               if (!memcmp(names, "RedBoot", 8) ||
-@@ -298,7 +319,9 @@ static int parse_redboot_partitions(stru
-               fl = fl->next;
-               kfree(tmp_fl);
-       }
--      if(master->size - max_offset >= master->erasesize)
-+
-+      if (master->size - max_offset >=
-+          mtd_get_offset_erasesize(master, max_offset))
-       {
-               parts[nrparts].size = master->size - max_offset;
-               parts[nrparts].offset = max_offset;
diff --git a/target/linux/atheros/patches-3.3/142-redboot_various_erase_size_fix.patch b/target/linux/atheros/patches-3.3/142-redboot_various_erase_size_fix.patch
new file mode 100644 (file)
index 0000000..0ad155e
--- /dev/null
@@ -0,0 +1,72 @@
+--- a/drivers/mtd/redboot.c
++++ b/drivers/mtd/redboot.c
+@@ -58,6 +58,22 @@ static inline int redboot_checksum(struc
+       return 1;
+ }
++static uint32_t mtd_get_offset_erasesize(struct mtd_info *mtd, uint64_t offset)
++{
++      struct mtd_erase_region_info *regions = mtd->eraseregions;
++      int i;
++
++      for (i = 0; i < mtd->numeraseregions; i++) {
++              if (regions[i].offset +
++                  regions[i].numblocks * regions[i].erasesize <= offset)
++                      continue;
++
++              return regions[i].erasesize;
++      }
++
++      return mtd->erasesize;
++}
++
+ static int parse_redboot_partitions(struct mtd_info *master,
+                                   struct mtd_partition **pparts,
+                                   struct mtd_part_parser_data *data)
+@@ -74,6 +90,7 @@ static int parse_redboot_partitions(stru
+       int namelen = 0;
+       int nulllen = 0;
+       int numslots;
++      int first_slot;
+       unsigned long offset;
+ #ifdef CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED
+       static char nullstring[] = "unallocated";
+@@ -188,7 +205,10 @@ static int parse_redboot_partitions(stru
+               goto out;
+       }
+-      for (i = 0; i < numslots; i++) {
++      first_slot = (buf[i].flash_base & (master->erasesize - 1)) /
++                   sizeof(struct fis_image_desc);
++
++      for (i = first_slot; i < first_slot + numslots; i++) {
+               struct fis_list *new_fl, **prev;
+               if (buf[i].name[0] == 0xff) {
+@@ -263,12 +283,13 @@ 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;
++              if (max_offset < parts[i].offset + parts[i].size)
++                      max_offset = parts[i].offset + parts[i].size;
++
+               strcpy(names, fl->img->name);
+ #ifdef CONFIG_MTD_REDBOOT_PARTS_READONLY
+               if (!memcmp(names, "RedBoot", 8) ||
+@@ -298,7 +319,9 @@ static int parse_redboot_partitions(stru
+               fl = fl->next;
+               kfree(tmp_fl);
+       }
+-      if(master->size - max_offset >= master->erasesize)
++
++      if (master->size - max_offset >=
++          mtd_get_offset_erasesize(master, max_offset))
+       {
+               parts[nrparts].size = master->size - max_offset;
+               parts[nrparts].offset = max_offset;
diff --git a/target/linux/generic/patches-3.3/421-redboot_boardconfig.patch b/target/linux/generic/patches-3.3/421-redboot_boardconfig.patch
deleted file mode 100644 (file)
index db8377b..0000000
+++ /dev/null
@@ -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;
-@@ -227,14 +230,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);
-@@ -253,6 +256,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;
-@@ -286,6 +291,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:
diff --git a/target/linux/generic/patches-3.6/421-redboot_boardconfig.patch b/target/linux/generic/patches-3.6/421-redboot_boardconfig.patch
deleted file mode 100644 (file)
index 4191b0d..0000000
+++ /dev/null
@@ -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: