public inbox for linux-acpi@vger.kernel.org
 help / color / mirror / Atom feed
From: Lan Tianyu <tianyu.lan@intel.com>
To: rjw@sisk.pl, lenb@kernel.org
Cc: Lan Tianyu <tianyu.lan@intel.com>, linux-acpi@vger.kernel.org
Subject: [FIX PATCH] ACPI/EC: Restart transaction even when IBF flag setting
Date: Mon,  6 May 2013 11:23:40 +0800	[thread overview]
Message-ID: <1367810620-9369-1-git-send-email-tianyu.lan@intel.com> (raw)

Some time, EC works abnormally with IBF flag always setting.
IBF means "The host has written a byte of data to the command
or data port, but the embedded controller has not yet read it".
This will cause all EC requests to be failed with timeout error.

After several trials, find restarting transaction with IBF flag
setting can make EC work again. This patch is to remove the
IBF flag check before restarting transaction and increase the
repeat number to 5. Some time, once restart is not enough.

This bug happens on the different machines. (e.g Asus V1S,
Dell Latitude E6530, Samsung R719, Acer Aspire 5930G,
Sony Vaio SR19VN and so on).

Related bugs:
	https://bugzilla.kernel.org/show_bug.cgi?id=14733
	https://bugzilla.kernel.org/show_bug.cgi?id=15560
	https://bugzilla.kernel.org/show_bug.cgi?id=15946
	https://bugzilla.kernel.org/show_bug.cgi?id=42945
	https://bugzilla.kernel.org/show_bug.cgi?id=48221

Signed-off-by: Lan Tianyu <tianyu.lan@intel.com>
---
 drivers/acpi/ec.c |    4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/drivers/acpi/ec.c b/drivers/acpi/ec.c
index d45b287..edc0081 100644
--- a/drivers/acpi/ec.c
+++ b/drivers/acpi/ec.c
@@ -223,7 +223,7 @@ static int ec_check_sci_sync(struct acpi_ec *ec, u8 state)
 static int ec_poll(struct acpi_ec *ec)
 {
 	unsigned long flags;
-	int repeat = 2; /* number of command restarts */
+	int repeat = 5; /* number of command restarts */
 	while (repeat--) {
 		unsigned long delay = jiffies +
 			msecs_to_jiffies(ec_delay);
@@ -241,8 +241,6 @@ static int ec_poll(struct acpi_ec *ec)
 			}
 			advance_transaction(ec, acpi_ec_read_status(ec));
 		} while (time_before(jiffies, delay));
-		if (acpi_ec_read_status(ec) & ACPI_EC_FLAG_IBF)
-			break;
 		pr_debug(PREFIX "controller reset, restart transaction\n");
 		spin_lock_irqsave(&ec->lock, flags);
 		start_transaction(ec);
-- 
1.7.9.5


             reply	other threads:[~2013-05-06  3:29 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-05-06  3:23 Lan Tianyu [this message]
2013-05-08  0:00 ` [FIX PATCH] ACPI/EC: Restart transaction even when IBF flag setting Rafael J. Wysocki

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1367810620-9369-1-git-send-email-tianyu.lan@intel.com \
    --to=tianyu.lan@intel.com \
    --cc=lenb@kernel.org \
    --cc=linux-acpi@vger.kernel.org \
    --cc=rjw@sisk.pl \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox