Skip to content

Commit

Permalink
mtd: partitions: Add OF support to RedBoot partitions
Browse files Browse the repository at this point in the history
This adds device tree support for RedBoot partitioning. We
read out the FIS directory block information from the device
tree and then parse the partition table from there.

Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Boris Brezillon <boris.brezillon@bootlin.com>
  • Loading branch information
Linus Walleij authored and Boris Brezillon committed Nov 12, 2018
1 parent e0be6a6 commit c0e118c
Showing 1 changed file with 31 additions and 1 deletion.
32 changes: 31 additions & 1 deletion drivers/mtd/parsers/redboot.c
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@
#include <linux/slab.h>
#include <linux/init.h>
#include <linux/vmalloc.h>

#include <linux/of.h>
#include <linux/mtd/mtd.h>
#include <linux/mtd/partitions.h>
#include <linux/module.h>
Expand Down Expand Up @@ -56,6 +56,27 @@ static inline int redboot_checksum(struct fis_image_desc *img)
return 1;
}

static void parse_redboot_of(struct mtd_info *master)
{
struct device_node *np;
u32 dirblock;
int ret;

np = mtd_get_of_node(master);
if (!np)
return;

ret = of_property_read_u32(np, "fis-index-block", &dirblock);
if (ret)
return;

/*
* Assign the block found in the device tree to the local
* directory block pointer.
*/
directory = dirblock;
}

static int parse_redboot_partitions(struct mtd_info *master,
const struct mtd_partition **pparts,
struct mtd_part_parser_data *data)
Expand All @@ -76,6 +97,8 @@ static int parse_redboot_partitions(struct mtd_info *master,
static char nullstring[] = "unallocated";
#endif

parse_redboot_of(master);

if ( directory < 0 ) {
offset = master->size + directory * master->erasesize;
while (mtd_block_isbad(master, offset)) {
Expand Down Expand Up @@ -289,9 +312,16 @@ static int parse_redboot_partitions(struct mtd_info *master,
return ret;
}

static const struct of_device_id mtd_parser_redboot_of_match_table[] = {
{ .compatible = "redboot-fis" },
{},
};
MODULE_DEVICE_TABLE(of, mtd_parser_redboot_of_match_table);

static struct mtd_part_parser redboot_parser = {
.parse_fn = parse_redboot_partitions,
.name = "RedBoot",
.of_match_table = mtd_parser_redboot_of_match_table,
};
module_mtd_part_parser(redboot_parser);

Expand Down

0 comments on commit c0e118c

Please sign in to comment.