Skip to contentSkip to conversation

Enable A20 using KBC for some MSI laptops to fix S3 resume

PATCH Superseded Ondrej Zary 5 participants 9 messages Oct 24, 2012 – Oct 26, 2012

Subsystems (2)

v1 of 4 Superseded Latest is v4 →

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 Enable A20 using KBC for some MSI laptops to fix S3 resume

Some MSI laptop BIOSes are broken - INT 15h code uses port 92h to enable A20 line but resume code assumes that KBC was used.
The laptop will not resume from S3 otherwise but powers off after a while and then powers on again stuck with a blank screen.

Fix it by enabling A20 using KBC. Affected laptop list and DMI data are from bug reports at Ubuntu Launchpad.

Tested with EX600 and PR200.

Fixes https://bugzilla.kernel.org/show_bug.cgi?id=12878

arch/x86/kernel/acpi/boot.c +68 -0
@@ -1349,6 +1349,20 @@ static int __init dmi_ignore_irq0_timer_override(const struct dmi_system_id *d)
 }
 
 /*
+ * Enable A20 line using KBC even if it's already enabled using other method.
+ * This is needed for some MSI laptops to resume from S3.
+ */
+static int __init a20_enable_kbc(const struct dmi_system_id *d)
+{
+	printk(KERN_NOTICE "%s detected: enabling A20 using KBC\n", d->ident);
+	outb(0xd1, 0x64);	/* Command write */
+	outb(0xdf, 0x60);	/* A20 on */
+	outb(0xff, 0x64);	/* Null command, but UHCI wants it */
+
+	return 0;
+}
+
+/*
  * If your system is blacklisted here, but you find that acpi=force
  * works for you, please contact [email protected]
  */
@@ -1423,6 +1437,60 @@ static struct dmi_system_id __initdata acpi_dmi_table[] = {
 		     DMI_MATCH(DMI_PRODUCT_NAME, "TravelMate 360"),
 		     },
 	 },
+	/*
+	 * Some MSI laptop BIOSes are broken - INT 15h code uses port 92h to
+	 * enable A20 line but resume code assumes that KBC was used.
+	 * The laptop will not resume from S3 otherwise but powers off
+	 * after a while and then powers on again stuck with a blank screen.
+	 */
+	{
+	 .callback = a20_enable_kbc,
+	 .ident = "MSI EX600 Laptop",
+	 .matches = {
+		     DMI_MATCH(DMI_SYS_VENDOR, "Micro-Star International"),
+		     DMI_MATCH(DMI_PRODUCT_NAME, "MSI Notebook EX600"),
+		     },
+	 },
+	{
+	 .callback = a20_enable_kbc,
+	 .ident = "MSI EX700 Laptop",
+	 .matches = {
+		     DMI_MATCH(DMI_SYS_VENDOR, "Micro-Star International"),
+		     DMI_MATCH(DMI_PRODUCT_NAME, "EX700"),
+		     },
+	 },
+	{
+	 .callback = a20_enable_kbc,
+	 .ident = "MSI GX700 Laptop",
+	 .matches = {
+		     DMI_MATCH(DMI_SYS_VENDOR, "Micro-Star International"),
+		     DMI_MATCH(DMI_PRODUCT_NAME, "GX700"),
+		     },
+	 },
+	{
+	 .callback = a20_enable_kbc,
+	 .ident = "MSI VR201 Laptop",
+	 .matches = {
+		     DMI_MATCH(DMI_SYS_VENDOR, "Micro-Star International"),
+		     DMI_MATCH(DMI_PRODUCT_NAME, "MSI Notebook VR201"),
+		     },
+	 },
+	{
+	 .callback = a20_enable_kbc,
+	 .ident = "MSI VR601 Laptop",
+	 .matches = {
+		     DMI_MATCH(DMI_SYS_VENDOR, "Micro-Star International"),
+		     DMI_MATCH(DMI_PRODUCT_NAME, "MSI Notebook VR601"),
+		     },
+	 },
+	{
+	 .callback = a20_enable_kbc,
+	 .ident = "MSI PR200 Laptop",
+	 .matches = {
+		     DMI_MATCH(DMI_SYS_VENDOR, "Micro-Star International"),
+		     DMI_MATCH(DMI_PRODUCT_NAME, "MSI Notebook PR200"),
+		     },
+	 },
 	{}
 };
 
