2023-12-06 21:22:13

by Mario Limonciello

[permalink] [raw]
Subject: [PATCH v2 1/2] Input: i8042: Avoid probing if no keyboard and mouse are set in quirks

Some laptops have an i8042 controller in the SOC, nothing mentioned in
ACPI PNP and nothing connected to the controller. Add the ability to
skip probing in this case.

Signed-off-by: Mario Limonciello <[email protected]>
---
drivers/input/serio/i8042-acpipnpio.h | 3 +++
1 file changed, 3 insertions(+)

diff --git a/drivers/input/serio/i8042-acpipnpio.h b/drivers/input/serio/i8042-acpipnpio.h
index 9c39553d30fa..0fd88bbfaee1 100644
--- a/drivers/input/serio/i8042-acpipnpio.h
+++ b/drivers/input/serio/i8042-acpipnpio.h
@@ -1707,6 +1707,9 @@ static int __init i8042_platform_init(void)
"");
#endif

+ if (i8042_nokbd && i8042_noaux)
+ return -ENODEV;
+
retval = i8042_pnp_init();
if (retval)
return retval;
--
2.34.1


2023-12-06 21:22:17

by Mario Limonciello

[permalink] [raw]
Subject: [PATCH v2 2/2] Input: i8042: Add a quirk for Framework 16" laptop

The Framework 16" laptop doesn't have a PS/2 keyboard. At bootup the
following messages are emitted:

i8042: PNP: No PS/2 controller found.
i8042: PNP: Probing ports directly.
i8042: Can't read CTR while initializing i8042
i8042: probe of i8042 failed with error -5

There are no PNP devices as those listed in `pnp_kbd_devids` but
i8042_pnp_init() ignores this and still runs and will continue to
try to probe.

As there is no PS/2 keyboard or mouse in this laptop, set a quirk
to avoid this behavior.

Signed-off-by: Mario Limonciello <[email protected]>
---
drivers/input/serio/i8042-acpipnpio.h | 8 ++++++++
1 file changed, 8 insertions(+)

diff --git a/drivers/input/serio/i8042-acpipnpio.h b/drivers/input/serio/i8042-acpipnpio.h
index 0fd88bbfaee1..6a71416057a3 100644
--- a/drivers/input/serio/i8042-acpipnpio.h
+++ b/drivers/input/serio/i8042-acpipnpio.h
@@ -1310,6 +1310,14 @@ static const struct dmi_system_id i8042_dmi_quirk_table[] __initconst = {
.driver_data = (void *)(SERIO_QUIRK_NOMUX | SERIO_QUIRK_RESET_ALWAYS |
SERIO_QUIRK_NOLOOP | SERIO_QUIRK_NOPNP)
},
+ /* Framework 16" laptop uses an internal USB keyboard */
+ {
+ .matches = {
+ DMI_MATCH(DMI_SYS_VENDOR, "Framework"),
+ DMI_MATCH(DMI_PRODUCT_NAME, "Laptop 16"),
+ },
+ .driver_data = (void *)(SERIO_QUIRK_NOKBD | SERIO_QUIRK_NOAUX)
+ },
{ }
};

--
2.34.1

2023-12-06 21:54:47

by Rahul Rameshbabu

[permalink] [raw]
Subject: Re: [PATCH v2 2/2] Input: i8042: Add a quirk for Framework 16" laptop

On Wed, 06 Dec, 2023 15:21:40 -0600 Mario Limonciello <[email protected]> wrote:
> The Framework 16" laptop doesn't have a PS/2 keyboard. At bootup the
> following messages are emitted:
>
> i8042: PNP: No PS/2 controller found.
> i8042: PNP: Probing ports directly.
> i8042: Can't read CTR while initializing i8042
> i8042: probe of i8042 failed with error -5
>
> There are no PNP devices as those listed in `pnp_kbd_devids` but
> i8042_pnp_init() ignores this and still runs and will continue to
> try to probe.
>
> As there is no PS/2 keyboard or mouse in this laptop, set a quirk
> to avoid this behavior.
>
> Signed-off-by: Mario Limonciello <[email protected]>
> ---

Reviewed-by: Rahul Rameshbabu <[email protected]>

2023-12-06 21:56:10

by Rahul Rameshbabu

[permalink] [raw]
Subject: Re: [PATCH v2 1/2] Input: i8042: Avoid probing if no keyboard and mouse are set in quirks

On Wed, 06 Dec, 2023 15:21:39 -0600 Mario Limonciello <[email protected]> wrote:
> Some laptops have an i8042 controller in the SOC, nothing mentioned in
> ACPI PNP and nothing connected to the controller. Add the ability to
> skip probing in this case.
>
> Signed-off-by: Mario Limonciello <[email protected]>
> ---

Thanks. I think this is a good choice for handling the issue you
presented with the Framework 16.

Reviewed-by: Rahul Rameshbabu <[email protected]>

2023-12-07 20:41:57

by Mario Limonciello

[permalink] [raw]
Subject: Re: [PATCH v2 1/2] Input: i8042: Avoid probing if no keyboard and mouse are set in quirks

On 12/6/2023 15:55, Rahul Rameshbabu wrote:
> On Wed, 06 Dec, 2023 15:21:39 -0600 Mario Limonciello <[email protected]> wrote:
>> Some laptops have an i8042 controller in the SOC, nothing mentioned in
>> ACPI PNP and nothing connected to the controller. Add the ability to
>> skip probing in this case.
>>
>> Signed-off-by: Mario Limonciello <[email protected]>
>> ---
>
> Thanks. I think this is a good choice for handling the issue you
> presented with the Framework 16.
>
> Reviewed-by: Rahul Rameshbabu <[email protected]>

