Yakui, I think your patch below from http://bugzilla.kernel.org/show_bug.cgi?id=11481 is close, but not quite right. "reboot=a" should not be necessary, as reboot_type = BOOT_ACPI by default, yes? Re: DMI to ignore a missing (acpi_gbl_FADT.flags & ACPI_FADT_RESET_REGISTER).... If we need DMI, it should be checked at _boot_ time, not at _reboot_ time, and the table should be marked _initdata. But the real question is if we should be checking this bit at all. The fact that we are adding DMI to ignore it suggest that we should think about ignoring it by default, and instead perhaps sanity checking acpi_gbl_FADT.reset_register and basing our decision to use it on that? thanks, -Len ----------- Subject: ACPI: Add the DMI check table to support ACPI reboot From: Zhao Yakui <yakui.zhao@xxxxxxxxx> On some broken laptops the system can't be rebooted after it is resumed from S3. The system can be rebooted by writting RESET_VALUE to RESET_REGISTER although the ACPI_FADT_RESET_REGISTER bit in the FADT flag indicates that ACPI reboot mechanism is not supported. Maybe it is appropriate that the acpi_reboot DMI checkt table is added so that the ACPI reboot is used forcibly on some broken laptops in case of adding the boot option of "reboot=a". http://bugzilla.kernel.org/show_bug.cgi?id=7299 http://bugzilla.kernel.org/show_bug.cgi?id=11481 Signed-off-by: Zhao Yakui <yakui.zhao@xxxxxxxxx> --- drivers/acpi/reboot.c | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) Index: linux-2.6/drivers/acpi/reboot.c =================================================================== --- linux-2.6.orig/drivers/acpi/reboot.c +++ linux-2.6/drivers/acpi/reboot.c @@ -3,6 +3,22 @@ #include <linux/acpi.h> #include <acpi/reboot.h> +const static struct dmi_system_id reboot_dmi_table[] = { + { + NULL, "Asus M3N board", { + DMI_MATCH(DMI_BIOS_VERSION, "0207"), + DMI_MATCH(DMI_BIOS_DATE, "03/16/2004"), + DMI_MATCH(DMI_PRODUCT_NAME, "M3N"), + DMI_MATCH(DMI_BOARD_NAME, "M3N") }, NULL}, + { + NULL, "Asus M6NE board", { + DMI_MATCH(DMI_BIOS_VERSION, "0208"), + DMI_MATCH(DMI_BIOS_DATE, "03/28/2005"), + DMI_MATCH(DMI_PRODUCT_NAME, "M6Ne"), + DMI_MATCH(DMI_BOARD_NAME, "M6Ne") }, NULL}, + {}, +}; + void acpi_reboot(void) { struct acpi_generic_address *rr; @@ -16,7 +32,14 @@ void acpi_reboot(void) rr = &acpi_gbl_FADT.reset_register; /* Is the reset register supported? */ - if (!(acpi_gbl_FADT.flags & ACPI_FADT_RESET_REGISTER) || + if (dmi_check_system(reboot_dmi_table)) { + /* + * If the laptop falls into the DMI check table, the + * ACPI reboot mechanism will be used forcibly regardless of + * the ACPI_FADT_RESET_REGISTER bit flag. + */ + printk(KERN_DEBUG "ACPI reboot mechanism will be used\n"); + } else if (!(acpi_gbl_FADT.flags & ACPI_FADT_RESET_REGISTER) || rr->bit_width != 8 || rr->bit_offset != 0) return; -- To unsubscribe from this list: send the line "unsubscribe linux-acpi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html