Signature · 1 line
Ondrej Zary
Acked-by on v1 1/1
#1 lore raw
Quoted 5 lines · On Wednesday 24 of October 2012 08:47:52 Ondrej Zary wrote:

Some MSI laptop BIOSes are broken - INT 15h code uses port 92h to enable A20 line but resume code assumes that KBC was used.
The laptop will not resume from S3 otherwise but powers off after a while and then powers on again stuck with a blank screen.

Quoted 8 lines

Fix it by enabling A20 using KBC. Affected laptop list and DMI data are from bug reports at Ubuntu Launchpad.

Tested with EX600 and PR200.

Fixes https://bugzilla.kernel.org/show_bug.cgi?id=12878

Quoted 87 lines
arch/x86/kernel/acpi/boot.c +68 -0
@@ -1349,6 +1349,20 @@ static int __init dmi_ignore_irq0_timer_override(const struct dmi_system_id *d)
 }
 
 /*
+ * Enable A20 line using KBC even if it's already enabled using other method.
+ * This is needed for some MSI laptops to resume from S3.
+ */
+static int __init a20_enable_kbc(const struct dmi_system_id *d)
+{
+	printk(KERN_NOTICE "%s detected: enabling A20 using KBC\n", d->ident);
+	outb(0xd1, 0x64);	/* Command write */
+	outb(0xdf, 0x60);	/* A20 on */
+	outb(0xff, 0x64);	/* Null command, but UHCI wants it */
+
+	return 0;
+}
+
+/*
  * If your system is blacklisted here, but you find that acpi=force
  * works for you, please contact [email protected]
  */
@@ -1423,6 +1437,60 @@ static struct dmi_system_id __initdata acpi_dmi_table[] = {
 		     DMI_MATCH(DMI_PRODUCT_NAME, "TravelMate 360"),
 		     },
 	 },
+	/*
+	 * Some MSI laptop BIOSes are broken - INT 15h code uses port 92h to
+	 * enable A20 line but resume code assumes that KBC was used.
+	 * The laptop will not resume from S3 otherwise but powers off
+	 * after a while and then powers on again stuck with a blank screen.
+	 */
+	{
+	 .callback = a20_enable_kbc,
+	 .ident = "MSI EX600 Laptop",
+	 .matches = {
+		     DMI_MATCH(DMI_SYS_VENDOR, "Micro-Star International"),
+		     DMI_MATCH(DMI_PRODUCT_NAME, "MSI Notebook EX600"),
+		     },
+	 },
+	{
+	 .callback = a20_enable_kbc,
+	 .ident = "MSI EX700 Laptop",
+	 .matches = {
+		     DMI_MATCH(DMI_SYS_VENDOR, "Micro-Star International"),
+		     DMI_MATCH(DMI_PRODUCT_NAME, "EX700"),
+		     },
+	 },
+	{
+	 .callback = a20_enable_kbc,
+	 .ident = "MSI GX700 Laptop",
+	 .matches = {
+		     DMI_MATCH(DMI_SYS_VENDOR, "Micro-Star International"),
+		     DMI_MATCH(DMI_PRODUCT_NAME, "GX700"),
+		     },
+	 },
+	{
+	 .callback = a20_enable_kbc,
+	 .ident = "MSI VR201 Laptop",
+	 .matches = {
+		     DMI_MATCH(DMI_SYS_VENDOR, "Micro-Star International"),
+		     DMI_MATCH(DMI_PRODUCT_NAME, "MSI Notebook VR201"),
+		     },
+	 },
+	{
+	 .callback = a20_enable_kbc,
+	 .ident = "MSI VR601 Laptop",
+	 .matches = {
+		     DMI_MATCH(DMI_SYS_VENDOR, "Micro-Star International"),
+		     DMI_MATCH(DMI_PRODUCT_NAME, "MSI Notebook VR601"),
+		     },
+	 },
+	{
+	 .callback = a20_enable_kbc,
+	 .ident = "MSI PR200 Laptop",
+	 .matches = {
+		     DMI_MATCH(DMI_SYS_VENDOR, "Micro-Star International"),
+		     DMI_MATCH(DMI_PRODUCT_NAME, "MSI Notebook PR200"),
+		     },
+	 },
 	{}
 };
 
