Commit cdd6076b authored by Mikko Perttunen's avatar Mikko Perttunen Committed by Daniel Lezcano
Browse files

thermal/drivers/tegra-bpmp: Handle offline zones



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: default avatarMikko Perttunen <mperttunen@nvidia.com>
Acked-by: default avatarThierry Reding <treding@nvidia.com>
Signed-off-by: default avatarDaniel Lezcano <daniel.lezcano@linaro.org>
Link: https://lore.kernel.org/r/20230330094904.2589428-1-cyndis@kapsi.fi
parent fee5caec
Loading
Loading
Loading
Loading
+8 −1
Original line number Diff line number Diff line
@@ -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;
		}