[U-Boot] [PATCH 02/22] x86: acpi: Add Kconfig option and header file for ACPI resume

Simon Glass sjg at chromium.org
Fri Mar 17 03:26:38 UTC 2017


Hi Bin,

On 16 March 2017 at 08:26, Bin Meng <bmeng.cn at gmail.com> wrote:
> This introduces a Kconfig option for ACPI S3 resume, as well as a
> header file to include anything related to ACPI S3 resume.
>
> Signed-off-by: Bin Meng <bmeng.cn at gmail.com>
> ---
>
>  arch/x86/Kconfig               | 12 +++++++++
>  arch/x86/include/asm/acpi_s3.h | 58 ++++++++++++++++++++++++++++++++++++++++++
>  2 files changed, 70 insertions(+)
>  create mode 100644 arch/x86/include/asm/acpi_s3.h

Reviewed-by: Simon Glass <sjg at chromium.org>

A few nits below

>
> diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
> index dfdd756..7ea9148 100644
> --- a/arch/x86/Kconfig
> +++ b/arch/x86/Kconfig
> @@ -571,6 +571,18 @@ config GENERATE_ACPI_TABLE
>
>  endmenu
>
> +config HAVE_ACPI_RESUME
> +       bool "Enable ACPI S3 resume"
> +       help
> +         Select this to enable ACPI S3 resume. S3 is an ACPI defined sleeping

ACPI-defined

> +         state where all system context is lost except system memory. U-Boot
> +         is responsible for restore the machine state as it is before sleep.

restoring

as it was before

> +         It needs restore the memory controller, not overwriting memory which

s/not/without/ ?

> +         is not marked as reserved. For the peripherals which lose their
> +         registers, U-Boot needs to write the original value. When everything
> +         is done, U-Boot needs to find out the wakeup vector provided by OSes
> +         and jump there.
> +
>  config MAX_PIRQ_LINKS
>         int
>         default 8
> diff --git a/arch/x86/include/asm/acpi_s3.h b/arch/x86/include/asm/acpi_s3.h
> new file mode 100644
> index 0000000..6fbfc3e
> --- /dev/null
> +++ b/arch/x86/include/asm/acpi_s3.h
> @@ -0,0 +1,58 @@
> +/*
> + * Copyright (C) 2017, Bin Meng <bmeng.cn at gmail.com>
> + *
> + * SPDX-License-Identifier:    GPL-2.0+
> + */
> +
> +#ifndef __ASM_ACPI_S3_H__
> +#define __ASM_ACPI_S3_H__
> +
> +/* PM1_STATUS register */
> +#define WAK_STS                (1 << 15)
> +#define PCIEXPWAK_STS  (1 << 14)
> +#define RTC_STS                (1 << 10)
> +#define SLPBTN_STS     (1 << 9)
> +#define PWRBTN_STS     (1 << 8)
> +#define GBL_STS                (1 << 5)
> +#define BM_STS         (1 << 4)
> +#define TMR_STS                (1 << 0)
> +
> +/* PM1_CNT register */
> +#define SLP_EN         (1 << 13)
> +#define SLP_TYP_SHIFT  10
> +#define SLP_TYP                (7 << SLP_TYP_SHIFT)
> +#define SLP_TYP_S0     0
> +#define SLP_TYP_S1     1
> +#define SLP_TYP_S3     5
> +#define SLP_TYP_S4     6
> +#define SLP_TYP_S5     7
> +
> +enum acpi_sleep_state {
> +       ACPI_S0,
> +       ACPI_S1,
> +       ACPI_S2,
> +       ACPI_S3,
> +       ACPI_S4,
> +       ACPI_S5,
> +};
> +
> +/* Given the provided PM1 control register return the ACPI sleep type */

@return ...

Does this need to be inline?

> +static inline enum acpi_sleep_state acpi_sleep_from_pm1(u32 pm1_cnt)
> +{
> +       switch ((pm1_cnt & SLP_TYP) >> SLP_TYP_SHIFT) {
> +       case SLP_TYP_S0:
> +               return ACPI_S0;
> +       case SLP_TYP_S1:
> +               return ACPI_S1;
> +       case SLP_TYP_S3:
> +               return ACPI_S3;
> +       case SLP_TYP_S4:
> +               return ACPI_S4;
> +       case SLP_TYP_S5:
> +               return ACPI_S5;
> +       }
> +
> +       return -1;

-EINVAL ?

> +}
> +
> +#endif /* __ASM_ACPI_S3_H__ */
> --
> 2.9.2
>

Regards,
Simon


More information about the U-Boot mailing list