Signature · 2 lines
I speak only for myself.
Rafael J. Wysocki, Intel Open Source Technology Center.
#2 lore raw

Minor concern: it should do the wait for ready before sending each command.

Quoted 114 lines · Rafael J. Wysocki
Quoted 1 line · On Wednesday 24 of October 2012 08:47:52 Ondrej Zary wrote:

Some MSI laptop BIOSes are broken - INT 15h code uses port 92h to

enable A20

Quoted 2 lines

line but resume code assumes that KBC was used.
The laptop will not resume from S3 otherwise but powers off after a

while

Quoted 3 lines

and then powers on again stuck with a blank screen.

Fix it by enabling A20 using KBC. Affected laptop list and DMI data

are from

Quoted 7 lines

bug reports at Ubuntu Launchpad.

Tested with EX600 and PR200.

Fixes https://bugzilla.kernel.org/show_bug.cgi?id=12878

arch/x86/kernel/acpi/boot.c static int __init

Quoted 3 lines
arch/x86/kernel/acpi/boot.c +0 -0
@@ -1349,6 +1349,20 @@ static int __init

dmi_ignore_irq0_timer_override(const struct dmi_system_id *d)

arch/x86/kernel/acpi/boot.c static int __init · line 1352

Quoted 4 lines
arch/x86/kernel/acpi/boot.c +1 -0
 }
 
 /*
+ * Enable A20 line using KBC even if it's already enabled using

other method.

arch/x86/kernel/acpi/boot.c static int __init dmi_ignore_irq0_timer_override(const struct dmi_system_id *d)

Quoted 5 lines
arch/x86/kernel/acpi/boot.c +5 -0
+ * This is needed for some MSI laptops to resume from S3.
+ */
+static int __init a20_enable_kbc(const struct dmi_system_id *d)
+{
+	printk(KERN_NOTICE "%s detected: enabling A20 using KBC\n",

d->ident);

arch/x86/kernel/acpi/boot.c static struct dmi_system_id __initdata

Quoted 12 lines
arch/x86/kernel/acpi/boot.c +8 -0
+	outb(0xd1, 0x64);	/* Command write */
+	outb(0xdf, 0x60);	/* A20 on */
+	outb(0xff, 0x64);	/* Null command, but UHCI wants it */
+
+	return 0;
+}
+
+/*
  * If your system is blacklisted here, but you find that acpi=force
  * works for you, please contact [email protected]
  */
@@ -1423,6 +1437,60 @@ static struct dmi_system_id __initdata

acpi_dmi_table[] = {

arch/x86/kernel/acpi/boot.c static struct dmi_system_id __initdata acpi_dmi_table[] = {

Quoted 5 lines
arch/x86/kernel/acpi/boot.c +2 -0
 		     DMI_MATCH(DMI_PRODUCT_NAME, "TravelMate 360"),
 		     },
 	 },
