diff mbox series

[1/2] platform/x86: thinkpad_acpi: Restore X1 Carbon 9th Gen dual fan quirk

Message ID 20220429211418.4546-2-lyude@redhat.com (mailing list archive)
State Not Applicable
Headers show
Series Fix detection of 2nd fan on X1C9 | expand

Commit Message

Lyude Paul April 29, 2022, 9:14 p.m. UTC
The new method of probing dual fan support introduced in:

bf779aaf56ea ("platform/x86: thinkpad_acpi: Add dual fan probe")

While this commit says this works on the X1 Carbon 9th Gen, it actually
just results in hiding the second fan on my local machine. Additionally,
I'm fairly sure this machine powers on quite often without either of the
two fans spinning.

So let's fix this by adding back the dual fan quirk for the X1 Carbon 9th
Gen.

Signed-off-by: Lyude Paul <lyude@redhat.com>
Fixes: bf779aaf56ea ("platform/x86: thinkpad_acpi: Add dual fan probe")
Cc: Mark Pearson <markpearson@lenovo.com>
Cc: Hans de Goede <hdegoede@redhat.com>
Cc: Henrique de Moraes Holschuh <hmh@hmh.eng.br>
Cc: Mark Gross <markgross@kernel.org>
Cc: ibm-acpi-devel@lists.sourceforge.net
Cc: platform-driver-x86@vger.kernel.org
---
 drivers/platform/x86/thinkpad_acpi.c | 1 +
 1 file changed, 1 insertion(+)

Comments

Mark Pearson April 30, 2022, 1:25 a.m. UTC | #1
Hi Lyude

On 4/29/22 17:14, Lyude Paul wrote:
> The new method of probing dual fan support introduced in:
> 
> bf779aaf56ea ("platform/x86: thinkpad_acpi: Add dual fan probe")
> 
> While this commit says this works on the X1 Carbon 9th Gen, it actually
> just results in hiding the second fan on my local machine. Additionally,
> I'm fairly sure this machine powers on quite often without either of the
> two fans spinning.
> 
> So let's fix this by adding back the dual fan quirk for the X1 Carbon 9th
> Gen.
> 
> Signed-off-by: Lyude Paul <lyude@redhat.com>
> Fixes: bf779aaf56ea ("platform/x86: thinkpad_acpi: Add dual fan probe")
> Cc: Mark Pearson <markpearson@lenovo.com>
> Cc: Hans de Goede <hdegoede@redhat.com>
> Cc: Henrique de Moraes Holschuh <hmh@hmh.eng.br>
> Cc: Mark Gross <markgross@kernel.org>
> Cc: ibm-acpi-devel@lists.sourceforge.net
> Cc: platform-driver-x86@vger.kernel.org
> ---
>  drivers/platform/x86/thinkpad_acpi.c | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/drivers/platform/x86/thinkpad_acpi.c b/drivers/platform/x86/thinkpad_acpi.c
> index c568fae56db2..9067fd0a945c 100644
> --- a/drivers/platform/x86/thinkpad_acpi.c
> +++ b/drivers/platform/x86/thinkpad_acpi.c
> @@ -8699,6 +8699,7 @@ static const struct tpacpi_quirk fan_quirk_table[] __initconst = {
>  	TPACPI_Q_LNV3('N', '2', 'E', TPACPI_FAN_2CTL),	/* P1 / X1 Extreme (1st gen) */
>  	TPACPI_Q_LNV3('N', '2', 'O', TPACPI_FAN_2CTL),	/* P1 / X1 Extreme (2nd gen) */
>  	TPACPI_Q_LNV3('N', '3', '0', TPACPI_FAN_2CTL),	/* P15 (1st gen) / P15v (1st gen) */
> +	TPACPI_Q_LNV3('N', '3', '2', TPACPI_FAN_2CTL),  /* X1 Carbon (9th gen) */
>  	TPACPI_Q_LNV3('N', '3', '7', TPACPI_FAN_2CTL),  /* T15g (2nd gen) */
>  	TPACPI_Q_LNV3('N', '1', 'O', TPACPI_FAN_NOFAN),	/* X1 Tablet (2nd gen) */
>  };
I just double checked this on my X1C9 - and it's working correctly. 2nd
fan is detected correctly.

I'd rather understand why it's not working on your setup then just
re-introduce the quirk.

What happens on your system when the
  res = fan2_get_speed(&speed);
is called? If that is failing it means your 2nd fan isn't responding and
that's not supposed to happen. Could you let me know if you get an error
code, if it happens every boot, etc
I assume when the function is called later it works successfully?

