On Sel, 2017-10-31 at 12:01 +0100, Marek Vasut wrote: > On 10/31/2017 11:52 AM, tien.fong.c...@intel.com wrote: > > > > From: Tien Fong Chee <tien.fong.c...@intel.com> > > > > Generic firmware loader framework contains some common > > functionality > > which is reusable by any specific driver file system firmware > > loader. > > Specific driver file system firmware loader handling can be defined > > with both weak function fsloader_preprocess and fs_loading. > > > > Signed-off-by: Tien Fong Chee <tien.fong.c...@intel.com> > Why did you put everything into splash_source.c ? If this is supposed > to > be a generic loader, I'm sure not everyone would want to enable > splash > screen support to get generic firmware loader support. > > The API should looks more like the linux firmware API. > Initially, i created the new file called loadfs.c, which contains common codes and generic fs firmware loader. I plan to replace fs loader in splash_source.c at seperate patchset.
Then, i changed the codes directly on splash_source.c based on your comment. May be i misunderstood your meaning. > > > > --- > > common/Makefile | 7 +- > > common/splash_source.c | 110 > > +++++++++++++++++++++++++------- > > configs/socfpga_arria10_defconfig | 2 + > > include/configs/socfpga_arria10_socdk.h | 3 + > > include/splash.h | 3 + > > 5 files changed, 99 insertions(+), 26 deletions(-) > > > > diff --git a/common/Makefile b/common/Makefile > > index 801ea31..965a217 100644 > > --- a/common/Makefile > > +++ b/common/Makefile > > @@ -47,8 +47,6 @@ obj-$(CONFIG_MTD_NOR_FLASH) += flash.o > > obj-$(CONFIG_CMD_KGDB) += kgdb.o kgdb_stubs.o > > obj-$(CONFIG_I2C_EDID) += edid.o > > obj-$(CONFIG_KALLSYMS) += kallsyms.o > > -obj-y += splash.o > > -obj-$(CONFIG_SPLASH_SOURCE) += splash_source.o > > ifndef CONFIG_DM_VIDEO > > obj-$(CONFIG_LCD) += lcd.o lcd_console.o > > endif > > @@ -102,7 +100,6 @@ endif > > obj-y += image.o > > obj-$(CONFIG_ANDROID_BOOT_IMAGE) += image-android.o > > obj-$(CONFIG_$(SPL_TPL_)OF_LIBFDT) += image-fdt.o > > -obj-$(CONFIG_$(SPL_TPL_)FIT) += image-fit.o > > obj-$(CONFIG_FIT_EMBED) += boot_fit.o common_fit.o > > obj-$(CONFIG_$(SPL_TPL_)FIT_SIGNATURE) += image-sig.o > > obj-$(CONFIG_IO_TRACE) += iotrace.o > > @@ -130,3 +127,7 @@ obj-$(CONFIG_CMD_DFU) += dfu.o > > obj-y += command.o > > obj-y += s_record.o > > obj-y += xyzModem.o > > + > > +obj-y += splash.o > > +obj-$(CONFIG_SPLASH_SOURCE) += splash_source.o > > +obj-$(CONFIG_$(SPL_TPL_)FIT) += image-fit.o > > diff --git a/common/splash_source.c b/common/splash_source.c > > index e0defde..1413945 100644 > > --- a/common/splash_source.c > > +++ b/common/splash_source.c > > @@ -109,7 +109,7 @@ splash_address_too_high: > > return -EFAULT; > > } > > > > -static int splash_select_fs_dev(struct splash_location *location) > > +int splash_select_fs_dev(struct splash_location *location) > > { > > int res; > > > > @@ -140,6 +140,7 @@ static int splash_select_fs_dev(struct > > splash_location *location) > > return res; > > } > > > > +#ifndef CONFIG_SPL_BUILD > > #ifdef CONFIG_USB_STORAGE > > static int splash_init_usb(void) > > { > > @@ -175,6 +176,7 @@ static inline int splash_init_sata(void) > > return -ENOSYS; > > } > > #endif > > +#endif > > > > #ifdef CONFIG_CMD_UBIFS > > static int splash_mount_ubifs(struct splash_location *location) > > @@ -213,22 +215,99 @@ static inline int splash_umount_ubifs(void) > > > > #define SPLASH_SOURCE_DEFAULT_FILE_NAME "splash.bmp > > " > > > > -static int splash_load_fs(struct splash_location *location, u32 > > bmp_load_addr) > > +/** > > + * fsloader_preprocess - Any prepocessing before calling > > filesystem loader. > > + * > > + * @locations: An array of supported splash > > locations. > > + * @file_info: Description and attributes to the > > image. > > + * Could be structure pointer, and any type > > pointer. > > + * @filename: Image filename in flashes. > > + * @bmp_load_addr: Target memory location image loaded to. > > + * > > + * @return: If 0, processing is succesfull. Filename > > pointer contains > > + * valid filename. > > + * If -ve, processing is failed. > > + */ > > +__weak int fsloader_preprocess(struct splash_location *location, > > + void *file_info, char **filename, > > + u32 bmp_load_addr) > > { > > int res = 0; > > loff_t bmp_size; > > - loff_t actread; > > char *splash_file; > > > > - splash_file = env_get("splashfile"); > > + splash_file = env_get((char *)file_info); > > + > > if (!splash_file) > > splash_file = SPLASH_SOURCE_DEFAULT_FILE_NAME; > > > > + res = splash_select_fs_dev(location); > > + if (res) { > > + error("Error : Failed to select FS device\n"); > > + return -EPERM; > > + } > > + > > + res = fs_size(splash_file, &bmp_size); > > + if (res) { > > + error("Error (%d): cannot determine file size\n", > > res); > > + return -ENOENT; > > + } > > + > > + if ((u32)bmp_load_addr + bmp_size >= gd->start_addr_sp) { > > + error("Error: splashimage address too high. Data > > overwrites "); > > + error("U-Boot and/or placed beyond DRAM > > boundaries.\n"); > > + res = -EFAULT; > > + return -EFAULT; > > + } > > + > > + *filename = splash_file; > > + > > + return res; > > +} > > + > > +/** > > + * fs_loading - This place is for implementing whaterver blob + > > whatever > > + * specific driver to the HW such as program raw > > binary file to > > + * FPGA. > > + * > > + * @locations: An array of supported splash > > locations. > > + * @file_info: Description and attributes to the > > image. > > + * Could be structure pointer, and any type > > pointer. > > + * @filename: Image filename in flashes. > > + * @bmp_load_addr: Target memory location image loaded to. > > + * @bsize: Size of target memory location. > > + * > > + * @return: If 0, loading is succesfull. Filename pointer > > contains > > + * valid filename. > > + * If non-zero, loading is failed. > > + */ > > +__weak int fs_loading(struct splash_location *location, void > > *file_info, > > + char *filename, u32 bmp_load_addr, size_t > > bsize) > > +{ > > + loff_t actread; > > + > > + return fs_read(filename, (u32)bmp_load_addr, 0, 0, > > &actread); > > +} > > + > > +int splash_load_fs(struct splash_location *location, void > > *file_info, > > + u32 bmp_load_addr, size_t bsize) > > +{ > > + int res = 0; > > + char *splash_file = NULL; > > + > > + res = fsloader_preprocess(location, file_info, > > &splash_file, > > + bmp_load_addr); > > + > > + if (res) > > + goto out; > > + > > +#ifndef CONFIG_SPL_BUILD > > if (location->storage == SPLASH_STORAGE_USB) > > res = splash_init_usb(); > > > > if (location->storage == SPLASH_STORAGE_SATA) > > res = splash_init_sata(); > > +#endif > > > > if (location->ubivol != NULL) > > res = splash_mount_ubifs(location); > > @@ -236,24 +315,8 @@ static int splash_load_fs(struct > > splash_location *location, u32 bmp_load_addr) > > if (res) > > return res; > > > > - res = splash_select_fs_dev(location); > > - if (res) > > - goto out; > > - > > - res = fs_size(splash_file, &bmp_size); > > - if (res) { > > - printf("Error (%d): cannot determine file size\n", > > res); > > - goto out; > > - } > > - > > - if (bmp_load_addr + bmp_size >= gd->start_addr_sp) { > > - printf("Error: splashimage address too high. Data > > overwrites U-Boot and/or placed beyond DRAM boundaries.\n"); > > - res = -EFAULT; > > - goto out; > > - } > > - > > - splash_select_fs_dev(location); > > - res = fs_read(splash_file, bmp_load_addr, 0, 0, &actread); > > + res = fs_loading(location, file_info, splash_file, > > bmp_load_addr, > > + bsize); > > > > out: > > if (location->ubivol != NULL) > > @@ -405,7 +468,8 @@ int splash_source_load(struct splash_location > > *locations, uint size) > > if (splash_location->flags == SPLASH_STORAGE_RAW) > > return splash_load_raw(splash_location, > > bmp_load_addr); > > else if (splash_location->flags == SPLASH_STORAGE_FS) > > - return splash_load_fs(splash_location, > > bmp_load_addr); > > + return splash_load_fs(splash_location, > > "splashfile", > > + bmp_load_addr, 0); > > #ifdef CONFIG_FIT > > else if (splash_location->flags == SPLASH_STORAGE_FIT) > > return splash_load_fit(splash_location, > > bmp_load_addr); > > diff --git a/configs/socfpga_arria10_defconfig > > b/configs/socfpga_arria10_defconfig > > index 4c73d73..2db34b5 100644 > > --- a/configs/socfpga_arria10_defconfig > > +++ b/configs/socfpga_arria10_defconfig > > @@ -7,6 +7,8 @@ > > CONFIG_DEFAULT_DEVICE_TREE="socfpga_arria10_socdk_sdmmc" > > CONFIG_USE_BOOTARGS=y > > CONFIG_BOOTARGS="console=ttyS0,115200" > > CONFIG_DEFAULT_FDT_FILE="socfpga_arria10_socdk_sdmmc.dtb" > > +CONFIG_FIT=y > > +CONFIG_SPL_FIT=y > > CONFIG_SPL=y > > CONFIG_SPL_FPGA_SUPPORT=y > > CONFIG_CMD_BOOTZ=y > > diff --git a/include/configs/socfpga_arria10_socdk.h > > b/include/configs/socfpga_arria10_socdk.h > > index 83718dd..9566d46 100644 > > --- a/include/configs/socfpga_arria10_socdk.h > > +++ b/include/configs/socfpga_arria10_socdk.h > > @@ -47,6 +47,9 @@ > > */ > > #define CONFIG_SYS_MAX_FLASH_BANKS 1 > > > > +/* Generic FS loader */ > > +#define CONFIG_SPLASH_SOURCE > > + > > /* The rest of the configuration is shared */ > > #include <configs/socfpga_common.h> > > > > diff --git a/include/splash.h b/include/splash.h > > index 228aff4..83a6890 100644 > > --- a/include/splash.h > > +++ b/include/splash.h > > @@ -59,6 +59,9 @@ static inline int splash_source_load(struct > > splash_location *locations, > > #endif > > > > int splash_screen_prepare(void); > > +int splash_select_fs_dev(struct splash_location *location); > > +int splash_load_fs(struct splash_location *location, void > > *file_info, > > + u32 bmp_load_addr, size_t bsize); > > > > #ifdef CONFIG_SPLASH_SCREEN_ALIGN > > void splash_get_pos(int *x, int *y); > > > _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot