[PATCH 6/7] ddr: altera: arria10: Change %i to %u for printf

Marek Vasut marex at denx.de
Thu Apr 16 15:11:45 CEST 2020


On 4/16/20 2:55 PM, Tom Rini wrote:
> On Wed, Apr 15, 2020 at 08:06:45PM +0200, Marek Vasut wrote:
>> On 4/15/20 7:44 PM, Tom Rini wrote:
>>> On Wed, Apr 15, 2020 at 05:16:52PM +0200, Marek Vasut wrote:
>>>> On 4/15/20 5:14 PM, Tom Rini wrote:
>>>>> On Wed, Apr 15, 2020 at 04:58:31PM +0200, Marek Vasut wrote:
>>>>>> On 4/15/20 4:56 PM, Tom Rini wrote:
>>>>>>> On Wed, Apr 15, 2020 at 02:45:08PM +0200, Marek Vasut wrote:
>>>>>>>> On 4/15/20 11:00 AM, Ley Foon Tan wrote:
>>>>>>>>> Tiny printf doesn't support %i, change to %u.
>>>>>>>>>
>>>>>>>>> Signed-off-by: Ley Foon Tan <ley.foon.tan at intel.com>
>>>>>>>>> ---
>>>>>>>>>  drivers/ddr/altera/sdram_arria10.c | 2 +-
>>>>>>>>>  1 file changed, 1 insertion(+), 1 deletion(-)
>>>>>>>>>
>>>>>>>>> diff --git a/drivers/ddr/altera/sdram_arria10.c b/drivers/ddr/altera/sdram_arria10.c
>>>>>>>>> index e3f11984a978..8acf324117af 100644
>>>>>>>>> --- a/drivers/ddr/altera/sdram_arria10.c
>>>>>>>>> +++ b/drivers/ddr/altera/sdram_arria10.c
>>>>>>>>> @@ -195,7 +195,7 @@ static void sdram_init_ecc_bits(u32 size)
>>>>>>>>>  
>>>>>>>>>  	dcache_enable();
>>>>>>>>>  
>>>>>>>>> -	printf("DDRCAL: Scrubbing ECC RAM (%i MiB).\n", size >> 20);
>>>>>>>>> +	printf("DDRCAL: Scrubbing ECC RAM (%u MiB).\n", size >> 20);
>>>>>>>>>  	memset((void *)0x8000, 0, size - 0x8000);
>>>>>>>>>  	flush_dcache_all();
>>>>>>>>>  	printf("DDRCAL: Scrubbing ECC RAM done.\n");
>>>>>>>>
>>>>>>>> Yes, sadly, tiny printf is broken so we need to patch code to work
>>>>>>>> around that breakage.
>>>>>>>
>>>>>>> Yes, limited by design, thanks for changing.
>>>>>>
>>>>>> This code could be used without tiny printf, so this change is unnecessary.
>>>>>
>>>>> You've got it backwards.  Code that could be used by tiny printf needs
>>>>> to use the more limited set of formats.  But this should have been using
>>>>> %u all along?  %i is for int, %u is unsigned int.
>>>>
>>>> That would mean most of U-Boot needs to be limited to the subset of
>>>> formatting characters supported by tiny printf, which is unrealistic.
>>>
>>> Not at all.  Only the code that's used in SPL and in tiny printf
>>> situations needs to be limited to reduced set.  Which is why we're at
>>> 4.5 years in and just now "oh, %i doesn't work?".
>>
>> I keep running into "oh, %i, such a basic C printf() feature, doesn't
>> work" again and again, and it makes my work with U-Boot real annoying.
>> This should be fixed in the printf implementation, not all over the code
>> base. Also, it prevents sane code reuse, unless we start adding #ifdef
>> TINY_PRINTF all over the place, which is just ew ...
> 
> I hear you saying "I type %i not %d without thinking about it", but I'm
> telling you, think about it.

No, it works everywhere else just fine, except U-Boot SPL is special.
This is a tiny-printf bug, period.

> I will not grow 200+ boards when there's
> an easy way not to.

By ~6 bytes, which happens with almost every DM patch.
I am not buying the size argument.


More information about the U-Boot mailing list