[U-Boot] [PATCH] x86: baytrail: acpi: Add full reset bit to the reset register value in FADT

It was noticed a few times, that the reboot from Linux (reboot command) is different from the reboot (reset command) under U-Boot. The U-Boot version does seem to reset the board more deeply (PCI cards etc) than the Linux reboot.
This is actually caused by missing full reset bit in the reset register value in the ACPI FADT table.
Reported-by: Stefan Roese sr@denx.de Signed-off-by: Bin Meng bmeng.cn@gmail.com ---
arch/x86/cpu/baytrail/acpi.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/arch/x86/cpu/baytrail/acpi.c b/arch/x86/cpu/baytrail/acpi.c index cbefdf8..7aac634 100644 --- a/arch/x86/cpu/baytrail/acpi.c +++ b/arch/x86/cpu/baytrail/acpi.c @@ -73,7 +73,7 @@ void acpi_create_fadt(struct acpi_fadt *fadt, struct acpi_facs *facs, fadt->reset_reg.access_size = ACPI_ACCESS_SIZE_BYTE_ACCESS; fadt->reset_reg.addrl = IO_PORT_RESET; fadt->reset_reg.addrh = 0; - fadt->reset_value = SYS_RST | RST_CPU; + fadt->reset_value = SYS_RST | RST_CPU | FULL_RST;
fadt->x_firmware_ctl_l = (u32)facs; fadt->x_firmware_ctl_h = 0;

On 29.08.2017 07:09, Bin Meng wrote:
It was noticed a few times, that the reboot from Linux (reboot command) is different from the reboot (reset command) under U-Boot. The U-Boot version does seem to reset the board more deeply (PCI cards etc) than the Linux reboot.
This is actually caused by missing full reset bit in the reset register value in the ACPI FADT table.
Reported-by: Stefan Roese sr@denx.de Signed-off-by: Bin Meng bmeng.cn@gmail.com
arch/x86/cpu/baytrail/acpi.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/arch/x86/cpu/baytrail/acpi.c b/arch/x86/cpu/baytrail/acpi.c index cbefdf8..7aac634 100644 --- a/arch/x86/cpu/baytrail/acpi.c +++ b/arch/x86/cpu/baytrail/acpi.c @@ -73,7 +73,7 @@ void acpi_create_fadt(struct acpi_fadt *fadt, struct acpi_facs *facs, fadt->reset_reg.access_size = ACPI_ACCESS_SIZE_BYTE_ACCESS; fadt->reset_reg.addrl = IO_PORT_RESET; fadt->reset_reg.addrh = 0;
- fadt->reset_value = SYS_RST | RST_CPU;
fadt->reset_value = SYS_RST | RST_CPU | FULL_RST;
fadt->x_firmware_ctl_l = (u32)facs; fadt->x_firmware_ctl_h = 0;
Very nice Bin, this does exactly what I was missing. :)
Tested-by: Stefan Roese sr@denx.de
Thanks, Stefan

On Tue, Aug 29, 2017 at 3:49 PM, Stefan Roese sr@denx.de wrote:
On 29.08.2017 07:09, Bin Meng wrote:
It was noticed a few times, that the reboot from Linux (reboot command) is different from the reboot (reset command) under U-Boot. The U-Boot version does seem to reset the board more deeply (PCI cards etc) than the Linux reboot.
This is actually caused by missing full reset bit in the reset register value in the ACPI FADT table.
Reported-by: Stefan Roese sr@denx.de Signed-off-by: Bin Meng bmeng.cn@gmail.com
arch/x86/cpu/baytrail/acpi.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/arch/x86/cpu/baytrail/acpi.c b/arch/x86/cpu/baytrail/acpi.c index cbefdf8..7aac634 100644 --- a/arch/x86/cpu/baytrail/acpi.c +++ b/arch/x86/cpu/baytrail/acpi.c @@ -73,7 +73,7 @@ void acpi_create_fadt(struct acpi_fadt *fadt, struct acpi_facs *facs, fadt->reset_reg.access_size = ACPI_ACCESS_SIZE_BYTE_ACCESS; fadt->reset_reg.addrl = IO_PORT_RESET; fadt->reset_reg.addrh = 0;
fadt->reset_value = SYS_RST | RST_CPU;
fadt->reset_value = SYS_RST | RST_CPU | FULL_RST; fadt->x_firmware_ctl_l = (u32)facs; fadt->x_firmware_ctl_h = 0;
Very nice Bin, this does exactly what I was missing. :)
Tested-by: Stefan Roese sr@denx.de
applied to u-boot-x86, thanks!
participants (2)
-
Bin Meng
-
Stefan Roese