Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 282858
b: refs/heads/master
c: f98872f
h: refs/heads/master
v: v3
  • Loading branch information
Jonas Gorski authored and David Woodhouse committed Jan 9, 2012
1 parent ab1653b commit 47b7b9c
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 17 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: 805166783893651e3352ee9e68ad5d0b68a769f1
refs/heads/master: f98872fc14ecb96f796443911b6bc4767e58e885
45 changes: 29 additions & 16 deletions trunk/drivers/mtd/bcm63xxpart.c
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@

#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt

#include <linux/crc32.h>
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/slab.h>
Expand Down Expand Up @@ -80,8 +81,7 @@ static int bcm63xx_parse_cfe_partitions(struct mtd_info *master,
unsigned int cfelen, nvramlen;
int namelen = 0;
int i;
char *boardid;
char *tagversion;
u32 computed_crc;

if (bcm63xx_detect_cfe(master))
return -EINVAL;
Expand All @@ -103,20 +103,33 @@ static int bcm63xx_parse_cfe_partitions(struct mtd_info *master,
return -EIO;
}

sscanf(buf->kernel_address, "%u", &kerneladdr);
sscanf(buf->kernel_length, "%u", &kernellen);
sscanf(buf->total_length, "%u", &totallen);
tagversion = &(buf->tag_version[0]);
boardid = &(buf->board_id[0]);

pr_info("CFE boot tag found with version %s and board type %s\n",
tagversion, boardid);

kerneladdr = kerneladdr - BCM63XX_EXTENDED_SIZE;
rootfsaddr = kerneladdr + kernellen;
spareaddr = roundup(totallen, master->erasesize) + cfelen;
sparelen = master->size - spareaddr - nvramlen;
rootfslen = spareaddr - rootfsaddr;
computed_crc = crc32_le(IMAGETAG_CRC_START, (u8 *)buf,
offsetof(struct bcm_tag, header_crc));
if (computed_crc == buf->header_crc) {
char *boardid = &(buf->board_id[0]);
char *tagversion = &(buf->tag_version[0]);

sscanf(buf->kernel_address, "%u", &kerneladdr);
sscanf(buf->kernel_length, "%u", &kernellen);
sscanf(buf->total_length, "%u", &totallen);

pr_info("CFE boot tag found with version %s and board type %s\n",
tagversion, boardid);

kerneladdr = kerneladdr - BCM63XX_EXTENDED_SIZE;
rootfsaddr = kerneladdr + kernellen;
spareaddr = roundup(totallen, master->erasesize) + cfelen;
sparelen = master->size - spareaddr - nvramlen;
rootfslen = spareaddr - rootfsaddr;
} else {
pr_warn("CFE boot tag CRC invalid (expected %08x, actual %08x)\n",
buf->header_crc, computed_crc);
kernellen = 0;
rootfslen = 0;
rootfsaddr = 0;
spareaddr = cfelen;
sparelen = master->size - cfelen - nvramlen;
}

/* Determine number of partitions */
namelen = 8;
Expand Down

0 comments on commit 47b7b9c

Please sign in to comment.