From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:42076) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YR1NP-0007mv-99 for qemu-devel@nongnu.org; Thu, 26 Feb 2015 11:33:28 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1YR1NL-0002rl-Q8 for qemu-devel@nongnu.org; Thu, 26 Feb 2015 11:33:27 -0500 Received: from mx1.redhat.com ([209.132.183.28]:40061) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YR1NL-0002rY-Iv for qemu-devel@nongnu.org; Thu, 26 Feb 2015 11:33:23 -0500 Date: Thu, 26 Feb 2015 17:33:20 +0100 From: Igor Mammedov Message-ID: <20150226173320.155d9d79@nial.brq.redhat.com> In-Reply-To: <1424456540-27854-9-git-send-email-imammedo@redhat.com> References: <1424456540-27854-1-git-send-email-imammedo@redhat.com> <1424456540-27854-9-git-send-email-imammedo@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH v5 08/16] pc: acpi-build: drop template patching and create Device(SMC) dynamically List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: marcel@redhat.com, Reza Jelveh , mst@redhat.com On Fri, 20 Feb 2015 18:22:12 +0000 Igor Mammedov wrote: > patch moves SMC device into SSDT and creates it only > when device is present, which makes ACPI tables smaller > in default case when device is not present. > > Also it fixes wrong IO range in CRS if "iobase" > property is set to a non default value. Reza could check that patch doesn't break OSX pls? > > PS: > Testing with XP shows that current default "iobase" > used SMC device conflicts with floppy controller IO, > but it's topic for another patch and I'd leave it > to SMC device author for resolving conflict. > > Signed-off-by: Igor Mammedov > CC: agraf@suse.de > --- > hw/i386/acpi-build.c | 29 ++++++++++++++++++++++------- > hw/i386/acpi-dsdt-isa.dsl | 11 ----------- > hw/i386/acpi-dsdt.dsl | 1 - > hw/i386/q35-acpi-dsdt.dsl | 1 - > 4 files changed, 22 insertions(+), 20 deletions(-) > > diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c > index badfa73..05eb80a 100644 > --- a/hw/i386/acpi-build.c > +++ b/hw/i386/acpi-build.c > @@ -116,6 +116,7 @@ typedef struct AcpiMiscInfo { > const unsigned char *dsdt_code; > unsigned dsdt_size; > uint16_t pvpanic_port; > + uint16_t applesmc_io_base; > } AcpiMiscInfo; > > typedef struct AcpiBuildPciBusHotplugState { > @@ -127,7 +128,6 @@ typedef struct AcpiBuildPciBusHotplugState { > > static void acpi_get_dsdt(AcpiMiscInfo *info) > { > - uint16_t *applesmc_sta; > Object *piix = piix4_pm_find(); > Object *lpc = ich9_lpc_find(); > assert(!!piix != !!lpc); > @@ -135,17 +135,11 @@ static void acpi_get_dsdt(AcpiMiscInfo *info) > if (piix) { > info->dsdt_code = AcpiDsdtAmlCode; > info->dsdt_size = sizeof AcpiDsdtAmlCode; > - applesmc_sta = piix_dsdt_applesmc_sta; > } > if (lpc) { > info->dsdt_code = Q35AcpiDsdtAmlCode; > info->dsdt_size = sizeof Q35AcpiDsdtAmlCode; > - applesmc_sta = q35_dsdt_applesmc_sta; > } > - > - /* Patch in appropriate value for AppleSMC _STA */ > - *(uint8_t *)(info->dsdt_code + *applesmc_sta) = > - applesmc_port() ? 0x0b : 0x00; > } > > static > @@ -248,6 +242,7 @@ static void acpi_get_misc_info(AcpiMiscInfo *info) > info->has_hpet = hpet_find(); > info->has_tpm = tpm_find(); > info->pvpanic_port = pvpanic_port(); > + info->applesmc_io_base = applesmc_port(); > } > > static void acpi_get_pci_info(PcPciInfo *info) > @@ -955,6 +950,26 @@ build_ssdt(GArray *table_data, GArray *linker, > aml_append(scope, aml_name_decl("_S5", pkg)); > aml_append(ssdt, scope); > > + if (misc->applesmc_io_base) { > + scope = aml_scope("\\_SB.PCI0.ISA"); > + dev = aml_device("SMC"); > + > + aml_append(dev, aml_name_decl("_HID", aml_eisaid("APP0001"))); > + /* device present, functioning, decoding, not shown in UI */ > + aml_append(dev, aml_name_decl("_STA", aml_int(0xB))); > + > + crs = aml_resource_template(); > + aml_append(crs, > + aml_io(aml_decode16, misc->applesmc_io_base, misc->applesmc_io_base, > + 0x01, APPLESMC_MAX_DATA_LENGTH) > + ); > + aml_append(crs, aml_irq_no_flags(6)); > + aml_append(dev, aml_name_decl("_CRS", crs)); > + > + aml_append(scope, dev); > + aml_append(ssdt, scope); > + } > + > if (misc->pvpanic_port) { > scope = aml_scope("\\_SB.PCI0.ISA"); > > diff --git a/hw/i386/acpi-dsdt-isa.dsl b/hw/i386/acpi-dsdt-isa.dsl > index deb37de..89caa16 100644 > --- a/hw/i386/acpi-dsdt-isa.dsl > +++ b/hw/i386/acpi-dsdt-isa.dsl > @@ -16,17 +16,6 @@ > /* Common legacy ISA style devices. */ > Scope(\_SB.PCI0.ISA) { > > - Device (SMC) { > - Name(_HID, EisaId("APP0001")) > - /* _STA will be patched to 0x0B if AppleSMC is present */ > - ACPI_EXTRACT_NAME_BYTE_CONST DSDT_APPLESMC_STA > - Name(_STA, 0xF0) > - Name(_CRS, ResourceTemplate () { > - IO (Decode16, 0x0300, 0x0300, 0x01, 0x20) > - IRQNoFlags() { 6 } > - }) > - } > - > Device(RTC) { > Name(_HID, EisaId("PNP0B00")) > Name(_CRS, ResourceTemplate() { > diff --git a/hw/i386/acpi-dsdt.dsl b/hw/i386/acpi-dsdt.dsl > index 09b68f0..a2d84ec 100644 > --- a/hw/i386/acpi-dsdt.dsl > +++ b/hw/i386/acpi-dsdt.dsl > @@ -85,7 +85,6 @@ DefinitionBlock ( > } > } > > -#define DSDT_APPLESMC_STA piix_dsdt_applesmc_sta > #include "acpi-dsdt-isa.dsl" > > > diff --git a/hw/i386/q35-acpi-dsdt.dsl b/hw/i386/q35-acpi-dsdt.dsl > index 3fb4b2f..16eaca3 100644 > --- a/hw/i386/q35-acpi-dsdt.dsl > +++ b/hw/i386/q35-acpi-dsdt.dsl > @@ -150,7 +150,6 @@ DefinitionBlock ( > } > } > > -#define DSDT_APPLESMC_STA q35_dsdt_applesmc_sta > #include "acpi-dsdt-isa.dsl" > >