Also please confirm which BIOS and EC version you have.

Thanks
Mark
Thomas Weißschuh April 30, 2022, 12:13 p.m. UTC | #2
Hi Mark,

On 2022-04-29 21:25-0400, Mark Pearson wrote:
> Hi Lyude
> 
> On 4/29/22 17:14, Lyude Paul wrote:
> > The new method of probing dual fan support introduced in:
> > 
> > bf779aaf56ea ("platform/x86: thinkpad_acpi: Add dual fan probe")
> > 
> > While this commit says this works on the X1 Carbon 9th Gen, it actually
> > just results in hiding the second fan on my local machine. Additionally,
> > I'm fairly sure this machine powers on quite often without either of the
> > two fans spinning.
> > 
> > So let's fix this by adding back the dual fan quirk for the X1 Carbon 9th
> > Gen.
> > 
> [..]
>
> I just double checked this on my X1C9 - and it's working correctly. 2nd
> fan is detected correctly.
> 
> I'd rather understand why it's not working on your setup then just
> re-introduce the quirk.
> 
> What happens on your system when the
>   res = fan2_get_speed(&speed);
> is called? If that is failing it means your 2nd fan isn't responding and
> that's not supposed to happen. Could you let me know if you get an error
> code, if it happens every boot, etc
> I assume when the function is called later it works successfully?

I have the same issue.

To me it looks like this:

Probing for the second fan calls fan2_get_speed(), this calls
fan_select_fan2() which in turn checks that tp_features.second_fan is set.
But at this point in the tp_features.second_fan can not yet be set because it
is either set from quirks or *after* the probing.

Maybe some of the matches for the quirk TPACPI_FAN_2FAN should also have
matched this device?
It doesn't do so on my device.

> Also please confirm which BIOS and EC version you have.

Linux: 5.17.5
BIOS Revision: 1.51
Firmware Revision: 1.32

Thomas
Mark Pearson May 2, 2022, 1:03 p.m. UTC | #3
On 4/30/22 08:13, Thomas Weißschuh wrote:
> Hi Mark,
> 
> On 2022-04-29 21:25-0400, Mark Pearson wrote:
>> Hi Lyude
>>
>> On 4/29/22 17:14, Lyude Paul wrote:
>>> The new method of probing dual fan support introduced in:
>>>
>>> bf779aaf56ea ("platform/x86: thinkpad_acpi: Add dual fan probe")
>>>
>>> While this commit says this works on the X1 Carbon 9th Gen, it actually
>>> just results in hiding the second fan on my local machine. Additionally,
>>> I'm fairly sure this machine powers on quite often without either of the
>>> two fans spinning.
>>>
>>> So let's fix this by adding back the dual fan quirk for the X1 Carbon 9th
>>> Gen.
>>>
>> [..]
>>
>> I just double checked this on my X1C9 - and it's working correctly. 2nd
>> fan is detected correctly.
>>
>> I'd rather understand why it's not working on your setup then just
>> re-introduce the quirk.
>>
>> What happens on your system when the
>>   res = fan2_get_speed(&speed);
>> is called? If that is failing it means your 2nd fan isn't responding and
>> that's not supposed to happen. Could you let me know if you get an error
>> code, if it happens every boot, etc
>> I assume when the function is called later it works successfully?
> 
> I have the same issue.
> 
> To me it looks like this:
> 
> Probing for the second fan calls fan2_get_speed(), this calls
> fan_select_fan2() which in turn checks that tp_features.second_fan is set.
> But at this point in the tp_features.second_fan can not yet be set because it
> is either set from quirks or *after* the probing.
> 
> Maybe some of the matches for the quirk TPACPI_FAN_2FAN should also have
> matched this device?
> It doesn't do so on my device.
> 
>> Also please confirm which BIOS and EC version you have.
> 
> Linux: 5.17.5
> BIOS Revision: 1.51
> Firmware Revision: 1.32
> 
Thanks Thomas,
I'll go do some more digging on my system and see what I've missed.
Mark
Lyude Paul May 2, 2022, 5:42 p.m. UTC | #4
Some answers/comments down below

