[U-Boot] cmd_onenand.c, onenand_block_read (...)

Scott Wood scottwood at freescale.com
Tue Oct 20 18:29:34 CEST 2009


On Tue, Oct 20, 2009 at 05:27:04PM +0400, Tuma wrote:
> Hi, All!
> 
> It seems I have a trouble.
> I want to use onenand_block_read function. So I've written a cover for it:
> 
> int OneNANDBlockRead (loff_t _from, ssize_t _len,
>  ssize_t *_retlen, u_char *_buf, int _oob)
> {
>   int lRet;
> 
>   return lRet;
> }

You wrote a function that does nothing but return an uninitialized stack
value?

> When I do from this fuction:
>   printf ("Reading from: 0x%X, Length: 0x%X\n", _from, _len);
> I get _len and _form swapped.
> What's wrong?

For one, if that's the same _from as in OneNANDBlockRead, you're using the
wrong printf formats.  You need %llX for loff_t (you may want to cast to
unsigned long long just in case the type of loff_t varies), and %zX for
ssize_t. Please pay attention to complier warnings.

> I tryed to pass _from and _len as pointers - pointer addresses are correct but 
>   printf ("Reading from: 0x%X\n", *_from);
>   printf ("Reading Length: 0x%X\n", *_len);
> return swapped result again.
> 
> This is how I call OneNANDBlockRead function:
> static const ssize_t lLen = 0x20;
> static const ulong lLT = 0x00260000;
> OneNANDBlockRead (&lLT, &lLen, &retlen, lEnvironment, 0);

You're passing pointers to integer arguments.  Please pay attention to
compiler warnings.

-Scott


More information about the U-Boot mailing list