diff mbox series

thermal: tegra-bpmp: Check if BPMP supports trip points

Message ID 20221129153914.2699041-1-cyndis@kapsi.fi
State New
Headers show
Series thermal: tegra-bpmp: Check if BPMP supports trip points | expand

Commit Message

Mikko Perttunen Nov. 29, 2022, 3:39 p.m. UTC
From: Mikko Perttunen <mperttunen@nvidia.com>

Check if BPMP supports thermal trip points, and if not,
do not expose the .set_trips callback to the thermal core
framework. This can happen in virtualized environments
where asynchronous communication with VM BPMP drivers is not
available.

Signed-off-by: Mikko Perttunen <mperttunen@nvidia.com>
---
 drivers/thermal/tegra/tegra-bpmp-thermal.c | 52 +++++++++++++++++++++-
 1 file changed, 51 insertions(+), 1 deletion(-)

Comments

Thierry Reding Jan. 26, 2023, 3:42 p.m. UTC | #1
On Thu, Jan 26, 2023 at 04:08:03PM +0100, Daniel Lezcano wrote:
> 
> Hi Thierry,
> 
> On 26/01/2023 15:52, Thierry Reding wrote:
> > On Tue, Nov 29, 2022 at 05:39:14PM +0200, Mikko Perttunen wrote:
> > > From: Mikko Perttunen <mperttunen@nvidia.com>
> > > 
> > > Check if BPMP supports thermal trip points, and if not,
> > > do not expose the .set_trips callback to the thermal core
> > > framework. This can happen in virtualized environments
> > > where asynchronous communication with VM BPMP drivers is not
> > > available.
> > > 
> > > Signed-off-by: Mikko Perttunen <mperttunen@nvidia.com>
> > > ---
> > >   drivers/thermal/tegra/tegra-bpmp-thermal.c | 52 +++++++++++++++++++++-
> > >   1 file changed, 51 insertions(+), 1 deletion(-)
> > 
> > Applied, thanks.
> 
> I prefer you provide an Acked-by and I take the thermal related patches.
> Especially in this period where we are reworking the framework with the
> thermal trip points ;)

Sorry, my bad. I misread this as belonging to drivers/firmware/tegra
which goes in via ARM SoC. I'll drop this from the Tegra tree. Feel free
to pick this up:

Acked-by: Thierry Reding <treding@nvidia.com>
Daniel Lezcano Jan. 26, 2023, 4:07 p.m. UTC | #2
On 26/01/2023 16:42, Thierry Reding wrote:
> On Thu, Jan 26, 2023 at 04:08:03PM +0100, Daniel Lezcano wrote:
>>
>> Hi Thierry,
>>
>> On 26/01/2023 15:52, Thierry Reding wrote:
>>> On Tue, Nov 29, 2022 at 05:39:14PM +0200, Mikko Perttunen wrote:
>>>> From: Mikko Perttunen <mperttunen@nvidia.com>
>>>>
>>>> Check if BPMP supports thermal trip points, and if not,
>>>> do not expose the .set_trips callback to the thermal core
>>>> framework. This can happen in virtualized environments
>>>> where asynchronous communication with VM BPMP drivers is not
>>>> available.
>>>>
>>>> Signed-off-by: Mikko Perttunen <mperttunen@nvidia.com>
>>>> ---
>>>>    drivers/thermal/tegra/tegra-bpmp-thermal.c | 52 +++++++++++++++++++++-
>>>>    1 file changed, 51 insertions(+), 1 deletion(-)
>>>
>>> Applied, thanks.
>>
>> I prefer you provide an Acked-by and I take the thermal related patches.
>> Especially in this period where we are reworking the framework with the
>> thermal trip points ;)
> 
> Sorry, my bad. I misread this as belonging to drivers/firmware/tegra
> which goes in via ARM SoC.

No worries ;)

> I'll drop this from the Tegra tree. Feel free
> to pick this up:

