| From 20f0800c6069a1428fabc81b18d86938327cdaef Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Thu, 6 Feb 2020 16:58:45 +0100 |
| Subject: ACPI: watchdog: Allow disabling WDAT at boot |
| |
| From: Jean Delvare <jdelvare@suse.de> |
| |
| [ Upstream commit 3f9e12e0df012c4a9a7fd7eb0d3ae69b459d6b2c ] |
| |
| In case the WDAT interface is broken, give the user an option to |
| ignore it to let a native driver bind to the watchdog device instead. |
| |
| Signed-off-by: Jean Delvare <jdelvare@suse.de> |
| Acked-by: Mika Westerberg <mika.westerberg@linux.intel.com> |
| Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| Documentation/admin-guide/kernel-parameters.txt | 4 ++++ |
| drivers/acpi/acpi_watchdog.c | 12 +++++++++++- |
| 2 files changed, 15 insertions(+), 1 deletion(-) |
| |
| diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt |
| index 5594c8bf1dcd4..b5c933fa971f3 100644 |
| --- a/Documentation/admin-guide/kernel-parameters.txt |
| +++ b/Documentation/admin-guide/kernel-parameters.txt |
| @@ -136,6 +136,10 @@ |
| dynamic table installation which will install SSDT |
| tables to /sys/firmware/acpi/tables/dynamic. |
| |
| + acpi_no_watchdog [HW,ACPI,WDT] |
| + Ignore the ACPI-based watchdog interface (WDAT) and let |
| + a native driver control the watchdog device instead. |
| + |
| acpi_rsdp= [ACPI,EFI,KEXEC] |
| Pass the RSDP address to the kernel, mostly used |
| on machines running EFI runtime service to boot the |
| diff --git a/drivers/acpi/acpi_watchdog.c b/drivers/acpi/acpi_watchdog.c |
| index d827a4a3e9460..6e9ec6e3fe47d 100644 |
| --- a/drivers/acpi/acpi_watchdog.c |
| +++ b/drivers/acpi/acpi_watchdog.c |
| @@ -55,12 +55,14 @@ static bool acpi_watchdog_uses_rtc(const struct acpi_table_wdat *wdat) |
| } |
| #endif |
| |
| +static bool acpi_no_watchdog; |
| + |
| static const struct acpi_table_wdat *acpi_watchdog_get_wdat(void) |
| { |
| const struct acpi_table_wdat *wdat = NULL; |
| acpi_status status; |
| |
| - if (acpi_disabled) |
| + if (acpi_disabled || acpi_no_watchdog) |
| return NULL; |
| |
| status = acpi_get_table(ACPI_SIG_WDAT, 0, |
| @@ -88,6 +90,14 @@ bool acpi_has_watchdog(void) |
| } |
| EXPORT_SYMBOL_GPL(acpi_has_watchdog); |
| |
| +/* ACPI watchdog can be disabled on boot command line */ |
| +static int __init disable_acpi_watchdog(char *str) |
| +{ |
| + acpi_no_watchdog = true; |
| + return 1; |
| +} |
| +__setup("acpi_no_watchdog", disable_acpi_watchdog); |
| + |
| void __init acpi_watchdog_init(void) |
| { |
| const struct acpi_wdat_entry *entries; |
| -- |
| 2.20.1 |
| |