2012-10-25 08:18:13

by Ondrej Zary

[permalink] [raw]
Subject: Re: [PATCH v2] Enable A20 using KBC for some MSI laptops to fix S3 resume

On Wednesday 24 October 2012, H. Peter Anvin wrote:
> On 10/24/2012 02:16 PM, 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.
> >
> > 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.
>
> -hpa

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

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

--
Ondrej Zary


2012-10-25 19:00:46

by H. Peter Anvin

[permalink] [raw]
Subject: Re: [PATCH v2] Enable A20 using KBC for some MSI laptops to fix S3 resume

On 10/25/2012 01:17 AM, Ondrej Zary wrote:
> On Wednesday 24 October 2012, H. Peter Anvin wrote:
>> On 10/24/2012 02:16 PM, 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.
>>>
>>> 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.
>>
>> -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