+	/*
+	 * Some MSI laptop BIOSes are broken - INT 15h code uses port 92h

to

arch/x86/kernel/acpi/boot.c static struct dmi_system_id __initdata acpi_dmi_table[] = {

Quoted 3 lines
arch/x86/kernel/acpi/boot.c +3 -0
+	 * enable A20 line but resume code assumes that KBC was used.
+	 * The laptop will not resume from S3 otherwise but powers off
+	 * after a while and then powers on again stuck with a blank

screen.

Quoted 55 lines
arch/x86/kernel/acpi/boot.c +49 -0
+	 */
+	{
+	 .callback = a20_enable_kbc,
+	 .ident = "MSI EX600 Laptop",
+	 .matches = {
+		     DMI_MATCH(DMI_SYS_VENDOR, "Micro-Star International"),
+		     DMI_MATCH(DMI_PRODUCT_NAME, "MSI Notebook EX600"),
+		     },
+	 },
+	{
+	 .callback = a20_enable_kbc,
+	 .ident = "MSI EX700 Laptop",
+	 .matches = {
+		     DMI_MATCH(DMI_SYS_VENDOR, "Micro-Star International"),
+		     DMI_MATCH(DMI_PRODUCT_NAME, "EX700"),
+		     },
+	 },
+	{
+	 .callback = a20_enable_kbc,
+	 .ident = "MSI GX700 Laptop",
+	 .matches = {
+		     DMI_MATCH(DMI_SYS_VENDOR, "Micro-Star International"),
+		     DMI_MATCH(DMI_PRODUCT_NAME, "GX700"),
+		     },
+	 },
+	{
+	 .callback = a20_enable_kbc,
+	 .ident = "MSI VR201 Laptop",
+	 .matches = {
+		     DMI_MATCH(DMI_SYS_VENDOR, "Micro-Star International"),
+		     DMI_MATCH(DMI_PRODUCT_NAME, "MSI Notebook VR201"),
+		     },
+	 },
+	{
+	 .callback = a20_enable_kbc,
+	 .ident = "MSI VR601 Laptop",
+	 .matches = {
+		     DMI_MATCH(DMI_SYS_VENDOR, "Micro-Star International"),
+		     DMI_MATCH(DMI_PRODUCT_NAME, "MSI Notebook VR601"),
+		     },
+	 },
+	{
+	 .callback = a20_enable_kbc,
+	 .ident = "MSI PR200 Laptop",
+	 .matches = {
+		     DMI_MATCH(DMI_SYS_VENDOR, "Micro-Star International"),
+		     DMI_MATCH(DMI_PRODUCT_NAME, "MSI Notebook PR200"),
+		     },
+	 },
 	{}
 };
 
Signature · 1 line
Sent from my mobile phone. Please excuse brevity and lack of formatting.
#3 lore raw
Quoted 1 line · On Wednesday 24 October 2012 21:36:04 H. Peter Anvin wrote:

Minor concern: it should do the wait for ready before sending each command.

It was a hack and then I forgot to add the waits... Should I redo the patch? I'll not be able to test it as I have to return the machine.

Quoted 128 lines
Quoted 127 lines · Rafael J. Wysocki
Quoted 1 line · On Wednesday 24 of October 2012 08:47:52 Ondrej Zary wrote:

Some MSI laptop BIOSes are broken - INT 15h code uses port 92h to

enable A20

Quoted 2 lines

line but resume code assumes that KBC was used.
The laptop will not resume from S3 otherwise but powers off after a

while

Quoted 3 lines

and then powers on again stuck with a blank screen.

Fix it by enabling A20 using KBC. Affected laptop list and DMI data

are from

Quoted 7 lines

bug reports at Ubuntu Launchpad.

Tested with EX600 and PR200.

Fixes https://bugzilla.kernel.org/show_bug.cgi?id=12878

arch/x86/kernel/acpi/boot.c static int __init

Quoted 3 lines
arch/x86/kernel/acpi/boot.c +0 -0
@@ -1349,6 +1349,20 @@ static int __init

dmi_ignore_irq0_timer_override(const struct dmi_system_id *d)

arch/x86/kernel/acpi/boot.c static int __init · line 1352

Quoted 4 lines
arch/x86/kernel/acpi/boot.c +1 -0
 }
 
 /*
+ * Enable A20 line using KBC even if it's already enabled using

other method.

arch/x86/kernel/acpi/boot.c static int __init dmi_ignore_irq0_timer_override(const struct dmi_system_id *d)

Quoted 5 lines
arch/x86/kernel/acpi/boot.c +5 -0
+ * This is needed for some MSI laptops to resume from S3.
+ */
+static int __init a20_enable_kbc(const struct dmi_system_id *d)
+{
+	printk(KERN_NOTICE "%s detected: enabling A20 using KBC\n",

d->ident);

arch/x86/kernel/acpi/boot.c static struct dmi_system_id __initdata

Quoted 12 lines
arch/x86/kernel/acpi/boot.c +8 -0
+	outb(0xd1, 0x64);	/* Command write */
+	outb(0xdf, 0x60);	/* A20 on */
+	outb(0xff, 0x64);	/* Null command, but UHCI wants it */
+
+	return 0;
+}
+
+/*
  * If your system is blacklisted here, but you find that acpi=force
  * works for you, please contact [email protected]
  */
@@ -1423,6 +1437,60 @@ static struct dmi_system_id __initdata

