Message ID | 201212112129.13248.linux@rainbow-software.org (mailing list archive) |
---|---|
State | Superseded, archived |
Headers | show |
On 12/11/2012 12:29 PM, Ondrej Zary wrote: > > Something like this? (It works.) > Something like that. We need to make sure we send the proper sequence, though, or it might break some SMM firmware... > diff --git a/drivers/input/serio/i8042-x86ia64io.h b/drivers/input/serio/i8042-x86ia64io.h > index d6cc77a..0807ac7 100644 > --- a/drivers/input/serio/i8042-x86ia64io.h > +++ b/drivers/input/serio/i8042-x86ia64io.h > @@ -921,6 +921,7 @@ static int __init i8042_platform_init(void) > int retval; > > #ifdef CONFIG_X86 > + u8 a20_on = 0xdf; > /* Just return if pre-detection shows no i8042 controller exist */ > if (!x86_platform.i8042_detect()) > return -ENODEV; > @@ -960,6 +961,13 @@ static int __init i8042_platform_init(void) > > if (dmi_check_system(i8042_dmi_dritek_table)) > i8042_dritek = true; > + > + /* > + * A20 was already enabled during early kernel init. But some buggy > + * BIOSes (in MSI Laptops) require A20 to be enabled using 8042 to > + * resume from S3. So we do it here and hope that nothing breaks. > + */ > + i8042_command(&a20_on, 0x10d1); > #endif /* CONFIG_X86 */ > > return retval; > -- To unsubscribe from this list: send the line "unsubscribe linux-acpi" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Tuesday 11 December 2012 21:36:46 H. Peter Anvin wrote: > On 12/11/2012 12:29 PM, Ondrej Zary wrote: > > Something like this? (It works.) > > Something like that. We need to make sure we send the proper sequence, > though, or it might break some SMM firmware... Could you please create proper patch? You're the x86 expert (and I'm not). I've read that 0xd1 command with 0xdf data is often used to enable A20. But I don't know when this must be done or what else needs to be done for the SMM to not break. > > diff --git a/drivers/input/serio/i8042-x86ia64io.h > > b/drivers/input/serio/i8042-x86ia64io.h index d6cc77a..0807ac7 100644 > > --- a/drivers/input/serio/i8042-x86ia64io.h > > +++ b/drivers/input/serio/i8042-x86ia64io.h > > @@ -921,6 +921,7 @@ static int __init i8042_platform_init(void) > > int retval; > > > > #ifdef CONFIG_X86 > > + u8 a20_on = 0xdf; > > /* Just return if pre-detection shows no i8042 controller exist */ > > if (!x86_platform.i8042_detect()) > > return -ENODEV; > > @@ -960,6 +961,13 @@ static int __init i8042_platform_init(void) > > > > if (dmi_check_system(i8042_dmi_dritek_table)) > > i8042_dritek = true; > > + > > + /* > > + * A20 was already enabled during early kernel init. But some buggy > > + * BIOSes (in MSI Laptops) require A20 to be enabled using 8042 to > > + * resume from S3. So we do it here and hope that nothing breaks. > > + */ > > + i8042_command(&a20_on, 0x10d1); > > #endif /* CONFIG_X86 */ > > > > return retval;
On 12/11/2012 12:50 PM, Ondrej Zary wrote: > On Tuesday 11 December 2012 21:36:46 H. Peter Anvin wrote: >> On 12/11/2012 12:29 PM, Ondrej Zary wrote: >>> Something like this? (It works.) >> >> Something like that. We need to make sure we send the proper sequence, >> though, or it might break some SMM firmware... > > Could you please create proper patch? You're the x86 expert (and I'm not). > > I've read that 0xd1 command with 0xdf data is often used to enable A20. But I > don't know when this must be done or what else needs to be done for the SMM > to not break. > You need to send an FF dummy command afterwards, that's all.
diff --git a/drivers/input/serio/i8042-x86ia64io.h b/drivers/input/serio/i8042-x86ia64io.h index d6cc77a..0807ac7 100644 --- a/drivers/input/serio/i8042-x86ia64io.h +++ b/drivers/input/serio/i8042-x86ia64io.h @@ -921,6 +921,7 @@ static int __init i8042_platform_init(void) int retval; #ifdef CONFIG_X86 + u8 a20_on = 0xdf; /* Just return if pre-detection shows no i8042 controller exist */ if (!x86_platform.i8042_detect()) return -ENODEV; @@ -960,6 +961,13 @@ static int __init i8042_platform_init(void) if (dmi_check_system(i8042_dmi_dritek_table)) i8042_dritek = true; + + /* + * A20 was already enabled during early kernel init. But some buggy + * BIOSes (in MSI Laptops) require A20 to be enabled using 8042 to + * resume from S3. So we do it here and hope that nothing breaks. + */ + i8042_command(&a20_on, 0x10d1); #endif /* CONFIG_X86 */ return retval;