From: Jochen Hein <jochen@jochen.org>
To: Len Brown <lenb@kernel.org>
Cc: Vincent Gerris <vgerris@gmail.com>, linux-pm@vger.kernel.org
Subject: [PATCH] intel_idle: work around errate VLP52 on Baytrail CPUs
Date: Mon, 19 Dec 2016 19:19:57 +0100 [thread overview]
Message-ID: <838trb233m.fsf@echidna.jochen.org> (raw)
There are frequent hangs on Baytrail CPUs according to
https://bugzilla.kernel.org/show_bug.cgi?id=109051.
This patch works around the errata by disabling C6.
According to the discussion in the bug and private mail it might be
useful to include the workaround in mainline.
Signed-off-by: Jochen Hein <jochen@jochen.org>
Cc: stable@vger.kernel.org
--- linux-4.7.5/drivers/idle/intel_idle.c.orig 2016-09-24 10:10:18.000000000 +0200
+++ linux-4.7.5/drivers/idle/intel_idle.c 2016-10-16 07:36:51.142862573 +0200
@@ -1210,6 +1210,34 @@
}
/*
+ * byt_idle_state_table_update(void)
+ *
+ * On BYT, we have errata VLP52 and disable C6.
+ * https://bugzilla.kernel.org/show_bug.cgi?id=109051A
+ * http://www.intel.com/content/dam/www/public/us/en/documents/specification-updates/pentium-n3520-j2850-celeron-n2920-n2820-n2815-n2806-j1850-j1750-spec-update.pdf
+ * VLP52 EOI Transactions May Not be Sent if Software Enters Core C6 During an Interrupt Service Routine.
+
+Problem:
+If core C6 is entered after the start of an interrupt service routine but before a write
+to the APIC EOI (End of Interrupt) register, and the core is woken up by an event
+other than a fixed interrupt source the core may drop the EOI transaction the next
+time APIC EOI register is written and further interrupts from the same or lower
+priority level will be blocked.
+
+Implication:
+EOI transactions may be lost and interrupts may be blocked when core C6 is used
+during interrupt service routines.
+
+Workaround:
+It is possible for the firmware to contain a workaround for this erratum.
+ */
+static void byt_idle_state_table_update(void)
+{
+ printk(PREFIX "byt_idle_state_table_update reached\n");
+ byt_cstates[1].disabled = 1; /* C6N-BYT */
+ byt_cstates[2].disabled = 1; /* C6S-BYT */
+}
+/*
* sklh_idle_state_table_update(void)
*
* On SKL-H (model 0x5e) disable C8 and C9 if:
@@ -1264,6 +1292,10 @@
case 0x3e: /* IVT */
ivt_idle_state_table_update();
break;
+ case 0x37: /* BYT */
+ printk(PREFIX "intel_idle_state_table_update BYT 0x37 reached\n");
+ byt_idle_state_table_update();
+ break;
case 0x5c: /* BXT */
bxt_idle_state_table_update();
break;
--
The only problem with troubleshooting is that the trouble shoots back.
next reply other threads:[~2016-12-19 18:52 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-12-19 18:19 Jochen Hein [this message]
2016-12-19 19:43 ` [PATCH] intel_idle: work around errate VLP52 on Baytrail CPUs Rafael J. Wysocki
[not found] ` <CA+8K-g=fXN9TWWxkV1AEEjXJLhwJEQ2PB434gKQ9Z7bL=yf+zA@mail.gmail.com>
2016-12-27 17:24 ` Vincent Gerris
2016-12-27 20:37 ` Len Brown
2016-12-27 20:44 ` Jochen Hein
2016-12-27 21:27 ` Len Brown
2016-12-28 12:56 ` Vincent Gerris
2016-12-28 18:47 ` Jacob Pan
2017-01-11 23:14 ` Len Brown
2017-01-11 23:22 ` Jacob Pan
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=838trb233m.fsf@echidna.jochen.org \
--to=jochen@jochen.org \
--cc=lenb@kernel.org \
--cc=linux-pm@vger.kernel.org \
--cc=vgerris@gmail.com \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.