acpi_dmi_table[] = {

arch/x86/kernel/acpi/boot.c static struct dmi_system_id __initdata acpi_dmi_table[] = {

Quoted 5 lines
arch/x86/kernel/acpi/boot.c +2 -0
 		     DMI_MATCH(DMI_PRODUCT_NAME, "TravelMate 360"),
 		     },
 	 },
+	/*
+	 * Some MSI laptop BIOSes are broken - INT 15h code uses port 92h

to

arch/x86/kernel/acpi/boot.c static struct dmi_system_id __initdata acpi_dmi_table[] = {

Quoted 3 lines
arch/x86/kernel/acpi/boot.c +3 -0
+	 * enable A20 line but resume code assumes that KBC was used.
+	 * The laptop will not resume from S3 otherwise but powers off
+	 * after a while and then powers on again stuck with a blank

screen.

Quoted 51 lines
arch/x86/kernel/acpi/boot.c +49 -0
+	 */
+	{
+	 .callback = a20_enable_kbc,
+	 .ident = "MSI EX600 Laptop",
+	 .matches = {
+		     DMI_MATCH(DMI_SYS_VENDOR, "Micro-Star International"),
+		     DMI_MATCH(DMI_PRODUCT_NAME, "MSI Notebook EX600"),
+		     },
+	 },
+	{
+	 .callback = a20_enable_kbc,
+	 .ident = "MSI EX700 Laptop",
+	 .matches = {
+		     DMI_MATCH(DMI_SYS_VENDOR, "Micro-Star International"),
+		     DMI_MATCH(DMI_PRODUCT_NAME, "EX700"),
+		     },
+	 },
+	{
+	 .callback = a20_enable_kbc,
+	 .ident = "MSI GX700 Laptop",
+	 .matches = {
+		     DMI_MATCH(DMI_SYS_VENDOR, "Micro-Star International"),
+		     DMI_MATCH(DMI_PRODUCT_NAME, "GX700"),
+		     },
+	 },
+	{
+	 .callback = a20_enable_kbc,
+	 .ident = "MSI VR201 Laptop",
+	 .matches = {
+		     DMI_MATCH(DMI_SYS_VENDOR, "Micro-Star International"),
+		     DMI_MATCH(DMI_PRODUCT_NAME, "MSI Notebook VR201"),
+		     },
+	 },
+	{
+	 .callback = a20_enable_kbc,
+	 .ident = "MSI VR601 Laptop",
+	 .matches = {
+		     DMI_MATCH(DMI_SYS_VENDOR, "Micro-Star International"),
+		     DMI_MATCH(DMI_PRODUCT_NAME, "MSI Notebook VR601"),
+		     },
+	 },
+	{
+	 .callback = a20_enable_kbc,
+	 .ident = "MSI PR200 Laptop",
+	 .matches = {
+		     DMI_MATCH(DMI_SYS_VENDOR, "Micro-Star International"),
+		     DMI_MATCH(DMI_PRODUCT_NAME, "MSI Notebook PR200"),
+		     },
+	 },
 	{}
 };
Signature · 1 line
Ondrej Zary
#4 lore raw

Probably should.

Quoted 140 lines · Ondrej Zary
Quoted 1 line · On Wednesday 24 October 2012 21:36:04 H. Peter Anvin wrote:

Minor concern: it should do the wait for ready before sending each

command.

It was a hack and then I forgot to add the waits... Should I redo the patch?
I'll not be able to test it as I have to return the machine.

Quoted 8 lines
Quoted 7 lines · Rafael J. Wysocki
Quoted 1 line · On Wednesday 24 of October 2012 08:47:52 Ondrej Zary wrote:

Some MSI laptop BIOSes are broken - INT 15h code uses port 92h to

enable A20

Quoted 2 lines

line but resume code assumes that KBC was used.
The laptop will not resume from S3 otherwise but powers off after

a

Quoted 6 lines
Quoted 6 lines

while

Quoted 3 lines

and then powers on again stuck with a blank screen.

Fix it by enabling A20 using KBC. Affected laptop list and DMI

data

Quoted 34 lines
Quoted 34 lines

are from

Quoted 7 lines

bug reports at Ubuntu Launchpad.

Tested with EX600 and PR200.