Thanks!

Dmitry,

Are you OK with this? The other direction I considered was to add a DMI
BIOS year check and "only continue to probe" non PNP devices on systems
older than 2023.

That could let you cut and run without needing to continue to add quirks
like this but it could be riskier.

2023-12-08 17:57:34

by Dmitry Torokhov

[permalink] [raw]
Subject: Re: [PATCH v2 2/2] Input: i8042: Add a quirk for Framework 16" laptop

On Wed, Dec 06, 2023 at 03:21:40PM -0600, Mario Limonciello wrote:
> The Framework 16" laptop doesn't have a PS/2 keyboard. At bootup the
> following messages are emitted:
>
> i8042: PNP: No PS/2 controller found.
> i8042: PNP: Probing ports directly.
> i8042: Can't read CTR while initializing i8042
> i8042: probe of i8042 failed with error -5
>
> There are no PNP devices as those listed in `pnp_kbd_devids` but
> i8042_pnp_init() ignores this and still runs and will continue to
> try to probe.
>
> As there is no PS/2 keyboard or mouse in this laptop, set a quirk
> to avoid this behavior.

I believe the proper fix for this is for the firmware not report i8042
as present by properly setting up FADT. Please take a look at
arch/x86/kernel/acpi/boot.c::acpi_parse_fadt() and how it sets flag
X86_LEGACY_I8042_FIRMWARE_ABSENT.

It will still say "PNP: No PS/2 controller found" which is an
"informational" message, but should not try to probe ports directly and
report errors.

Thanks.

--
Dmitry

2023-12-08 18:09:08

by Rahul Rameshbabu

[permalink] [raw]
Subject: Re: [PATCH v2 2/2] Input: i8042: Add a quirk for Framework 16" laptop

On Fri, 08 Dec, 2023 17:57:05 +0000 Dmitry Torokhov <[email protected]> wrote:
> On Wed, Dec 06, 2023 at 03:21:40PM -0600, Mario Limonciello wrote:
>> The Framework 16" laptop doesn't have a PS/2 keyboard. At bootup the
>> following messages are emitted:
>>
>> i8042: PNP: No PS/2 controller found.
>> i8042: PNP: Probing ports directly.
>> i8042: Can't read CTR while initializing i8042
>> i8042: probe of i8042 failed with error -5
>>
>> There are no PNP devices as those listed in `pnp_kbd_devids` but
>> i8042_pnp_init() ignores this and still runs and will continue to
>> try to probe.
>>
>> As there is no PS/2 keyboard or mouse in this laptop, set a quirk
>> to avoid this behavior.
>
> I believe the proper fix for this is for the firmware not report i8042
> as present by properly setting up FADT. Please take a look at
> arch/x86/kernel/acpi/boot.c::acpi_parse_fadt() and how it sets flag
> X86_LEGACY_I8042_FIRMWARE_ABSENT.

This is along the lines of a point I brought up in the v1 of this patch.

https://lore.kernel.org/linux-input/[email protected]/

This means that Framework as a manufacturer will need to provide the
appropriate fix for what's advertised over ACPI by the device. I think
that makes sense instead of creating quirk combinations to avoid
resolving the issue at the ACPI level. I guess the only de-merit is that
means folks need to depend on vendors with no way to suppress this if a
vendor does not correct set up FADT.

>
> It will still say "PNP: No PS/2 controller found" which is an
> "informational" message, but should not try to probe ports directly and
> report errors.

--
Thanks,

Rahul Rameshbabu

2023-12-08 18:22:48

by Mario Limonciello

[permalink] [raw]
Subject: Re: [PATCH v2 2/2] Input: i8042: Add a quirk for Framework 16" laptop

On 12/8/2023 12:08, Rahul Rameshbabu wrote:
> On Fri, 08 Dec, 2023 17:57:05 +0000 Dmitry Torokhov <[email protected]> wrote:
>> On Wed, Dec 06, 2023 at 03:21:40PM -0600, Mario Limonciello wrote:
>>> The Framework 16" laptop doesn't have a PS/2 keyboard. At bootup the
>>> following messages are emitted:
>>>
>>> i8042: PNP: No PS/2 controller found.
>>> i8042: PNP: Probing ports directly.
>>> i8042: Can't read CTR while initializing i8042
>>> i8042: probe of i8042 failed with error -5
>>>
>>> There are no PNP devices as those listed in `pnp_kbd_devids` but
>>> i8042_pnp_init() ignores this and still runs and will continue to
>>> try to probe.
>>>
>>> As there is no PS/2 keyboard or mouse in this laptop, set a quirk
>>> to avoid this behavior.
>>
>> I believe the proper fix for this is for the firmware not report i8042
>> as present by properly setting up FADT. Please take a look at
>> arch/x86/kernel/acpi/boot.c::acpi_parse_fadt() and how it sets flag
>> X86_LEGACY_I8042_FIRMWARE_ABSENT.
>
> This is along the lines of a point I brought up in the v1 of this patch.
>
> https://lore.kernel.org/linux-input/[email protected]/
>
> This means that Framework as a manufacturer will need to provide the
> appropriate fix for what's advertised over ACPI by the device. I think
> that makes sense instead of creating quirk combinations to avoid
> resolving the issue at the ACPI level. I guess the only de-merit is that
> means folks need to depend on vendors with no way to suppress this if a
> vendor does not correct set up FADT.

Got it, thanks guys. I'll raise this with them.

>
>>
>> It will still say "PNP: No PS/2 controller found" which is an
>> "informational" message, but should not try to probe ports directly and
>> report errors.
>
> --
> Thanks,
>
> Rahul Rameshbabu