mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [PATCH v2 0/2] ARM: pci: Prepare for Tegra PCIe controller driver
@ 2012-09-20  7:21 Thierry Reding
  2012-09-20  7:21 ` [PATCH v2 1/2] ARM: pci: Keep pci_common_init() around after init Thierry Reding
  2012-09-20  7:21 ` [PATCH v2 2/2] ARM: pci: Allow passing per-controller private data Thierry Reding
  0 siblings, 2 replies; 3+ messages in thread
From: Thierry Reding @ 2012-09-20  7:21 UTC (permalink / raw)
  To: Russell King; +Cc: Bjorn Helgaas, linux-kernel, linux-arm-kernel

Hi Russell,

These are two patches I've been carrying in a larger series that
converts the Tegra PCIe controller driver to a proper platform driver.
Since the complete series didn't get much feedback, I've begun to post
smaller subsets in an effort to get them merged more easily.

The first patch in this series removes the __init annotations from the
pci_common_init() function (and pcibios_init_hw() and pcibios_swizzle()
because they are called from the former) to make sure that they stay
around after the init stage. This is required because the Tegra driver
depends on regulators that become available only very late during boot
and uses deferred probing to handle this situation. It turned out that
this postpones the PCI bus initialization until after init, thus this
patch.

The second patch is used to pass per-controller or per-host-bridge data
to the driver, such that it can be associated with the corresponding
bus. This is also required by the Tegra driver in order to pass a
driver-private structure to the PCI bus (or more precisely the
pci_sys_data structure associated with a bus). It is subsequently used
to obtain the root port private data given the corresponding PCI bus.

Thierry

Thierry Reding (2):
  ARM: pci: Keep pci_common_init() around after init
  ARM: pci: Allow passing per-controller private data

 arch/arm/include/asm/mach/pci.h | 1 +
 arch/arm/kernel/bios32.c        | 9 ++++++---
 2 files changed, 7 insertions(+), 3 deletions(-)

-- 
1.7.12


^ permalink raw reply	[flat|nested] 3+ messages in thread

* [PATCH v2 1/2] ARM: pci: Keep pci_common_init() around after init
  2012-09-20  7:21 [PATCH v2 0/2] ARM: pci: Prepare for Tegra PCIe controller driver Thierry Reding
@ 2012-09-20  7:21 ` Thierry Reding
  2012-09-20  7:21 ` [PATCH v2 2/2] ARM: pci: Allow passing per-controller private data Thierry Reding
  1 sibling, 0 replies; 3+ messages in thread
From: Thierry Reding @ 2012-09-20  7:21 UTC (permalink / raw)
  To: Russell King; +Cc: Bjorn Helgaas, linux-kernel, linux-arm-kernel

When using deferred driver probing, PCI host controller drivers may
actually require this function after the init stage.

Signed-off-by: Thierry Reding <thierry.reding@avionic-design.de>
---
Changes in v2:
- remove __devinit annotation from pcibios_swizzle
- remove __init annotations altogether

 arch/arm/kernel/bios32.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/arch/arm/kernel/bios32.c b/arch/arm/kernel/bios32.c
index 2b2f25e..6f1d75f 100644
--- a/arch/arm/kernel/bios32.c
+++ b/arch/arm/kernel/bios32.c
@@ -388,7 +388,7 @@ EXPORT_SYMBOL(pcibios_fixup_bus);
  * PCI standard swizzle is implemented on plug-in cards and Cardbus based
  * PCI extenders, so it can not be ignored.
  */
-static u8 __devinit pcibios_swizzle(struct pci_dev *dev, u8 *pin)
+static u8 pcibios_swizzle(struct pci_dev *dev, u8 *pin)
 {
 	struct pci_sys_data *sys = dev->sysdata;
 	int slot, oldpin = *pin;
@@ -423,7 +423,7 @@ static int pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
 	return irq;
 }
 
-static void __init pcibios_init_hw(struct hw_pci *hw, struct list_head *head)
+static void pcibios_init_hw(struct hw_pci *hw, struct list_head *head)
 {
 	struct pci_sys_data *sys = NULL;
 	int ret;
@@ -472,7 +472,7 @@ static void __init pcibios_init_hw(struct hw_pci *hw, struct list_head *head)
 	}
 }
 
-void __init pci_common_init(struct hw_pci *hw)
+void pci_common_init(struct hw_pci *hw)
 {
 	struct pci_sys_data *sys;
 	LIST_HEAD(head);
-- 
1.7.12


^ permalink raw reply	[flat|nested] 3+ messages in thread

* [PATCH v2 2/2] ARM: pci: Allow passing per-controller private data
  2012-09-20  7:21 [PATCH v2 0/2] ARM: pci: Prepare for Tegra PCIe controller driver Thierry Reding
  2012-09-20  7:21 ` [PATCH v2 1/2] ARM: pci: Keep pci_common_init() around after init Thierry Reding
@ 2012-09-20  7:21 ` Thierry Reding
  1 sibling, 0 replies; 3+ messages in thread
From: Thierry Reding @ 2012-09-20  7:21 UTC (permalink / raw)
  To: Russell King; +Cc: Bjorn Helgaas, linux-kernel, linux-arm-kernel

In order to allow drivers to specify private data for each controller,
this commit adds a private_data field to the struct hw_pci. This field
is an array of nr_controllers pointers that will be used to initialize
the private_data field of the corresponding controller's pci_sys_data
structure.

Signed-off-by: Thierry Reding <thierry.reding@avionic-design.de>
---
 arch/arm/include/asm/mach/pci.h | 1 +
 arch/arm/kernel/bios32.c        | 3 +++
 2 files changed, 4 insertions(+)

diff --git a/arch/arm/include/asm/mach/pci.h b/arch/arm/include/asm/mach/pci.h
index 26c511f..736cb8d 100644
--- a/arch/arm/include/asm/mach/pci.h
+++ b/arch/arm/include/asm/mach/pci.h
@@ -21,6 +21,7 @@ struct hw_pci {
 #endif
 	struct pci_ops	*ops;
 	int		nr_controllers;
+	void		**private_data;
 	int		(*setup)(int nr, struct pci_sys_data *);
 	struct pci_bus *(*scan)(int nr, struct pci_sys_data *);
 	void		(*preinit)(void);
diff --git a/arch/arm/kernel/bios32.c b/arch/arm/kernel/bios32.c
index 6f1d75f..d69bf81 100644
--- a/arch/arm/kernel/bios32.c
+++ b/arch/arm/kernel/bios32.c
@@ -442,6 +442,9 @@ static void pcibios_init_hw(struct hw_pci *hw, struct list_head *head)
 		sys->map_irq = hw->map_irq;
 		INIT_LIST_HEAD(&sys->resources);
 
+		if (hw->private_data)
+			sys->private_data = hw->private_data[nr];
+
 		ret = hw->setup(nr, sys);
 
 		if (ret > 0) {
-- 
1.7.12


^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2012-09-20  7:22 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-09-20  7:21 [PATCH v2 0/2] ARM: pci: Prepare for Tegra PCIe controller driver Thierry Reding
2012-09-20  7:21 ` [PATCH v2 1/2] ARM: pci: Keep pci_common_init() around after init Thierry Reding
2012-09-20  7:21 ` [PATCH v2 2/2] ARM: pci: Allow passing per-controller private data Thierry Reding

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®