Fixes https://bugzilla.kernel.org/show_bug.cgi?id=12878

arch/x86/kernel/acpi/boot.c static int __init

Quoted 3 lines
arch/x86/kernel/acpi/boot.c +0 -0
@@ -1349,6 +1349,20 @@ static int __init

dmi_ignore_irq0_timer_override(const struct dmi_system_id *d)

arch/x86/kernel/acpi/boot.c static int __init · line 1352

Quoted 4 lines
arch/x86/kernel/acpi/boot.c +1 -0
 }
 
 /*
+ * Enable A20 line using KBC even if it's already enabled using

other method.

arch/x86/kernel/acpi/boot.c static int __init dmi_ignore_irq0_timer_override(const struct dmi_system_id *d)

Quoted 5 lines
arch/x86/kernel/acpi/boot.c +5 -0
+ * This is needed for some MSI laptops to resume from S3.
+ */
+static int __init a20_enable_kbc(const struct dmi_system_id *d)
+{
+	printk(KERN_NOTICE "%s detected: enabling A20 using KBC\n",

d->ident);

Quoted 9 lines
Quoted 9 lines

arch/x86/kernel/acpi/boot.c static int __init dmi_ignore_irq0_timer_override(const struct dmi_system_id *d)

Quoted 9 lines
arch/x86/kernel/acpi/boot.c +8 -0
+	outb(0xd1, 0x64);	/* Command write */
+	outb(0xdf, 0x60);	/* A20 on */
+	outb(0xff, 0x64);	/* Null command, but UHCI wants it */
+
+	return 0;
+}
+
+/*
  * If your system is blacklisted here, but you find that

acpi=force

Quoted 11 lines
Quoted 11 lines

arch/x86/kernel/acpi/boot.c static struct dmi_system_id __initdata

Quoted 3 lines
arch/x86/kernel/acpi/boot.c +0 -0
  * works for you, please contact [email protected]
  */
@@ -1423,6 +1437,60 @@ static struct dmi_system_id __initdata

acpi_dmi_table[] = {

arch/x86/kernel/acpi/boot.c static struct dmi_system_id __initdata acpi_dmi_table[] = {

Quoted 5 lines
arch/x86/kernel/acpi/boot.c +2 -0
 		     DMI_MATCH(DMI_PRODUCT_NAME, "TravelMate 360"),
 		     },
 	 },
+	/*
+	 * Some MSI laptop BIOSes are broken - INT 15h code uses port

92h

Quoted 60 lines
Quoted 60 lines

to

arch/x86/kernel/acpi/boot.c static struct dmi_system_id __initdata acpi_dmi_table[] = {

Quoted 3 lines
arch/x86/kernel/acpi/boot.c +3 -0
+	 * enable A20 line but resume code assumes that KBC was used.
+	 * The laptop will not resume from S3 otherwise but powers off
+	 * after a while and then powers on again stuck with a blank

screen.

Quoted 51 lines
arch/x86/kernel/acpi/boot.c +49 -0
+	 */
+	{
+	 .callback = a20_enable_kbc,
+	 .ident = "MSI EX600 Laptop",
+	 .matches = {
+		     DMI_MATCH(DMI_SYS_VENDOR, "Micro-Star International"),
+		     DMI_MATCH(DMI_PRODUCT_NAME, "MSI Notebook EX600"),
+		     },
+	 },
+	{
+	 .callback = a20_enable_kbc,
+	 .ident = "MSI EX700 Laptop",
+	 .matches = {
+		     DMI_MATCH(DMI_SYS_VENDOR, "Micro-Star International"),
+		     DMI_MATCH(DMI_PRODUCT_NAME, "EX700"),
+		     },
+	 },
+	{
+	 .callback = a20_enable_kbc,
+	 .ident = "MSI GX700 Laptop",
+	 .matches = {
+		     DMI_MATCH(DMI_SYS_VENDOR, "Micro-Star International"),
+		     DMI_MATCH(DMI_PRODUCT_NAME, "GX700"),
+		     },
+	 },
+	{
+	 .callback = a20_enable_kbc,
+	 .ident = "MSI VR201 Laptop",
+	 .matches = {
+		     DMI_MATCH(DMI_SYS_VENDOR, "Micro-Star International"),
+		     DMI_MATCH(DMI_PRODUCT_NAME, "MSI Notebook VR201"),
+		     },
+	 },
+	{
+	 .callback = a20_enable_kbc,
+	 .ident = "MSI VR601 Laptop",
+	 .matches = {
+		     DMI_MATCH(DMI_SYS_VENDOR, "Micro-Star International"),
+		     DMI_MATCH(DMI_PRODUCT_NAME, "MSI Notebook VR601"),
+		     },
+	 },
+	{
+	 .callback = a20_enable_kbc,
+	 .ident = "MSI PR200 Laptop",
+	 .matches = {
+		     DMI_MATCH(DMI_SYS_VENDOR, "Micro-Star International"),
+		     DMI_MATCH(DMI_PRODUCT_NAME, "MSI Notebook PR200"),
+		     },
+	 },
 	{}
 };