Ok, thanks

> Acked-by: Thierry Reding <treding@nvidia.com>
Jon Hunter April 3, 2023, 10:22 a.m. UTC | #3
Hi Daniel,

On 26/01/2023 16:07, Daniel Lezcano wrote:
> On 26/01/2023 16:42, Thierry Reding wrote:
>> On Thu, Jan 26, 2023 at 04:08:03PM +0100, Daniel Lezcano wrote:
>>>
>>> Hi Thierry,
>>>
>>> On 26/01/2023 15:52, Thierry Reding wrote:
>>>> On Tue, Nov 29, 2022 at 05:39:14PM +0200, Mikko Perttunen wrote:
>>>>> From: Mikko Perttunen <mperttunen@nvidia.com>
>>>>>
>>>>> Check if BPMP supports thermal trip points, and if not,
>>>>> do not expose the .set_trips callback to the thermal core
>>>>> framework. This can happen in virtualized environments
>>>>> where asynchronous communication with VM BPMP drivers is not
>>>>> available.
>>>>>
>>>>> Signed-off-by: Mikko Perttunen <mperttunen@nvidia.com>
>>>>> ---
>>>>>    drivers/thermal/tegra/tegra-bpmp-thermal.c | 52 
>>>>> +++++++++++++++++++++-
>>>>>    1 file changed, 51 insertions(+), 1 deletion(-)
>>>>
>>>> Applied, thanks.
>>>
>>> I prefer you provide an Acked-by and I take the thermal related patches.
>>> Especially in this period where we are reworking the framework with the
>>> thermal trip points ;)
>>
>> Sorry, my bad. I misread this as belonging to drivers/firmware/tegra
>> which goes in via ARM SoC.
> 
> No worries ;)
> 
>> I'll drop this from the Tegra tree. Feel free
>> to pick this up:
> 
> Ok, thanks
> 
>> Acked-by: Thierry Reding <treding@nvidia.com>


I don't see this one in -next. Are you able to pick this one up now?

Thanks!
Jon
Daniel Lezcano April 3, 2023, 10:26 a.m. UTC | #4
On 03/04/2023 12:22, Jon Hunter wrote:
> Hi Daniel,
> 
> On 26/01/2023 16:07, Daniel Lezcano wrote:
>> On 26/01/2023 16:42, Thierry Reding wrote:
>>> On Thu, Jan 26, 2023 at 04:08:03PM +0100, Daniel Lezcano wrote:
>>>>
>>>> Hi Thierry,
>>>>
>>>> On 26/01/2023 15:52, Thierry Reding wrote:
>>>>> On Tue, Nov 29, 2022 at 05:39:14PM +0200, Mikko Perttunen wrote:
>>>>>> From: Mikko Perttunen <mperttunen@nvidia.com>
>>>>>>
>>>>>> Check if BPMP supports thermal trip points, and if not,
>>>>>> do not expose the .set_trips callback to the thermal core
>>>>>> framework. This can happen in virtualized environments
>>>>>> where asynchronous communication with VM BPMP drivers is not
>>>>>> available.
>>>>>>
>>>>>> Signed-off-by: Mikko Perttunen <mperttunen@nvidia.com>
>>>>>> ---
>>>>>>    drivers/thermal/tegra/tegra-bpmp-thermal.c | 52 
>>>>>> +++++++++++++++++++++-
>>>>>>    1 file changed, 51 insertions(+), 1 deletion(-)
>>>>>
>>>>> Applied, thanks.
>>>>
>>>> I prefer you provide an Acked-by and I take the thermal related 
>>>> patches.
>>>> Especially in this period where we are reworking the framework with the
>>>> thermal trip points ;)
>>>
>>> Sorry, my bad. I misread this as belonging to drivers/firmware/tegra
>>> which goes in via ARM SoC.
>>
>> No worries ;)
>>
>>> I'll drop this from the Tegra tree. Feel free
>>> to pick this up:
>>
>> Ok, thanks
>>
>>> Acked-by: Thierry Reding <treding@nvidia.com>
> 
> 
> I don't see this one in -next. Are you able to pick this one up now?

Before going in -next, it will go through bleeding-edge then -next, 
logically tomorrow.
diff mbox series

Patch

diff --git a/drivers/thermal/tegra/tegra-bpmp-thermal.c b/drivers/thermal/tegra/tegra-bpmp-thermal.c
index 0b7a1a1948cb..c76e1ea62c8a 100644
--- a/drivers/thermal/tegra/tegra-bpmp-thermal.c
+++ b/drivers/thermal/tegra/tegra-bpmp-thermal.c
@@ -163,19 +163,69 @@  static int tegra_bpmp_thermal_get_num_zones(struct tegra_bpmp *bpmp,
 	return 0;
 }
 
+static int tegra_bpmp_thermal_trips_supported(struct tegra_bpmp *bpmp, bool *supported)
+{
+	struct mrq_thermal_host_to_bpmp_request req;
+	union mrq_thermal_bpmp_to_host_response reply;
+	struct tegra_bpmp_message msg;
+	int err;
+
+	memset(&req, 0, sizeof(req));
+	req.type = CMD_THERMAL_QUERY_ABI;
+	req.query_abi.type = CMD_THERMAL_SET_TRIP;
+
+	memset(&msg, 0, sizeof(msg));
+	msg.mrq = MRQ_THERMAL;
+	msg.tx.data = &req;
+	msg.tx.size = sizeof(req);
+	msg.rx.data = &reply;
+	msg.rx.size = sizeof(reply);
+
+	err = tegra_bpmp_transfer(bpmp, &msg);
+	if (err)
+		return err;
+
+	if (msg.rx.ret == 0) {
+		*supported = true;
+		return 0;
+	} else if (msg.rx.ret == -BPMP_ENODEV) {
+		*supported = false;
+		return 0;
+	} else {
+		return -EINVAL;
+	}
+}
+
 static const struct thermal_zone_device_ops tegra_bpmp_of_thermal_ops = {
 	.get_temp = tegra_bpmp_thermal_get_temp,
 	.set_trips = tegra_bpmp_thermal_set_trips,
 };
 
+static const struct thermal_zone_device_ops tegra_bpmp_of_thermal_ops_notrips = {
+	.get_temp = tegra_bpmp_thermal_get_temp,
+};
+
 static int tegra_bpmp_thermal_probe(struct platform_device *pdev)
 {
 	struct tegra_bpmp *bpmp = dev_get_drvdata(pdev->dev.parent);
+	const struct thermal_zone_device_ops *thermal_ops;
 	struct tegra_bpmp_thermal *tegra;
 	struct thermal_zone_device *tzd;
 	unsigned int i, max_num_zones;
+	bool supported;
 	int err;
 
+	err = tegra_bpmp_thermal_trips_supported(bpmp, &supported);
+	if (err) {
+		dev_err(&pdev->dev, "failed to determine if trip points are supported\n");
+		return err;
+	}
+
+	if (supported)
+		thermal_ops = &tegra_bpmp_of_thermal_ops;
+	else
+		thermal_ops = &tegra_bpmp_of_thermal_ops_notrips;
+
 	tegra = devm_kzalloc(&pdev->dev, sizeof(*tegra), GFP_KERNEL);
 	if (!tegra)
 		return -ENOMEM;
@@ -213,7 +263,7 @@  static int tegra_bpmp_thermal_probe(struct platform_device *pdev)
 		}
 
 		tzd = devm_thermal_of_zone_register(
-			&pdev->dev, i, zone, &tegra_bpmp_of_thermal_ops);
+			&pdev->dev, i, zone, thermal_ops);
 		if (IS_ERR(tzd)) {
 			if (PTR_ERR(tzd) == -EPROBE_DEFER)
 				return -EPROBE_DEFER;