* [PATCH v4 0/3] Fixes for Tegra soctherm @ 2018-11-29 10:09 Wei Ni 2018-11-29 10:09 ` [PATCH v4 1/3] thermal: tegra: remove unnecessary warnings Wei Ni ` (2 more replies) 0 siblings, 3 replies; 8+ messages in thread From: Wei Ni @ 2018-11-29 10:09 UTC (permalink / raw) To: thierry.reding, daniel.lezcano, linux-tegra Cc: rui.zhang, edubezval, srikars, linux-kernel, Wei Ni This series fixed some issues for Tegra soctherm Main changes from v3: 1. updated codes for parsing sensor id, per Thierry's comments Main changes from v2: 1. add codes to parse sensor id to avoid registration failure. Main changes from v1: 1. Acked by Thierry Reding <treding@nvidia.com> for the patch "thermal: tegra: fix memory allocation". 2. Print out the sensor name when register failed. 2. Remove patch "thermal: tegra: fix coverity defect" Wei Ni (3): thermal: tegra: remove unnecessary warnings thermal: tegra: fix memory allocation thermal: tegra: parse sensor id before sensor register drivers/thermal/tegra/soctherm.c | 54 +++++++++++++++++++++++++++++++++++----- 1 file changed, 48 insertions(+), 6 deletions(-) -- 2.7.4 ^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH v4 1/3] thermal: tegra: remove unnecessary warnings 2018-11-29 10:09 [PATCH v4 0/3] Fixes for Tegra soctherm Wei Ni @ 2018-11-29 10:09 ` Wei Ni 2018-11-29 16:39 ` Eduardo Valentin 2018-11-29 10:09 ` [PATCH v4 2/3] thermal: tegra: fix memory allocation Wei Ni 2018-11-29 10:09 ` [PATCH v4 3/3] thermal: tegra: parse sensor id before sensor register Wei Ni 2 siblings, 1 reply; 8+ messages in thread From: Wei Ni @ 2018-11-29 10:09 UTC (permalink / raw) To: thierry.reding, daniel.lezcano, linux-tegra Cc: rui.zhang, edubezval, srikars, linux-kernel, Wei Ni Convert warnings to info as not all platforms may have all the thresholds and sensors enabled. Signed-off-by: Wei Ni <wni@nvidia.com> --- drivers/thermal/tegra/soctherm.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/drivers/thermal/tegra/soctherm.c b/drivers/thermal/tegra/soctherm.c index ed28110a3535..55cc1f2f6a45 100644 --- a/drivers/thermal/tegra/soctherm.c +++ b/drivers/thermal/tegra/soctherm.c @@ -550,7 +550,7 @@ static int tegra_soctherm_set_hwtrips(struct device *dev, ret = tz->ops->get_crit_temp(tz, &temperature); if (ret) { - dev_warn(dev, "thermtrip: %s: missing critical temperature\n", + dev_info(dev, "thermtrip: %s: missing critical temperature\n", sg->name); goto set_throttle; } @@ -569,7 +569,7 @@ static int tegra_soctherm_set_hwtrips(struct device *dev, set_throttle: ret = get_hot_temp(tz, &trip, &temperature); if (ret) { - dev_warn(dev, "throttrip: %s: missing hot temperature\n", + dev_info(dev, "throttrip: %s: missing hot temperature\n", sg->name); return 0; } @@ -600,7 +600,7 @@ static int tegra_soctherm_set_hwtrips(struct device *dev, } if (i == THROTTLE_SIZE) - dev_warn(dev, "throttrip: %s: missing throttle cdev\n", + dev_info(dev, "throttrip: %s: missing throttle cdev\n", sg->name); return 0; -- 2.7.4 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH v4 1/3] thermal: tegra: remove unnecessary warnings 2018-11-29 10:09 ` [PATCH v4 1/3] thermal: tegra: remove unnecessary warnings Wei Ni @ 2018-11-29 16:39 ` Eduardo Valentin 2018-11-30 2:52 ` Wei Ni 0 siblings, 1 reply; 8+ messages in thread From: Eduardo Valentin @ 2018-11-29 16:39 UTC (permalink / raw) To: Wei Ni Cc: thierry.reding, daniel.lezcano, linux-tegra, rui.zhang, srikars, linux-kernel Hey, On Thu, Nov 29, 2018 at 06:09:41PM +0800, Wei Ni wrote: > Convert warnings to info as not all platforms may > have all the thresholds and sensors enabled. > > Signed-off-by: Wei Ni <wni@nvidia.com> > --- > drivers/thermal/tegra/soctherm.c | 6 +++--- > 1 file changed, 3 insertions(+), 3 deletions(-) > > diff --git a/drivers/thermal/tegra/soctherm.c b/drivers/thermal/tegra/soctherm.c > index ed28110a3535..55cc1f2f6a45 100644 > --- a/drivers/thermal/tegra/soctherm.c > +++ b/drivers/thermal/tegra/soctherm.c > @@ -550,7 +550,7 @@ static int tegra_soctherm_set_hwtrips(struct device *dev, > > ret = tz->ops->get_crit_temp(tz, &temperature); > if (ret) { > - dev_warn(dev, "thermtrip: %s: missing critical temperature\n", > + dev_info(dev, "thermtrip: %s: missing critical temperature\n", I am mostly ok with your change in direction. But are you sure this is a good thing? What about in the case that you have a platform that have the crit temp and you really failed to .get_crit_temp()? > sg->name); > goto set_throttle; > } > @@ -569,7 +569,7 @@ static int tegra_soctherm_set_hwtrips(struct device *dev, > set_throttle: > ret = get_hot_temp(tz, &trip, &temperature); > if (ret) { > - dev_warn(dev, "throttrip: %s: missing hot temperature\n", > + dev_info(dev, "throttrip: %s: missing hot temperature\n", > sg->name); > return 0; > } > @@ -600,7 +600,7 @@ static int tegra_soctherm_set_hwtrips(struct device *dev, > } > > if (i == THROTTLE_SIZE) > - dev_warn(dev, "throttrip: %s: missing throttle cdev\n", > + dev_info(dev, "throttrip: %s: missing throttle cdev\n", > sg->name); > > return 0; > -- > 2.7.4 > ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v4 1/3] thermal: tegra: remove unnecessary warnings 2018-11-29 16:39 ` Eduardo Valentin @ 2018-11-30 2:52 ` Wei Ni 0 siblings, 0 replies; 8+ messages in thread From: Wei Ni @ 2018-11-30 2:52 UTC (permalink / raw) To: Eduardo Valentin Cc: thierry.reding, daniel.lezcano, linux-tegra, rui.zhang, srikars, linux-kernel On 30/11/2018 12:39 AM, Eduardo Valentin wrote: > Hey, > > On Thu, Nov 29, 2018 at 06:09:41PM +0800, Wei Ni wrote: >> Convert warnings to info as not all platforms may >> have all the thresholds and sensors enabled. >> >> Signed-off-by: Wei Ni <wni@nvidia.com> >> --- >> drivers/thermal/tegra/soctherm.c | 6 +++--- >> 1 file changed, 3 insertions(+), 3 deletions(-) >> >> diff --git a/drivers/thermal/tegra/soctherm.c b/drivers/thermal/tegra/soctherm.c >> index ed28110a3535..55cc1f2f6a45 100644 >> --- a/drivers/thermal/tegra/soctherm.c >> +++ b/drivers/thermal/tegra/soctherm.c >> @@ -550,7 +550,7 @@ static int tegra_soctherm_set_hwtrips(struct device *dev, >> >> ret = tz->ops->get_crit_temp(tz, &temperature); >> if (ret) { >> - dev_warn(dev, "thermtrip: %s: missing critical temperature\n", >> + dev_info(dev, "thermtrip: %s: missing critical temperature\n", > > I am mostly ok with your change in direction. But are you sure this is a > good thing? What about in the case that you have a platform that have > the crit temp and you really failed to .get_crit_temp()? If we set the crit temp in DT, but failed to .get_crit_temp(), it mean the thermal framework have some problems. Since the critical trip is very important, may be we should still keep "dev_warn" in here? > >> sg->name); >> goto set_throttle; >> } >> @@ -569,7 +569,7 @@ static int tegra_soctherm_set_hwtrips(struct device *dev, >> set_throttle: >> ret = get_hot_temp(tz, &trip, &temperature); >> if (ret) { >> - dev_warn(dev, "throttrip: %s: missing hot temperature\n", >> + dev_info(dev, "throttrip: %s: missing hot temperature\n", >> sg->name); >> return 0; >> } >> @@ -600,7 +600,7 @@ static int tegra_soctherm_set_hwtrips(struct device *dev, >> } >> >> if (i == THROTTLE_SIZE) >> - dev_warn(dev, "throttrip: %s: missing throttle cdev\n", >> + dev_info(dev, "throttrip: %s: missing throttle cdev\n", >> sg->name); >> >> return 0; >> -- >> 2.7.4 >> ^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH v4 2/3] thermal: tegra: fix memory allocation 2018-11-29 10:09 [PATCH v4 0/3] Fixes for Tegra soctherm Wei Ni 2018-11-29 10:09 ` [PATCH v4 1/3] thermal: tegra: remove unnecessary warnings Wei Ni @ 2018-11-29 10:09 ` Wei Ni 2018-11-29 10:09 ` [PATCH v4 3/3] thermal: tegra: parse sensor id before sensor register Wei Ni 2 siblings, 0 replies; 8+ messages in thread From: Wei Ni @ 2018-11-29 10:09 UTC (permalink / raw) To: thierry.reding, daniel.lezcano, linux-tegra Cc: rui.zhang, edubezval, srikars, linux-kernel, Wei Ni Fix memory allocation to store the pointers to thermal_zone_device. Signed-off-by: Wei Ni <wni@nvidia.com> Acked-by: Thierry Reding <treding@nvidia.com> --- drivers/thermal/tegra/soctherm.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/thermal/tegra/soctherm.c b/drivers/thermal/tegra/soctherm.c index 55cc1f2f6a45..375cadbc24cd 100644 --- a/drivers/thermal/tegra/soctherm.c +++ b/drivers/thermal/tegra/soctherm.c @@ -1339,7 +1339,7 @@ static int tegra_soctherm_probe(struct platform_device *pdev) } tegra->thermctl_tzs = devm_kcalloc(&pdev->dev, - soc->num_ttgs, sizeof(*z), + soc->num_ttgs, sizeof(z), GFP_KERNEL); if (!tegra->thermctl_tzs) return -ENOMEM; -- 2.7.4 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH v4 3/3] thermal: tegra: parse sensor id before sensor register 2018-11-29 10:09 [PATCH v4 0/3] Fixes for Tegra soctherm Wei Ni 2018-11-29 10:09 ` [PATCH v4 1/3] thermal: tegra: remove unnecessary warnings Wei Ni 2018-11-29 10:09 ` [PATCH v4 2/3] thermal: tegra: fix memory allocation Wei Ni @ 2018-11-29 10:09 ` Wei Ni 2018-11-29 16:46 ` Eduardo Valentin 2 siblings, 1 reply; 8+ messages in thread From: Wei Ni @ 2018-11-29 10:09 UTC (permalink / raw) To: thierry.reding, daniel.lezcano, linux-tegra Cc: rui.zhang, edubezval, srikars, linux-kernel, Wei Ni Since different platforms may not support all 4 sensors, so the sensor registration may be failed. Add codes to parse dt to find sensor id which need to be registered. So that the registration can be successful on all platform. Signed-off-by: Wei Ni <wni@nvidia.com> --- drivers/thermal/tegra/soctherm.c | 46 ++++++++++++++++++++++++++++++++++++++-- 1 file changed, 44 insertions(+), 2 deletions(-) diff --git a/drivers/thermal/tegra/soctherm.c b/drivers/thermal/tegra/soctherm.c index 375cadbc24cd..bdc660f2794a 100644 --- a/drivers/thermal/tegra/soctherm.c +++ b/drivers/thermal/tegra/soctherm.c @@ -1224,6 +1224,42 @@ static void soctherm_init(struct platform_device *pdev) tegra_soctherm_throttle(&pdev->dev); } +static bool tegra_soctherm_find_sensor_id(unsigned int sensor_id) +{ + bool ret = false; + struct of_phandle_args sensor_specs; + struct device_node *np, *sensor_np; + + np = of_find_node_by_name(NULL, "thermal-zones"); + if (!np) + return ret; + + sensor_np = of_get_next_child(np, NULL); + for_each_available_child_of_node(np, sensor_np) { + if (of_parse_phandle_with_args(sensor_np, "thermal-sensors", + "#thermal-sensor-cells", + 0, &sensor_specs)) + continue; + + if (sensor_specs.args_count != 1) { + WARN(sensor_specs.args_count != 1, + "%s: wrong cells in sensor specifier %d\n", + sensor_specs.np->name, sensor_specs.args_count); + continue; + } + + if (sensor_specs.args[0] == sensor_id) { + ret = true; + break; + } + } + + of_node_put(np); + of_node_put(sensor_np); + + return ret; +} + static const struct of_device_id tegra_soctherm_of_match[] = { #ifdef CONFIG_ARCH_TEGRA_124_SOC { @@ -1365,13 +1401,16 @@ static int tegra_soctherm_probe(struct platform_device *pdev) zone->sg = soc->ttgs[i]; zone->ts = tegra; + if (!tegra_soctherm_find_sensor_id(soc->ttgs[i]->id)) + continue; + z = devm_thermal_zone_of_sensor_register(&pdev->dev, soc->ttgs[i]->id, zone, &tegra_of_thermal_ops); if (IS_ERR(z)) { err = PTR_ERR(z); - dev_err(&pdev->dev, "failed to register sensor: %d\n", - err); + dev_err(&pdev->dev, "failed to register sensor %s: %d\n", + soc->ttgs[i]->name, err); goto disable_clocks; } @@ -1434,6 +1473,9 @@ static int __maybe_unused soctherm_resume(struct device *dev) struct thermal_zone_device *tz; tz = tegra->thermctl_tzs[soc->ttgs[i]->id]; + if (!tz) + continue; + err = tegra_soctherm_set_hwtrips(dev, soc->ttgs[i], tz); if (err) { dev_err(&pdev->dev, -- 2.7.4 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH v4 3/3] thermal: tegra: parse sensor id before sensor register 2018-11-29 10:09 ` [PATCH v4 3/3] thermal: tegra: parse sensor id before sensor register Wei Ni @ 2018-11-29 16:46 ` Eduardo Valentin 2018-11-30 3:00 ` Wei Ni 0 siblings, 1 reply; 8+ messages in thread From: Eduardo Valentin @ 2018-11-29 16:46 UTC (permalink / raw) To: Wei Ni Cc: thierry.reding, daniel.lezcano, linux-tegra, rui.zhang, srikars, linux-kernel On Thu, Nov 29, 2018 at 06:09:43PM +0800, Wei Ni wrote: > Since different platforms may not support all 4 > sensors, so the sensor registration may be failed. > Add codes to parse dt to find sensor id which > need to be registered. So that the registration > can be successful on all platform. > > Signed-off-by: Wei Ni <wni@nvidia.com> > --- > drivers/thermal/tegra/soctherm.c | 46 ++++++++++++++++++++++++++++++++++++++-- > 1 file changed, 44 insertions(+), 2 deletions(-) > > diff --git a/drivers/thermal/tegra/soctherm.c b/drivers/thermal/tegra/soctherm.c > index 375cadbc24cd..bdc660f2794a 100644 > --- a/drivers/thermal/tegra/soctherm.c > +++ b/drivers/thermal/tegra/soctherm.c > @@ -1224,6 +1224,42 @@ static void soctherm_init(struct platform_device *pdev) > tegra_soctherm_throttle(&pdev->dev); > } > > +static bool tegra_soctherm_find_sensor_id(unsigned int sensor_id) > +{ > + bool ret = false; > + struct of_phandle_args sensor_specs; > + struct device_node *np, *sensor_np; > + > + np = of_find_node_by_name(NULL, "thermal-zones"); > + if (!np) > + return ret; > + > + sensor_np = of_get_next_child(np, NULL); > + for_each_available_child_of_node(np, sensor_np) { > + if (of_parse_phandle_with_args(sensor_np, "thermal-sensors", > + "#thermal-sensor-cells", > + 0, &sensor_specs)) > + continue; > + > + if (sensor_specs.args_count != 1) { > + WARN(sensor_specs.args_count != 1, > + "%s: wrong cells in sensor specifier %d\n", > + sensor_specs.np->name, sensor_specs.args_count); > + continue; > + } > + > + if (sensor_specs.args[0] == sensor_id) { > + ret = true; > + break; > + } > + } > + > + of_node_put(np); > + of_node_put(sensor_np); > + > + return ret; > +} > + > static const struct of_device_id tegra_soctherm_of_match[] = { > #ifdef CONFIG_ARCH_TEGRA_124_SOC > { > @@ -1365,13 +1401,16 @@ static int tegra_soctherm_probe(struct platform_device *pdev) > zone->sg = soc->ttgs[i]; > zone->ts = tegra; > > + if (!tegra_soctherm_find_sensor_id(soc->ttgs[i]->id)) > + continue; > + Instead of matching driver id with DT id presence, wouldnt make sense to simply have DT with the sensors that makes sense for that platform? I am failing to understand why you need to go over and find ids. > z = devm_thermal_zone_of_sensor_register(&pdev->dev, > soc->ttgs[i]->id, zone, > &tegra_of_thermal_ops); > if (IS_ERR(z)) { > err = PTR_ERR(z); > - dev_err(&pdev->dev, "failed to register sensor: %d\n", > - err); > + dev_err(&pdev->dev, "failed to register sensor %s: %d\n", > + soc->ttgs[i]->name, err); > goto disable_clocks; > } > > @@ -1434,6 +1473,9 @@ static int __maybe_unused soctherm_resume(struct device *dev) > struct thermal_zone_device *tz; > > tz = tegra->thermctl_tzs[soc->ttgs[i]->id]; > + if (!tz) > + continue; > + > err = tegra_soctherm_set_hwtrips(dev, soc->ttgs[i], tz); > if (err) { > dev_err(&pdev->dev, > -- > 2.7.4 > ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v4 3/3] thermal: tegra: parse sensor id before sensor register 2018-11-29 16:46 ` Eduardo Valentin @ 2018-11-30 3:00 ` Wei Ni 0 siblings, 0 replies; 8+ messages in thread From: Wei Ni @ 2018-11-30 3:00 UTC (permalink / raw) To: Eduardo Valentin Cc: thierry.reding, daniel.lezcano, linux-tegra, rui.zhang, srikars, linux-kernel On 30/11/2018 12:46 AM, Eduardo Valentin wrote: > On Thu, Nov 29, 2018 at 06:09:43PM +0800, Wei Ni wrote: >> Since different platforms may not support all 4 >> sensors, so the sensor registration may be failed. >> Add codes to parse dt to find sensor id which >> need to be registered. So that the registration >> can be successful on all platform. >> >> Signed-off-by: Wei Ni <wni@nvidia.com> >> --- >> drivers/thermal/tegra/soctherm.c | 46 ++++++++++++++++++++++++++++++++++++++-- >> 1 file changed, 44 insertions(+), 2 deletions(-) >> >> diff --git a/drivers/thermal/tegra/soctherm.c b/drivers/thermal/tegra/soctherm.c >> index 375cadbc24cd..bdc660f2794a 100644 >> --- a/drivers/thermal/tegra/soctherm.c >> +++ b/drivers/thermal/tegra/soctherm.c >> @@ -1224,6 +1224,42 @@ static void soctherm_init(struct platform_device *pdev) >> tegra_soctherm_throttle(&pdev->dev); >> } >> >> +static bool tegra_soctherm_find_sensor_id(unsigned int sensor_id) >> +{ >> + bool ret = false; >> + struct of_phandle_args sensor_specs; >> + struct device_node *np, *sensor_np; >> + >> + np = of_find_node_by_name(NULL, "thermal-zones"); >> + if (!np) >> + return ret; >> + >> + sensor_np = of_get_next_child(np, NULL); >> + for_each_available_child_of_node(np, sensor_np) { >> + if (of_parse_phandle_with_args(sensor_np, "thermal-sensors", >> + "#thermal-sensor-cells", >> + 0, &sensor_specs)) >> + continue; >> + >> + if (sensor_specs.args_count != 1) { >> + WARN(sensor_specs.args_count != 1, >> + "%s: wrong cells in sensor specifier %d\n", >> + sensor_specs.np->name, sensor_specs.args_count); >> + continue; >> + } >> + >> + if (sensor_specs.args[0] == sensor_id) { >> + ret = true; >> + break; >> + } >> + } >> + >> + of_node_put(np); >> + of_node_put(sensor_np); >> + >> + return ret; >> +} >> + >> static const struct of_device_id tegra_soctherm_of_match[] = { >> #ifdef CONFIG_ARCH_TEGRA_124_SOC >> { >> @@ -1365,13 +1401,16 @@ static int tegra_soctherm_probe(struct platform_device *pdev) >> zone->sg = soc->ttgs[i]; >> zone->ts = tegra; >> >> + if (!tegra_soctherm_find_sensor_id(soc->ttgs[i]->id)) >> + continue; >> + > > > Instead of matching driver id with DT id presence, wouldnt make sense to > simply have DT with the sensors that makes sense for that platform? > > I am failing to understand why you need to go over and find ids. As discussed with Daniel several days ago, this driver will always try to register 4 thermal zones, including cpu, gpu, mem and pll, but some platform doesn't need to support all of them, so the thermal zone registration will be failed. In previous patches, we just ignore the failure and continue to register next sensors, but Daniel think it's not good. And per his suggestion, we refer to the qoriq thermal driver to parse dt to get sensor_id, so that we can make the registration to be successful. Wei. > >> z = devm_thermal_zone_of_sensor_register(&pdev->dev, >> soc->ttgs[i]->id, zone, >> &tegra_of_thermal_ops); >> if (IS_ERR(z)) { >> err = PTR_ERR(z); >> - dev_err(&pdev->dev, "failed to register sensor: %d\n", >> - err); >> + dev_err(&pdev->dev, "failed to register sensor %s: %d\n", >> + soc->ttgs[i]->name, err); >> goto disable_clocks; >> } >> >> @@ -1434,6 +1473,9 @@ static int __maybe_unused soctherm_resume(struct device *dev) >> struct thermal_zone_device *tz; >> >> tz = tegra->thermctl_tzs[soc->ttgs[i]->id]; >> + if (!tz) >> + continue; >> + >> err = tegra_soctherm_set_hwtrips(dev, soc->ttgs[i], tz); >> if (err) { >> dev_err(&pdev->dev, >> -- >> 2.7.4 >> ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2018-11-30 3:00 UTC | newest] Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2018-11-29 10:09 [PATCH v4 0/3] Fixes for Tegra soctherm Wei Ni 2018-11-29 10:09 ` [PATCH v4 1/3] thermal: tegra: remove unnecessary warnings Wei Ni 2018-11-29 16:39 ` Eduardo Valentin 2018-11-30 2:52 ` Wei Ni 2018-11-29 10:09 ` [PATCH v4 2/3] thermal: tegra: fix memory allocation Wei Ni 2018-11-29 10:09 ` [PATCH v4 3/3] thermal: tegra: parse sensor id before sensor register Wei Ni 2018-11-29 16:46 ` Eduardo Valentin 2018-11-30 3:00 ` Wei Ni
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).