Skip to contentSkip to conversation

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

PATCH Ondrej Zary 2 participants 2 messages Oct 25, 2012 2 messages not in the archive ACPI

lore
Share & tools
lore
#2 lore raw
In reply to a message not in the archive
Quoted 13 lines · H. Peter Anvin
Quoted 12 lines · Ondrej Zary

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.

Also add kernel parameter to easily activate this quirk on any system.

Only compile tested. The original patch was tested with EX600 and PR200.

Quoted 7 lines
Quoted 1 line

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

Are we guaranteed that this executes *before* the keyboard driver initializes? If not, this needs to use the i8042 interface in the input subsystem or at least acquire i8042_lock.

-hpa

The code is called in:
start_kernel()->setup_arch()->acpi_boot_table_init()

I think that it's before any drivers are initialized.

Signature · 1 line
Ondrej Zary
#3 lore raw
Quoted 20 lines · Ondrej Zary
Quoted 19 lines · H. Peter Anvin
Quoted 5 lines · Ondrej Zary

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.

Also add kernel parameter to easily activate this quirk on any system.

Only compile tested. The original patch was tested with EX600 and PR200.

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

Are we guaranteed that this executes *before* the keyboard driver initializes? If not, this needs to use the i8042 interface in the input subsystem or at least acquire i8042_lock.

Quoted 7 lines
Quoted 1 line

-hpa

The code is called in:
start_kernel()->setup_arch()->acpi_boot_table_init()

I think that it's before any drivers are initialized.

Yes, that is very early indeed. Could you please, however, put in a comment that this is safe specifically because it is invoked long before the i8042 driver can possibly initialize?

-hpa