Signature · 1 line
Sent from my mobile phone. Please excuse brevity and lack of formatting.
#5 lore raw
In reply to H. Peter Anvin
Quoted 1 line · On Wed, 24 Oct 2012 12:36:04 -0700 "H. Peter Anvin" <[email protected]> wrote:

Minor concern: it should do the wait for ready before sending each command.

Can we get a command line to do this quirk too - it strikes me that if the MSIs rely upon it then it may be something Windows always does so will be useful to try on other problem machines as an experiment.

#6 lore raw
Quoted 8 lines · Alan Cox
Quoted 1 line · On Wed, 24 Oct 2012 12:36:04 -0700 "H. Peter Anvin" <[email protected]> wrote:

Minor concern: it should do the wait for ready before sending each command.

Can we get a command line to do this quirk too - it strikes me that if the MSIs rely upon it then it may be something Windows always does so will be useful to try on other problem machines as an experiment.

I agree, one has to keep in mind the age-old question "how does Windows work?" since it surely has no such quirk. I'd say we're sometimes too quick to add these DMI quirks when a more general solution would be somehow figure out how the Linux behavior differs from what Windows is doing.

#7 lore raw

My guess is that Windows explicitly enables A20 on resume. We should do that too, really... with the current heavily unified realmode code it should be easy - let me hack up a patch in the morning.

Quoted 18 lines · Robert Hancock
Quoted 4 lines · Alan Cox
Quoted 1 line · On Wed, 24 Oct 2012 12:36:04 -0700 "H. Peter Anvin" <[email protected]> wrote:

Minor concern: it should do the wait for ready before sending each

command.

Quoted 2 lines

Can we get a command line to do this quirk too - it strikes me that

if

Quoted 2 lines

the MSIs rely upon it then it may be something Windows always does so will be useful to try on other problem machines as an experiment.

I agree, one has to keep in mind the age-old question "how does Windows

work?" since it surely has no such quirk. I'd say we're sometimes too quick to add these DMI quirks when a more general solution would be somehow figure out how the Linux behavior differs from what Windows is doing.

Signature · 1 line
Sent from my mobile phone. Please excuse brevity and lack of formatting.
#8 lore raw
Quoted 3 lines · H. Peter Anvin

My guess is that Windows explicitly enables A20 on resume. We should do that too, really... with the current heavily unified realmode code it should be easy - let me hack up a patch in the morning.

Neither s3_beep nor s3_leds (this patch:
https://lists.ubuntu.com/archives/kernel-team/2011-May/015621.html ) worked for me so I thing that BIOS breaks on resume before we can do anything.

Quoted 22 lines
Quoted 21 lines · Robert Hancock
Quoted 4 lines · Alan Cox

On Wed, 24 Oct 2012 12:36:04 -0700

Quoted 1 line · H. Peter Anvin

Minor concern: it should do the wait for ready before sending each

command.

Quoted 1 line

Can we get a command line to do this quirk too - it strikes me that

if

Quoted 2 lines

the MSIs rely upon it then it may be something Windows always does so will be useful to try on other problem machines as an experiment.

I agree, one has to keep in mind the age-old question "how does Windows

work?" since it surely has no such quirk. I'd say we're sometimes too quick to add these DMI quirks when a more general solution would be somehow figure out how the Linux behavior differs from what Windows is doing.

Signature · 1 line
Ondrej Zary