OpenWrt – Rev 1

Subversion Repositories:
Rev:
--- a/drivers/mtd/bcm47xxpart.c
+++ b/drivers/mtd/bcm47xxpart.c
@@ -102,6 +102,7 @@ static int bcm47xxpart_parse(struct mtd_
        int trx_num = 0; /* Number of found TRX partitions */
        int possible_nvram_sizes[] = { 0x8000, 0xF000, 0x10000, };
        int err;
+       bool found_nvram = false;
 
        /*
         * Some really old flashes (like AT45DB*) had smaller erasesize-s, but
@@ -283,12 +284,23 @@ static int bcm47xxpart_parse(struct mtd_
                if (buf[0] == NVRAM_HEADER) {
                        bcm47xxpart_add_part(&parts[curr_part++], "nvram",
                                             master->size - blocksize, 0);
+                       found_nvram = true;
                        break;
                }
        }
 
        kfree(buf);
 
+       if (!found_nvram) {
+               pr_err("can not find a nvram partition reserve last block\n");
+               bcm47xxpart_add_part(&parts[curr_part++], "nvram_guess",
+                                    master->size - blocksize * 2, MTD_WRITEABLE);
+               for (i = 0; i < curr_part; i++) {
+                       if (parts[i].size + parts[i].offset == master->size)
+                               parts[i].offset -= blocksize * 2;
+               }
+       }
+
        /*
         * Assume that partitions end at the beginning of the one they are
         * followed by.