2023-11-20 14:53:26

by Mateusz Majewski

[permalink] [raw]
Subject: [PATCH v5 0/9] Improve Exynos thermal driver

This work improves Exynos thermal driver in various ways. This is
related to the discussion in
https://lore.kernel.org/all/[email protected]/

The primary issue being fixed is a lockdep warning, which is fixed by
the thermal: exynos: use set_trips patch. We also simplify the code in
general.

Changelog:
v5:
- Used BIT wherever possible
- Simplified Exynos 7 code and used the correct register offsets for
Exynos 7
- Refactored some common register-setting code
v4:
- Resolved merge conflict when applying thermal: exynos: split
initialization of TMU and the thermal zone
- Reordered calls done when leaving exynos_tmu_initialize for
symmetry
v3:
- Fixed regulator initialization
- Fixed formatting of some comments
v2:
- Added missing field descriptions
- Removed an unnecessary field description
- Removed the commits that made clock management more fine-grained
(need more discussion), and adapted the new code to manage clocks
- Removed the devicetree changes (will be uploaded separately),
changing the recipient list accordingly
- Improved formatting of the devm_request_threaded_irq call

Mateusz Majewski (9):
thermal: exynos: remove an unnecessary field description
thermal: exynos: drop id field
thermal: exynos: switch from workqueue-driven interrupt handling to
threaded interrupts
thermal: exynos: handle devm_regulator_get_optional return value
correctly
thermal: exynos: simplify regulator (de)initialization
thermal: exynos: stop using the threshold mechanism on Exynos 4210
thermal: exynos: split initialization of TMU and the thermal zone
thermal: exynos: use BIT wherever possible
thermal: exynos: use set_trips

drivers/thermal/samsung/exynos_tmu.c | 532 +++++++++++++--------------
1 file changed, 258 insertions(+), 274 deletions(-)

--
2.42.0


2023-11-20 14:53:32

by Mateusz Majewski

[permalink] [raw]
Subject: [PATCH v5 7/9] thermal: exynos: split initialization of TMU and the thermal zone

This will be needed in the future, as the thermal zone subsystem might
call our callbacks right after devm_thermal_of_zone_register. Currently
we just make get_temp return EAGAIN in such case, but this will not be
possible with state-modifying callbacks, for instance set_trips.

Reviewed-by: Krzysztof Kozlowski <[email protected]>
Signed-off-by: Mateusz Majewski <[email protected]>
---
v3 -> v4: Reordered calls done while leaving exynos_tmu_initialize so
that they mirror the calls done while entering this function.
v1 -> v2: We take clocks into account; exynos_tmu_initialize needs both
clocks, as tmu_initialize might use the base_second registers. However,
exynos_thermal_zone_configure only needs clk.

drivers/thermal/samsung/exynos_tmu.c | 104 +++++++++++++++------------
1 file changed, 60 insertions(+), 44 deletions(-)

diff --git a/drivers/thermal/samsung/exynos_tmu.c b/drivers/thermal/samsung/exynos_tmu.c
index d918bf6d5359..6b3a7dd05c68 100644
--- a/drivers/thermal/samsung/exynos_tmu.c
+++ b/drivers/thermal/samsung/exynos_tmu.c
@@ -251,25 +251,8 @@ static void sanitize_temp_error(struct exynos_tmu_data *data, u32 trim_info)
static int exynos_tmu_initialize(struct platform_device *pdev)
{
struct exynos_tmu_data *data = platform_get_drvdata(pdev);
- struct thermal_zone_device *tzd = data->tzd;
- int num_trips = thermal_zone_get_num_trips(tzd);
unsigned int status;
- int ret = 0, temp;
-
- ret = thermal_zone_get_crit_temp(tzd, &temp);
- if (ret && data->soc != SOC_ARCH_EXYNOS5433) { /* FIXME */
- dev_err(&pdev->dev,
- "No CRITICAL trip point defined in device tree!\n");
- goto out;
- }
-
- if (num_trips > data->ntrip) {
- dev_info(&pdev->dev,
- "More trip points than supported by this TMU.\n");
- dev_info(&pdev->dev,
- "%d trip points should be configured in polling mode.\n",
- num_trips - data->ntrip);
- }
+ int ret = 0;

mutex_lock(&data->lock);
clk_enable(data->clk);
@@ -280,32 +263,63 @@ static int exynos_tmu_initialize(struct platform_device *pdev)
if (!status) {
ret = -EBUSY;
} else {
- int i, ntrips =
- min_t(int, num_trips, data->ntrip);
-
data->tmu_initialize(pdev);
-
- /* Write temperature code for rising and falling threshold */
- for (i = 0; i < ntrips; i++) {
-
- struct thermal_trip trip;
-
- ret = thermal_zone_get_trip(tzd, i, &trip);
- if (ret)
- goto err;
-
- data->tmu_set_trip_temp(data, i, trip.temperature / MCELSIUS);
- data->tmu_set_trip_hyst(data, i, trip.temperature / MCELSIUS,
- trip.hysteresis / MCELSIUS);
- }
-
data->tmu_clear_irqs(data);
}
+
+ if (!IS_ERR(data->clk_sec))
+ clk_disable(data->clk_sec);
+ clk_disable(data->clk);
+ mutex_unlock(&data->lock);
+
+ return ret;
+}
+
+static int exynos_thermal_zone_configure(struct platform_device *pdev)
+{
+ struct exynos_tmu_data *data = platform_get_drvdata(pdev);
+ struct thermal_zone_device *tzd = data->tzd;
+ int i, num_trips = thermal_zone_get_num_trips(tzd);
+ int ret = 0, temp;
+
+ ret = thermal_zone_get_crit_temp(tzd, &temp);
+
+ if (ret && data->soc != SOC_ARCH_EXYNOS5433) { /* FIXME */
+ dev_err(&pdev->dev,
+ "No CRITICAL trip point defined in device tree!\n");
+ goto out;
+ }
+
+ mutex_lock(&data->lock);
+
+ if (num_trips > data->ntrip) {
+ dev_info(&pdev->dev,
+ "More trip points than supported by this TMU.\n");
+ dev_info(&pdev->dev,
+ "%d trip points should be configured in polling mode.\n",
+ num_trips - data->ntrip);
+ }
+
+ clk_enable(data->clk);
+
+ num_trips = min_t(int, num_trips, data->ntrip);
+
+ /* Write temperature code for rising and falling threshold */
+ for (i = 0; i < num_trips; i++) {
+ struct thermal_trip trip;
+
+ ret = thermal_zone_get_trip(tzd, i, &trip);
+ if (ret)
+ goto err;
+
+ data->tmu_set_trip_temp(data, i, trip.temperature / MCELSIUS);
+ data->tmu_set_trip_hyst(data, i, trip.temperature / MCELSIUS,
+ trip.hysteresis / MCELSIUS);
+ }
+
err:
clk_disable(data->clk);
mutex_unlock(&data->lock);
- if (!IS_ERR(data->clk_sec))
- clk_disable(data->clk_sec);
out:
return ret;
}
@@ -1044,10 +1058,12 @@ static int exynos_tmu_probe(struct platform_device *pdev)
break;
}

