From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:34794) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YfS5l-0006T7-QC for qemu-devel@nongnu.org; Tue, 07 Apr 2015 07:54:55 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1YfS5i-0004X6-IW for qemu-devel@nongnu.org; Tue, 07 Apr 2015 07:54:53 -0400 Received: from szxga02-in.huawei.com ([119.145.14.65]:16107) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YfS5h-0004Wb-TM for qemu-devel@nongnu.org; Tue, 07 Apr 2015 07:54:50 -0400 Message-ID: <5523C474.80601@huawei.com> Date: Tue, 7 Apr 2015 19:50:12 +0800 From: Shannon Zhao MIME-Version: 1.0 References: <1428055432-12120-1-git-send-email-zhaoshenglong@huawei.com> <1428346052.2973.26.camel@deneb.redhat.com> <55234469.9060404@huawei.com> In-Reply-To: Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH v4 00/20] Generate ACPI v5.1 tables and expose it to guest over fw_cfg on ARM List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Peter Maydell Cc: hangaohuai@huawei.com, Igor Mammedov , Alexander Spyridakis , "Michael S. Tsirkin" , Claudio Fontana , QEMU Developers , "Huangpeng (Peter)" , Hanjun Guo , Mark Salter , Paolo Bonzini , Laszlo Ersek , Christoffer Dall , Shannon Zhao On 2015/4/7 17:19, Peter Maydell wrote: > On 7 April 2015 at 03:43, Shannon Zhao wrote: >> The dts node is: >> ranges = <0x1000000 0x0 0x0 0x0 0x3eff0000 0x0 0x10000 >> 0x2000000 0x0 0x10000000 0x0 0x10000000 0x0 0x2eff0000>; >> reg = <0x0 0x3f000000 0x0 0x1000000>; >> bus-range = <0x0 0xf>; >> >> The ACPI table entry: >> Method (_CBA, 0, NotSerialized) // _CBA: Configuration Base Address >> { >> Return (0x3F000000) >> } >> Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings >> { >> Name (RBUF, ResourceTemplate () >> { >> WordBusNumber (ResourceProducer, MinFixed, MaxFixed, PosDecode, >> 0x0000, // Granularity >> 0x0000, // Range Minimum >> 0x000F, // Range Maximum >> 0x0000, // Translation Offset >> 0x0010, // Length >> ,, ) >> DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite, > > Is this claiming that the non-cacheable PCI MMIO region is cacheable? > If so that isn't right... ok, will fix this. > >> 0x00000000, // Granularity >> 0x10000000, // Range Minimum >> 0x3EFF0000, // Range Maximum >> 0x00000000, // Translation Offset >> 0x2EFF0000, // Length >> ,, , AddressRangeMemory, TypeStatic) >> DWordIO (ResourceProducer, MinFixed, MaxFixed, PosDecode, EntireRange, >> 0x00000000, // Granularity >> 0x3EFF0000, // Range Minimum >> 0x3F000000, // Range Maximum >> 0x00000000, // Translation Offset > > I rather suspect this is wrong, since (my guess without looking > at the spec) it looks like it defines a 1:1 mapping between > the addresses used to interact with the PCIe IO window and > the IO addresses, which is obviously not what you want. > My guess is you need to set the translation offset at least, > but check the spec. > Yes, it's not right. I think it should be the following: DWordIO (ResourceProducer, MinFixed, MaxFixed, PosDecode, EntireRange, 0x00000000, // Granularity 0x00000000, // Range Minimum 0x0000FFFF, // Range Maximum 0x3EFF0000, // Translation Offset 0x00010000, // Length ,, , TypeStatic) With following patch on top of this patchset, the guest with e1000 and virtio-pci works well. diff --git a/hw/arm/virt-acpi-build.c b/hw/arm/virt-acpi-build.c index 11574c9..faa5042 100644 --- a/hw/arm/virt-acpi-build.c +++ b/hw/arm/virt-acpi-build.c @@ -236,16 +236,15 @@ static void acpi_dsdt_add_pci(Aml *scope, acpi_pcie_info *info) 0x0000, info->nr_pcie_buses)); aml_append(rbuf, aml_dword_memory(aml_pos_decode, aml_min_fixed, aml_max_fixed, - aml_cacheable, aml_ReadWrite, + aml_non_cacheable, aml_ReadWrite, 0x0000, info->pcie_mmio_base, info->pcie_mmio_base + info->pcie_mmio_size - 1, 0x0000, info->pcie_mmio_size)); aml_append(rbuf, aml_dword_io(aml_min_fixed, aml_max_fixed, aml_pos_decode, aml_entire_range, - 0x0000, info->pcie_ioport_base, - info->pcie_ioport_base + info->pcie_ioport_size - 1, - 0x0000, info->pcie_ioport_size)); + 0x0000, 0x0000,info->pcie_ioport_size - 1, + info->pcie_ioport_base, info->pcie_ioport_size)); Thanks, Shannon