On Fri, 2022-04-29 at 21:25 -0400, Mark Pearson wrote:
> Hi Lyude
> 
> On 4/29/22 17:14, Lyude Paul wrote:
> > The new method of probing dual fan support introduced in:
> > 
> > bf779aaf56ea ("platform/x86: thinkpad_acpi: Add dual fan probe")
> > 
> > While this commit says this works on the X1 Carbon 9th Gen, it actually
> > just results in hiding the second fan on my local machine. Additionally,
> > I'm fairly sure this machine powers on quite often without either of the
> > two fans spinning.
> > 
> > So let's fix this by adding back the dual fan quirk for the X1 Carbon 9th
> > Gen.
> > 
> > Signed-off-by: Lyude Paul <lyude@redhat.com>
> > Fixes: bf779aaf56ea ("platform/x86: thinkpad_acpi: Add dual fan probe")
> > Cc: Mark Pearson <markpearson@lenovo.com>
> > Cc: Hans de Goede <hdegoede@redhat.com>
> > Cc: Henrique de Moraes Holschuh <hmh@hmh.eng.br>
> > Cc: Mark Gross <markgross@kernel.org>
> > Cc: ibm-acpi-devel@lists.sourceforge.net
> > Cc: platform-driver-x86@vger.kernel.org
> > ---
> >  drivers/platform/x86/thinkpad_acpi.c | 1 +
> >  1 file changed, 1 insertion(+)
> > 
> > diff --git a/drivers/platform/x86/thinkpad_acpi.c
> > b/drivers/platform/x86/thinkpad_acpi.c
> > index c568fae56db2..9067fd0a945c 100644
> > --- a/drivers/platform/x86/thinkpad_acpi.c
> > +++ b/drivers/platform/x86/thinkpad_acpi.c
> > @@ -8699,6 +8699,7 @@ static const struct tpacpi_quirk fan_quirk_table[]
> > __initconst = {
> >         TPACPI_Q_LNV3('N', '2', 'E', TPACPI_FAN_2CTL),  /* P1 / X1 Extreme
> > (1st gen) */
> >         TPACPI_Q_LNV3('N', '2', 'O', TPACPI_FAN_2CTL),  /* P1 / X1 Extreme
> > (2nd gen) */
> >         TPACPI_Q_LNV3('N', '3', '0', TPACPI_FAN_2CTL),  /* P15 (1st gen) /
> > P15v (1st gen) */
> > +       TPACPI_Q_LNV3('N', '3', '2', TPACPI_FAN_2CTL),  /* X1 Carbon (9th
> > gen) */
> >         TPACPI_Q_LNV3('N', '3', '7', TPACPI_FAN_2CTL),  /* T15g (2nd gen)
> > */
> >         TPACPI_Q_LNV3('N', '1', 'O', TPACPI_FAN_NOFAN), /* X1 Tablet (2nd
> > gen) */
> >  };
> I just double checked this on my X1C9 - and it's working correctly. 2nd
> fan is detected correctly.
> 
> I'd rather understand why it's not working on your setup then just
> re-introduce the quirk.

Of course! I figured as much, it's just easy to start conversations with a
revert :P

> 
> What happens on your system when the
>   res = fan2_get_speed(&speed);
> is called? If that is failing it means your 2nd fan isn't responding and
> that's not supposed to happen. Could you let me know if you get an error
> code, if it happens every boot, etc
> I assume when the function is called later it works successfully?

It definitely seems to happen every boot, not sure about the error code it
returns. I will check and get you this info asap

> 
> Also please confirm which BIOS and EC version you have.

BIOS version N32ET75W (1.51) release date 12/02/2021, embedded controller is
0.1.32


