This adds ACPI S3 (suspend to ram) resume capability in U-Boot. With S3 support within U-Boot, the board wakes up and resumes to OS very quickly.
This so far is enabled and tested on Intel MinnowMax board. Please check README.x86 for how to test it with a plain Linux kernel. Linux (w/ or w/o SeaBIOS) and Windows 10 (w/ SeaBIOS) were tested. This series is available for testing at u-boot-x86/s3-working. Changes in v2: - fixed several nits in CONFIG_HAVE_ACPI_RESUME Kconfig help text - return -EINVAL instead of -1 in acpi_sleep_from_pm1() - add a function comment block for acpi_sleep_from_pm1() - add a function comment block for acpi_ss_string() - use a string array for sleep state string - add a description for gd->arch.prev_sleep_state - change to use debug() in default_print_cpuinfo() - add brackets around the second x in RELOCATED(x) macro - word-wrap to use more columns - change to use present tense in the comments - add a function comment block for acpi_find_wakeup_vector() - add a function comment block for fsp_save_s3_stack() - check error on calling rtc_write32() - add some comments about why calling cmos_read32() instead of rtc_ - new patch "Do not clear high table area for S3" - drop patch "x86: fsp: Mark the first 64K low memory as reserved" as it causes boot failure on GRUB - add a function comment block for enter_acpi_mode() - add a function comment block for acpi_find_fadt() - new patch "Fix Windows S3 resume failure" - add some notes about testing S3 resume on Windows - rebase on u-boot/master Bin Meng (22): x86: acpi: Add Kconfig option and header file for ACPI resume x86: baytrail: acpi: Add APIs for determining/clearing sleep state x86: Add post codes for OS resume x86: fsp: acpi: Pass different boot mode to FSP init x86: Store and display previous sleep state x86: baytrail: Conditionally report S3 in the ACPI table x86: fsp: Mark memory used by U-Boot as reserved in the E820 table for S3 x86: acpi: Add wake up assembly stub x86: acpi: Add one API to find OS wakeup vector x86: acpi: Resume OS if resume vector is found x86: Add an early CMOS access library x86: fsp: Save stack address to CMOS for next S3 boot x86: Do not clear high table area for S3 x86: Adjust board_final_cleanup() order x86: apci: Change PM1_CNT register access to RMW x86: acpi: Make enter_acpi_mode() public x86: acpi: Refactor acpi_resume() x86: acpi: Turn on ACPI mode for S3 x86: pci: Allow conditionally run VGA rom in S3 x86: acpi: Fix Windows S3 resume failure x86: minnowmax: Enable ACPI S3 resume x86: Document ACPI S3 support arch/x86/Kconfig | 32 +++++ arch/x86/cpu/Makefile | 1 + arch/x86/cpu/baytrail/acpi.c | 47 ++++++++ arch/x86/cpu/cpu.c | 30 ++++- arch/x86/cpu/wakeup.S | 78 ++++++++++++ arch/x86/include/asm/acpi_s3.h | 131 +++++++++++++++++++++ arch/x86/include/asm/acpi_table.h | 28 +++++ .../include/asm/arch-baytrail/acpi/sleepstates.asl | 2 + arch/x86/include/asm/arch-baytrail/iomap.h | 24 ++++ arch/x86/include/asm/cmos_layout.h | 31 +++++ arch/x86/include/asm/early_cmos.h | 43 +++++++ arch/x86/include/asm/global_data.h | 4 + arch/x86/include/asm/post.h | 2 + arch/x86/include/asm/tables.h | 1 + arch/x86/include/asm/u-boot-x86.h | 13 ++ arch/x86/lib/Makefile | 2 + arch/x86/lib/acpi_s3.c | 82 +++++++++++++ arch/x86/lib/acpi_table.c | 84 ++++++++++++- arch/x86/lib/coreboot_table.c | 7 +- arch/x86/lib/early_cmos.c | 51 ++++++++ arch/x86/lib/fsp/fsp_common.c | 63 +++++++++- arch/x86/lib/fsp/fsp_dram.c | 12 ++ configs/minnowmax_defconfig | 1 + doc/README.x86 | 24 +++- drivers/pci/pci_rom.c | 14 +++ 25 files changed, 795 insertions(+), 12 deletions(-) create mode 100644 arch/x86/cpu/wakeup.S create mode 100644 arch/x86/include/asm/acpi_s3.h create mode 100644 arch/x86/include/asm/cmos_layout.h create mode 100644 arch/x86/include/asm/early_cmos.h create mode 100644 arch/x86/lib/acpi_s3.c create mode 100644 arch/x86/lib/early_cmos.c -- 2.9.2 _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot