[PATCH v5 4/4] thermal: Add Tegra SOCTHERM thermal management driver

Mikko Perttunen mikko.perttunen at kapsi.fi
Wed Sep 24 12:32:13 PDT 2014


On 09/24/2014 10:18 PM, Eduardo Valentin wrote:
>
> Mikko,
>
> On Thu, Aug 21, 2014 at 01:17:22PM +0300, Mikko Perttunen wrote:
>> ...
>> +
>> +static int enable_tsensor(struct tegra_soctherm *tegra,
>> +			  const struct tegra_tsensor *sensor,
>> +			  struct tsensor_shared_calibration shared)
>> +{
>> +	void * __iomem base = tegra->regs + sensor->base;
>
> I get sparse complaining about this declaration. For the sake of keeping
> a clean static checks, can you please:
> -       void * __iomem base = tegra->regs + sensor->base;
> +       void __iomem * base = tegra->regs + sensor->base;
>

Sure.

>
> Can you also please check the remaining sparse errors?
>    CHECK   drivers/thermal/tegra_soctherm.c
>    drivers/thermal/tegra_soctherm.c:260:43: warning: incorrect type in
>    initializer (different address spaces)
>    drivers/thermal/tegra_soctherm.c:260:43:    expected void *[noderef]
>    <asn:2>base
>    drivers/thermal/tegra_soctherm.c:260:43:    got void [noderef]
>    <asn:2>*
>    drivers/thermal/tegra_soctherm.c:271:9: warning: incorrect type in
>    argument 2 (different address spaces)
>    drivers/thermal/tegra_soctherm.c:271:9:    expected void volatile
>    [noderef] <asn:2>*addr
>    drivers/thermal/tegra_soctherm.c:271:9:    got void *
>    drivers/thermal/tegra_soctherm.c:279:9: warning: incorrect type in
>    argument 2 (different address spaces)
>    drivers/thermal/tegra_soctherm.c:279:9:    expected void volatile
>    [noderef] <asn:2>*addr
>    drivers/thermal/tegra_soctherm.c:279:9:    got void *
>    drivers/thermal/tegra_soctherm.c:281:9: warning: incorrect type in
>    argument 2 (different address spaces)
>    drivers/thermal/tegra_soctherm.c:281:9:    expected void volatile
>    [noderef] <asn:2>*addr
>    drivers/thermal/tegra_soctherm.c:281:9:    got void *
>    drivers/thermal/tegra_soctherm.c:347:25: warning: incorrect type in
>    argument 1 (different address spaces)
>    drivers/thermal/tegra_soctherm.c:347:25:    expected void const *ptr
>    drivers/thermal/tegra_soctherm.c:347:25:    got void [noderef]
>    <asn:2>*regs
>    drivers/thermal/tegra_soctherm.c:349:37: warning: incorrect type in
>    argument 1 (different address spaces)
>    drivers/thermal/tegra_soctherm.c:349:37:    expected void const *ptr
>    drivers/thermal/tegra_soctherm.c:349:37:    got void [noderef]
>    <asn:2>*regs
>    drivers/thermal/tegra_soctherm.c:271:9: warning: dereference of
>    noderef expression
>    drivers/thermal/tegra_soctherm.c:279:9: warning: dereference of
>    noderef expression
>    drivers/thermal/tegra_soctherm.c:281:9: warning: dereference of
>    noderef expression
>

Most of these seem to be caused by the above-mentioned swapping of 
__iomem and *. The ones on lines 347 and 349 are more peculiar, though. 
Apparently sparse doesn't like using IS_ERR and PTR_ERR on the void 
__iomem * pointer returned by devm_ioremap_resource. Looks like this has 
been discussed before (https://lkml.org/lkml/2013/6/17/216) and sparse 
should have been patched to ignore this situation, so I'm not sure why 
it's complaining about it. Anyway, there shouldn't be any issue here.

Mikko




More information about the linux-arm-kernel mailing list