[U-Boot] [PATCH 1/5] mmc: uniphier-sd: Factor out register IO

Marek Vasut marek.vasut at gmail.com
Mon Aug 7 08:30:25 UTC 2017


On 08/07/2017 04:30 AM, Masahiro Yamada wrote:
> Hi Marek,

Hi Masahiro,

This is gonna be a great discussion, let's wrestle about consts and ints :-)

> 2017-08-06 4:23 GMT+09:00 Marek Vasut <marek.vasut at gmail.com>:
>> On 08/03/2017 02:36 PM, Masahiro Yamada wrote:
>>> Hi Marek,
>>
>> Hi,
>>
>> [...]
>>
>>>> +static u32 uniphier_sd_readl(struct uniphier_sd_priv *priv, const u32 reg)
>>>
>>> "const" is unneeded here.
>>
>> Why? The function should not modify reg , so it is const.
> 
> 
> Because "const" is useless here.
> 
> The "reg" is not a pointer, so it is obvious
> that there is no impact to the callers.
> 
> 
> 
> Moreover, whether "reg" is constant or not
> depends on how you implement the function.
> 
> 
> If you force "const" to the argument, the only choice for the implementation
> will be as follows:
> 
> 
> 
> static u32 uniphier_sd_readl(struct uniphier_sd_priv *priv, const u32 reg)
> {
>       if (priv->caps & UNIPHIER_SD_CAP_64BIT)
>              return readl(priv->regbase + (reg << 1));
>       else
>              return readl(priv->regbase + reg);
> }
> 
> 
> 
> If you want to implement the function as follows, you need to drop "const".
> 
> static u32 uniphier_sd_readl(struct uniphier_sd_priv *priv, u32 reg)
> {
>       if (priv->caps & UNIPHIER_SD_CAP_64BIT)
>               reg <<= 1;
> 
>       return readl(priv->regbase + reg);
> }

My argument would be that the const prevents you from accidentally
modifying the $reg inside the function.

>>> Also, could you use "unsigned int" or "int" for reg?
>>
>> Why?
> 
> 
> Because "unsigned int" or "int" is more natural.
> 
> No reason to use a fixed width variable for the address offset.

You're loosing the benefit of fixed width with using unsigned int though?

-- 
Best regards,
Marek Vasut


More information about the U-Boot mailing list