Message ID | 20201004211305.11628-1-eliadevito@gmail.com (mailing list archive) |
---|---|
State | Accepted, archived |
Headers | show |
Series | [v2] platform/x86: hp-wmi: add support for thermal policy | expand |
On Mon, Oct 5, 2020 at 12:14 AM Elia Devito <eliadevito@gmail.com> 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@gmail.com> > --- > 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. > }; > > 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 >
Hi, On 10/5/20 10:57 AM, Andy Shevchenko wrote: > On Mon, Oct 5, 2020 at 12:14 AM Elia Devito <eliadevito@gmail.com> 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@gmail.com> >> --- >> 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 >> > >
Hi 2020. október 7., szerda 16:02 keltezéssel, Hans de Goede írta: > [...] > 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 > [...] I don't know if the problem is on my end, but opening that url results in an "Invalid branch: review-hans" error. Thanks, Barnabás Pőcze
Hi, On 10/7/20 6:21 PM, Barnabás Pőcze wrote: > Hi > > 2020. október 7., szerda 16:02 keltezéssel, Hans de Goede írta: >> [...] >> 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 >> [...] > > I don't know if the problem is on my end, but opening that url > results in an "Invalid branch: review-hans" error. Since I'm just getting up2speed in my new role today, I have never pushed that branch out yet, hence the error. I've pushed it out now, the mirrors which actually serve the http interface can lag a bit, so give it 10 minutes and then it should be there. Regards, Hans
Hi 2020. október 7., szerda 19:30 keltezéssel, Hans de Goede írta: > [...] > Since I'm just getting up2speed in my new role today, I have never pushed > that branch out yet, hence the error. > > I've pushed it out now, the mirrors which actually serve > the http interface can lag a bit, so give it 10 minutes and > then it should be there. > [...] I see, thanks! Regards, Barnabás Pőcze
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 }; 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; }
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@gmail.com> --- drivers/platform/x86/hp-wmi.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+)