
On Fri, Sep 22, 2023 at 04:11:14PM +0900, Masahisa Kojima wrote:
User needs to call several functions to create the ramdisk with blkmap. This adds the utility function to create blkmap device and mount the ramdisk.
Signed-off-by: Masahisa Kojima masahisa.kojima@linaro.org Reviewed-by: Simon Glass sjg@chromium.org
drivers/block/Makefile | 1 + drivers/block/blkmap.c | 15 ---------- drivers/block/blkmap_helper.c | 53 +++++++++++++++++++++++++++++++++++ include/blkmap.h | 29 +++++++++++++++++++ 4 files changed, 83 insertions(+), 15 deletions(-) create mode 100644 drivers/block/blkmap_helper.c
diff --git a/drivers/block/Makefile b/drivers/block/Makefile index a161d145fd..c3ccfc03e5 100644 --- a/drivers/block/Makefile +++ b/drivers/block/Makefile @@ -15,6 +15,7 @@ endif obj-$(CONFIG_SANDBOX) += sandbox.o host-uclass.o host_dev.o obj-$(CONFIG_$(SPL_TPL_)BLOCK_CACHE) += blkcache.o obj-$(CONFIG_BLKMAP) += blkmap.o +obj-$(CONFIG_BLKMAP) += blkmap_helper.o
obj-$(CONFIG_EFI_MEDIA) += efi-media-uclass.o obj-$(CONFIG_EFI_MEDIA_SANDBOX) += sb_efi_media.o diff --git a/drivers/block/blkmap.c b/drivers/block/blkmap.c index 2bb0acc20f..4e95997f61 100644 --- a/drivers/block/blkmap.c +++ b/drivers/block/blkmap.c @@ -66,21 +66,6 @@ struct blkmap_slice { void (*destroy)(struct blkmap *bm, struct blkmap_slice *bms); };
-/**
- struct blkmap - Block map
- Data associated with a blkmap.
- @label: Human readable name of this blkmap
- @blk: Underlying block device
- @slices: List of slices associated with this blkmap
- */
-struct blkmap {
- char *label;
- struct udevice *blk;
- struct list_head slices;
-};
static bool blkmap_slice_contains(struct blkmap_slice *bms, lbaint_t blknr) { return (blknr >= bms->blknr) && (blknr < (bms->blknr + bms->blkcnt)); diff --git a/drivers/block/blkmap_helper.c b/drivers/block/blkmap_helper.c new file mode 100644 index 0000000000..0f80035f57 --- /dev/null +++ b/drivers/block/blkmap_helper.c @@ -0,0 +1,53 @@ +// SPDX-License-Identifier: GPL-2.0+ +/*
- blkmap helper function
- Copyright (c) 2023, Linaro Limited
- */
+#include <blk.h> +#include <blkmap.h> +#include <dm/device.h> +#include <dm/device-internal.h>
+int blkmap_create_ramdisk(const char *label, ulong image_addr, int 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;
+} diff --git a/include/blkmap.h b/include/blkmap.h index af54583c7d..0d87e6db6b 100644 --- a/include/blkmap.h +++ b/include/blkmap.h @@ -7,6 +7,23 @@ #ifndef _BLKMAP_H #define _BLKMAP_H
+#include <dm/lists.h>
+/**
- struct blkmap - Block map
- Data associated with a blkmap.
- @label: Human readable name of this blkmap
- @blk: Underlying block device
- @slices: List of slices associated with this blkmap
- */
+struct blkmap {
- char *label;
- struct udevice *blk;
- struct list_head slices;
+};
/**
- blkmap_map_linear() - Map region of other block device
@@ -74,4 +91,16 @@ int blkmap_create(const char *label, struct udevice **devp); */ int blkmap_destroy(struct udevice *dev);
+/**
- blkmap_create_ramdisk() - Create new ramdisk with blkmap
- @label: Label of the new blkmap
- @image_addr: Target memory start address of this mapping
- @image_size: Target memory size of this mapping
- @devp: Updated with the address of the created blkmap device
- Returns: 0 on success, negative error code on failure
- */
+int blkmap_create_ramdisk(const char *label, ulong image_addr, int image_size,
struct udevice **devp);
#endif /* _BLKMAP_H */
2.34.1
Reviewed-by: Ilias Apalodimas ilias.apalodimas@linaro.org