[U-Boot] [PATCH v8 4/4] common: Generic firmware loader for file system
Marek Vasut
marex at denx.de
Thu Feb 22 14:28:12 UTC 2018
On 02/22/2018 09:18 AM, Chee, Tien Fong wrote:
> On Thu, 2018-02-15 at 15:58 +0100, Marek Vasut wrote:
>> On 02/05/2018 08:06 AM, 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>
>>> Reviewed-by: Lothar Waßmann <LW at KARO-electronics.de>
>> [...]
>>
>>>
>>> +#include <common.h>
>>> +#include <errno.h>
>>> +#include <fs.h>
>>> +#include <fs_loader.h>
>>> +#include <nand.h>
>>> +#include <sata.h>
>>> +#include <spi.h>
>>> +#include <spi_flash.h>
>>> +#ifdef CONFIG_SPL
>> Are the ifdefs needed ?
>>
> Because spl.h contains some codes have its dependency with SPL. So, Tom
> adviced to make this part of code depend on CONFIG_SPL.
> However, only __weak int init_mmc() depend on the codes from spl.h, so
> user can override their own init_mmc() if SPL is not used.
You probably dont need those ifdefs around headers.
>>> +#include <spl.h>
>>> +#endif
>>> +#include <linux/string.h>
>>> +#ifdef CONFIG_CMD_UBIFS
>>> +#include <ubi_uboot.h>
>>> +#include <ubifs_uboot.h>
>>> +#endif
>>> +#include <usb.h>
>>> +
>>> +struct firmware_priv {
>>> + const char *name; /* Filename */
>>> + u32 offset; /* Offset of reading a file */
>>> +};
>>> +
>>> +static struct device_location default_locations[] = {
>>> + {
>>> + .name = "mmc",
>>> + .devpart = "0:1",
>>> + },
>>> + {
>>> + .name = "usb",
>>> + .devpart = "0:1",
>>> + },
>>> + {
>>> + .name = "sata",
>>> + .devpart = "0:1",
>>> + },
>> How can this load from UBI if it's not listed here ?
Well ?
[...]
>>> +#ifdef CONFIG_SATA
>>> +static int init_storage_sata(void)
>>> +{
>>> + return sata_probe(0);
>> Shouldn't the sata device number be pulled from devpart in
>> default_locations table ?
>>
> This may need to add the logic for splitting the device number and
> partition into integer from the string. Let me think how to do it, may
> be i can leverage existing code.
strtok(), strtol() or something ?
[...]
>>> +#ifdef CONFIG_SPL
>>> + spl_mmc_find_device(&mmc, spl_boot_device());
>>> +#else
>>> + debug("#define CONFIG_SPL is required or overrriding
>>> %s\n",
>>> + __func__);
>> This can be a compile-time error, maybe ?
>>
> No compile error. When you open the file, "%s\n" is actually same line
> with debug("..... .
So what ? This missing macro can be detected at runtime, heck this code
can even depend on CONFIG_SPL in Kconfig.
>>>
>>> + return -ENOENT;
>>> +#endif
>>> +
>>> + err = mmc_init(mmc);
>>> + if (err) {
>>> + debug("spl: mmc init failed with error: %d\n",
>>> err);
>>> + return err;
>>> + }
>>> +
>>> + return err;
>>> +}
>>> +#else
>>> +__weak int init_mmc(void)
>>> +{
>>> + /* Expect somewhere already initialize MMC */
>>> + return 0;
>>> +}
>>> +#endif
>> [...]
--
Best regards,
Marek Vasut
More information about the U-Boot
mailing list