> 
> Thanks
> Mark
>
Mark Pearson May 2, 2022, 5:44 p.m. UTC | #5
On 5/2/22 13:42, Lyude Paul wrote:
> Some answers/comments down below
> 
> On Fri, 2022-04-29 at 21:25 -0400, Mark Pearson wrote:
>> Hi Lyude
>>
>> On 4/29/22 17:14, Lyude Paul wrote:
>>> The new method of probing dual fan support introduced in:
>>>
>>> bf779aaf56ea ("platform/x86: thinkpad_acpi: Add dual fan probe")
>>>
>>> While this commit says this works on the X1 Carbon 9th Gen, it actually
>>> just results in hiding the second fan on my local machine. Additionally,
>>> I'm fairly sure this machine powers on quite often without either of the
>>> two fans spinning.
>>>
>>> So let's fix this by adding back the dual fan quirk for the X1 Carbon 9th
>>> Gen.
>>>
>>> Signed-off-by: Lyude Paul <lyude@redhat.com>
>>> Fixes: bf779aaf56ea ("platform/x86: thinkpad_acpi: Add dual fan probe")
>>> Cc: Mark Pearson <markpearson@lenovo.com>
>>> Cc: Hans de Goede <hdegoede@redhat.com>
>>> Cc: Henrique de Moraes Holschuh <hmh@hmh.eng.br>
>>> Cc: Mark Gross <markgross@kernel.org>
>>> Cc: ibm-acpi-devel@lists.sourceforge.net
>>> Cc: platform-driver-x86@vger.kernel.org
>>> ---
>>>  drivers/platform/x86/thinkpad_acpi.c | 1 +
>>>  1 file changed, 1 insertion(+)
>>>
>>> diff --git a/drivers/platform/x86/thinkpad_acpi.c
>>> b/drivers/platform/x86/thinkpad_acpi.c
>>> index c568fae56db2..9067fd0a945c 100644
>>> --- a/drivers/platform/x86/thinkpad_acpi.c
>>> +++ b/drivers/platform/x86/thinkpad_acpi.c
>>> @@ -8699,6 +8699,7 @@ static const struct tpacpi_quirk fan_quirk_table[]
>>> __initconst = {
>>>         TPACPI_Q_LNV3('N', '2', 'E', TPACPI_FAN_2CTL),  /* P1 / X1 Extreme
>>> (1st gen) */
>>>         TPACPI_Q_LNV3('N', '2', 'O', TPACPI_FAN_2CTL),  /* P1 / X1 Extreme
>>> (2nd gen) */
>>>         TPACPI_Q_LNV3('N', '3', '0', TPACPI_FAN_2CTL),  /* P15 (1st gen) /
>>> P15v (1st gen) */
>>> +       TPACPI_Q_LNV3('N', '3', '2', TPACPI_FAN_2CTL),  /* X1 Carbon (9th
>>> gen) */
>>>         TPACPI_Q_LNV3('N', '3', '7', TPACPI_FAN_2CTL),  /* T15g (2nd gen)
>>> */
>>>         TPACPI_Q_LNV3('N', '1', 'O', TPACPI_FAN_NOFAN), /* X1 Tablet (2nd
>>> gen) */
>>>  };
>> I just double checked this on my X1C9 - and it's working correctly. 2nd
>> fan is detected correctly.
>>
>> I'd rather understand why it's not working on your setup then just
>> re-introduce the quirk.
> 
> Of course! I figured as much, it's just easy to start conversations with a
> revert :P
> 
>>
>> What happens on your system when the
>>   res = fan2_get_speed(&speed);
>> is called? If that is failing it means your 2nd fan isn't responding and
>> that's not supposed to happen. Could you let me know if you get an error
>> code, if it happens every boot, etc
>> I assume when the function is called later it works successfully?
> 
> It definitely seems to happen every boot, not sure about the error code it
> returns. I will check and get you this info asap
> 
>>
>> Also please confirm which BIOS and EC version you have.
> 
> BIOS version N32ET75W (1.51) release date 12/02/2021, embedded controller is
> 0.1.32
> 
> 
Thanks!

Along with Thomas' notes I think I've found the problem (though still
bemused why I don't see the problem on my X1C9 and I tested on multiple
platforms previously...so it is somewhat weird).

Working on a fix - will try and have that out for review later today or
tomorrow.

