[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-devel] RE: [PATCH 2 of 2] Add configuration options to selectively disable S3 and S4 ACPI power states



Sorry, this has one line of extraneous noise in. I will resend.

  Paul

> -----Original Message-----
> From: Paul Durrant [mailto:paul.durrant@xxxxxxxxxx]
> Sent: 18 November 2011 10:29
> To: xen-devel@xxxxxxxxxxxxxxxxxxx
> Cc: Paul Durrant
> Subject: [PATCH 2 of 2] Add configuration options to selectively
> disable S3 and S4 ACPI power states
> 
> # HG changeset patch
> # User Paul Durrant <paul.durrant@xxxxxxxxxx> # Date 1321612133 0 #
> Node ID 66bdcb90560f1b996fa34c549834b479a5157cd3
> # Parent  d22ef0f60497772ac17b086e7f589434a2344fe8
> Add configuration options to selectively disable S3 and S4 ACPI
> power states.
> 
> Introduce acpi_s3 and acpi_s4 configuration options (default=1). The
> S3 and S4 packages are moved into separate SSDTs and their inclusion
> is controlled by the new configuration options.
> 
> Signed-off-by: Paul Durrant <paul.durrant@xxxxxxxxxx>
> 
> diff -r d22ef0f60497 -r 66bdcb90560f
> tools/firmware/hvmloader/acpi/Makefile
> --- a/tools/firmware/hvmloader/acpi/Makefile  Fri Nov 18 10:28:52
> 2011 +0000
> +++ b/tools/firmware/hvmloader/acpi/Makefile  Fri Nov 18 10:28:53
> 2011 +0000
> @@ -26,7 +26,7 @@ CFLAGS += $(CFLAGS_xeninclude)  vpath iasl $(PATH)
>  all: acpi.a
> 
> -ssdt_pm.h ssdt_tpm.h: %.h: %.asl iasl
> +ssdt_s3.h ssdt_s4.h ssdt_pm.h ssdt_tpm.h: %.h: %.asl iasl
>       iasl -vs -p $* -tc $<
>       sed -e 's/AmlCode/$*/g' $*.hex >$@
>       rm -f $*.hex $*.aml
> @@ -57,7 +57,7 @@ iasl:
>       @echo
>       @exit 1
> 
> -build.o: ssdt_pm.h ssdt_tpm.h
> +build.o: ssdt_s3.h ssdt_s4.h ssdt_pm.h ssdt_tpm.h
> 
>  acpi.a: $(OBJS)
>       $(AR) rc $@ $(OBJS)
> diff -r d22ef0f60497 -r 66bdcb90560f
> tools/firmware/hvmloader/acpi/acpi2_0.h
> --- a/tools/firmware/hvmloader/acpi/acpi2_0.h Fri Nov 18 10:28:52
> 2011 +0000
> +++ b/tools/firmware/hvmloader/acpi/acpi2_0.h Fri Nov 18 10:28:53
> 2011 +0000
> @@ -396,6 +396,8 @@ struct acpi_config {
>      int dsdt_anycpu_len;
>      unsigned char *dsdt_15cpu;
>      int dsdt_15cpu_len;
> +    int ssdt_s3_enabled;
> +    int ssdt_s4_enabled;
>  };
> 
>  void acpi_build_tables(struct acpi_config *config, unsigned int
> physical); diff -r d22ef0f60497 -r 66bdcb90560f
> tools/firmware/hvmloader/acpi/build.c
> --- a/tools/firmware/hvmloader/acpi/build.c   Fri Nov 18 10:28:52
> 2011 +0000
> +++ b/tools/firmware/hvmloader/acpi/build.c   Fri Nov 18 10:28:53
> 2011 +0000
> @@ -17,6 +17,9 @@
>   */
> 
>  #include "acpi2_0.h"
> +#include "ssdt_s3.h"
> +#include "ssdt_s4.h"
> +#include "ssdt_s5.h"
>  #include "ssdt_tpm.h"
>  #include "ssdt_pm.h"
>  #include "../config.h"
> @@ -196,7 +199,8 @@ static struct acpi_20_waet *construct_wa  }
> 
>  static int construct_secondary_tables(unsigned long *table_ptrs,
> -                                      struct acpi_info *info)
> +                                      struct acpi_info *info,
> +                                      struct acpi_config *config)
>  {
>      int nr_tables = 0;
>      struct acpi_20_madt *madt;
> @@ -235,6 +239,22 @@ static int construct_secondary_tables(un
>          table_ptrs[nr_tables++] = (unsigned long)ssdt;
>      }
> 
> +    if ( config->ssdt_s3_enabled )
> +    {
> +        ssdt = mem_alloc(sizeof(ssdt_s3), 16);
> +        if (!ssdt) return -1;
> +        memcpy(ssdt, ssdt_s3, sizeof(ssdt_s3));
> +        table_ptrs[nr_tables++] = (unsigned long)ssdt;
> +    }
> +
> +    if ( config->ssdt_s4_enabled )
> +    {
> +        ssdt = mem_alloc(sizeof(ssdt_s4), 16);
> +        if (!ssdt) return -1;
> +        memcpy(ssdt, ssdt_s4, sizeof(ssdt_s4));
> +        table_ptrs[nr_tables++] = (unsigned long)ssdt;
> +    }
> +
>      /* TPM TCPA and SSDT. */
>      tis_hdr = (uint16_t *)0xFED40F00;
>      if ( (tis_hdr[0] == tis_signature[0]) && @@ -353,7 +373,8 @@
> void acpi_build_tables(struct acpi_confi
>                   offsetof(struct acpi_header, checksum),
>                   sizeof(struct acpi_20_fadt));
> 
> -    nr_secondaries = construct_secondary_tables(secondary_tables,
> acpi_info);
> +    nr_secondaries = construct_secondary_tables(secondary_tables,
> acpi_info,
> +                                                config);
>      if ( nr_secondaries < 0 )
>          goto oom;
> 
> diff -r d22ef0f60497 -r 66bdcb90560f
> tools/firmware/hvmloader/acpi/dsdt.asl
> --- a/tools/firmware/hvmloader/acpi/dsdt.asl  Fri Nov 18 10:28:52
> 2011 +0000
> +++ b/tools/firmware/hvmloader/acpi/dsdt.asl  Fri Nov 18 10:28:53
> 2011 +0000
> @@ -27,24 +27,7 @@ DefinitionBlock ("DSDT.aml", "DSDT", 2,
>      Name (\APCL, 0x00010000)
>      Name (\PUID, 0x00)
> 
> -    /*
> -     * S3 (suspend-to-ram), S4 (suspend-to-disc) and S5 (power-off)
> type codes:
> -     * must match piix4 emulation.
> -     */
> -    Name (\_S3, Package (0x04)
> -    {
> -        0x01,  /* PM1a_CNT.SLP_TYP */
> -        0x01,  /* PM1b_CNT.SLP_TYP */
> -        0x0,   /* reserved */
> -        0x0    /* reserved */
> -    })
> -    Name (\_S4, Package (0x04)
> -    {
> -        0x00,  /* PM1a_CNT.SLP_TYP */
> -        0x00,  /* PM1b_CNT.SLP_TYP */
> -        0x00,  /* reserved */
> -        0x00   /* reserved */
> -    })
> +    /* _S3 and _S4 are in separate SSDTs */
>      Name (\_S5, Package (0x04)
>      {
>          0x00,  /* PM1a_CNT.SLP_TYP */
> diff -r d22ef0f60497 -r 66bdcb90560f
> tools/firmware/hvmloader/acpi/ssdt_s3.asl
> --- /dev/null Thu Jan 01 00:00:00 1970 +0000
> +++ b/tools/firmware/hvmloader/acpi/ssdt_s3.asl       Fri Nov 18 10:28:53
> 2011 +0000
> @@ -0,0 +1,32 @@
> +/*
> + * ssdt_s3.asl
> + *
> + * Copyright (c) 2011  Citrix Systems, Inc.
> + *
> + * This program is free software; you can redistribute it and/or
> modify
> + * it under the terms of the GNU General Public License as
> published by
> + * the Free Software Foundation; either version 2 of the License,
> or
> + * (at your option) any later version.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> + * GNU General Public License for more details.
> + *
> + * You should have received a copy of the GNU General Public
> License
> + * along with this program; if not, write to the Free Software
> + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-
> 1307
> +USA  */
> +
> +DefinitionBlock ("SSDT_S3.aml", "SSDT", 2, "Xen", "HVM", 0) {
> +    /* Must match piix emulation */
> +    Name (\_S3, Package (0x04)
> +    {
> +        0x01,  /* PM1a_CNT.SLP_TYP */
> +        0x01,  /* PM1b_CNT.SLP_TYP */
> +        0x0,   /* reserved */
> +        0x0    /* reserved */
> +    })
> +}
> +
> diff -r d22ef0f60497 -r 66bdcb90560f
> tools/firmware/hvmloader/acpi/ssdt_s4.asl
> --- /dev/null Thu Jan 01 00:00:00 1970 +0000
> +++ b/tools/firmware/hvmloader/acpi/ssdt_s4.asl       Fri Nov 18 10:28:53
> 2011 +0000
> @@ -0,0 +1,32 @@
> +/*
> + * ssdt_s4.asl
> + *
> + * Copyright (c) 2011  Citrix Systems, Inc.
> + *
> + * This program is free software; you can redistribute it and/or
> modify
> + * it under the terms of the GNU General Public License as
> published by
> + * the Free Software Foundation; either version 2 of the License,
> or
> + * (at your option) any later version.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> + * GNU General Public License for more details.
> + *
> + * You should have received a copy of the GNU General Public
> License
> + * along with this program; if not, write to the Free Software
> + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-
> 1307
> +USA  */
> +
> +DefinitionBlock ("SSDT_S4.aml", "SSDT", 2, "Xen", "HVM", 0) {
> +    /* Must match piix emulation */
> +    Name (\_S4, Package (0x04)
> +    {
> +        0x00,  /* PM1a_CNT.SLP_TYP */
> +        0x00,  /* PM1b_CNT.SLP_TYP */
> +        0x00,  /* reserved */
> +        0x00   /* reserved */
> +    })
> +}
> +
> diff -r d22ef0f60497 -r 66bdcb90560f
> tools/firmware/hvmloader/config.h
> --- a/tools/firmware/hvmloader/config.h       Fri Nov 18 10:28:52 2011
> +0000
> +++ b/tools/firmware/hvmloader/config.h       Fri Nov 18 10:28:53 2011
> +0000
> @@ -27,7 +27,7 @@ struct bios_config {
> 
>      void (*e820_setup)(void);
> 
> -    void (*acpi_build_tables)(void);
> +    void (*acpi_build_tables)(int, int);
>      void (*create_mp_tables)(void);
>      void (*create_smbios_tables)(void);
>      void (*create_pir_tables)(void);
> diff -r d22ef0f60497 -r 66bdcb90560f
> tools/firmware/hvmloader/hvmloader.c
> --- a/tools/firmware/hvmloader/hvmloader.c    Fri Nov 18 10:28:52
> 2011 +0000
> +++ b/tools/firmware/hvmloader/hvmloader.c    Fri Nov 18 10:28:53
> 2011 +0000
> @@ -516,11 +516,17 @@ int main(void)
>              .index = HVM_PARAM_ACPI_IOPORTS_LOCATION,
>              .value = 1,
>          };
> +        int s3_enabled, s4_enabled;
> +
> +        s3_enabled = !strncmp(xenstore_read("platform/acpi_s3",
> "1"), "1", 1);
> +        s4_enabled = !strncmp(xenstore_read("platform/acpi_s4",
> "1"),
> + "1", 1);
> 
>          if ( bios->acpi_build_tables )
>          {
> -            printf("Loading ACPI ...\n");
> -            bios->acpi_build_tables();
> +            printf("Loading ACPI (S3=%s S4=%s) ...\n",
> +                   (s3_enabled) ? "ON" : "OFF",
> +                   (s4_enabled) ? "ON" : "OFF");
> +            bios->acpi_build_tables(s3_enabled, s4_enabled);
>          }
> 
>          acpi_enable_sci();
> diff -r d22ef0f60497 -r 66bdcb90560f
> tools/firmware/hvmloader/rombios.c
> --- a/tools/firmware/hvmloader/rombios.c      Fri Nov 18 10:28:52 2011
> +0000
> +++ b/tools/firmware/hvmloader/rombios.c      Fri Nov 18 10:28:53 2011
> +0000
> @@ -112,13 +112,15 @@ static void reset_bios_checksum(void)
>      *((uint8_t *)(ROMBIOS_BEGIN + ROMBIOS_MAXOFFSET)) = -checksum;
> }
> 
> -static void rombios_acpi_build_tables(void)
> +static void rombios_acpi_build_tables(int s3_enabled, int
> s4_enabled)
>  {
>      struct acpi_config config = {
>          .dsdt_anycpu = dsdt_anycpu,
>          .dsdt_anycpu_len = dsdt_anycpu_len,
>          .dsdt_15cpu = dsdt_15cpu,
>          .dsdt_15cpu_len = dsdt_15cpu_len,
> +        .ssdt_s3_enabled = s3_enabled,
> +        .ssdt_s4_enabled = s4_enabled,
>      };
> 
>      acpi_build_tables(&config, ACPI_PHYSICAL_ADDRESS); diff -r
> d22ef0f60497 -r 66bdcb90560f tools/firmware/hvmloader/seabios.c
> --- a/tools/firmware/hvmloader/seabios.c      Fri Nov 18 10:28:52 2011
> +0000
> +++ b/tools/firmware/hvmloader/seabios.c      Fri Nov 18 10:28:53 2011
> +0000
> @@ -91,7 +91,7 @@ static void add_table(uint32_t t)
>      info->tables_nr++;
>  }
> 
> -static void seabios_acpi_build_tables(void)
> +static void seabios_acpi_build_tables(int s3_enabled, int
> s4_enabled)
>  {
>      uint32_t rsdp = (uint32_t)scratch_alloc(sizeof(struct
> acpi_20_rsdp), 0);
>      struct acpi_config config = {
> @@ -99,6 +99,8 @@ static void seabios_acpi_build_tables(vo
>          .dsdt_anycpu_len = dsdt_anycpu_qemu_xen_len,
>          .dsdt_15cpu = NULL,
>          .dsdt_15cpu_len = 0,
> +        .ssdt_s3_enabled = s3_enabled,
> +        .ssdt_s4_enabled = s4_enabled,
>      };
> 
>      acpi_build_tables(&config, rsdp);
> diff -r d22ef0f60497 -r 66bdcb90560f tools/libxl/libxl_create.c
> --- a/tools/libxl/libxl_create.c      Fri Nov 18 10:28:52 2011 +0000
> +++ b/tools/libxl/libxl_create.c      Fri Nov 18 10:28:53 2011 +0000
> @@ -93,6 +93,8 @@ int libxl_init_build_info(libxl_ctx *ctx
>          b_info->u.hvm.pae = 1;
>          b_info->u.hvm.apic = 1;
>          b_info->u.hvm.acpi = 1;
> +        b_info->u.hvm.acpi_s3 = 1;
> +        b_info->u.hvm.acpi_s4 = 1;
>          b_info->u.hvm.nx = 1;
>          b_info->u.hvm.viridian = 0;
>          b_info->u.hvm.hpet = 1;
> @@ -189,9 +191,13 @@ int libxl__domain_build(libxl__gc *gc,
>          vments[4] = "start_time";
>          vments[5] = libxl__sprintf(gc, "%lu.%02d",
> start_time.tv_sec,(int)start_time.tv_usec/10000);
> 
> -        localents = libxl__calloc(gc, 3, sizeof(char *));
> +        localents = libxl__calloc(gc, 7, sizeof(char *));
>          localents[0] = "platform/acpi";
>          localents[1] = (info->u.hvm.acpi) ? "1" : "0";
> +        localents[2] = "platform/acpi_s3";
> +        localents[3] = (info->u.hvm.acpi_s3) ? "1" : "0";
> +        localents[4] = "platform/acpi_s4";
> +        localents[5] = (info->u.hvm.acpi_s4) ? "1" : "0";
> 
>          break;
>      case LIBXL_DOMAIN_TYPE_PV:
> diff -r d22ef0f60497 -r 66bdcb90560f tools/libxl/libxl_types.idl
> --- a/tools/libxl/libxl_types.idl     Fri Nov 18 10:28:52 2011 +0000
> +++ b/tools/libxl/libxl_types.idl     Fri Nov 18 10:28:53 2011 +0000
> @@ -167,6 +167,8 @@ libxl_domain_build_info = Struct("domain
>                                         ("pae", bool),
>                                         ("apic", bool),
>                                         ("acpi", bool),
> +                                       ("acpi_s3", bool),
> +                                       ("acpi_s4", bool),
>                                         ("nx", bool),
>                                         ("viridian", bool),
>                                         ("timeoffset", string), diff
> -r d22ef0f60497 -r 66bdcb90560f tools/libxl/xl_cmdimpl.c
> --- a/tools/libxl/xl_cmdimpl.c        Fri Nov 18 10:28:52 2011 +0000
> +++ b/tools/libxl/xl_cmdimpl.c        Fri Nov 18 10:28:53 2011 +0000
> @@ -683,6 +683,10 @@ static void parse_config_data(const char
>              b_info->u.hvm.apic = l;
>          if (!xlu_cfg_get_long (config, "acpi", &l))
>              b_info->u.hvm.acpi = l;
> +        if (!xlu_cfg_get_long (config, "acpi_s3", &l))
> +            b_info->u.hvm.acpi_s3 = l;
> +        if (!xlu_cfg_get_long (config, "acpi_s4", &l))
> +            b_info->u.hvm.acpi_s4 = l;
>          if (!xlu_cfg_get_long (config, "nx", &l))
>              b_info->u.hvm.nx = l;
>          if (!xlu_cfg_get_long (config, "viridian", &l))

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.