Created attachment 219189 [details] dmesg output from 12.1 memstick image, verbose boot. Hi All, I'm trying to bring up FreeBSD 12 on my new Lemur Pro laptop, but the keyboard is not working beyond the boot menu with 12.1. * The keyboard works fine with 11.4-RELEASE. * I believe it is internally wired as a PS/2 keyboard. * A USB keyboard works fine when connected. * I 'm currently only trying to get the keyboard working in console mode not X11 at this point. HW probes of both releases are at the following links which includes dmesg output. https://bsd-hardware.info/index.php?probe=0163d0f084 https://bsd-hardware.info/index.php?probe=30b32ece8f A probe under linux https://linux-hardware.org/index.php?probe=c2619f1014 is also available if that helps. It looks to me when going over the dmesg output that the keyboard is detected successfully both times, and I cannot see any obvious errors or warnings. I'm happy to recompile the kernel or the keyboard firmware if needed, just not sure where to look for the next clue. output of 'dmesg | grep kbd' shown below for each version FreeBSD 11.4-STABLE #0 r366441 Code: [...] atkbdc0: <Keyboard controller (i8042)> port 0x60,0x64 irq 1 on acpi0 [...] atkbd0: <AT Keyboard> irq 1 on atkbdc0 [...] atkbd: the current kbd controller command byte 0067 [...] atkbd: keyboard ID 0x83ab (2) [...] kbdc: RESET_KBD return code:00fa [...] kbdc: RESET_KBD status:00aa [...] kbd0 at atkbd0 [...] kbd0: atkbd0, AT 101/102 (2), config:0x0, flags:0x1d0000 ... [...] atkbd0: [GIANT-LOCKED] ... [...] random: harvesting attach, 8 bytes (4 bits) from atkbd0 ... [...] kbdc: TEST_AUX_PORT status:0000 [...] kbdc: RESET_AUX return code:00fa [...] kbdc: RESET_AUX status:ffffffff [...] kbdc: DIAGNOSE status:0055 [...] kbdc: TEST_KBD_PORT status:0000 ... atkbdc: atkbdc0 already exists; skipping it 12.1-RELEASE r354233 GENERIC amd64 Code: atkbdc0: <Keyboard controller (i8042)> port 0x60,0x64 irq 1 on acpi0 atkbd0: <AT Keyboard> irq 1 on atkbdc0 atkbd: the current kbd controller command byte 0067 kbdc: RESET_KBD return code:00fa kbdc: RESET_KBD status:00aa atkbd: keyboard ID 0x83ab (2) kbd0 at atkbd0 kbd0: atkbd0, AT 101/102 (2), config:0x0, flags:0x1d0000 ioapic0: routing intpin 1 (ISA IRQ 1) to lapic 6 vector 52 atkbd0: [GIANT-LOCKED] ... kbdc: TEST_AUX_PORT status:0000 kbdc: RESET_AUX return code:00fa kbdc: RESET_AUX status:ffffffff kbdc: DIAGNOSE status:0055 kbdc: TEST_KBD_PORT status:0000 ... atkbdc: atkbdc0 already exists; skipping it
Is it possible for you also check 12.2 and even -current? Thanks!
No problem, FreeBSD 13.0-CURRENT #0 0035a6c7bb7-c253915(main): Thu Oct 22 06:40:55 UTC 2020¬ 202 kbd: new array size 4¬ 203 WARNING: Device "kbd" is Giant locked and may be deleted before FreeBSD 13.0.¬ 204 kbd1 at kbdmux0¬ ... 580 atkbdc0: <Keyboard controller (i8042)> port 0x60,0x64 irq 1 on acpi0¬ 581 atkbd0: <AT Keyboard> irq 1 on atkbdc0¬ 582 atkbd: the current kbd controller command byte 0067¬ 583 kbdc: RESET_KBD return code:00fa¬ 584 kbdc: RESET_KBD status:00aa¬ 585 atkbd: keyboard ID 0x83ab (2)¬ 586 kbd0 at atkbd0¬ 587 kbd0: atkbd0, AT 101/102 (2), config:0x0, flags:0x1d0000¬ 588 ioapic0: routing intpin 1 (ISA IRQ 1) to lapic 4 vector 51¬ 589 atkbd0: [GIANT-LOCKED]¬ 590 psm0: unable to allocate IRQ¬ 591 psmcpnp0: <PS/2 mouse port> irq 12 on acpi0¬ 592 psm0: current command byte:0067¬ 593 kbdc: TEST_AUX_PORT status:0000¬ 594 kbdc: RESET_AUX return code:00fa¬ 595 kbdc: RESET_AUX status:ffffffff¬ 596 kbdc: DIAGNOSE status:0055¬ 597 kbdc: TEST_KBD_PORT status:0000¬ ... 807 atkbdc: atkbdc0 already exists; skipping it
Created attachment 219192 [details] dmesg output from 13-CURRENT c253915 memstick image, verbose boot.
(In reply to nick.lott from comment #2) I realize my previous comment was unclear. To be clear the issue still exists on 12.2 and 13-current.
(In reply to nick.lott from comment #4) Could you try to recompile 12.1+ or 13 with r307468 reverted: https://svnweb.freebsd.org/base?view=revision&revision=307468
I compiled 12.2 kernel with r307468 reverted and the keyboard now functions correctly.
Created attachment 219226 [details] dmesg output from 12.2 with coreboot atkbdc quirks removed.
(In reply to nick.lott from comment #6) > I compiled 12.2 kernel with r307468 reverted and the > keyboard now functions correctly. Great! Could you attach kenv(1) output here? Also it would be nice to find out exactly which quirk in unmodified kernel made your keyboard broken.
Created attachment 219267 [details] kenv output from 12.2 with atkbdc quirks removed.
It turns out the KBDC_QUIRK_KEEP_ACTIVATED is the problem. The keyboard works fine with the other quirks on.
FYI. If drm-kmod on 12-stable supports video card located on your laptop, you may want to add CometLake PCI IDs to I2C driver to get touchpad working under X. See r367230 (https://svnweb.freebsd.org/base?view=revision&revision=367230). Or wait for couple of weeks for MFC. If STABLE's drm-kmod version (4.16) is too old, then only choice is install current (or use scfb driver which does not support any acceleration)
Created attachment 219311 [details] atkbdc_quirks.patch Try attached patch (on unmodified sources of 12+ or 13)
(In reply to Vladimir Kondratyev from comment #12) Patch works correctly on 12.2.0 r367155 Now switching to current and will check there
(In reply to nick.lott from comment #13) Works in 13.0-CURRENT r367315M
A commit references this bug: Author: wulf Date: Wed Nov 4 21:52:10 UTC 2020 New revision: 367349 URL: https://svnweb.freebsd.org/changeset/base/367349 Log: atkbdc(4): Add quirk for "System76 lemur Pro" laptops. Currently atkbdc(4) assumes all coreboot BIOSes belonging to Chromebooks and unconditionally sets a number of quirks to workaround known issues. Exclude "System76" laptops from this set as they appeared to be a traditional hardware ("lemur Pro" is a rebranded Clevo chassis) with coreboot firmware on board. KBDC_QUIRK_KEEP_ACTIVATED quirk activated for Chromebook platform makes keyboard on this devices inoperable. "Purism Librem" laptops may require the same exclusion too. PR: 250711 Reported by: nick.lott@gmail.com MFC after: 2 weeks Changes: head/sys/dev/atkbdc/atkbdc.c
(In reply to nick.lott from comment #13) > Patch works correctly on 12.2.0 r367155 > Works in 13.0-CURRENT r367315M Thank you. I'll MFC commit to 12-STABLE in couple of weeks.
(In reply to Vladimir Kondratyev from comment #16) I got a report of a chromebook user who lost their keyboard, which I think was caused by this patch, as it breaks quirks for all systems by setting "quirk" to 0, which acts as an end-of-list marker when processing the quirk table (see is atkbdc_getquirks in atkbdc.c[0]): for (i=0; quirks[i].quirk != 0; ++i) if (QUIRK_STR_MATCH(quirks[i].bios_vendor, bios_vendor) && QUIRK_STR_MATCH(quirks[i].maker, maker) && QUIRK_STR_MATCH(quirks[i].product, product)) return (quirks[i].quirk); There are multiple (obvious) ways to fix this, can the creator of the original patch/committer work on this, or do you need assistance? [0]https://svnweb.freebsd.org/base/head/sys/dev/atkbdc/atkbdc.c?revision=367854&view=markup#l136
Created attachment 220245 [details] Example patch how to fix quirks processing bug introduced in r367349 Please see this (completely untested) patch for an example how to correct the issue.
(In reply to Michael Gmelin from comment #17) > for (i=0; quirks[i].quirk != 0; ++i) Indeed, somehow I missed this check. I'll commit your fix. Thank you.
It was my system Acer C720 which after updating to r368166 had no local console anymore. This small change (thanks to Michael) made it working again: # diff -c sys/dev/atkbdc/atkbdc.c.orig sys/dev/atkbdc/atkbdc.c *** sys/dev/atkbdc/atkbdc.c.orig Mon Nov 30 05:56:25 2020 --- sys/dev/atkbdc/atkbdc.c Fri Dec 4 13:32:16 2020 *************** *** 113,119 **** }; static struct atkbdc_quirks quirks[] = { ! {"coreboot", "System76", NULL, 0}, {"coreboot", NULL, NULL, KBDC_QUIRK_KEEP_ACTIVATED | KBDC_QUIRK_IGNORE_PROBE_RESULT | KBDC_QUIRK_RESET_AFTER_PROBE | KBDC_QUIRK_SETLEDS_ON_INIT}, --- 113,119 ---- }; static struct atkbdc_quirks quirks[] = { ! /* {"coreboot", "System76", NULL, 0}, */ {"coreboot", NULL, NULL, KBDC_QUIRK_KEEP_ACTIVATED | KBDC_QUIRK_IGNORE_PROBE_RESULT | KBDC_QUIRK_RESET_AFTER_PROBE | KBDC_QUIRK_SETLEDS_ON_INIT},
A commit references this bug: Author: wulf Date: Sat Dec 5 10:55:14 UTC 2020 New revision: 368365 URL: https://svnweb.freebsd.org/changeset/base/368365 Log: atkbd(4): Change quirk table end-of-list marker to NULL vendor/maker/product This fixes regression introduced in r367349 which effectively resulted in truncation of quirk table. PR: 250711 Submitted by: grembo Reported by: Matthias Apitz <guru@unixarea.de> X-MFC with: r367349 Changes: head/sys/dev/atkbdc/atkbdc.c
(In reply to Vladimir Kondratyev from comment #19) Thanks for committing (also to @cem for changing it to nitems).
System76 Lemur Pro is still fixed with 13.0-CURRENT r368627
A commit references this bug: Author: wulf Date: Wed Dec 16 07:59:48 UTC 2020 New revision: 368689 URL: https://svnweb.freebsd.org/changeset/base/368689 Log: MFC: r367349, r367854, r368365, r368374(by cem) r367349: atkbdc(4): Add quirk for "System76 lemur Pro" laptops. Currently atkbdc(4) assumes all coreboot BIOSes belonging to Chromebooks and unconditionally sets a number of quirks to workaround known issues. Exclude "System76" laptops from this set as they appeared to be a traditional hardware ("lemur Pro" is a rebranded Clevo chassis) with coreboot firmware on board. KBDC_QUIRK_KEEP_ACTIVATED quirk activated for Chromebook platform makes keyboard on this devices inoperable. "Purism Librem" laptops may require the same exclusion too. PR: 250711 Reported by: nick.lott@gmail.com r367854: psm(4): Disable AUX multiplexer probing on all Lenovo laptops. Rudimentary AUX multiplexing support was added to kernel to make possible touchpad initialization on some HP EliteBook laptops with trackpoint. Disable multiplexer probing on all Lenovo laptops now as they use touchpad pass-through port rather than AUX multiplexer to connect trackpoint and at least two model (X120e and X121e) is known for getting PS/2 AUX port dysfunctional after switching back to hidden multiplexing mode. AUX MUX probing can be reenabled with setting of hw.psm.mux_disabled loader tunable to 0. PR: 249987 Reported by: jwb r368365: atkbd(4): Change quirk table end-of-list marker to NULL vendor/maker/product This fixes regression introduced in r367349 which effectively resulted in truncation of quirk table. PR: 250711 Submitted by: grembo Reported by: Matthias Apitz <guru@unixarea.de> r368374 (by cem): atkbd(4): Just use nitems() for quirk enumeration Reviewed by: imp, wulf Differential Revision: https://reviews.freebsd.org/D27489 Changes: _U stable/12/ stable/12/sys/dev/atkbdc/atkbdc.c stable/12/sys/dev/atkbdc/atkbdcreg.h stable/12/sys/dev/atkbdc/psm.c
Can confirm Purism coreboot needs to be escaped as with the following patch for keyboard functionality. diff --git a/sys/dev/atkbdc/atkbdc.c b/sys/dev/atkbdc/atkbdc.c index c3c53f98e491..f24c3d883351 100644 --- a/sys/dev/atkbdc/atkbdc.c +++ b/sys/dev/atkbdc/atkbdc.c @@ -114,6 +114,7 @@ struct atkbdc_quirks { static struct atkbdc_quirks quirks[] = { {"coreboot", "System76", NULL, 0}, + {"coreboot", "Purism", NULL, 0}, {"coreboot", NULL, NULL, KBDC_QUIRK_KEEP_ACTIVATED | KBDC_QUIRK_IGNORE_PROBE_RESULT | KBDC_QUIRK_RESET_AFTER_PROBE | KBDC_QUIRK_SETLEDS_ON_INIT},