Hi, OK, I'll check it and send a minimal backport here. Thanks and best regards -Lv > From: gregkh@xxxxxxxxxxxxxxxxxxx [mailto:gregkh@xxxxxxxxxxxxxxxxxxx] > Sent: Friday, July 17, 2015 6:07 AM > > > The patch below does not apply to the 4.1-stable tree. > If someone wants it applied there, or to any other stable or longterm > tree, then please email the backport, including the original git commit > id to <stable@xxxxxxxxxxxxxxx>. > > thanks, > > greg k-h > > ------------------ original commit in Linus's tree ------------------ > > From 3cb02aeb28dd3f1b8a132fa3ecf6db17afd518d6 Mon Sep 17 00:00:00 2001 > From: Lv Zheng <lv.zheng@xxxxxxxxx> > Date: Thu, 11 Jun 2015 13:21:45 +0800 > Subject: [PATCH] ACPI / EC: Fix EC_FLAGS_QUERY_HANDSHAKE platforms using new > event clearing timing. > > It is reported that on several platforms, EC firmware will not respond > non-expected QR_EC (see EC_FLAGS_QUERY_HANDSHAKE, only write QR_EC when > SCI_EVT is set). > > Unfortunately, ACPI specification doesn't define when the SCI_EVT should be > cleared by the firmware, thus the original implementation queued up second > QR_EC right after writing QR_EC command and before reading the returned > event value as at that time the SCI_EVT is ensured not cleared. This > behavior is also based on the assumption that the firmware should be able > to return 0x00 to indicate "no outstanding event". This behavior did fix > issues on Samsung platforms where the spurious query value of 0x00 is > supported and didn't break platforms in my test queue. > > But recently, specific Acer, Asus, Lenovo platforms keep on blaming this > change. > > This patch changes the behavior to re-check the SCI_EVT a bit later and > removes EC_FLAGS_QUERY_HANDSHAKE quirks, hoping this is the Windows > compliant EC driver behavior. > > In order to be robust to the possible regressions, instead of removing the > quirk directly, this patch keeps the quirk code, removes the quirk users > and keeps old behavior for Samsung platforms. > > Cc: 3.16+ <stable@xxxxxxxxxxxxxxx> # 3.16+ > Link: https://bugzilla.kernel.org/show_bug.cgi?id=94411 > Link: https://bugzilla.kernel.org/show_bug.cgi?id=97381 > Link: https://bugzilla.kernel.org/show_bug.cgi?id=98111 > Reported-and-tested-by: Gabriele Mazzotta <gabriele.mzt@xxxxxxxxx> > Reported-and-tested-by: Tigran Gabrielyan <tigrangab@xxxxxxxxx> > Reported-and-tested-by: Adrien D <ghbdtn@xxxxxxxxxxxxxxx> > Signed-off-by: Lv Zheng <lv.zheng@xxxxxxxxx> > Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@xxxxxxxxx> > > diff --git a/drivers/acpi/ec.c b/drivers/acpi/ec.c > index 41eb523fa7ef..79817ce164c1 100644 > --- a/drivers/acpi/ec.c > +++ b/drivers/acpi/ec.c > @@ -133,7 +133,7 @@ static unsigned int ec_polling_guard __read_mostly = ACPI_EC_UDELAY_POLL; > module_param(ec_polling_guard, uint, 0644); > MODULE_PARM_DESC(ec_polling_guard, "Guard time(us) between EC accesses in polling modes"); > > -static unsigned int ec_event_clearing __read_mostly = ACPI_EC_EVT_TIMING_STATUS; > +static unsigned int ec_event_clearing __read_mostly = ACPI_EC_EVT_TIMING_QUERY; > > /* > * If the number of false interrupts per one transaction exceeds > @@ -1381,10 +1381,13 @@ static int ec_validate_ecdt(const struct dmi_system_id *id) > return 0; > } > > +#if 0 > /* > - * Acer EC firmware refuses to respond QR_EC when SCI_EVT is not set, for > - * which case, we complete the QR_EC without issuing it to the firmware. > - * https://bugzilla.kernel.org/show_bug.cgi?id=86211 > + * Some EC firmware variations refuses to respond QR_EC when SCI_EVT is not > + * set, for which case, we complete the QR_EC without issuing it to the > + * firmware. > + * https://bugzilla.kernel.org/show_bug.cgi?id=82611 > + * https://bugzilla.kernel.org/show_bug.cgi?id=97381 > */ > static int ec_flag_query_handshake(const struct dmi_system_id *id) > { > @@ -1392,6 +1395,7 @@ static int ec_flag_query_handshake(const struct dmi_system_id *id) > EC_FLAGS_QUERY_HANDSHAKE = 1; > return 0; > } > +#endif > > /* > * On some hardware it is necessary to clear events accumulated by the EC during > @@ -1414,6 +1418,7 @@ static int ec_clear_on_resume(const struct dmi_system_id *id) > { > pr_debug("Detected system needing EC poll on resume.\n"); > EC_FLAGS_CLEAR_ON_RESUME = 1; > + ec_event_clearing = ACPI_EC_EVT_TIMING_STATUS; > return 0; > } > > @@ -1443,9 +1448,6 @@ static struct dmi_system_id ec_dmi_table[] __initdata = { > { > ec_clear_on_resume, "Samsung hardware", { > DMI_MATCH(DMI_SYS_VENDOR, "SAMSUNG ELECTRONICS CO., LTD.")}, NULL}, > - { > - ec_flag_query_handshake, "Acer hardware", { > - DMI_MATCH(DMI_SYS_VENDOR, "Acer"), }, NULL}, > {}, > }; > -- To unsubscribe from this list: send the line "unsubscribe stable" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html