[PATCH v2 2/2] ARM: pci: kill pcibios_msi_controller

Jayachandran C. jchandra at broadcom.com
Sun Jul 26 08:25:29 PDT 2015


On Fri, Jul 24, 2015 at 05:13:03PM +0100, Lorenzo Pieralisi wrote:
> On ARM PCI systems relying on the pcibios API to initialize PCI host
> controllers, the pcibios_msi_controller weak callback is used to look-up
> the msi_controller pointer, through pci_sys_data msi_ctrl pointer.
> 
> pci_sys_data is an ARM specific structure, which prevents using the
> same mechanism (so same PCI host controller drivers) on ARM64 systems.
> 
> Since the struct pci_bus already contains an msi_controller pointer and
> the kernel already uses it to look-up the msi controller,
> this patch converts ARM host controller and related pcibios/host bridges
> initialization routines so that the msi_controller pointer look-up can be
> carried out by PCI core code through the struct pci_bus msi pointer,
> removing the need for the arch specific pcibios_msi_controller callback
> and the related pci_sys_data msi_ctrl pointer.
> 
> ARM is the only arch relying on the pcibios_msi_controller() weak
> function, hence this patch removes the default weak implementation
> from PCI core code since it becomes of no use.
> 
> Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi at arm.com>
> Acked-by: Marc Zyngier <marc.zyngier at arm.com>
> Cc: Pratyush Anand <pratyush.anand at gmail.com>
> Cc: Arnd Bergmann <arnd at arndb.de>
> Cc: Jingoo Han <jingoohan1 at gmail.com>
> Cc: Bjorn Helgaas <bhelgaas at google.com>
> Cc: Simon Horman <horms at verge.net.au>
> Cc: Russell King <linux at arm.linux.org.uk>
> Cc: Thomas Petazzoni <thomas.petazzoni at free-electrons.com>
> Cc: Thierry Reding <thierry.reding at gmail.com>
> Cc: Michal Simek <michal.simek at xilinx.com>
> Cc: Marc Zyngier <marc.zyngier at arm.com>
> ---
> v1->v2
> 
> - Added patch to replace panic statements with WARN
> - Removed unused pcibios_msi_controller() and pci_msi_controller() from
>   core code
> - Dropped RFT status
> 
> v1: http://lists.infradead.org/pipermail/linux-arm-kernel/2015-July/356028.html
> 
>  arch/arm/include/asm/mach/pci.h    |  3 ---
>  arch/arm/kernel/bios32.c           | 29 +++++++++++++----------------
>  drivers/pci/host/pcie-designware.c |  9 +++++++--
>  drivers/pci/host/pcie-xilinx.c     | 12 ++++++++++--
>  drivers/pci/msi.c                  | 17 +----------------
>  5 files changed, 31 insertions(+), 39 deletions(-)
> 
[...]
> diff --git a/drivers/pci/msi.c b/drivers/pci/msi.c
> index f66be86..0d20142 100644
> --- a/drivers/pci/msi.c
> +++ b/drivers/pci/msi.c
> @@ -77,24 +77,9 @@ static void pci_msi_teardown_msi_irqs(struct pci_dev *dev)
>  
>  /* Arch hooks */
>  
> -struct msi_controller * __weak pcibios_msi_controller(struct pci_dev *dev)
> -{
> -	return NULL;
> -}
> -
> -static struct msi_controller *pci_msi_controller(struct pci_dev *dev)
> -{
> -	struct msi_controller *msi_ctrl = dev->bus->msi;
> -
> -	if (msi_ctrl)
> -		return msi_ctrl;
> -
> -	return pcibios_msi_controller(dev);
> -}
> -
>  int __weak arch_setup_msi_irq(struct pci_dev *dev, struct msi_desc *desc)
>  {
> -	struct msi_controller *chip = pci_msi_controller(dev);
> +	struct msi_controller *chip = dev->bus->msi;
>  	int err;
>  
>  	if (!chip || !chip->setup_irq)

Don't you have to go to the top level bus and get the ->msi pointer? Something
like:

	for (bus = dev->bus; bus != NULL; bus = bus->parent)
		if (bus->msi)
			return bus->msi;

I have not been following this closely, so I may have missed some patches.

JC.



More information about the linux-arm-kernel mailing list