// SPDX-License-Identifier: GPL-2.0+ /* * blkmap helper function * * Copyright (c) 2023, Linaro Limited */ #include #include #include #include int blkmap_create_ramdisk(const char *label, ulong image_addr, ulong image_size, struct udevice **devp) { int ret; lbaint_t blknum; struct blkmap *bm; struct blk_desc *desc; struct udevice *bm_dev; ret = blkmap_create(label, &bm_dev); if (ret) { log_err("failed to create blkmap\n"); return ret; } bm = dev_get_plat(bm_dev); desc = dev_get_uclass_plat(bm->blk); blknum = image_size >> desc->log2blksz; ret = blkmap_map_pmem(bm_dev, 0, blknum, image_addr); if (ret) { log_err("Unable to map %#llx at block %d : %d\n", (unsigned long long)image_addr, 0, ret); goto err; } log_info("Block %d+0x" LBAF " mapped to %#llx\n", 0, blknum, (unsigned long long)image_addr); ret = device_probe(bm->blk); if (ret) goto err; if (devp) *devp = bm_dev; return 0; err: blkmap_destroy(bm_dev); return ret; }