Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e7486e21 authored by Yijing Wang's avatar Yijing Wang Committed by Alex Shi
Browse files

ARM/PCI: Save MSI controller in pci_sys_data



Currently ARM associates an MSI controller with a PCI bus by defining
pcibios_add_bus() and using it to call a struct hw_pci.add_bus() method.
That method sets the struct pci_bus "msi" member.  That's unwieldy and
unnecessarily couples MSI with the PCI enumeration code.

On ARM, all devices under the same PCI host bridge share an MSI controller,
so add an msi_controller pointer to the struct pci_sys_data and implement
pcibios_msi_controller() to retrieve it.

This is a step toward moving the msi_controller pointer into the generic
struct pci_host_bridge.

[bhelgaas: changelog, take pci_dev instead of pci_bus]
Signed-off-by: default avatarYijing Wang <wangyijing@huawei.com>
Signed-off-by: default avatarBjorn Helgaas <bhelgaas@google.com>
(cherry picked from commit 49dcc01a9ff2df5fafe50777bec0591c0a588d27)

Signed-off-by: default avatarAlex Shi <alex.shi@linaro.org>
parent 8fa1152f
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -21,6 +21,9 @@ struct device;
struct hw_pci {
#ifdef CONFIG_PCI_DOMAINS
	int		domain;
#endif
#ifdef CONFIG_PCI_MSI
	struct msi_controller *msi_ctrl;
#endif
	struct pci_ops	*ops;
	int		nr_controllers;
@@ -46,6 +49,9 @@ struct hw_pci {
struct pci_sys_data {
#ifdef CONFIG_PCI_DOMAINS
	int		domain;
#endif
#ifdef CONFIG_PCI_MSI
	struct msi_controller *msi_ctrl;
#endif
	struct list_head node;
	int		busnr;		/* primary bus number			*/
+12 −0
Original line number Diff line number Diff line
@@ -18,6 +18,15 @@

static int debug_pci;

#ifdef CONFIG_PCI_MSI
struct msi_controller *pcibios_msi_controller(struct pci_dev *dev)
{
	struct pci_sys_data *sysdata = dev->bus->sysdata;

	return sysdata->msi_ctrl;
}
#endif

/*
 * We can't use pci_get_device() here since we are
 * called from interrupt context.
@@ -470,6 +479,9 @@ static void pcibios_init_hw(struct device *parent, struct hw_pci *hw,

#ifdef CONFIG_PCI_DOMAINS
		sys->domain  = hw->domain;
#endif
#ifdef CONFIG_PCI_MSI
		sys->msi_ctrl = hw->msi_ctrl;
#endif
		sys->busnr   = busnr;
		sys->swizzle = hw->swizzle;