1 /* 2 * Keystone PCI Controller's common includes 3 * 4 * Copyright (C) 2013-2014 Texas Instruments., Ltd. 5 * http://www.ti.com 6 * 7 * Author: Murali Karicheri <m-karicheri2@ti.com> 8 * 9 * 10 * This program is free software; you can redistribute it and/or modify 11 * it under the terms of the GNU General Public License version 2 as 12 * published by the Free Software Foundation. 13 */ 14 15 #define MAX_MSI_HOST_IRQS 8 16 17 struct keystone_pcie { 18 struct dw_pcie *pci; 19 struct clk *clk; 20 /* PCI Device ID */ 21 u32 device_id; 22 int num_legacy_host_irqs; 23 int legacy_host_irqs[PCI_NUM_INTX]; 24 struct device_node *legacy_intc_np; 25 26 int num_msi_host_irqs; 27 int msi_host_irqs[MAX_MSI_HOST_IRQS]; 28 struct device_node *msi_intc_np; 29 struct irq_domain *legacy_irq_domain; 30 struct device_node *np; 31 32 int error_irq; 33 34 /* Application register space */ 35 void __iomem *va_app_base; /* DT 1st resource */ 36 struct resource app; 37 }; 38 39 /* Keystone DW specific MSI controller APIs/definitions */ 40 void ks_dw_pcie_handle_msi_irq(struct keystone_pcie *ks_pcie, int offset); 41 phys_addr_t ks_dw_pcie_get_msi_addr(struct pcie_port *pp); 42 43 /* Keystone specific PCI controller APIs */ 44 void ks_dw_pcie_enable_legacy_irqs(struct keystone_pcie *ks_pcie); 45 void ks_dw_pcie_handle_legacy_irq(struct keystone_pcie *ks_pcie, int offset); 46 void ks_dw_pcie_enable_error_irq(struct keystone_pcie *ks_pcie); 47 irqreturn_t ks_dw_pcie_handle_error_irq(struct keystone_pcie *ks_pcie); 48 int ks_dw_pcie_host_init(struct keystone_pcie *ks_pcie, 49 struct device_node *msi_intc_np); 50 int ks_dw_pcie_wr_other_conf(struct pcie_port *pp, struct pci_bus *bus, 51 unsigned int devfn, int where, int size, u32 val); 52 int ks_dw_pcie_rd_other_conf(struct pcie_port *pp, struct pci_bus *bus, 53 unsigned int devfn, int where, int size, u32 *val); 54 void ks_dw_pcie_setup_rc_app_regs(struct keystone_pcie *ks_pcie); 55 void ks_dw_pcie_initiate_link_train(struct keystone_pcie *ks_pcie); 56 void ks_dw_pcie_msi_set_irq(struct pcie_port *pp, int irq); 57 void ks_dw_pcie_msi_clear_irq(struct pcie_port *pp, int irq); 58 void ks_dw_pcie_v3_65_scan_bus(struct pcie_port *pp); 59 int ks_dw_pcie_msi_host_init(struct pcie_port *pp, 60 struct msi_controller *chip); 61 int ks_dw_pcie_link_up(struct dw_pcie *pci); 62