pci-keystone.h 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. /*
  3. * Keystone PCI Controller's common includes
  4. *
  5. * Copyright (C) 2013-2014 Texas Instruments., Ltd.
  6. * http://www.ti.com
  7. *
  8. * Author: Murali Karicheri <m-karicheri2@ti.com>
  9. */
  10. #define MAX_MSI_HOST_IRQS 8
  11. struct keystone_pcie {
  12. struct dw_pcie *pci;
  13. struct clk *clk;
  14. /* PCI Device ID */
  15. u32 device_id;
  16. int num_legacy_host_irqs;
  17. int legacy_host_irqs[PCI_NUM_INTX];
  18. struct device_node *legacy_intc_np;
  19. int num_msi_host_irqs;
  20. int msi_host_irqs[MAX_MSI_HOST_IRQS];
  21. struct device_node *msi_intc_np;
  22. struct irq_domain *legacy_irq_domain;
  23. struct device_node *np;
  24. int error_irq;
  25. /* Application register space */
  26. void __iomem *va_app_base; /* DT 1st resource */
  27. struct resource app;
  28. };
  29. /* Keystone DW specific MSI controller APIs/definitions */
  30. void ks_dw_pcie_handle_msi_irq(struct keystone_pcie *ks_pcie, int offset);
  31. phys_addr_t ks_dw_pcie_get_msi_addr(struct pcie_port *pp);
  32. /* Keystone specific PCI controller APIs */
  33. void ks_dw_pcie_enable_legacy_irqs(struct keystone_pcie *ks_pcie);
  34. void ks_dw_pcie_handle_legacy_irq(struct keystone_pcie *ks_pcie, int offset);
  35. void ks_dw_pcie_enable_error_irq(struct keystone_pcie *ks_pcie);
  36. irqreturn_t ks_dw_pcie_handle_error_irq(struct keystone_pcie *ks_pcie);
  37. int ks_dw_pcie_host_init(struct keystone_pcie *ks_pcie,
  38. struct device_node *msi_intc_np);
  39. int ks_dw_pcie_wr_other_conf(struct pcie_port *pp, struct pci_bus *bus,
  40. unsigned int devfn, int where, int size, u32 val);
  41. int ks_dw_pcie_rd_other_conf(struct pcie_port *pp, struct pci_bus *bus,
  42. unsigned int devfn, int where, int size, u32 *val);
  43. void ks_dw_pcie_setup_rc_app_regs(struct keystone_pcie *ks_pcie);
  44. void ks_dw_pcie_initiate_link_train(struct keystone_pcie *ks_pcie);
  45. void ks_dw_pcie_msi_irq_ack(int i, struct pcie_port *pp);
  46. void ks_dw_pcie_msi_set_irq(struct pcie_port *pp, int irq);
  47. void ks_dw_pcie_msi_clear_irq(struct pcie_port *pp, int irq);
  48. void ks_dw_pcie_v3_65_scan_bus(struct pcie_port *pp);
  49. int ks_dw_pcie_msi_host_init(struct pcie_port *pp);
  50. int ks_dw_pcie_link_up(struct dw_pcie *pci);