Lines Matching refs:dra7xx
3 * pcie-dra7xx - PCIe controller driver for TI DRA7xx SoCs
121 struct dra7xx_pcie *dra7xx = to_dra7xx_pcie(pci);
122 u32 reg = dra7xx_pcie_readl(dra7xx, PCIECTRL_DRA7XX_CONF_PHY_CS);
129 struct dra7xx_pcie *dra7xx = to_dra7xx_pcie(pci);
132 reg = dra7xx_pcie_readl(dra7xx, PCIECTRL_DRA7XX_CONF_DEVICE_CMD);
134 dra7xx_pcie_writel(dra7xx, PCIECTRL_DRA7XX_CONF_DEVICE_CMD, reg);
139 struct dra7xx_pcie *dra7xx = to_dra7xx_pcie(pci);
148 reg = dra7xx_pcie_readl(dra7xx, PCIECTRL_DRA7XX_CONF_DEVICE_CMD);
150 dra7xx_pcie_writel(dra7xx, PCIECTRL_DRA7XX_CONF_DEVICE_CMD, reg);
155 static void dra7xx_pcie_enable_msi_interrupts(struct dra7xx_pcie *dra7xx)
157 dra7xx_pcie_writel(dra7xx, PCIECTRL_DRA7XX_CONF_IRQSTATUS_MSI,
160 dra7xx_pcie_writel(dra7xx,
165 static void dra7xx_pcie_enable_wrapper_interrupts(struct dra7xx_pcie *dra7xx)
167 dra7xx_pcie_writel(dra7xx, PCIECTRL_DRA7XX_CONF_IRQSTATUS_MAIN,
169 dra7xx_pcie_writel(dra7xx, PCIECTRL_DRA7XX_CONF_IRQENABLE_SET_MAIN,
173 static void dra7xx_pcie_enable_interrupts(struct dra7xx_pcie *dra7xx)
175 dra7xx_pcie_enable_wrapper_interrupts(dra7xx);
176 dra7xx_pcie_enable_msi_interrupts(dra7xx);
182 struct dra7xx_pcie *dra7xx = to_dra7xx_pcie(pci);
189 dra7xx_pcie_enable_interrupts(dra7xx);
261 struct dra7xx_pcie *dra7xx;
271 dra7xx = to_dra7xx_pcie(pci);
273 reg = dra7xx_pcie_readl(dra7xx, PCIECTRL_DRA7XX_CONF_IRQSTATUS_MSI);
274 dra7xx_pcie_writel(dra7xx, PCIECTRL_DRA7XX_CONF_IRQSTATUS_MSI, reg);
285 virq = irq_find_mapping(dra7xx->irq_domain, bit);
297 struct dra7xx_pcie *dra7xx = arg;
298 struct dw_pcie *pci = dra7xx->pci;
303 reg = dra7xx_pcie_readl(dra7xx, PCIECTRL_DRA7XX_CONF_IRQSTATUS_MAIN);
338 if (dra7xx->mode == DW_PCIE_EP_TYPE)
349 dra7xx_pcie_writel(dra7xx, PCIECTRL_DRA7XX_CONF_IRQSTATUS_MAIN, reg);
358 struct dra7xx_pcie *dra7xx = to_dra7xx_pcie(pci);
369 dra7xx->irq_domain = irq_domain_add_linear(pcie_intc_node, PCI_NUM_INTX,
372 if (!dra7xx->irq_domain) {
512 struct dra7xx_pcie *dra7xx = to_dra7xx_pcie(pci);
518 dra7xx_pcie_enable_wrapper_interrupts(dra7xx);
521 static void dra7xx_pcie_raise_legacy_irq(struct dra7xx_pcie *dra7xx)
523 dra7xx_pcie_writel(dra7xx, PCIECTRL_TI_CONF_INTX_ASSERT, 0x1);
525 dra7xx_pcie_writel(dra7xx, PCIECTRL_TI_CONF_INTX_DEASSERT, 0x1);
528 static void dra7xx_pcie_raise_msi_irq(struct dra7xx_pcie *dra7xx,
535 dra7xx_pcie_writel(dra7xx, PCIECTRL_TI_CONF_MSI_XMT, reg);
542 struct dra7xx_pcie *dra7xx = to_dra7xx_pcie(pci);
546 dra7xx_pcie_raise_legacy_irq(dra7xx);
549 dra7xx_pcie_raise_msi_irq(dra7xx, interrupt_num);
576 static int __init dra7xx_add_pcie_ep(struct dra7xx_pcie *dra7xx,
583 struct dw_pcie *pci = dra7xx->pci;
613 static int __init dra7xx_add_pcie_port(struct dra7xx_pcie *dra7xx,
617 struct dw_pcie *pci = dra7xx->pci;
651 static void dra7xx_pcie_disable_phy(struct dra7xx_pcie *dra7xx)
653 int phy_count = dra7xx->phy_count;
656 phy_power_off(dra7xx->phy[phy_count]);
657 phy_exit(dra7xx->phy[phy_count]);
661 static int dra7xx_pcie_enable_phy(struct dra7xx_pcie *dra7xx)
663 int phy_count = dra7xx->phy_count;
668 ret = phy_set_mode(dra7xx->phy[i], PHY_MODE_PCIE);
672 ret = phy_init(dra7xx->phy[i]);
676 ret = phy_power_on(dra7xx->phy[i]);
678 phy_exit(dra7xx->phy[i]);
687 phy_power_off(dra7xx->phy[i]);
688 phy_exit(dra7xx->phy[i]);
752 * @dra7xx: the dra7xx device where the workaround should be applied
831 struct dra7xx_pcie *dra7xx;
849 dra7xx = devm_kzalloc(dev, sizeof(*dra7xx), GFP_KERNEL);
850 if (!dra7xx)
895 dra7xx->base = base;
896 dra7xx->phy = phy;
897 dra7xx->pci = pci;
898 dra7xx->phy_count = phy_count;
903 dra7xx->phy_count = 1; /* Fallback to x1 lane mode */
906 ret = dra7xx_pcie_enable_phy(dra7xx);
912 platform_set_drvdata(pdev, dra7xx);
928 reg = dra7xx_pcie_readl(dra7xx, PCIECTRL_DRA7XX_CONF_DEVICE_CMD);
930 dra7xx_pcie_writel(dra7xx, PCIECTRL_DRA7XX_CONF_DEVICE_CMD, reg);
939 dra7xx_pcie_writel(dra7xx, PCIECTRL_TI_CONF_DEVICE_TYPE,
946 ret = dra7xx_add_pcie_port(dra7xx, pdev);
956 dra7xx_pcie_writel(dra7xx, PCIECTRL_TI_CONF_DEVICE_TYPE,
963 ret = dra7xx_add_pcie_ep(dra7xx, pdev);
970 dra7xx->mode = mode;
973 IRQF_SHARED, "dra7xx-pcie-main", dra7xx);
985 dra7xx_pcie_disable_phy(dra7xx);
997 struct dra7xx_pcie *dra7xx = dev_get_drvdata(dev);
998 struct dw_pcie *pci = dra7xx->pci;
1001 if (dra7xx->mode != DW_PCIE_RC_TYPE)
1014 struct dra7xx_pcie *dra7xx = dev_get_drvdata(dev);
1015 struct dw_pcie *pci = dra7xx->pci;
1018 if (dra7xx->mode != DW_PCIE_RC_TYPE)
1031 struct dra7xx_pcie *dra7xx = dev_get_drvdata(dev);
1033 dra7xx_pcie_disable_phy(dra7xx);
1040 struct dra7xx_pcie *dra7xx = dev_get_drvdata(dev);
1043 ret = dra7xx_pcie_enable_phy(dra7xx);
1056 struct dra7xx_pcie *dra7xx = dev_get_drvdata(dev);
1059 dra7xx_pcie_stop_link(dra7xx->pci);
1066 dra7xx_pcie_disable_phy(dra7xx);