35 lines
1.3 KiB
Diff
35 lines
1.3 KiB
Diff
From: Stuart Hayes <stuart_hayes@yahoo.com>
|
|
Date: Wed, 2 Mar 2011 12:42:05 +0000 (+0100)
|
|
Subject: dcdbas: force SMI to happen when expected
|
|
X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Ftorvalds%2Flinux-2.6.git;a=commitdiff_plain;h=dd65c736d1b5312c80c88a64bf521db4959eded5
|
|
|
|
dcdbas: force SMI to happen when expected
|
|
|
|
The dcdbas driver can do an I/O write to cause a SMI to occur. The SMI handler
|
|
looks at certain registers and memory locations, so the SMI needs to happen
|
|
immediately. On some systems I/O writes are posted, though, causing the SMI to
|
|
happen well after the "outb" occurred, which causes random failures. Following
|
|
the "outb" with an "inb" forces the write to go through even if it is posted.
|
|
|
|
Signed-off-by: Stuart Hayes <stuart_hayes@yahoo.com>
|
|
Acked-by: Doug Warzecha <douglas_warzecha@dell.com>
|
|
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
|
|
---
|
|
|
|
diff --git a/drivers/firmware/dcdbas.c b/drivers/firmware/dcdbas.c
|
|
index 69ad529..ea5ac2d 100644
|
|
--- a/drivers/firmware/dcdbas.c
|
|
+++ b/drivers/firmware/dcdbas.c
|
|
@@ -268,8 +268,10 @@ int dcdbas_smi_request(struct smi_cmd *smi_cmd)
|
|
}
|
|
|
|
/* generate SMI */
|
|
+ /* inb to force posted write through and make SMI happen now */
|
|
asm volatile (
|
|
- "outb %b0,%w1"
|
|
+ "outb %b0,%w1\n"
|
|
+ "inb %w1"
|
|
: /* no output args */
|
|
: "a" (smi_cmd->command_code),
|
|
"d" (smi_cmd->command_address),
|