On Wed, 2018-07-25 at 11:48 +0200, Michal Simek wrote: > On 25.7.2018 08:31, Chee, Tien Fong wrote: > > > > On Wed, 2018-07-18 at 16:48 +0200, Michal Simek wrote: > > > > > > On 6.7.2018 10:28, tien.fong.c...@intel.com wrote: > > > > > > > > > > > > From: Tien Fong Chee <tien.fong.c...@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.c...@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. > > Because it supports our use case, and our preference using file > > system > > instead of RAW. As I agree with Tom, it can be evolved to support > > RAW > > in future. > It is not a problem that you have decided to support filesystems at > first place. I don't understand why you have UBIFS specific code > here. > > I would expect that this will done as CMD_FS_GENERIC option which is > based on code also able to work with UBIFS. It means this code will > call > generic function and based on FS type proper functions will be > chosen. > > I didn't work with UBIFS but it is supported in fs.c that's why I > would > expect that this shouldn't be a problem to get it work If fs_set_blk_dev is called without mounting the ubi first, error would be returned from blk_get_device_part_str().
Regards, TF _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot