Skip to content

Commit

Permalink
mtd: bcm63xxpart: Move NOR flash layout to a separate function
Browse files Browse the repository at this point in the history
Move the NOR flash layout to a separate function to allow the NAND flash
layout to be supported.

Signed-off-by: Simon Arlott <simon@fire.lp0.eu>
Signed-off-by: Brian Norris <computersforpeace@gmail.com>
  • Loading branch information
Simon Arlott authored and Brian Norris committed Feb 12, 2016
1 parent 2c4fd43 commit 4110fdd
Showing 1 changed file with 32 additions and 22 deletions.
54 changes: 32 additions & 22 deletions drivers/mtd/bcm63xxpart.c
Original file line number Diff line number Diff line change
Expand Up @@ -124,13 +124,11 @@ static int bcm63xx_read_image_tag(struct mtd_info *master, const char *name,
return 1;
}

static int bcm63xx_parse_cfe_partitions(struct mtd_info *master,
const struct mtd_partition **pparts,
struct mtd_part_parser_data *data)
static int bcm63xx_parse_cfe_nor_partitions(struct mtd_info *master,
const struct mtd_partition **pparts, struct bcm963xx_nvram *nvram)
{
/* CFE, NVRAM and global Linux are always present */
int nrparts = 3, curpart = 0;
struct bcm963xx_nvram *nvram = NULL;
struct bcm_tag *buf = NULL;
struct mtd_partition *parts;
int ret;
Expand All @@ -141,30 +139,16 @@ static int bcm63xx_parse_cfe_partitions(struct mtd_info *master,
int i;
bool rootfs_first = false;

if (bcm63xx_detect_cfe(master))
return -EINVAL;

nvram = vzalloc(sizeof(*nvram));
if (!nvram)
return -ENOMEM;

ret = bcm63xx_read_nvram(master, nvram);
if (ret)
goto out;

cfe_erasesize = max_t(uint32_t, master->erasesize,
BCM963XX_CFE_BLOCK_SIZE);

cfelen = cfe_erasesize;
nvramlen = nvram->psi_size * SZ_1K;
nvramlen = roundup(nvramlen, cfe_erasesize);

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

/* Get the tag */
ret = bcm63xx_read_image_tag(master, "rootfs", cfelen, buf);
Expand Down Expand Up @@ -234,7 +218,6 @@ static int bcm63xx_parse_cfe_partitions(struct mtd_info *master,
if (kernellen > 0)
nrparts++;

/* Ask kernel for more memory */
parts = kzalloc(sizeof(*parts) * nrparts + 10 * nrparts, GFP_KERNEL);
if (!parts) {
ret = -ENOMEM;
Expand Down Expand Up @@ -292,13 +275,40 @@ static int bcm63xx_parse_cfe_partitions(struct mtd_info *master,
ret = 0;

out:
vfree(nvram);
vfree(buf);

if (ret)
return ret;

return nrparts;
}

static int bcm63xx_parse_cfe_partitions(struct mtd_info *master,
const struct mtd_partition **pparts,
struct mtd_part_parser_data *data)
{
struct bcm963xx_nvram *nvram = NULL;
int ret;

if (bcm63xx_detect_cfe(master))
return -EINVAL;

nvram = vzalloc(sizeof(*nvram));
if (!nvram)
return -ENOMEM;

ret = bcm63xx_read_nvram(master, nvram);
if (ret)
goto out;

if (!mtd_type_is_nand(master))
ret = bcm63xx_parse_cfe_nor_partitions(master, pparts, nvram);
else
ret = -EINVAL;

out:
vfree(nvram);
return ret;
};

static struct mtd_part_parser bcm63xx_cfe_parser = {
Expand Down

0 comments on commit 4110fdd

Please sign in to comment.