[PATCH v8 1/3] PCI: host: rcar: Add Renesas R-Car PCIe driver
From: Gabriel Fernandez <hidden>
Date: 2014-06-20 07:37:44
Also in:
linux-pci, linux-sh
Hi Phil, Just a question... On 12 May 2014 12:57, Phil Edworthy [off-list ref] wrote:
This PCIe Host driver currently does not support MSI, so cards fall back to INTx interrupts.
quoted hunk ↗ jump to hunk
Signed-off-by: Phil Edworthy <redacted> --- drivers/pci/host/Kconfig | 6 + drivers/pci/host/Makefile | 1 + drivers/pci/host/pcie-rcar.c | 768 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 775 insertions(+) create mode 100644 drivers/pci/host/pcie-rcar.cdiff --git a/drivers/pci/host/pcie-rcar.c b/drivers/pci/host/pcie-rcar.c new file mode 100644 index 0000000..3c524b9 --- /dev/null +++ b/drivers/pci/host/pcie-rcar.c
+static void rcar_pcie_enable(struct rcar_pcie *pcie)
+{
+ struct platform_device *pdev = to_platform_device(pcie->dev);
+
+ rcar_pci.nr_controllers = 1;
+ rcar_pci.private_data = (void **)&pcie;
+
+ pci_common_init_dev(&pdev->dev, &rcar_pci);
+#ifdef CONFIG_PCI_DOMAINS
+ rcar_pci.domain++;
+#endif
+}
+
How does it work when you have 2 PCIe DT node ?
(because for my point of view pci_common_init_dev() can't be called twice)
void pci_common_init_dev(struct device *parent, struct hw_pci *hw)
{
struct pci_sys_data *sys;
LIST_HEAD(head);
pci_add_flags(PCI_REASSIGN_ALL_RSRC);
if (hw->preinit)
hw->preinit();
pcibios_init_hw(parent, hw, &head);
...
static void pcibios_init_hw(struct device *parent, struct hw_pci *hw,
struct list_head *head)
{
struct pci_sys_data *sys = NULL;
int ret;
int nr, busnr;
for (nr = busnr = 0; nr < hw->nr_controllers; nr++) {
sys = kzalloc(sizeof(struct pci_sys_data), GFP_KERNEL);
if (!sys)
panic("PCI: unable to allocate sys data!");
#ifdef CONFIG_PCI_DOMAINS
sys->domain = hw->domain;
#endif
sys->busnr = busnr;
...
the issue is that sys->busnr always starts to zero ...
how did you fix this problem?
Thanks.
Best Regards
Gabriel.