Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 282855
b: refs/heads/master
c: 678eb9b
h: refs/heads/master
i:
  282853: 70912bb
  282851: 6f4a9f8
  282847: 3f23a6b
v: v3
  • Loading branch information
Jonas Gorski authored and David Woodhouse committed Jan 9, 2012
1 parent 717c746 commit a110d76
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 8 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: f2d9739b8e0bc9bdcc972950dd433b5083edf72f
refs/heads/master: 678eb9bb8114c47a7b89fd1288ff5dc760c53c1c
22 changes: 15 additions & 7 deletions trunk/drivers/mtd/bcm63xxpart.c
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,9 @@

#define BCM63XX_EXTENDED_SIZE 0xBFC00000 /* Extended flash address */

#define BCM63XX_MIN_CFE_SIZE 0x10000 /* always at least 64KiB */
#define BCM63XX_MIN_NVRAM_SIZE 0x10000 /* always at least 64KiB */

#define BCM63XX_CFE_MAGIC_OFFSET 0x4e0

static int bcm63xx_detect_cfe(struct mtd_info *master)
Expand Down Expand Up @@ -74,6 +77,7 @@ static int bcm63xx_parse_cfe_partitions(struct mtd_info *master,
size_t retlen;
unsigned int rootfsaddr, kerneladdr, spareaddr;
unsigned int rootfslen, kernellen, sparelen, totallen;
unsigned int cfelen, nvramlen;
int namelen = 0;
int i;
char *boardid;
Expand All @@ -82,14 +86,18 @@ static int bcm63xx_parse_cfe_partitions(struct mtd_info *master,
if (bcm63xx_detect_cfe(master))
return -EINVAL;

cfelen = max_t(uint32_t, master->erasesize, BCM63XX_MIN_CFE_SIZE);
nvramlen = max_t(uint32_t, master->erasesize, BCM63XX_MIN_NVRAM_SIZE);

/* Allocate memory for buffer */
buf = vmalloc(sizeof(struct bcm_tag));
if (!buf)
return -ENOMEM;

/* Get the tag */
ret = master->read(master, master->erasesize, sizeof(struct bcm_tag),
&retlen, (void *)buf);
ret = master->read(master, cfelen, sizeof(struct bcm_tag), &retlen,
(void *)buf);

if (retlen != sizeof(struct bcm_tag)) {
vfree(buf);
return -EIO;
Expand All @@ -106,8 +114,8 @@ static int bcm63xx_parse_cfe_partitions(struct mtd_info *master,

kerneladdr = kerneladdr - BCM63XX_EXTENDED_SIZE;
rootfsaddr = kerneladdr + kernellen;
spareaddr = roundup(totallen, master->erasesize) + master->erasesize;
sparelen = master->size - spareaddr - master->erasesize;
spareaddr = roundup(totallen, master->erasesize) + cfelen;
sparelen = master->size - spareaddr - nvramlen;
rootfslen = spareaddr - rootfsaddr;

/* Determine number of partitions */
Expand All @@ -131,7 +139,7 @@ static int bcm63xx_parse_cfe_partitions(struct mtd_info *master,
/* Start building partition list */
parts[curpart].name = "CFE";
parts[curpart].offset = 0;
parts[curpart].size = master->erasesize;
parts[curpart].size = cfelen;
curpart++;

if (kernellen > 0) {
Expand All @@ -151,8 +159,8 @@ static int bcm63xx_parse_cfe_partitions(struct mtd_info *master,
}

parts[curpart].name = "nvram";
parts[curpart].offset = master->size - master->erasesize;
parts[curpart].size = master->erasesize;
parts[curpart].offset = master->size - nvramlen;
parts[curpart].size = nvramlen;

/* Global partition "linux" to make easy firmware upgrade */
curpart++;
Expand Down

0 comments on commit a110d76

Please sign in to comment.