[PATCH V5 00/15] MMCONFIG refactoring and support for ARM64 PCI hostbridge init based on ACPI
From: Lorenzo Pieralisi <hidden>
Date: 2016-03-03 11:21:21
Also in:
linux-acpi, linux-pci, lkml
[+ Yinghai] On Mon, Feb 29, 2016 at 02:03:45PM -0500, Sinan Kaya wrote:
On 2/16/2016 8:53 AM, Tomasz Nowicki wrote:quoted
From the functionality point of view this series might be split into the following logic parts: 1. Make MMCONFIG code arch-agnostic which allows all architectures to collect PCI config regions and used when necessary. 2. Move non-arch specific bits to the core code. 3. Use MMCONFIG code and implement generic ACPI based PCI host controller driver. 4. Enable above driver on ARM64 Patches has been built on top of 4.5-rc3 and can be found here: git at github.com:semihalf-nowicki-tomasz/linux.git (pci-acpi-v5) NOTE, this patch set depends on Lorenzo's fixes: https://patchwork.ozlabs.org/patch/576450/ which can be found in pci-acpi-v5 branch. This has been tested on Cavium ThunderX server, JunoR2, HP RX2660 IA64, x86, Hip05, X-Gene and QEMU-aarch64. Any help in reviewing and testing is very appreciated. v4 -> v5 - dropped MCFG refactoring group patches 1-6 from series v4 and integrated Jayachandran's patch https://patchwork.ozlabs.org/patch/575525/ - rewrite PCI legacy IRQs allocation - squashed two patches 11 and 12 from series v4, fixed bisection issue - changelog improvements - rebased to 4.5-rc3 v3 -> v4 - dropped Jiang's fix http://lkml.iu.edu/hypermail/linux/kernel/1601.1/04318.html - added Lorenzo's fix patch 19/24 - ACPI PCI bus domain number assigning cleanup - changed resource management, we now claim and reassign resources - improvements for applying quirks - dropped Matthew's http://www.spinics.net/lists/linux-pci/msg45950.html dependency - rebased to 4.5-rc1Having tested v4 and v5, I'm seeing some resource assignment problems and address conflicts. And problems booting QEMU.
I asked Tomasz to add resource claiming code in v4 to make sure that, if FW has left resources in a reasonable set-up, we reuse it as-is. Now, I was and I am aware this could trigger resource allocation issues (in particular in relation to bridges apertures sizing), that can be nonetheless solved by forcing the kernel to reallocate resources (pci=realloc, that's exactly what's there for, release the bridge apertures, resize the busses downstream and reassign the respective hierarchy). I am not entirely aware of how consistently pci=realloc was used on x86, what I am aware of is the panoply of pci=* command line parameters defined for x86 and I would certainly avoid that. The decision on whether we claim resources before reassigning them is either dictacted by the boot method (ie ACPI->claim resources by default) or we should control it via a FW option or a command line option, PCI standard (PCI FW revision 3.1, 3.5 "Device State at Firmware/Operating System Handoff) IIUC does not stricly mandate FW configuring the whole PCI hierarchy (and to be 100% compliant we should check the device IO/MEM enable bits before claiming, as x86 does - see pcibios_allocate_dev_resources() in arch/x86/pci/i386.c). x86 and IA64 claim PCI resources on boot and live with that (well, minus the gazillions x86 pci= parameters that change the PCI resources assignment one way or another), comments very welcome in particular on the pci=realloc option and its usage. What's certain is, if we do not claim resources by default we will *never* be able to do it, it will certainly trigger regressions. Lorenzo