From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:56461) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YgEmF-0005sR-Mt for qemu-devel@nongnu.org; Thu, 09 Apr 2015 11:54:04 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1YgEmB-0001rR-C2 for qemu-devel@nongnu.org; Thu, 09 Apr 2015 11:53:59 -0400 Received: from static.88-198-71-155.clients.your-server.de ([88.198.71.155]:37639 helo=socrates.bennee.com) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YgEmB-0001rF-4W for qemu-devel@nongnu.org; Thu, 09 Apr 2015 11:53:55 -0400 References: <1428055432-12120-1-git-send-email-zhaoshenglong@huawei.com> <1428055432-12120-13-git-send-email-zhaoshenglong@huawei.com> From: Alex =?utf-8?Q?Benn=C3=A9e?= In-reply-to: <1428055432-12120-13-git-send-email-zhaoshenglong@huawei.com> Date: Thu, 09 Apr 2015 16:54:01 +0100 Message-ID: <87y4m1z49y.fsf@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Subject: Re: [Qemu-devel] [PATCH v4 12/20] hw/arm/virt-acpi-build: Add PCIe info and generate MCFG table List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Shannon Zhao Cc: peter.maydell@linaro.org, hangaohuai@huawei.com, mst@redhat.com, a.spyridakis@virtualopensystems.com, msalter@redhat.com, claudio.fontana@huawei.com, qemu-devel@nongnu.org, peter.huangpeng@huawei.com, hanjun.guo@linaro.org, imammedo@redhat.com, pbonzini@redhat.com, lersek@redhat.com, christoffer.dall@linaro.org, shannon.zhao@linaro.org Shannon Zhao writes: > From: Shannon Zhao > > Add PCIe info struct, prepare for building PCIe table. > And generate MCFG table. > > Signed-off-by: Shannon Zhao > Signed-off-by: Shannon Zhao > --- > hw/arm/virt-acpi-build.c | 21 +++++++++++++++++++++ > include/hw/arm/virt-acpi-build.h | 12 ++++++++++++ > 2 files changed, 33 insertions(+) > > diff --git a/hw/arm/virt-acpi-build.c b/hw/arm/virt-acpi-build.c > index dd5538b..a979582 100644 > --- a/hw/arm/virt-acpi-build.c > +++ b/hw/arm/virt-acpi-build.c > @@ -229,6 +229,24 @@ build_rsdt(GArray *table_data, GArray *linker, GArray *table_offsets) > (void *)rsdt, "RSDT", rsdt_len, 1); > } > > +static void > +build_mcfg(GArray *table_data, GArray *linker, VirtGuestInfo *guest_info) > +{ > + AcpiTableMcfg *mcfg; > + acpi_pcie_info *info = guest_info->pcie_info; > + int len = sizeof(*mcfg) + 1 * sizeof(mcfg->allocation[0]); Explicit bracketing around the maths please. > + > + mcfg = acpi_data_push(table_data, len); > + mcfg->allocation[0].address = cpu_to_le64(info->pcie_ecam_base); > + > + /* Only a single allocation so no need to play with segments */ > + mcfg->allocation[0].pci_segment = cpu_to_le16(0); > + mcfg->allocation[0].start_bus_number = 0; > + mcfg->allocation[0].end_bus_number = info->nr_pcie_buses - 1; > + > + build_header(linker, table_data, (void *)mcfg, "MCFG", len, 1); > +} > + > /* GTDT */ > static void > build_gtdt(GArray *table_data, GArray *linker, VirtGuestInfo *guest_info) > @@ -401,6 +419,9 @@ void virt_acpi_build(VirtGuestInfo *guest_info, AcpiBuildTables *tables) > acpi_add_table(table_offsets, tables_blob); > build_gtdt(tables_blob, tables->linker, guest_info); > > + acpi_add_table(table_offsets, tables_blob); > + build_mcfg(tables_blob, tables->linker, guest_info); > + > /* RSDT is pointed to by RSDP */ > rsdt = tables_blob->len; > build_rsdt(tables_blob, tables->linker, table_offsets); > diff --git a/include/hw/arm/virt-acpi-build.h b/include/hw/arm/virt-acpi-build.h > index 2780856..d534489 100644 > --- a/include/hw/arm/virt-acpi-build.h > +++ b/include/hw/arm/virt-acpi-build.h > @@ -47,6 +47,17 @@ typedef struct acpi_dsdt_info { > const hwaddr *flash_addr; > } acpi_dsdt_info; > > +typedef struct acpi_pcie_info { > + const int *pcie_irq; > + hwaddr pcie_mmio_base; > + hwaddr pcie_mmio_size; > + hwaddr pcie_ioport_base; > + hwaddr pcie_ioport_size; > + hwaddr pcie_ecam_base; > + hwaddr pcie_ecam_size; > + int nr_pcie_buses; > +} acpi_pcie_info; > + > typedef struct VirtGuestInfo { > int smp_cpus; > int max_cpus; > @@ -54,6 +65,7 @@ typedef struct VirtGuestInfo { > acpi_madt_info *madt_info; > acpi_dsdt_info *dsdt_info; > acpi_gtdt_info *gtdt_info; > + acpi_pcie_info *pcie_info; > } VirtGuestInfo; -- Alex Bennée