- /*
- * data->tzd must be registered before calling exynos_tmu_initialize(),
- * requesting irq and calling exynos_tmu_control().
- */
+ ret = exynos_tmu_initialize(pdev);
+ if (ret) {
+ dev_err(&pdev->dev, "Failed to initialize TMU\n");
+ return ret;
+ }
+
data->tzd = devm_thermal_of_zone_register(&pdev->dev, 0, data,
&exynos_sensor_ops);
if (IS_ERR(data->tzd)) {
@@ -1058,9 +1074,9 @@ static int exynos_tmu_probe(struct platform_device *pdev)
goto err_sclk;
}

- ret = exynos_tmu_initialize(pdev);
+ ret = exynos_thermal_zone_configure(pdev);
if (ret) {
- dev_err(&pdev->dev, "Failed to initialize TMU\n");
+ dev_err(&pdev->dev, "Failed to configure the thermal zone\n");
goto err_sclk;
}

--
2.42.0

2023-11-20 14:58:41

by Mateusz Majewski

[permalink] [raw]
Subject: [PATCH v5 8/9] thermal: exynos: use BIT wherever possible

The original driver did not use that macro and it allows us to make our
intentions slightly clearer.

Signed-off-by: Mateusz Majewski <[email protected]>
---
drivers/thermal/samsung/exynos_tmu.c | 24 ++++++++++++------------
1 file changed, 12 insertions(+), 12 deletions(-)

diff --git a/drivers/thermal/samsung/exynos_tmu.c b/drivers/thermal/samsung/exynos_tmu.c
index 6b3a7dd05c68..40e250c815f8 100644
--- a/drivers/thermal/samsung/exynos_tmu.c
+++ b/drivers/thermal/samsung/exynos_tmu.c
@@ -388,7 +388,7 @@ static void exynos4412_tmu_set_trip_temp(struct exynos_tmu_data *data,

if (trip == 3) {
con = readl(data->base + EXYNOS_TMU_REG_CONTROL);
- con |= (1 << EXYNOS_TMU_THERM_TRIP_EN_SHIFT);
+ con |= BIT(EXYNOS_TMU_THERM_TRIP_EN_SHIFT);
writel(con, data->base + EXYNOS_TMU_REG_CONTROL);
}
}
@@ -559,16 +559,16 @@ static void exynos4210_tmu_control(struct platform_device *pdev, bool on)
continue;

interrupt_en |=
- (1 << (EXYNOS_TMU_INTEN_RISE0_SHIFT + i * 4));
+ BIT(EXYNOS_TMU_INTEN_RISE0_SHIFT + i * 4);
}

if (data->soc != SOC_ARCH_EXYNOS4210)
interrupt_en |=
interrupt_en << EXYNOS_TMU_INTEN_FALL0_SHIFT;

- con |= (1 << EXYNOS_TMU_CORE_EN_SHIFT);
+ con |= BIT(EXYNOS_TMU_CORE_EN_SHIFT);
} else {
- con &= ~(1 << EXYNOS_TMU_CORE_EN_SHIFT);
+ con &= ~BIT(EXYNOS_TMU_CORE_EN_SHIFT);
}

