Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3784730b authored by Rafael J. Wysocki's avatar Rafael J. Wysocki Committed by Len Brown
Browse files

ACPI / EC: Do not use acpi_set_gpe



The EC driver is the last user of acpi_set_gpe() and since it is
guaranteed that the EC GPE will not be shared, acpi_disable_gpe()
and acpi_enable_gpe() may be used for disabling the GPE temporarilty
if a GPE storm is detected and re-enabling it during EC transactions.

Signed-off-by: default avatarRafael J. Wysocki <rjw@sisk.pl>
Signed-off-by: default avatarLen Brown <len.brown@intel.com>
parent b63559f5
Loading
Loading
Loading
Loading
+4 −11
Original line number Diff line number Diff line
@@ -313,11 +313,8 @@ static int acpi_ec_transaction(struct acpi_ec *ec, struct transaction *t)
	pr_debug(PREFIX "transaction start\n");
	/* disable GPE during transaction if storm is detected */
	if (test_bit(EC_FLAGS_GPE_STORM, &ec->flags)) {
		/*
		 * It has to be disabled at the hardware level regardless of the
		 * GPE reference counting, so that it doesn't trigger.
		 */
		acpi_set_gpe(NULL, ec->gpe, ACPI_GPE_DISABLE);
		/* It has to be disabled, so that it doesn't trigger. */
		acpi_disable_gpe(NULL, ec->gpe);
	}

	status = acpi_ec_transaction_unlocked(ec, t);
@@ -326,12 +323,8 @@ static int acpi_ec_transaction(struct acpi_ec *ec, struct transaction *t)
	ec_check_sci_sync(ec, acpi_ec_read_status(ec));
	if (test_bit(EC_FLAGS_GPE_STORM, &ec->flags)) {
		msleep(1);
		/*
		 * It is safe to enable the GPE outside of the transaction.  Use
		 * acpi_set_gpe() for that, since we used it to disable the GPE
		 * above.
		 */
		acpi_set_gpe(NULL, ec->gpe, ACPI_GPE_ENABLE);
		/* It is safe to enable the GPE outside of the transaction. */
		acpi_enable_gpe(NULL, ec->gpe);
	} else if (t->irq_count > ACPI_EC_STORM_THRESHOLD) {
		pr_info(PREFIX "GPE storm detected, "
			"transactions will use polling mode\n");