Thread (15 messages) 15 messages, 5 authors, 2014-06-27
STALE4368d
Revisions (16)
  1. rfc [diff vs current]
  2. v2 [diff vs current]
  3. v3 [diff vs current]
  4. v4 [diff vs current]
  5. v4 [diff vs current]
  6. v4 [diff vs current]
  7. v4 [diff vs current]
  8. v4 [diff vs current]
  9. v5 [diff vs current]
  10. v6 [diff vs current]
  11. v7 [diff vs current]
  12. v8 [diff vs current]
  13. v8 [diff vs current]
  14. v8 current
  15. v8 [diff vs current]
  16. v8 [diff vs current]

[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.c
diff --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.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help