writel(interrupt_en, data->base + EXYNOS_TMU_REG_INTEN);
@@ -590,15 +590,15 @@ static void exynos5433_tmu_control(struct platform_device *pdev, bool on)
continue;

interrupt_en |=
- (1 << (EXYNOS7_TMU_INTEN_RISE0_SHIFT + i));
+ BIT(EXYNOS7_TMU_INTEN_RISE0_SHIFT + i);
}

interrupt_en |=
interrupt_en << EXYNOS_TMU_INTEN_FALL0_SHIFT;

- con |= (1 << EXYNOS_TMU_CORE_EN_SHIFT);
+ con |= BIT(EXYNOS_TMU_CORE_EN_SHIFT);
} else
- con &= ~(1 << EXYNOS_TMU_CORE_EN_SHIFT);
+ con &= ~BIT(EXYNOS_TMU_CORE_EN_SHIFT);

pd_det_en = on ? EXYNOS5433_PD_DET_EN : 0;

@@ -622,17 +622,17 @@ static void exynos7_tmu_control(struct platform_device *pdev, bool on)
continue;

interrupt_en |=
- (1 << (EXYNOS7_TMU_INTEN_RISE0_SHIFT + i));
+ BIT(EXYNOS7_TMU_INTEN_RISE0_SHIFT + i);
}

interrupt_en |=
interrupt_en << EXYNOS_TMU_INTEN_FALL0_SHIFT;

- con |= (1 << EXYNOS_TMU_CORE_EN_SHIFT);
- con |= (1 << EXYNOS7_PD_DET_EN_SHIFT);
+ con |= BIT(EXYNOS_TMU_CORE_EN_SHIFT);
+ con |= BIT(EXYNOS7_PD_DET_EN_SHIFT);
} else {
- con &= ~(1 << EXYNOS_TMU_CORE_EN_SHIFT);
- con &= ~(1 << EXYNOS7_PD_DET_EN_SHIFT);
+ con &= ~BIT(EXYNOS_TMU_CORE_EN_SHIFT);
+ con &= ~BIT(EXYNOS7_PD_DET_EN_SHIFT);
}

writel(interrupt_en, data->base + EXYNOS7_TMU_REG_INTEN);
--
2.42.0

2023-11-20 15:24:02

by Lukasz Luba

[permalink] [raw]
Subject: Re: [PATCH v5 8/9] thermal: exynos: use BIT wherever possible

Hi Mateusz,

On 11/20/23 14:50, Mateusz Majewski wrote:
> The original driver did not use that macro and it allows us to make our
> intentions slightly clearer.
>
> Signed-off-by: Mateusz Majewski <[email protected]>
> ---
> drivers/thermal/samsung/exynos_tmu.c | 24 ++++++++++++------------
> 1 file changed, 12 insertions(+), 12 deletions(-)
>

[snip]

> @@ -590,15 +590,15 @@ static void exynos5433_tmu_control(struct platform_device *pdev, bool on)
> continue;
>
> interrupt_en |=
> - (1 << (EXYNOS7_TMU_INTEN_RISE0_SHIFT + i));
> + BIT(EXYNOS7_TMU_INTEN_RISE0_SHIFT + i);
> }
>
> interrupt_en |=
> interrupt_en << EXYNOS_TMU_INTEN_FALL0_SHIFT;
>
> - con |= (1 << EXYNOS_TMU_CORE_EN_SHIFT);
> + con |= BIT(EXYNOS_TMU_CORE_EN_SHIFT);
> } else

Minor issue: the if-else segment here. When the 'if' has the
brackets, then the 'else' should have them as well,
even if there is only a single line under 'else'.
It's not strictly to this patch, but you can address that
later somewhere (just saw it here).

> - con &= ~(1 << EXYNOS_TMU_CORE_EN_SHIFT);
> + con &= ~BIT(EXYNOS_TMU_CORE_EN_SHIFT);
>
> pd_det_en = on ? EXYNOS5433_PD_DET_EN : 0;
>
> @@ -622,17 +622,17 @@ static void exynos7_tmu_control(struct platform_device *pdev, bool on)
> continue;
>
> interrupt_en |=
> - (1 << (EXYNOS7_TMU_INTEN_RISE0_SHIFT + i));
> + BIT(EXYNOS7_TMU_INTEN_RISE0_SHIFT + i);
> }
>
> interrupt_en |=
> interrupt_en << EXYNOS_TMU_INTEN_FALL0_SHIFT;
>
> - con |= (1 << EXYNOS_TMU_CORE_EN_SHIFT);
> - con |= (1 << EXYNOS7_PD_DET_EN_SHIFT);
> + con |= BIT(EXYNOS_TMU_CORE_EN_SHIFT);
> + con |= BIT(EXYNOS7_PD_DET_EN_SHIFT);
> } else {
> - con &= ~(1 << EXYNOS_TMU_CORE_EN_SHIFT);
> - con &= ~(1 << EXYNOS7_PD_DET_EN_SHIFT);
> + con &= ~BIT(EXYNOS_TMU_CORE_EN_SHIFT);
> + con &= ~BIT(EXYNOS7_PD_DET_EN_SHIFT);
> }
>
> writel(interrupt_en, data->base + EXYNOS7_TMU_REG_INTEN);


