Re: i8042_init: PS/2 mouse not detected with ACPIPnP/PnPBIOS

From: Paul Menzel
Date: Tue Oct 13 2020 - 11:00:42 EST


Dear Rafael, dear Dmitry,


Am 12.10.20 um 13:00 schrieb Rafael J. Wysocki:
On Mon, Oct 12, 2020 at 12:50 PM Paul Menzel wrote:

Am 12.10.20 um 12:39 schrieb Rafael J. Wysocki:
On Sun, Oct 11, 2020 at 1:08 AM Paul Menzel wrote:

Am 08.10.20 um 00:16 schrieb Dmitry Torokhov:

On Wed, Oct 07, 2020 at 11:18:41PM +0200, Paul Menzel wrote:

On the Asus F2A85-M PRO Linux 5.9-rc8 (and previous versions) does not
recognize a plugged in PS/2 mouse using the Plug & Play method. The PS/2
keyboard is detected fine, and using `i8042.nopnp`, the PS/2 mouse also
works.

[ 1.035915] calling i8042_init+0x0/0x42d @ 1
[ 1.035947] i8042: PNP: PS/2 Controller [PNP0303:PS2K] at 0x60,0x64 irq 1
[ 1.035948] i8042: PNP: PS/2 appears to have AUX port disabled, if this is incorrect please boot with i8042.nopnp
[ 1.036589] serio: i8042 KBD port at 0x60,0x64 irq 1
[ 1.036621] initcall i8042_init+0x0/0x42d returned 0 after 687 usecs

But, the DSDT includes the “mouse device”. From

acpidump > dump.bin; acpixtract dump.bin; iasl -d *dat; more dsdt.dsl

we get

Device (PS2M)
{
Name (_HID, EisaId ("PNP0F03") /* Microsoft PS/2-style Mouse */) // _HID: Hardware ID
Name (_CID, EisaId ("PNP0F13") /* PS/2 Mouse */) // _CID: Compatible ID
Method (_STA, 0, NotSerialized) // _STA: Status
{
If ((IOST & 0x4000))
{
Return (0x0F)
}
Else
{
Return (Zero)
}
}

and the identifiers PNP0F03 and PNP0F13 are both listed in the array
`pnp_aux_devids[]`. But adding print statements to `i8042_pnp_aux_probe()`,
I do not see them, so the function does not seem to be called.

My guess is that _STA returns 0 indicating that the device is not
present. I would try tracking where IOST is being set and figuring out
why it does not have mouse bit enabled.

Does the ACPI subsystem allow to track, how ACPI variables(?) like IOST
are read and set?

My guess would be that IOST is a field in an operation region which
would indicate that it is initialized by the bootstrap part of the
BIOS.

Thank you for your answer. But how can I verify that?

Inspecting the ACPI tables from the system in question could help you
to find out whether or not IOST really is a field in an operation
region, but its initial value may not be possible to determine this
way.

Is there a Linux kernel parameter, that would print it?

Not that I know of.

I created an issue in the Linux kernel bugtracker [1] and attached the output of `acpidump` there.

Could

If ((IOST & 0x4000))

versus

If ((IOST & 0x0400))

be a typo?


Kind regards,

Paul


[1]: https://bugzilla.kernel.org/show_bug.cgi?id=209657