[PATCH v2] acpi: reboot: log reset parameters
[email protected] Fri, 31 Jul 2026 20:17:39 -0700
| Newsgroups | gmane.comp.emulators.xen.devel |
|---|---|
| Message-ID | <[email protected]> |
From: Denis Mukhin <[email protected]> Xen does not provide much details for system reset debugging in case system reset happens via ACPI subsystem. Log reset I/O address and reset value. While here, add the missing default case, add breaks between case statements and drop full stops in the loglines. Signed-off-by: Denis Mukhin <[email protected]> --- - v1: https://lore.kernel.org/xen-devel/[email protected]/ - CI: https://gitlab.com/xen-project/people/dmukhin/xen/-/pipelines/2723268852 Changes since v1: - removed wrong ASSERT_UNREACHABLE() - switched formatting to %#x - fixed indentation --- xen/drivers/acpi/reboot.c | 28 +++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/xen/drivers/acpi/reboot.c b/xen/drivers/acpi/reboot.c index f6345be8749f..dc5671f9b42a 100644 --- a/xen/drivers/acpi/reboot.c +++ b/xen/drivers/acpi/reboot.c @@ -6,6 +6,7 @@ void acpi_reboot(void) { struct acpi_generic_address *rr; u8 reset_value; + pci_sbdf_t sbdf; rr = &acpi_gbl_FADT.reset_register; @@ -21,17 +22,30 @@ void acpi_reboot(void) * on a device on bus 0. */ switch (rr->space_id) { case ACPI_ADR_SPACE_PCI_CONFIG: - printk("Resetting with ACPI PCI RESET_REG.\n"); + sbdf = PCI_SBDF(0, 0, rr->address >> 32, rr->address >> 16); + printk("Resetting with ACPI PCI %pp RESET_REG at %#lx (%#x)\n", + &sbdf, rr->address & 0xff, reset_value); /* Write the value that resets us. */ - pci_conf_write8(PCI_SBDF(0, 0, rr->address >> 32, - rr->address >> 16), - (rr->address & 255), - reset_value); + pci_conf_write8(sbdf, rr->address & 0xff, reset_value); break; + case ACPI_ADR_SPACE_SYSTEM_MEMORY: - case ACPI_ADR_SPACE_SYSTEM_IO: - printk("Resetting with ACPI MEMORY or I/O RESET_REG.\n"); + printk("Resetting with ACPI MEMORY at %#lx (%#x)\n", + rr->address, reset_value); acpi_hw_low_level_write(8, reset_value, rr); break; + + case ACPI_ADR_SPACE_SYSTEM_IO: + printk("Resetting with I/O RESET_REG at %#lx (%#x)\n", + rr->address, reset_value); + acpi_hw_low_level_write(8, reset_value, rr); + break; + + default: + /* Fallback to alternative reboot methods */ + printk(XENLOG_WARNING + "Resetting with ACPI method failed: bad ADR %#x\n", + rr->space_id); + break; } } -- 2.54.0