| 1 | From 465f1b3ff24dbf3bec43dce344a7bc2640e05ffc Mon Sep 17 00:00:00 2001 |
| 2 | From: Jonas Gorski <jonas.gorski@gmail.com> |
| 3 | Date: Tue, 8 May 2012 09:53:07 +0200 |
| 4 | Subject: [PATCH 22/79] MTD: bcm63xxpart: make fixed part length calculation |
| 5 | more generic |
| 6 | |
| 7 | The CFE does not use 4K sectors even if the flash supports it, so |
| 8 | for the fixed partitions like CFE itself or NVRAM the erase block |
| 9 | size is always 64k or bigger. |
| 10 | |
| 11 | Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com> |
| 12 | --- |
| 13 | drivers/mtd/bcm63xxpart.c | 11 +++++++---- |
| 14 | 1 file changed, 7 insertions(+), 4 deletions(-) |
| 15 | |
| 16 | --- a/drivers/mtd/bcm63xxpart.c |
| 17 | +++ b/drivers/mtd/bcm63xxpart.c |
| 18 | @@ -37,8 +37,7 @@ |
| 19 | |
| 20 | #define BCM63XX_EXTENDED_SIZE 0xBFC00000 /* Extended flash address */ |
| 21 | |
| 22 | -#define BCM63XX_MIN_CFE_SIZE 0x10000 /* always at least 64KiB */ |
| 23 | -#define BCM63XX_MIN_NVRAM_SIZE 0x10000 /* always at least 64KiB */ |
| 24 | +#define BCM63XX_CFE_BLOCK_SIZE 0x10000 /* always at least 64KiB */ |
| 25 | |
| 26 | #define BCM63XX_CFE_MAGIC_OFFSET 0x4e0 |
| 27 | |
| 28 | @@ -79,6 +78,7 @@ static int bcm63xx_parse_cfe_partitions( |
| 29 | unsigned int rootfsaddr, kerneladdr, spareaddr; |
| 30 | unsigned int rootfslen, kernellen, sparelen, totallen; |
| 31 | unsigned int cfelen, nvramlen; |
| 32 | + unsigned int cfe_erasesize; |
| 33 | int i; |
| 34 | u32 computed_crc; |
| 35 | bool rootfs_first = false; |
| 36 | @@ -86,8 +86,11 @@ static int bcm63xx_parse_cfe_partitions( |
| 37 | if (bcm63xx_detect_cfe(master)) |
| 38 | return -EINVAL; |
| 39 | |
| 40 | - cfelen = max_t(uint32_t, master->erasesize, BCM63XX_MIN_CFE_SIZE); |
| 41 | - nvramlen = max_t(uint32_t, master->erasesize, BCM63XX_MIN_NVRAM_SIZE); |
| 42 | + cfe_erasesize = max_t(uint32_t, master->erasesize, |
| 43 | + BCM63XX_CFE_BLOCK_SIZE); |
| 44 | + |
| 45 | + cfelen = cfe_erasesize; |
| 46 | + nvramlen = cfe_erasesize; |
| 47 | |
| 48 | /* Allocate memory for buffer */ |
| 49 | buf = vmalloc(sizeof(struct bcm_tag)); |
| 50 | |