* [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®