2022-04-29 23:30:21

by Lyude Paul

[permalink] [raw]
Subject: [PATCH 0/2] Fix detection of 2nd fan on X1C9

Some recent changes broke detection of the second fan on the X1 Carbon
9th generation, so here's some patches to fix it.

Lyude Paul (2):
platform/x86: thinkpad_acpi: Restore X1 Carbon 9th Gen dual fan quirk
platform/x86: thinkpad_acpi: Don't probe 2nd fan if enabled by quirk

drivers/platform/x86/thinkpad_acpi.c | 26 +++++++++++++-------------
1 file changed, 13 insertions(+), 13 deletions(-)

--
2.35.1


2022-04-30 14:44:43

by Lyude Paul

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

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 <[email protected]>
Fixes: bf779aaf56ea ("platform/x86: thinkpad_acpi: Add dual fan probe")
Cc: Mark Pearson <[email protected]>
Cc: Hans de Goede <[email protected]>
Cc: Henrique de Moraes Holschuh <[email protected]>
Cc: Mark Gross <[email protected]>
Cc: [email protected]
Cc: [email protected]
---
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) */
};
--
2.35.1

2022-05-03 00:07:30

by Mark Pearson

[permalink] [raw]
Subject: Re: [External] [PATCH 1/2] platform/x86: thinkpad_acpi: Restore X1 Carbon 9th Gen dual fan quirk

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 <[email protected]>
> Fixes: bf779aaf56ea ("platform/x86: thinkpad_acpi: Add dual fan probe")
> Cc: Mark Pearson <[email protected]>
> Cc: Hans de Goede <[email protected]>
> Cc: Henrique de Moraes Holschuh <[email protected]>
> Cc: Mark Gross <[email protected]>
> Cc: [email protected]
> Cc: [email protected]
> ---
> 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

2022-05-03 00:12:41

by Lyude Paul

[permalink] [raw]
Subject: Re: [External] [PATCH 1/2] platform/x86: thinkpad_acpi: Restore X1 Carbon 9th Gen dual fan quirk

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 <[email protected]>
> > Fixes: bf779aaf56ea ("platform/x86: thinkpad_acpi: Add dual fan probe")
> > Cc: Mark Pearson <[email protected]>
> > Cc: Hans de Goede <[email protected]>
> > Cc: Henrique de Moraes Holschuh <[email protected]>
> > Cc: Mark Gross <[email protected]>
> > Cc: [email protected]
> > Cc: [email protected]
> > ---
> >  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
>

--
Cheers,
Lyude Paul (she/her)
Software Engineer at Red Hat

2022-05-03 00:22:48

by Lyude Paul

[permalink] [raw]
Subject: [PATCH 2/2] platform/x86: thinkpad_acpi: Don't probe 2nd fan if enabled by quirk

If we already know that the system in question has a quirk telling us that
the system has a second fan, there's no purpose in probing the second fan -
especially when probing the second fan may not work properly with systems
relying on quirks.

Also, convert all of the conditionals here into a single group of if/else
statements. This is because there's no situations where there's more then
one quirk on a device.

Signed-off-by: Lyude Paul <[email protected]>
Fixes: bf779aaf56ea ("platform/x86: thinkpad_acpi: Add dual fan probe")
Cc: Mark Pearson <[email protected]>
Cc: Hans de Goede <[email protected]>
Cc: Henrique de Moraes Holschuh <[email protected]>
Cc: Mark Gross <[email protected]>
Cc: [email protected]
Cc: [email protected]
---
drivers/platform/x86/thinkpad_acpi.c | 25 ++++++++++++-------------
1 file changed, 12 insertions(+), 13 deletions(-)

diff --git a/drivers/platform/x86/thinkpad_acpi.c b/drivers/platform/x86/thinkpad_acpi.c
index 9067fd0a945c..677822b5d4b4 100644
--- a/drivers/platform/x86/thinkpad_acpi.c
+++ b/drivers/platform/x86/thinkpad_acpi.c
@@ -8747,26 +8747,25 @@ static int __init fan_init(struct ibm_init_struct *iibm)
unsigned int speed;

fan_status_access_mode = TPACPI_FAN_RD_TPEC;
- if (quirks & TPACPI_FAN_Q1)
+ if (quirks & TPACPI_FAN_Q1) {
fan_quirk1_setup();
- if (quirks & TPACPI_FAN_2FAN) {
+ } else if (quirks & TPACPI_FAN_2FAN) {
tp_features.second_fan = 1;
pr_info("secondary fan support enabled\n");
- }
- if (quirks & TPACPI_FAN_2CTL) {
+ } else if (quirks & TPACPI_FAN_2CTL) {
tp_features.second_fan = 1;
tp_features.second_fan_ctl = 1;
pr_info("secondary fan control enabled\n");
+ } else {
+ /* Try and probe the 2nd fan */
+ res = fan2_get_speed(&speed);
+ if (res >= 0) {
+ /* It responded - so let's assume it's there */
+ tp_features.second_fan = 1;
+ tp_features.second_fan_ctl = 1;
+ pr_info("secondary fan control detected & enabled\n");
+ }
}
- /* Try and probe the 2nd fan */
- res = fan2_get_speed(&speed);
- if (res >= 0) {
- /* It responded - so let's assume it's there */
- tp_features.second_fan = 1;
- tp_features.second_fan_ctl = 1;
- pr_info("secondary fan control detected & enabled\n");
- }
-
} else {
pr_err("ThinkPad ACPI EC access misbehaving, fan status and control unavailable\n");
return -ENODEV;
--
2.35.1

2022-05-03 00:48:55

by Mark Pearson

[permalink] [raw]
Subject: Re: [External] [PATCH 1/2] platform/x86: thinkpad_acpi: Restore X1 Carbon 9th Gen dual fan quirk



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 <[email protected]>
>>> Fixes: bf779aaf56ea ("platform/x86: thinkpad_acpi: Add dual fan probe")
>>> Cc: Mark Pearson <[email protected]>
>>> Cc: Hans de Goede <[email protected]>
>>> Cc: Henrique de Moraes Holschuh <[email protected]>
>>> Cc: Mark Gross <[email protected]>
>>> Cc: [email protected]
>>> Cc: [email protected]
>>> ---
>>>  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

2022-05-03 01:19:37

by Mark Pearson

[permalink] [raw]
Subject: Re: [External] [PATCH 1/2] platform/x86: thinkpad_acpi: Restore X1 Carbon 9th Gen dual fan quirk



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 <[email protected]>
>>>> Fixes: bf779aaf56ea ("platform/x86: thinkpad_acpi: Add dual fan probe")
>>>> Cc: Mark Pearson <[email protected]>
>>>> Cc: Hans de Goede <[email protected]>
>>>> Cc: Henrique de Moraes Holschuh <[email protected]>
>>>> Cc: Mark Gross <[email protected]>
>>>> Cc: [email protected]
>>>> Cc: [email protected]
>>>> ---
>>>>  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