[U-Boot] [PATCH v2] imls: Add support to list images in NAND device
Vipin Kumar
vipin.kumar at st.com
Fri Dec 14 10:23:26 CET 2012
On 12/14/2012 3:22 AM, Scott Wood wrote:
> On 12/13/2012 12:10:58 AM, Vipin Kumar wrote:
>>> Or better, just have one CONFIG_CMD_IMLS and have it operate on
>>> whatever flash types are configured into U-Boot.
>>>
>>
>> I didn't do it because until now the CONFIG_CMD_IMLS config is
>> tightly bound with flash only eg config_cmd_default.h enables
>> CONFIG_CMD_IMLS only when CONFIG_SYS_NO_FLASH is not defined. I
>> thought there might be other places as well
>
> Still, it might be better to fix that than to build upon a
> no-longer-accurate assumption.
>
OK, I would try that in v4
>>>> +#if defined(CONFIG_CMD_IMLS_NAND)
>>>> +static void do_imls_nand(void)
>>>> +{
>>>> + nand_info_t *nand;
>>>> + int nand_dev = nand_curr_device;
>>>> + size_t read_size;
>>>> + loff_t off;
>>>> + u8 buffer[512];
>>>
>>> Why 512?
>>>
>>
>> Basically there are 2 image types supported as of today.
>> * Legacy: 64 byte header
>> * FIT:< 512 byte header
>>
>> After reading the first 512 bytes from each block of NAND, we try to
>> validate the header and only if the header validation is successful,
>> we malloc the space for the whole image and read the image into it
>
> Do you really need 512 bytes for fdt_check_header() to work?
>
I have reduced it already to 64 bytes in v3
>>>> + nand =&nand_info[nand_dev];
>>>> + if (!nand->name || !nand->size)
>>>> + continue;
>>>> +
>>>> + for (off = 0; off< nand->size; off += nand->erasesize)
>>>> {
>>>> + int ret;
>>>> + void *imgdata;
>>>> +
>>>> + if (nand_block_isbad(nand, off))
>>>> + goto next_block;
>>>> +
>>>> + read_size = sizeof(buffer);
>>>> +
>>>> + ret = nand_read(nand, off,&read_size, buffer);
>>>> + if (ret< 0&& ret != -EUCLEAN)
>>>> + goto next_block;
>>>
>>> s/goto next_block/continue/
>>>
>>
>> hmmm, OK.
>> I copied the original code ie for listing images from nor flash.
>> Should I also correct it !!
>
> If you want to do that as a separate patch, that's fine -- but the code
> is sufficiently different that I don't think there's a strong
> consistency argument to be made.
>
Check if it is OK in v3
>>>> + header = (const image_header_t *)buffer;
>>>> +
>>>> + switch (genimg_get_format(buffer)) {
>>>> + case IMAGE_FORMAT_LEGACY:
>>>> + if (!image_check_hcrc(header))
>>>> + goto next_block;
>>>> +
>>>> + read_size =
>>>> image_get_image_size(header);
>>>> +
>>>> + imgdata = malloc(read_size);
>>>> + if (!imgdata) {
>>>> + printf("Not able to list all
>>>> images " \
>>>> + "(Low memory)\n");
>>>
>>> Don't line-wrap error strings.
>>>
>>
>> 80 column ?
>
> Error strings are an exception for the sake of greppability. From
> Linux's Documentation/CodingStyle:
>
> Statements longer than 80 columns will be broken into sensible
> chunks, unless
> exceeding 80 columns significantly increases readability and does
> not hide
> information. Descendants are always substantially shorter than the
> parent and
> are placed substantially to the right. The same applies to function
> headers
> with a long argument list. However, never break user-visible strings
> such as
> printk messages, because that breaks the ability to grep for them.
>
Yes, thanks for reminding. The error strings are more readable already
in v3. Please take a look
>>> Why is the no-memory error message different for FIT versus legacy
>>> images? I realize that at this point you don't know if it's a FIT
>>> versus some other dtb, but why do you print the device and offset
>>> here
>>> but not in the legacy case? Why "Low memory(cannot allocate memory
>>> for
>>> image)" versus just " (Low memory)"?
>>>
>>
>> Typo :(
>> I would give the following print for both
>> printf("May be a FIT Image at NAND " \
>> "device %d offset %08llX:\n",
>> nand_dev, off);
>> printf(" Low memory(cannot allocate" \
>> " memory for image)\n");
>
> It's a little more verbose than I'd have done, but OK. Can you put a
> space between "memory" and "(cannot", though?
>
Sure. I will do that in v4
-Vipin
More information about the U-Boot
mailing list