Mark
Mark Pearson May 2, 2022, 7:13 p.m. UTC | #6
On 5/2/22 13:44, Mark Pearson wrote:
> 
> 
> On 5/2/22 13:42, Lyude Paul wrote:
>> Some answers/comments down below
>>
>> On Fri, 2022-04-29 at 21:25 -0400, Mark Pearson wrote:
>>> Hi Lyude
>>>
>>> On 4/29/22 17:14, Lyude Paul wrote:
>>>> The new method of probing dual fan support introduced in:
>>>>
>>>> bf779aaf56ea ("platform/x86: thinkpad_acpi: Add dual fan probe")
>>>>
>>>> While this commit says this works on the X1 Carbon 9th Gen, it actually
>>>> just results in hiding the second fan on my local machine. Additionally,
>>>> I'm fairly sure this machine powers on quite often without either of the
>>>> two fans spinning.
>>>>
>>>> So let's fix this by adding back the dual fan quirk for the X1 Carbon 9th
>>>> Gen.
>>>>
>>>> Signed-off-by: Lyude Paul <lyude@redhat.com>
>>>> Fixes: bf779aaf56ea ("platform/x86: thinkpad_acpi: Add dual fan probe")
>>>> Cc: Mark Pearson <markpearson@lenovo.com>
>>>> Cc: Hans de Goede <hdegoede@redhat.com>
>>>> Cc: Henrique de Moraes Holschuh <hmh@hmh.eng.br>
>>>> Cc: Mark Gross <markgross@kernel.org>
>>>> Cc: ibm-acpi-devel@lists.sourceforge.net
>>>> Cc: platform-driver-x86@vger.kernel.org
>>>> ---
>>>>  drivers/platform/x86/thinkpad_acpi.c | 1 +
>>>>  1 file changed, 1 insertion(+)
>>>>
>>>> diff --git a/drivers/platform/x86/thinkpad_acpi.c
>>>> b/drivers/platform/x86/thinkpad_acpi.c
>>>> index c568fae56db2..9067fd0a945c 100644
>>>> --- a/drivers/platform/x86/thinkpad_acpi.c
>>>> +++ b/drivers/platform/x86/thinkpad_acpi.c
>>>> @@ -8699,6 +8699,7 @@ static const struct tpacpi_quirk fan_quirk_table[]
>>>> __initconst = {
>>>>         TPACPI_Q_LNV3('N', '2', 'E', TPACPI_FAN_2CTL),  /* P1 / X1 Extreme
>>>> (1st gen) */
>>>>         TPACPI_Q_LNV3('N', '2', 'O', TPACPI_FAN_2CTL),  /* P1 / X1 Extreme
>>>> (2nd gen) */
>>>>         TPACPI_Q_LNV3('N', '3', '0', TPACPI_FAN_2CTL),  /* P15 (1st gen) /
>>>> P15v (1st gen) */
>>>> +       TPACPI_Q_LNV3('N', '3', '2', TPACPI_FAN_2CTL),  /* X1 Carbon (9th
>>>> gen) */
>>>>         TPACPI_Q_LNV3('N', '3', '7', TPACPI_FAN_2CTL),  /* T15g (2nd gen)
>>>> */
>>>>         TPACPI_Q_LNV3('N', '1', 'O', TPACPI_FAN_NOFAN), /* X1 Tablet (2nd
>>>> gen) */
>>>>  };
>>> I just double checked this on my X1C9 - and it's working correctly. 2nd
>>> fan is detected correctly.
>>>
>>> I'd rather understand why it's not working on your setup then just
>>> re-introduce the quirk.
>>
>> Of course! I figured as much, it's just easy to start conversations with a
>> revert :P
>>
>>>
>>> What happens on your system when the
>>>   res = fan2_get_speed(&speed);
>>> is called? If that is failing it means your 2nd fan isn't responding and
>>> that's not supposed to happen. Could you let me know if you get an error
>>> code, if it happens every boot, etc
>>> I assume when the function is called later it works successfully?
>>
>> It definitely seems to happen every boot, not sure about the error code it
>> returns. I will check and get you this info asap
>>
>>>
>>> Also please confirm which BIOS and EC version you have.
>>
>> BIOS version N32ET75W (1.51) release date 12/02/2021, embedded controller is
>> 0.1.32
>>
>>
> Thanks!
> 
> Along with Thomas' notes I think I've found the problem (though still
> bemused why I don't see the problem on my X1C9 and I tested on multiple
> platforms previously...so it is somewhat weird).
> 
> Working on a fix - will try and have that out for review later today or
> tomorrow.
> 
Not sure exactly what the etiquette here is for the mailing list but I
just posted an updated patch "platform/x86: thinkpad_acpi: Correct dual
fan probe" that I think addresses all the issues raised in this patch
sequence.

Please let me know any feedback or concerns. And thanks for raising this!

Mark
diff mbox series

Patch

diff --git a/drivers/platform/x86/thinkpad_acpi.c b/drivers/platform/x86/thinkpad_acpi.c
index c568fae56db2..9067fd0a945c 100644
--- a/drivers/platform/x86/thinkpad_acpi.c
+++ b/drivers/platform/x86/thinkpad_acpi.c
@@ -8699,6 +8699,7 @@  static const struct tpacpi_quirk fan_quirk_table[] __initconst = {
 	TPACPI_Q_LNV3('N', '2', 'E', TPACPI_FAN_2CTL),	/* P1 / X1 Extreme (1st gen) */
 	TPACPI_Q_LNV3('N', '2', 'O', TPACPI_FAN_2CTL),	/* P1 / X1 Extreme (2nd gen) */
 	TPACPI_Q_LNV3('N', '3', '0', TPACPI_FAN_2CTL),	/* P15 (1st gen) / P15v (1st gen) */
+	TPACPI_Q_LNV3('N', '3', '2', TPACPI_FAN_2CTL),  /* X1 Carbon (9th gen) */
 	TPACPI_Q_LNV3('N', '3', '7', TPACPI_FAN_2CTL),  /* T15g (2nd gen) */
 	TPACPI_Q_LNV3('N', '1', 'O', TPACPI_FAN_NOFAN),	/* X1 Tablet (2nd gen) */
 };