[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
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |