2020-03-23 14:27:06

by Anson Huang

[permalink] [raw]
Subject: [PATCH] thermal: imx8mm: Fix build warning of incorrect argument type

Fix below sparse warning:

drivers/thermal/imx8mm_thermal.c:82:36: sparse: sparse: incorrect type in argument 2 (different address spaces), expected unsigned long const volatile *addr
drivers/thermal/imx8mm_thermal.c:82:36: sparse: expected unsigned long const volatile *addr

Signed-off-by: Anson Huang <[email protected]>
---
drivers/thermal/imx8mm_thermal.c | 7 +++----
1 file changed, 3 insertions(+), 4 deletions(-)

diff --git a/drivers/thermal/imx8mm_thermal.c b/drivers/thermal/imx8mm_thermal.c
index c32308b..0d60f8d 100644
--- a/drivers/thermal/imx8mm_thermal.c
+++ b/drivers/thermal/imx8mm_thermal.c
@@ -75,15 +75,14 @@ static int imx8mp_tmu_get_temp(void *data, int *temp)
{
struct tmu_sensor *sensor = data;
struct imx8mm_tmu *tmu = sensor->priv;
+ unsigned long val;
bool ready;
- u32 val;

- ready = test_bit(probe_status_offset(sensor->hw_id),
- tmu->base + TRITSR);
+ val = readl_relaxed(tmu->base + TRITSR);
+ ready = test_bit(probe_status_offset(sensor->hw_id), &val);
if (!ready)
return -EAGAIN;

- val = readl_relaxed(tmu->base + TRITSR);
val = sensor->hw_id ? FIELD_GET(TRITSR_TEMP1_VAL_MASK, val) :
FIELD_GET(TRITSR_TEMP0_VAL_MASK, val);
if (val & SIGN_BIT) /* negative */
--
2.7.4


2020-03-23 14:34:37

by Daniel Lezcano

[permalink] [raw]
Subject: Re: [PATCH] thermal: imx8mm: Fix build warning of incorrect argument type

On 23/03/2020 15:19, Anson Huang wrote:
> Fix below sparse warning:
>
> drivers/thermal/imx8mm_thermal.c:82:36: sparse: sparse: incorrect type in argument 2 (different address spaces), expected unsigned long const volatile *addr
> drivers/thermal/imx8mm_thermal.c:82:36: sparse: expected unsigned long const volatile *addr
>
> Signed-off-by: Anson Huang <[email protected]>
> ---
> drivers/thermal/imx8mm_thermal.c | 7 +++----
> 1 file changed, 3 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/thermal/imx8mm_thermal.c b/drivers/thermal/imx8mm_thermal.c
> index c32308b..0d60f8d 100644
> --- a/drivers/thermal/imx8mm_thermal.c
> +++ b/drivers/thermal/imx8mm_thermal.c
> @@ -75,15 +75,14 @@ static int imx8mp_tmu_get_temp(void *data, int *temp)
> {
> struct tmu_sensor *sensor = data;
> struct imx8mm_tmu *tmu = sensor->priv;
> + unsigned long val;
> bool ready;
> - u32 val;
>
> - ready = test_bit(probe_status_offset(sensor->hw_id),
> - tmu->base + TRITSR);
> + val = readl_relaxed(tmu->base + TRITSR);
> + ready = test_bit(probe_status_offset(sensor->hw_id), &val);
> if (!ready)
> return -EAGAIN;

Doesn't this patch also fix a bug because the read was done after
testing the bit? :)

> - val = readl_relaxed(tmu->base + TRITSR);
> val = sensor->hw_id ? FIELD_GET(TRITSR_TEMP1_VAL_MASK, val) :
> FIELD_GET(TRITSR_TEMP0_VAL_MASK, val);
> if (val & SIGN_BIT) /* negative */
>


--
<http://www.linaro.org/> Linaro.org │ Open source software for ARM SoCs

Follow Linaro: <http://www.facebook.com/pages/Linaro> Facebook |
<http://twitter.com/#!/linaroorg> Twitter |
<http://www.linaro.org/linaro-blog/> Blog

2020-03-23 14:56:15

by Anson Huang

[permalink] [raw]
Subject: RE: [PATCH] thermal: imx8mm: Fix build warning of incorrect argument type

Hi, Daniel

> Subject: Re: [PATCH] thermal: imx8mm: Fix build warning of incorrect
> argument type
>
> On 23/03/2020 15:19, Anson Huang wrote:
> > Fix below sparse warning:
> >
> > drivers/thermal/imx8mm_thermal.c:82:36: sparse: sparse: incorrect type
> > in argument 2 (different address spaces), expected unsigned long const
> > volatile *addr
> > drivers/thermal/imx8mm_thermal.c:82:36: sparse: expected unsigned long
> > const volatile *addr
> >
> > Signed-off-by: Anson Huang <[email protected]>
> > ---
> > drivers/thermal/imx8mm_thermal.c | 7 +++----
> > 1 file changed, 3 insertions(+), 4 deletions(-)
> >
> > diff --git a/drivers/thermal/imx8mm_thermal.c
> > b/drivers/thermal/imx8mm_thermal.c
> > index c32308b..0d60f8d 100644
> > --- a/drivers/thermal/imx8mm_thermal.c
> > +++ b/drivers/thermal/imx8mm_thermal.c
> > @@ -75,15 +75,14 @@ static int imx8mp_tmu_get_temp(void *data, int
> > *temp) {
> > struct tmu_sensor *sensor = data;
> > struct imx8mm_tmu *tmu = sensor->priv;
> > + unsigned long val;
> > bool ready;
> > - u32 val;
> >
> > - ready = test_bit(probe_status_offset(sensor->hw_id),
> > - tmu->base + TRITSR);
> > + val = readl_relaxed(tmu->base + TRITSR);
> > + ready = test_bit(probe_status_offset(sensor->hw_id), &val);
> > if (!ready)
> > return -EAGAIN;
>
> Doesn't this patch also fix a bug because the read was done after testing the
> bit? :)

Yes???? Previous patch reads the register twice at different time, may cause a
sync issue of checking the ready bit and reading the temperature using register
values read at different time.

Do I need to improve the commit log? I guess no need?

Thanks,
Anson

2020-03-23 16:17:48

by Daniel Lezcano

[permalink] [raw]
Subject: Re: [PATCH] thermal: imx8mm: Fix build warning of incorrect argument type

On 23/03/2020 15:53, Anson Huang wrote:
> Hi, Daniel
>
>> Subject: Re: [PATCH] thermal: imx8mm: Fix build warning of incorrect
>> argument type
>>
>> On 23/03/2020 15:19, Anson Huang wrote:
>>> Fix below sparse warning:
>>>
>>> drivers/thermal/imx8mm_thermal.c:82:36: sparse: sparse: incorrect type
>>> in argument 2 (different address spaces), expected unsigned long const
>>> volatile *addr
>>> drivers/thermal/imx8mm_thermal.c:82:36: sparse: expected unsigned long
>>> const volatile *addr
>>>
>>> Signed-off-by: Anson Huang <[email protected]>
>>> ---
>>> drivers/thermal/imx8mm_thermal.c | 7 +++----
>>> 1 file changed, 3 insertions(+), 4 deletions(-)
>>>
>>> diff --git a/drivers/thermal/imx8mm_thermal.c
>>> b/drivers/thermal/imx8mm_thermal.c
>>> index c32308b..0d60f8d 100644
>>> --- a/drivers/thermal/imx8mm_thermal.c
>>> +++ b/drivers/thermal/imx8mm_thermal.c
>>> @@ -75,15 +75,14 @@ static int imx8mp_tmu_get_temp(void *data, int
>>> *temp) {
>>> struct tmu_sensor *sensor = data;
>>> struct imx8mm_tmu *tmu = sensor->priv;
>>> + unsigned long val;
>>> bool ready;
>>> - u32 val;
>>>
>>> - ready = test_bit(probe_status_offset(sensor->hw_id),
>>> - tmu->base + TRITSR);
>>> + val = readl_relaxed(tmu->base + TRITSR);
>>> + ready = test_bit(probe_status_offset(sensor->hw_id), &val);
>>> if (!ready)
>>> return -EAGAIN;
>>
>> Doesn't this patch also fix a bug because the read was done after testing the
>> bit? :)
>
> Yes???? Previous patch reads the register twice at different time, may cause a
> sync issue of checking the ready bit and reading the temperature using register
> values read at different time.
>
> Do I need to improve the commit log? I guess no need?

No need, it is fine.


--
<http://www.linaro.org/> Linaro.org │ Open source software for ARM SoCs

Follow Linaro: <http://www.facebook.com/pages/Linaro> Facebook |
<http://twitter.com/#!/linaroorg> Twitter |
<http://www.linaro.org/linaro-blog/> Blog