The patch LGTM,

Reviewed-by Lukasz Luba <[email protected]>

Regards,
Lukasz

2023-11-21 12:54:59

by Mateusz Majewski

[permalink] [raw]
Subject: Re: [PATCH v5 8/9] thermal: exynos: use BIT wherever possible

Hi,

> > @@ -590,15 +590,15 @@ static void exynos5433_tmu_control(struct platform_device *pdev, bool on)
> >                                   continue;
> >   
> >                           interrupt_en |=
> > -                                (1 << (EXYNOS7_TMU_INTEN_RISE0_SHIFT + i));
> > +                                BIT(EXYNOS7_TMU_INTEN_RISE0_SHIFT + i);
> >                   }
> >   
> >                   interrupt_en |=
> >                           interrupt_en << EXYNOS_TMU_INTEN_FALL0_SHIFT;
> >   
> > -                con |= (1 << EXYNOS_TMU_CORE_EN_SHIFT);
> > +                con |= BIT(EXYNOS_TMU_CORE_EN_SHIFT);
> >           } else
>
> Minor issue: the if-else segment here. When the 'if' has the
> brackets, then the 'else' should have them as well,
> even if there is only a single line under 'else'.
> It's not strictly to this patch, but you can address that
> later somewhere (just saw it here).

For what it's worth, this issue disappears after the final patch of this series,
because the other branch reduces to a single line too (all the interrupt_en
operations are done in the tmu_set_*_temp functions).

Thank you :)
Mateusz

2023-11-21 13:08:01

by Lukasz Luba

[permalink] [raw]
Subject: Re: [PATCH v5 8/9] thermal: exynos: use BIT wherever possible



On 11/21/23 12:54, Mateusz Majewski wrote:
> Hi,
>
>>> @@ -590,15 +590,15 @@ static void exynos5433_tmu_control(struct platform_device *pdev, bool on)
>>>                                    continue;
>>>
>>>                            interrupt_en |=
>>> -                                (1 << (EXYNOS7_TMU_INTEN_RISE0_SHIFT + i));
>>> +                                BIT(EXYNOS7_TMU_INTEN_RISE0_SHIFT + i);
>>>                    }
>>>
>>>                    interrupt_en |=
>>>                            interrupt_en << EXYNOS_TMU_INTEN_FALL0_SHIFT;
>>>
>>> -                con |= (1 << EXYNOS_TMU_CORE_EN_SHIFT);
>>> +                con |= BIT(EXYNOS_TMU_CORE_EN_SHIFT);
>>>            } else
>>
>> Minor issue: the if-else segment here. When the 'if' has the
>> brackets, then the 'else' should have them as well,
>> even if there is only a single line under 'else'.
>> It's not strictly to this patch, but you can address that
>> later somewhere (just saw it here).
>
> For what it's worth, this issue disappears after the final patch of this series,
> because the other branch reduces to a single line too (all the interrupt_en
> operations are done in the tmu_set_*_temp functions).

That sounds perfect.

I'm planning to build&run the patch set today evening, so I will finish
the review of the patch 9/9.

2023-11-27 07:21:22

by Dan Carpenter

[permalink] [raw]
Subject: Re: [PATCH v5 7/9] thermal: exynos: split initialization of TMU and the thermal zone

Hi Mateusz,

kernel test robot noticed the following build warnings:

https://git-scm.com/docs/git-format-patch#_base_tree_information]

