thermal/drivers/tegra-bpmp: Handle offline zones
authorMikko Perttunen <mperttunen@nvidia.com>
Thu, 30 Mar 2023 09:49:04 +0000 (12:49 +0300)
committerDaniel Lezcano <daniel.lezcano@linaro.org>
Fri, 7 Apr 2023 08:31:33 +0000 (10:31 +0200)
Thermal zones located in power domains may not be accessible when
the domain is powergated. In this situation, reading the temperature
will return -BPMP_EFAULT. When evaluating trips, BPMP will internally
use -256C as the temperature for offline zones.

For smooth operation, for offline zones, return -EAGAIN when reading
the temperature and allow registration of zones even if they are
offline during probe.

Signed-off-by: Mikko Perttunen <mperttunen@nvidia.com>
Acked-by: Thierry Reding <treding@nvidia.com>
Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
Link: https://lore.kernel.org/r/20230330094904.2589428-1-cyndis@kapsi.fi
drivers/thermal/tegra/tegra-bpmp-thermal.c

index b1d5aaf..a2879d6 100644 (file)
@@ -52,6 +52,8 @@ static int __tegra_bpmp_thermal_get_temp(struct tegra_bpmp_thermal_zone *zone,
        err = tegra_bpmp_transfer(zone->tegra->bpmp, &msg);
        if (err)
                return err;
+       if (msg.rx.ret == -BPMP_EFAULT)
+               return -EAGAIN;
        if (msg.rx.ret)
                return -EINVAL;
 
@@ -209,7 +211,12 @@ static int tegra_bpmp_thermal_probe(struct platform_device *pdev)
                zone->tegra = tegra;
 
                err = __tegra_bpmp_thermal_get_temp(zone, &temp);
-               if (err < 0) {
+
+               /*
+                * Sensors in powergated domains may temporarily fail to be read
+                * (-EAGAIN), but will become accessible when the domain is powered on.
+                */
+               if (err < 0 && err != -EAGAIN) {
                        devm_kfree(&pdev->dev, zone);
                        continue;
                }