mirror of
https://github.com/u-boot/u-boot.git
synced 2025-04-26 07:17:10 +00:00
blk: blkmap: add ramdisk creation utility function
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> Reviewed-by: Ilias Apalodimas <ilias.apalodimas@linaro.org> Signed-off-by: Ilias Apalodimas <ilias.apalodimas@linaro.org>
This commit is contained in:
parent
8cf18da1a9
commit
d822255d65
4 changed files with 84 additions and 16 deletions
|
@ -15,7 +15,8 @@ obj-$(CONFIG_RKMTD) += rkmtd.o
|
|||
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_$(SPL_TPL_)BLKMAP) += blkmap.o
|
||||
obj-$(CONFIG_$(SPL_TPL_)BLKMAP) += blkmap_helper.o
|
||||
|
||||
obj-$(CONFIG_EFI_MEDIA) += efi-media-uclass.o
|
||||
obj-$(CONFIG_EFI_MEDIA_SANDBOX) += sb_efi_media.o
|
||||
|
|
|
@ -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));
|
||||
|
|
53
drivers/block/blkmap_helper.c
Normal file
53
drivers/block/blkmap_helper.c
Normal file
|
@ -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, 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;
|
||||
}
|
|
@ -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, ulong image_size,
|
||||
struct udevice **devp);
|
||||
|
||||
#endif /* _BLKMAP_H */
|
||||
|
|
Loading…
Add table
Reference in a new issue