url: https://github.com/intel-lab-lkp/linux/commits/Mateusz-Majewski/thermal-exynos-remove-an-unnecessary-field-description/20231120-230641
base: https://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm.git thermal
patch link: https://lore.kernel.org/r/20231120145049.310509-8-m.majewski2%40samsung.com
patch subject: [PATCH v5 7/9] thermal: exynos: split initialization of TMU and the thermal zone
config: arm-randconfig-r081-20231123 (https://download.01.org/0day-ci/archive/20231125/[email protected]/config)
compiler: arm-linux-gnueabi-gcc (GCC) 13.2.0
reproduce: (https://download.01.org/0day-ci/archive/20231125/[email protected]/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <[email protected]>
| Reported-by: Dan Carpenter <[email protected]>
| Closes: https://lore.kernel.org/r/[email protected]/

smatch warnings:
drivers/thermal/samsung/exynos_tmu.c:1064 exynos_tmu_probe() warn: missing unwind goto?
drivers/thermal/samsung/exynos_tmu.c:1103 exynos_tmu_probe() warn: 'data->clk' from clk_prepare() not released on lines: 1064.
drivers/thermal/samsung/exynos_tmu.c:1103 exynos_tmu_probe() warn: 'data->clk_sec' from clk_prepare() not released on lines: 1064.
drivers/thermal/samsung/exynos_tmu.c:1103 exynos_tmu_probe() warn: 'data->sclk' from clk_prepare_enable() not released on lines: 1064.

vim +1064 drivers/thermal/samsung/exynos_tmu.c

cebe7373a7e659 drivers/thermal/samsung/exynos_tmu.c Amit Daniel Kachhap 2013-06-24 980 static int exynos_tmu_probe(struct platform_device *pdev)
cebe7373a7e659 drivers/thermal/samsung/exynos_tmu.c Amit Daniel Kachhap 2013-06-24 981 {
3b6a1a805f3424 drivers/thermal/samsung/exynos_tmu.c Lukasz Majewski 2015-01-23 982 struct exynos_tmu_data *data;
3b6a1a805f3424 drivers/thermal/samsung/exynos_tmu.c Lukasz Majewski 2015-01-23 983 int ret;
cebe7373a7e659 drivers/thermal/samsung/exynos_tmu.c Amit Daniel Kachhap 2013-06-24 984
79e093c3fe9de9 drivers/thermal/exynos_thermal.c Amit Daniel Kachhap 2012-08-16 985 data = devm_kzalloc(&pdev->dev, sizeof(struct exynos_tmu_data),
79e093c3fe9de9 drivers/thermal/exynos_thermal.c Amit Daniel Kachhap 2012-08-16 986 GFP_KERNEL);
2a9675b39ad1af drivers/thermal/samsung/exynos_tmu.c Jingoo Han 2014-05-07 987 if (!data)
9d97e5c81e15af drivers/hwmon/exynos4_tmu.c Donggeun Kim 2011-09-07 988 return -ENOMEM;
9d97e5c81e15af drivers/hwmon/exynos4_tmu.c Donggeun Kim 2011-09-07 989
cebe7373a7e659 drivers/thermal/samsung/exynos_tmu.c Amit Daniel Kachhap 2013-06-24 990 platform_set_drvdata(pdev, data);
cebe7373a7e659 drivers/thermal/samsung/exynos_tmu.c Amit Daniel Kachhap 2013-06-24 991 mutex_init(&data->lock);
9d97e5c81e15af drivers/hwmon/exynos4_tmu.c Donggeun Kim 2011-09-07 992
824ead03b78403 drivers/thermal/samsung/exynos_tmu.c Krzysztof Kozlowski 2015-10-08 993 /*
824ead03b78403 drivers/thermal/samsung/exynos_tmu.c Krzysztof Kozlowski 2015-10-08 994 * Try enabling the regulator if found
824ead03b78403 drivers/thermal/samsung/exynos_tmu.c Krzysztof Kozlowski 2015-10-08 995 * TODO: Add regulator as an SOC feature, so that regulator enable
824ead03b78403 drivers/thermal/samsung/exynos_tmu.c Krzysztof Kozlowski 2015-10-08 996 * is a compulsory call.
824ead03b78403 drivers/thermal/samsung/exynos_tmu.c Krzysztof Kozlowski 2015-10-08 997 */
ef1639e66e72af drivers/thermal/samsung/exynos_tmu.c Mateusz Majewski 2023-11-20 998 ret = devm_regulator_get_enable_optional(&pdev->dev, "vtmu");
b2f20752180f71 drivers/thermal/samsung/exynos_tmu.c Mateusz Majewski 2023-11-20 999 switch (ret) {
ef1639e66e72af drivers/thermal/samsung/exynos_tmu.c Mateusz Majewski 2023-11-20 1000 case 0:
b2f20752180f71 drivers/thermal/samsung/exynos_tmu.c Mateusz Majewski 2023-11-20 1001 case -ENODEV:
b2f20752180f71 drivers/thermal/samsung/exynos_tmu.c Mateusz Majewski 2023-11-20 1002 break;
b2f20752180f71 drivers/thermal/samsung/exynos_tmu.c Mateusz Majewski 2023-11-20 1003 case -EPROBE_DEFER:
ccb361d2fdda89 drivers/thermal/samsung/exynos_tmu.c Javier Martinez Canillas 2016-02-18 1004 return -EPROBE_DEFER;
b2f20752180f71 drivers/thermal/samsung/exynos_tmu.c Mateusz Majewski 2023-11-20 1005 default:
ef1639e66e72af drivers/thermal/samsung/exynos_tmu.c Mateusz Majewski 2023-11-20 1006 dev_err(&pdev->dev, "Failed to get enabled regulator: %d\n",
b2f20752180f71 drivers/thermal/samsung/exynos_tmu.c Mateusz Majewski 2023-11-20 1007 ret);
b2f20752180f71 drivers/thermal/samsung/exynos_tmu.c Mateusz Majewski 2023-11-20 1008 return ret;
b2f20752180f71 drivers/thermal/samsung/exynos_tmu.c Mateusz Majewski 2023-11-20 1009 }
824ead03b78403 drivers/thermal/samsung/exynos_tmu.c Krzysztof Kozlowski 2015-10-08 1010
cebe7373a7e659 drivers/thermal/samsung/exynos_tmu.c Amit Daniel Kachhap 2013-06-24 1011 ret = exynos_map_dt_data(pdev);
cebe7373a7e659 drivers/thermal/samsung/exynos_tmu.c Amit Daniel Kachhap 2013-06-24 1012 if (ret)
ef1639e66e72af drivers/thermal/samsung/exynos_tmu.c Mateusz Majewski 2023-11-20 1013 return ret;
9d97e5c81e15af drivers/hwmon/exynos4_tmu.c Donggeun Kim 2011-09-07 1014
2a16279c68bcfa drivers/thermal/exynos_thermal.c Sachin Kamat 2013-04-18 1015 data->clk = devm_clk_get(&pdev->dev, "tmu_apbif");
9d97e5c81e15af drivers/hwmon/exynos4_tmu.c Donggeun Kim 2011-09-07 1016 if (IS_ERR(data->clk)) {
9d97e5c81e15af drivers/hwmon/exynos4_tmu.c Donggeun Kim 2011-09-07 1017 dev_err(&pdev->dev, "Failed to get clock\n");
ef1639e66e72af drivers/thermal/samsung/exynos_tmu.c Mateusz Majewski 2023-11-20 1018 return PTR_ERR(data->clk);
9d97e5c81e15af drivers/hwmon/exynos4_tmu.c Donggeun Kim 2011-09-07 1019 }
9d97e5c81e15af drivers/hwmon/exynos4_tmu.c Donggeun Kim 2011-09-07 1020
14a11dc7e0dbf4 drivers/thermal/samsung/exynos_tmu.c Naveen Krishna Chatradhi 2013-12-19 1021 data->clk_sec = devm_clk_get(&pdev->dev, "tmu_triminfo_apbif");
14a11dc7e0dbf4 drivers/thermal/samsung/exynos_tmu.c Naveen Krishna Chatradhi 2013-12-19 1022 if (IS_ERR(data->clk_sec)) {
14a11dc7e0dbf4 drivers/thermal/samsung/exynos_tmu.c Naveen Krishna Chatradhi 2013-12-19 1023 if (data->soc == SOC_ARCH_EXYNOS5420_TRIMINFO) {
14a11dc7e0dbf4 drivers/thermal/samsung/exynos_tmu.c Naveen Krishna Chatradhi 2013-12-19 1024 dev_err(&pdev->dev, "Failed to get triminfo clock\n");
ef1639e66e72af drivers/thermal/samsung/exynos_tmu.c Mateusz Majewski 2023-11-20 1025 return PTR_ERR(data->clk_sec);
14a11dc7e0dbf4 drivers/thermal/samsung/exynos_tmu.c Naveen Krishna Chatradhi 2013-12-19 1026 }
14a11dc7e0dbf4 drivers/thermal/samsung/exynos_tmu.c Naveen Krishna Chatradhi 2013-12-19 1027 } else {
14a11dc7e0dbf4 drivers/thermal/samsung/exynos_tmu.c Naveen Krishna Chatradhi 2013-12-19 1028 ret = clk_prepare(data->clk_sec);
14a11dc7e0dbf4 drivers/thermal/samsung/exynos_tmu.c Naveen Krishna Chatradhi 2013-12-19 1029 if (ret) {
14a11dc7e0dbf4 drivers/thermal/samsung/exynos_tmu.c Naveen Krishna Chatradhi 2013-12-19 1030 dev_err(&pdev->dev, "Failed to get clock\n");
ef1639e66e72af drivers/thermal/samsung/exynos_tmu.c Mateusz Majewski 2023-11-20 1031 return ret;
14a11dc7e0dbf4 drivers/thermal/samsung/exynos_tmu.c Naveen Krishna Chatradhi 2013-12-19 1032 }
14a11dc7e0dbf4 drivers/thermal/samsung/exynos_tmu.c Naveen Krishna Chatradhi 2013-12-19 1033 }
14a11dc7e0dbf4 drivers/thermal/samsung/exynos_tmu.c Naveen Krishna Chatradhi 2013-12-19 1034
14a11dc7e0dbf4 drivers/thermal/samsung/exynos_tmu.c Naveen Krishna Chatradhi 2013-12-19 1035 ret = clk_prepare(data->clk);
14a11dc7e0dbf4 drivers/thermal/samsung/exynos_tmu.c Naveen Krishna Chatradhi 2013-12-19 1036 if (ret) {
14a11dc7e0dbf4 drivers/thermal/samsung/exynos_tmu.c Naveen Krishna Chatradhi 2013-12-19 1037 dev_err(&pdev->dev, "Failed to get clock\n");
14a11dc7e0dbf4 drivers/thermal/samsung/exynos_tmu.c Naveen Krishna Chatradhi 2013-12-19 1038 goto err_clk_sec;
14a11dc7e0dbf4 drivers/thermal/samsung/exynos_tmu.c Naveen Krishna Chatradhi 2013-12-19 1039 }
2a16279c68bcfa drivers/thermal/exynos_thermal.c Sachin Kamat 2013-04-18 1040
488c7455d74ce0 drivers/thermal/samsung/exynos_tmu.c Chanwoo Choi 2015-03-10 1041 switch (data->soc) {
488c7455d74ce0 drivers/thermal/samsung/exynos_tmu.c Chanwoo Choi 2015-03-10 1042 case SOC_ARCH_EXYNOS5433:
488c7455d74ce0 drivers/thermal/samsung/exynos_tmu.c Chanwoo Choi 2015-03-10 1043 case SOC_ARCH_EXYNOS7:
6c247393cfdd66 drivers/thermal/samsung/exynos_tmu.c Abhilash Kesavan 2015-01-27 1044 data->sclk = devm_clk_get(&pdev->dev, "tmu_sclk");
6c247393cfdd66 drivers/thermal/samsung/exynos_tmu.c Abhilash Kesavan 2015-01-27 1045 if (IS_ERR(data->sclk)) {
6c247393cfdd66 drivers/thermal/samsung/exynos_tmu.c Abhilash Kesavan 2015-01-27 1046 dev_err(&pdev->dev, "Failed to get sclk\n");
02d438f62c05f0 drivers/thermal/samsung/exynos_tmu.c Dan Carpenter 2021-08-10 1047 ret = PTR_ERR(data->sclk);
6c247393cfdd66 drivers/thermal/samsung/exynos_tmu.c Abhilash Kesavan 2015-01-27 1048 goto err_clk;
6c247393cfdd66 drivers/thermal/samsung/exynos_tmu.c Abhilash Kesavan 2015-01-27 1049 } else {
6c247393cfdd66 drivers/thermal/samsung/exynos_tmu.c Abhilash Kesavan 2015-01-27 1050 ret = clk_prepare_enable(data->sclk);
6c247393cfdd66 drivers/thermal/samsung/exynos_tmu.c Abhilash Kesavan 2015-01-27 1051 if (ret) {
6c247393cfdd66 drivers/thermal/samsung/exynos_tmu.c Abhilash Kesavan 2015-01-27 1052 dev_err(&pdev->dev, "Failed to enable sclk\n");
6c247393cfdd66 drivers/thermal/samsung/exynos_tmu.c Abhilash Kesavan 2015-01-27 1053 goto err_clk;
6c247393cfdd66 drivers/thermal/samsung/exynos_tmu.c Abhilash Kesavan 2015-01-27 1054 }
6c247393cfdd66 drivers/thermal/samsung/exynos_tmu.c Abhilash Kesavan 2015-01-27 1055 }
488c7455d74ce0 drivers/thermal/samsung/exynos_tmu.c Chanwoo Choi 2015-03-10 1056 break;
488c7455d74ce0 drivers/thermal/samsung/exynos_tmu.c Chanwoo Choi 2015-03-10 1057 default:
488c7455d74ce0 drivers/thermal/samsung/exynos_tmu.c Chanwoo Choi 2015-03-10 1058 break;
baba1ebb99ba1f drivers/thermal/samsung/exynos_tmu.c Krzysztof Kozlowski 2015-10-08 1059 }
6c247393cfdd66 drivers/thermal/samsung/exynos_tmu.c Abhilash Kesavan 2015-01-27 1060
9f72236db6c75b drivers/thermal/samsung/exynos_tmu.c Mateusz Majewski 2023-11-20 1061 ret = exynos_tmu_initialize(pdev);
9f72236db6c75b drivers/thermal/samsung/exynos_tmu.c Mateusz Majewski 2023-11-20 1062 if (ret) {
9f72236db6c75b drivers/thermal/samsung/exynos_tmu.c Mateusz Majewski 2023-11-20 1063 dev_err(&pdev->dev, "Failed to initialize TMU\n");
9f72236db6c75b drivers/thermal/samsung/exynos_tmu.c Mateusz Majewski 2023-11-20 @1064 return ret;

All these warnings are basically saying that this should be goto
err_sclk;

9f72236db6c75b drivers/thermal/samsung/exynos_tmu.c Mateusz Majewski 2023-11-20 1065 }
9f72236db6c75b drivers/thermal/samsung/exynos_tmu.c Mateusz Majewski 2023-11-20 1066
7ea98f70c73ea3 drivers/thermal/samsung/exynos_tmu.c Daniel Lezcano 2022-08-05 1067 data->tzd = devm_thermal_of_zone_register(&pdev->dev, 0, data,
9e4249b4034090 drivers/thermal/samsung/exynos_tmu.c Krzysztof Kozlowski 2015-10-08 1068 &exynos_sensor_ops);
9e4249b4034090 drivers/thermal/samsung/exynos_tmu.c Krzysztof Kozlowski 2015-10-08 1069 if (IS_ERR(data->tzd)) {
9e4249b4034090 drivers/thermal/samsung/exynos_tmu.c Krzysztof Kozlowski 2015-10-08 1070 ret = PTR_ERR(data->tzd);
82bdde8ecdd7e5 drivers/thermal/samsung/exynos_tmu.c Marek Szyprowski 2020-02-28 1071 if (ret != -EPROBE_DEFER)
82bdde8ecdd7e5 drivers/thermal/samsung/exynos_tmu.c Marek Szyprowski 2020-02-28 1072 dev_err(&pdev->dev, "Failed to register sensor: %d\n",
82bdde8ecdd7e5 drivers/thermal/samsung/exynos_tmu.c Marek Szyprowski 2020-02-28 1073 ret);
9e4249b4034090 drivers/thermal/samsung/exynos_tmu.c Krzysztof Kozlowski 2015-10-08 1074 goto err_sclk;
9e4249b4034090 drivers/thermal/samsung/exynos_tmu.c Krzysztof Kozlowski 2015-10-08 1075 }
6c247393cfdd66 drivers/thermal/samsung/exynos_tmu.c Abhilash Kesavan 2015-01-27 1076
9f72236db6c75b drivers/thermal/samsung/exynos_tmu.c Mateusz Majewski 2023-11-20 1077 ret = exynos_thermal_zone_configure(pdev);
9d97e5c81e15af drivers/hwmon/exynos4_tmu.c Donggeun Kim 2011-09-07 1078 if (ret) {
9f72236db6c75b drivers/thermal/samsung/exynos_tmu.c Mateusz Majewski 2023-11-20 1079 dev_err(&pdev->dev, "Failed to configure the thermal zone\n");
7ea98f70c73ea3 drivers/thermal/samsung/exynos_tmu.c Daniel Lezcano 2022-08-05 1080 goto err_sclk;
9d97e5c81e15af drivers/hwmon/exynos4_tmu.c Donggeun Kim 2011-09-07 1081 }
9d97e5c81e15af drivers/hwmon/exynos4_tmu.c Donggeun Kim 2011-09-07 1082
4147281723b2e6 drivers/thermal/samsung/exynos_tmu.c Mateusz Majewski 2023-11-20 1083 ret = devm_request_threaded_irq(&pdev->dev, data->irq, NULL,
4147281723b2e6 drivers/thermal/samsung/exynos_tmu.c Mateusz Majewski 2023-11-20 1084 exynos_tmu_threaded_irq,
4147281723b2e6 drivers/thermal/samsung/exynos_tmu.c Mateusz Majewski 2023-11-20 1085 IRQF_TRIGGER_RISING
4147281723b2e6 drivers/thermal/samsung/exynos_tmu.c Mateusz Majewski 2023-11-20 1086 | IRQF_SHARED | IRQF_ONESHOT,
4147281723b2e6 drivers/thermal/samsung/exynos_tmu.c Mateusz Majewski 2023-11-20 1087 dev_name(&pdev->dev), data);
cebe7373a7e659 drivers/thermal/samsung/exynos_tmu.c Amit Daniel Kachhap 2013-06-24 1088 if (ret) {
cebe7373a7e659 drivers/thermal/samsung/exynos_tmu.c Amit Daniel Kachhap 2013-06-24 1089 dev_err(&pdev->dev, "Failed to request irq: %d\n", data->irq);
7ea98f70c73ea3 drivers/thermal/samsung/exynos_tmu.c Daniel Lezcano 2022-08-05 1090 goto err_sclk;
cebe7373a7e659 drivers/thermal/samsung/exynos_tmu.c Amit Daniel Kachhap 2013-06-24 1091 }
bbf63be4f33135 drivers/thermal/exynos_thermal.c Jonghwa Lee 2012-11-21 1092
3b6a1a805f3424 drivers/thermal/samsung/exynos_tmu.c Lukasz Majewski 2015-01-23 1093 exynos_tmu_control(pdev, true);
9d97e5c81e15af drivers/hwmon/exynos4_tmu.c Donggeun Kim 2011-09-07 1094 return 0;
9e4249b4034090 drivers/thermal/samsung/exynos_tmu.c Krzysztof Kozlowski 2015-10-08 1095
6c247393cfdd66 drivers/thermal/samsung/exynos_tmu.c Abhilash Kesavan 2015-01-27 1096 err_sclk:
6c247393cfdd66 drivers/thermal/samsung/exynos_tmu.c Abhilash Kesavan 2015-01-27 1097 clk_disable_unprepare(data->sclk);
9d97e5c81e15af drivers/hwmon/exynos4_tmu.c Donggeun Kim 2011-09-07 1098 err_clk:
2a16279c68bcfa drivers/thermal/exynos_thermal.c Sachin Kamat 2013-04-18 1099 clk_unprepare(data->clk);
14a11dc7e0dbf4 drivers/thermal/samsung/exynos_tmu.c Naveen Krishna Chatradhi 2013-12-19 1100 err_clk_sec:
14a11dc7e0dbf4 drivers/thermal/samsung/exynos_tmu.c Naveen Krishna Chatradhi 2013-12-19 1101 if (!IS_ERR(data->clk_sec))
14a11dc7e0dbf4 drivers/thermal/samsung/exynos_tmu.c Naveen Krishna Chatradhi 2013-12-19 1102 clk_unprepare(data->clk_sec);
9d97e5c81e15af drivers/hwmon/exynos4_tmu.c Donggeun Kim 2011-09-07 @1103 return ret;
9d97e5c81e15af drivers/hwmon/exynos4_tmu.c Donggeun Kim 2011-09-07 1104 }

--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki