Re: [PATCH v2] platform/x86: hp-wmi: add support for thermal policy

From: Hans de Goede
Date: Wed Oct 07 2020 - 10:02:21 EST


Hi,

On 10/5/20 10:57 AM, Andy Shevchenko wrote:
On Mon, Oct 5, 2020 at 12:14 AM Elia Devito <eliadevito@xxxxxxxxx> wrote:

HP Spectre notebooks (and probably other model as well)
support up to 4 thermal policy:
- HP Recommended
- Performance
- Cool
- Quiet

at least on HP Spectre x360 Convertible 15-df0xxx the firmware sets the
thermal policy to default but hardcode the odvp0 variable to 1, this causes
thermald to choose the wrong DPTF profile witch result in low performance
when notebook is on AC, calling thermal policy write command allow firmware
to correctly set the odvp0 variable.

Signed-off-by: Elia Devito <eliadevito@xxxxxxxxx>
---
drivers/platform/x86/hp-wmi.c | 23 +++++++++++++++++++++++
1 file changed, 23 insertions(+)

diff --git a/drivers/platform/x86/hp-wmi.c b/drivers/platform/x86/hp-wmi.c
index 1762f335bac9..6e448a79caee 100644
--- a/drivers/platform/x86/hp-wmi.c
+++ b/drivers/platform/x86/hp-wmi.c
@@ -81,6 +81,7 @@ enum hp_wmi_commandtype {
HPWMI_FEATURE2_QUERY = 0x0d,
HPWMI_WIRELESS2_QUERY = 0x1b,
HPWMI_POSTCODEERROR_QUERY = 0x2a,

+ HPWMI_THERMAL_POLICY_QUERY = 0x4c

Usually we leave a comma that next change won't add any unnecessary churn.
I don't think this comment requires a v2 right now (may be satisfied
when applied), but if any other comments come and need to be
addressed, then this should be included as well.

I've fixed this up while applying this to my review-hans branch, so
there is no need to send out a new version.

Elia, Thank you for your patch, I've applied this patch to me review-hans branch:
https://git.kernel.org/pub/scm/linux/kernel/git/pdx86/platform-drivers-x86.git/log/?h=review-hans

Once I've run some tests on this branch the patches there will be added
to the platform-drivers-x86/for-next branch and eventually will be
included in the pdx86 pull-request to Linus for the next merge-window.

Regards,

Hans




};

enum hp_wmi_command {
@@ -861,6 +862,26 @@ static int __init hp_wmi_rfkill2_setup(struct platform_device *device)
return err;
}

+static int thermal_policy_setup(struct platform_device *device)
+{
+ int err, tp;
+
+ tp = hp_wmi_read_int(HPWMI_THERMAL_POLICY_QUERY);
+ if (tp < 0)
+ return tp;
+
+ /*
+ * call thermal policy write command to ensure that the firmware correctly
+ * sets the OEM variables for the DPTF
+ */
+ err = hp_wmi_perform_query(HPWMI_THERMAL_POLICY_QUERY, HPWMI_WRITE, &tp,
+ sizeof(tp), 0);
+ if (err)
+ return err;
+
+ return 0;
+}
+
static int __init hp_wmi_bios_setup(struct platform_device *device)
{
/* clear detected rfkill devices */
@@ -872,6 +893,8 @@ static int __init hp_wmi_bios_setup(struct platform_device *device)
if (hp_wmi_rfkill_setup(device))
hp_wmi_rfkill2_setup(device);

+ thermal_policy_setup(device);
+
return 0;
}

--
2.26.2