Message ID | 20240605063351.14836-1-ben@jubnut.com (mailing list archive) |
---|---|
Headers | show |
Series | platform/chrome: Fix MEC concurrency problems for Framework Laptop | expand |
Hello: This series was applied to chrome-platform/linux.git (for-kernelci) by Tzung-Bi Shih <tzungbi@kernel.org>: On Wed, 5 Jun 2024 07:33:46 +0100 you wrote: > Framework Laptops with the Microchip EC have a problem where the EC > "stops working" after a while. Symptoms include the Fn key not > working, and "bad packet checksum" errors appearing in the system log. > > The problem is caused by ACPI code which accesses the Microchip EC > (MEC) memory using the Microchip EMI protocol. It uses an AML mutex to > prevent concurrent access. But the cros_ec_lpc driver is not aware of > this mutex. The ACPI code and LPC driver both attempt to talk to the > EC at the same time, messing up communication with the EC. > > [...] Here is the summary with links: - [v3,1/5] platform/chrome: cros_ec_lpc: MEC access can return error code https://git.kernel.org/chrome-platform/c/68dbac0a58ef - [v3,2/5] platform/chrome: cros_ec_lpc: MEC access can use an AML mutex https://git.kernel.org/chrome-platform/c/60c7df66450e - [v3,3/5] platform/chrome: cros_ec_lpc: Add a new quirk for ACPI id https://git.kernel.org/chrome-platform/c/040159e0912c - [v3,4/5] platform/chrome: cros_ec_lpc: Add a new quirk for AML mutex https://git.kernel.org/chrome-platform/c/38c31b1d737b - [v3,5/5] platform/chrome: cros_ec_lpc: Add quirks for Framework Laptop https://git.kernel.org/chrome-platform/c/04ca0a51f1e6 You are awesome, thank you!
Hello: This series was applied to chrome-platform/linux.git (for-next) by Tzung-Bi Shih <tzungbi@kernel.org>: On Wed, 5 Jun 2024 07:33:46 +0100 you wrote: > Framework Laptops with the Microchip EC have a problem where the EC > "stops working" after a while. Symptoms include the Fn key not > working, and "bad packet checksum" errors appearing in the system log. > > The problem is caused by ACPI code which accesses the Microchip EC > (MEC) memory using the Microchip EMI protocol. It uses an AML mutex to > prevent concurrent access. But the cros_ec_lpc driver is not aware of > this mutex. The ACPI code and LPC driver both attempt to talk to the > EC at the same time, messing up communication with the EC. > > [...] Here is the summary with links: - [v3,1/5] platform/chrome: cros_ec_lpc: MEC access can return error code https://git.kernel.org/chrome-platform/c/68dbac0a58ef - [v3,2/5] platform/chrome: cros_ec_lpc: MEC access can use an AML mutex https://git.kernel.org/chrome-platform/c/60c7df66450e - [v3,3/5] platform/chrome: cros_ec_lpc: Add a new quirk for ACPI id https://git.kernel.org/chrome-platform/c/040159e0912c - [v3,4/5] platform/chrome: cros_ec_lpc: Add a new quirk for AML mutex https://git.kernel.org/chrome-platform/c/38c31b1d737b - [v3,5/5] platform/chrome: cros_ec_lpc: Add quirks for Framework Laptop https://git.kernel.org/chrome-platform/c/04ca0a51f1e6 You are awesome, thank you!
Framework Laptops with the Microchip EC have a problem where the EC "stops working" after a while. Symptoms include the Fn key not working, and "bad packet checksum" errors appearing in the system log. The problem is caused by ACPI code which accesses the Microchip EC (MEC) memory using the Microchip EMI protocol. It uses an AML mutex to prevent concurrent access. But the cros_ec_lpc driver is not aware of this mutex. The ACPI code and LPC driver both attempt to talk to the EC at the same time, messing up communication with the EC. The solution is to have the cros_ec_lpc_mec code find and use the AML mutex. But to make it all work we have to do a few more things: * Allow the cros_ec_lpc_mec code to return error codes in case it can't lock the mutex. * Have the cros_ec_lpc code find the correct ACPI device (PNP0C09) and then the AML mutex itself. * Use the quirks mechanism to specify the AML mutex name. Tested-on: link, hx20, azalea Tested-by: Dustin L. Howett <dustin@howett.net> Changes in v3: * Use ACPI_COMPANION instead of adev variable. * Stricter error checking in probe. * Remove a few blank lines. * Rebase to latest ChromeOS for-next branch. Changes in v2: * Put ACPI id in a quirk, not the acpi_match_table. * Add return code check for mutex unlock. * Remove "in_range" check which belongs in a separate patch. * Use "ret" not "sum" variable (same value but clearer). * Remove excessive error logging. * Rebase to latest ChromeOS for-next branch. Ben Walsh (5): platform/chrome: cros_ec_lpc: MEC access can return error code platform/chrome: cros_ec_lpc: MEC access can use an AML mutex platform/chrome: cros_ec_lpc: Add a new quirk for ACPI id platform/chrome: cros_ec_lpc: Add a new quirk for AML mutex platform/chrome: cros_ec_lpc: Add quirks for Framework Laptop drivers/platform/chrome/cros_ec_lpc.c | 206 +++++++++++++++------ drivers/platform/chrome/cros_ec_lpc_mec.c | 85 ++++++++- drivers/platform/chrome/cros_ec_lpc_mec.h | 18 +- drivers/platform/chrome/wilco_ec/mailbox.c | 22 ++- 4 files changed, 261 insertions(+), 70 deletions(-) base-commit: 106d6739823369c734a8fc3b13634274eee4f60e