[U-Boot] [PATCH v4 6/6] common: Generic loader for file system
Michal Simek
michal.simek at xilinx.com
Wed Jul 18 14:48:20 UTC 2018
On 6.7.2018 10:28, tien.fong.chee at intel.com wrote:
> From: Tien Fong Chee <tien.fong.chee at intel.com>
>
> This is file system generic loader which can be used to load
> the file image from the storage into target such as memory.
> The consumer driver would then use this loader to program whatever,
> ie. the FPGA device.
>
> Signed-off-by: Tien Fong Chee <tien.fong.chee at intel.com>
> ---
> drivers/misc/Kconfig | 10 ++
> drivers/misc/Makefile | 1 +
> drivers/misc/fs_loader.c | 295 +++++++++++++++++++++++++++++++++++++++++++++++
> include/dm/uclass-id.h | 1 +
> include/fs_loader.h | 79 +++++++++++++
> 5 files changed, 386 insertions(+)
> create mode 100644 drivers/misc/fs_loader.c
> create mode 100644 include/fs_loader.h
>
> diff --git a/drivers/misc/Kconfig b/drivers/misc/Kconfig
> index 17b3a80..4163b4f 100644
> --- a/drivers/misc/Kconfig
> +++ b/drivers/misc/Kconfig
> @@ -277,4 +277,14 @@ config GDSYS_RXAUI_CTRL
> depends on MISC
> help
> Support gdsys FPGA's RXAUI control.
> +
> +config FS_LOADER
> + bool "Enable loader driver for file system"
> + help
> + This is file system generic loader which can be used to load
> + the file image from the storage into target such as memory.
> +
> + The consumer driver would then use this loader to program whatever,
> + ie. the FPGA device.
> +
> endmenu
> diff --git a/drivers/misc/Makefile b/drivers/misc/Makefile
> index 4ce9d21..67a36f8 100644
> --- a/drivers/misc/Makefile
> +++ b/drivers/misc/Makefile
> @@ -54,3 +54,4 @@ obj-$(CONFIG_STM32_RCC) += stm32_rcc.o
> obj-$(CONFIG_STM32MP_FUSE) += stm32mp_fuse.o
> obj-$(CONFIG_SYS_DPAA_QBMAN) += fsl_portals.o
> obj-$(CONFIG_GDSYS_RXAUI_CTRL) += gdsys_rxaui_ctrl.o
> +obj-$(CONFIG_FS_LOADER) += fs_loader.o
> diff --git a/drivers/misc/fs_loader.c b/drivers/misc/fs_loader.c
> new file mode 100644
> index 0000000..5fe642b
> --- /dev/null
> +++ b/drivers/misc/fs_loader.c
> @@ -0,0 +1,295 @@
> +/*
> + * Copyright (C) 2018 Intel Corporation <www.intel.com>
> + *
> + * SPDX-License-Identifier: GPL-2.0
> + */
> +#include <common.h>
> +#include <dm.h>
> +#include <errno.h>
> +#include <blk.h>
> +#include <fs.h>
> +#include <fs_loader.h>
> +#include <linux/string.h>
> +#include <mapmem.h>
> +#include <malloc.h>
> +#include <spl.h>
> +
> +DECLARE_GLOBAL_DATA_PTR;
> +
> +struct firmware_priv {
> + const char *name; /* Filename */
> + u32 offset; /* Offset of reading a file */
> +};
> +
> +#ifdef CONFIG_CMD_UBIFS
> +static int mount_ubifs(char *mtdpart, char *ubivol)
> +{
> + int ret = ubi_part(mtdpart, NULL);
> +
> + if (ret) {
> + debug("Cannot find mtd partition %s\n", mtdpart);
> + return ret;
> + }
> +
> + return cmd_ubifs_mount(ubivol);
> +}
> +
> +static int umount_ubifs(void)
> +{
> + return cmd_ubifs_umount();
> +}
> +#else
> +static int mount_ubifs(char *mtdpart, char *ubivol)
> +{
> + debug("Error: Cannot load image: no UBIFS support\n");
> + return -ENOSYS;
> +}
> +#endif
> +
> +static int select_fs_dev(struct device_platdata *plat)
> +{
> + int ret;
> +
> + if (plat->phandlepart.phandle) {
> + ofnode node;
> +
> + node = ofnode_get_by_phandle(plat->phandlepart.phandle);
> +
> + int of_offset = ofnode_to_offset(node);
> +
> + struct udevice *dev;
> +
> + ret = device_get_global_by_of_offset(of_offset, &dev);
> + if (!ret) {
> + struct blk_desc *desc = blk_get_by_device(dev);
> + if (desc) {
> + ret = fs_set_blk_dev_with_part(desc,
> + plat->phandlepart.partition);
> + } else {
> + debug("%s: No device found\n", __func__);
> + return -ENODEV;
> + }
> + }
> + } else if (plat->mtdpart && plat->ubivol) {
> + ret = mount_ubifs(plat->mtdpart, plat->ubivol);
> + if (ret)
> + return ret;
> +
> + ret = fs_set_blk_dev("ubi", NULL, FS_TYPE_UBIFS);
I am curious why it is in generic FS loader any code which target any
filesystem. It should be filesystem independent.
Also that DT binding is quite weird and I don't think you will get ACK
for this from device tree community at all. I think that calling via
platdata and avoid DT nodes would be better way to go.
Also I can't see any usage of firmware_loader from chosen which you have
in 4/6.
Also based on discussion with Marek I am not quite sure if this can be
used for his SPL FPGA A10 bitstream loading from FS by chuck from FIT
image as he mentioned.
And last but not least I am missing user of this loader. I think it will
be the best to also send a user of this to see how exactly this will be
called and used.
Thanks,
Michal
More information about the U-Boot
mailing list