diff --git a/drivers/mtd/mtd_blk.c b/drivers/mtd/mtd_blk.c index 472e19978d..b54b23d1bd 100644 --- a/drivers/mtd/mtd_blk.c +++ b/drivers/mtd/mtd_blk.c @@ -9,6 +9,7 @@ #include #include #include +#include #include #include #include @@ -140,6 +141,34 @@ void mtd_blk_map_partitions(struct blk_desc *desc) } } +void mtd_blk_map_fit(struct blk_desc *desc, ulong sector, void *fit) +{ + struct mtd_info *mtd = NULL; + int totalsize = 0; + + if (desc->if_type != IF_TYPE_MTD) + return; + + if (desc->devnum == BLK_MTD_NAND) { +#if defined(CONFIG_NAND) + mtd = dev_get_priv(desc->bdev->parent); +#endif + } else if (desc->devnum == BLK_MTD_SPI_NAND) { +#if defined(CONFIG_MTD_SPI_NAND) + mtd = desc->bdev->priv; +#endif + } + +#ifdef CONFIG_SPL_FIT + if (fit_get_totalsize(fit, &totalsize)) + debug("Can not find /totalsize node.\n"); +#endif + if (mtd && totalsize) { + if (mtd_blk_map_table_init(desc, sector << 9, totalsize + (size_t)mtd->erasesize)) + debug("Map block table fail.\n"); + } +} + static __maybe_unused int mtd_map_read(struct mtd_info *mtd, loff_t offset, size_t *length, size_t *actual, loff_t lim, u_char *buffer) diff --git a/include/mtd_blk.h b/include/mtd_blk.h index eadea048db..e5e4b23ecf 100644 --- a/include/mtd_blk.h +++ b/include/mtd_blk.h @@ -16,5 +16,6 @@ int mtd_blk_map_table_init(struct blk_desc *desc, loff_t offset, size_t length); void mtd_blk_map_partitions(struct blk_desc *desc); +void mtd_blk_map_fit(struct blk_desc *desc, ulong sector, void *fit); #endif