Lines Matching refs:pcie

164  * @pcie: pointer to PCIe host info
186 struct mtk_pcie *pcie;
222 static void mtk_pcie_subsys_powerdown(struct mtk_pcie *pcie)
224 struct device *dev = pcie->dev;
226 clk_disable_unprepare(pcie->free_ck);
234 struct mtk_pcie *pcie = port->pcie;
235 struct device *dev = pcie->dev;
242 static void mtk_pcie_put_resources(struct mtk_pcie *pcie)
246 list_for_each_entry_safe(port, tmp, &pcie->ports, list) {
258 mtk_pcie_subsys_powerdown(pcie);
336 struct mtk_pcie *pcie = bus->sysdata;
350 list_for_each_entry(port, &pcie->ports, list)
407 dev_dbg(port->pcie->dev, "msi#%d address_hi %#x address_lo %#x\n",
467 dev_err(port->pcie->dev, "trying to free unused MSI#%lu\n",
497 struct fwnode_handle *fwnode = of_node_to_fwnode(port->pcie->dev->of_node);
504 dev_err(port->pcie->dev, "failed to create IRQ domain\n");
511 dev_err(port->pcie->dev, "failed to create MSI domain\n");
533 static void mtk_pcie_irq_teardown(struct mtk_pcie *pcie)
537 list_for_each_entry_safe(port, tmp, &pcie->ports, list) {
570 struct device *dev = port->pcie->dev;
646 struct mtk_pcie *pcie = port->pcie;
647 struct device *dev = pcie->dev;
669 struct mtk_pcie *pcie = port->pcie;
670 struct pci_host_bridge *host = pci_host_bridge_from_priv(pcie);
673 const struct mtk_pcie_soc *soc = port->pcie->soc;
684 if (pcie->base) {
685 val = readl(pcie->base + PCIE_SYS_CFG_V2);
688 writel(val, pcie->base + PCIE_SYS_CFG_V2);
752 struct mtk_pcie *pcie = bus->sysdata;
755 bus->number), pcie->base + PCIE_CFG_ADDR);
757 return pcie->base + PCIE_CFG_DATA + (where & 3);
768 struct mtk_pcie *pcie = port->pcie;
775 val = readl(pcie->base + PCIE_SYS_CFG);
777 writel(val, pcie->base + PCIE_SYS_CFG);
780 val = readl(pcie->base + PCIE_SYS_CFG);
782 writel(val, pcie->base + PCIE_SYS_CFG);
792 val = readl(pcie->base + PCIE_INT_ENABLE);
794 writel(val, pcie->base + PCIE_INT_ENABLE);
805 pcie->base + PCIE_CFG_ADDR);
806 val = readl(pcie->base + PCIE_CFG_DATA);
810 pcie->base + PCIE_CFG_ADDR);
811 writel(val, pcie->base + PCIE_CFG_DATA);
815 pcie->base + PCIE_CFG_ADDR);
816 val = readl(pcie->base + PCIE_CFG_DATA);
820 pcie->base + PCIE_CFG_ADDR);
821 writel(val, pcie->base + PCIE_CFG_DATA);
828 struct mtk_pcie *pcie = port->pcie;
829 struct device *dev = pcie->dev;
883 if (!pcie->soc->startup(port))
907 static int mtk_pcie_parse_port(struct mtk_pcie *pcie,
912 struct device *dev = pcie->dev;
961 snprintf(name, sizeof(name), "pcie-rst%d", slot);
967 snprintf(name, sizeof(name), "pcie-phy%d", slot);
973 port->pcie = pcie;
975 if (pcie->soc->setup_irq) {
976 err = pcie->soc->setup_irq(port, node);
982 list_add_tail(&port->list, &pcie->ports);
987 static int mtk_pcie_subsys_powerup(struct mtk_pcie *pcie)
989 struct device *dev = pcie->dev;
997 pcie->base = devm_ioremap_resource(dev, regs);
998 if (IS_ERR(pcie->base)) {
1000 return PTR_ERR(pcie->base);
1004 pcie->free_ck = devm_clk_get(dev, "free_ck");
1005 if (IS_ERR(pcie->free_ck)) {
1006 if (PTR_ERR(pcie->free_ck) == -EPROBE_DEFER)
1009 pcie->free_ck = NULL;
1016 err = clk_prepare_enable(pcie->free_ck);
1031 static int mtk_pcie_setup(struct mtk_pcie *pcie)
1033 struct device *dev = pcie->dev;
1049 err = mtk_pcie_parse_port(pcie, child, slot);
1054 err = mtk_pcie_subsys_powerup(pcie);
1059 list_for_each_entry_safe(port, tmp, &pcie->ports, list)
1063 if (list_empty(&pcie->ports))
1064 mtk_pcie_subsys_powerdown(pcie);
1075 struct mtk_pcie *pcie;
1079 host = devm_pci_alloc_host_bridge(dev, sizeof(*pcie));
1083 pcie = pci_host_bridge_priv(host);
1085 pcie->dev = dev;
1086 pcie->soc = of_device_get_match_data(dev);
1087 platform_set_drvdata(pdev, pcie);
1088 INIT_LIST_HEAD(&pcie->ports);
1090 err = mtk_pcie_setup(pcie);
1094 host->ops = pcie->soc->ops;
1095 host->sysdata = pcie;
1104 if (!list_empty(&pcie->ports))
1105 mtk_pcie_put_resources(pcie);
1111 static void mtk_pcie_free_resources(struct mtk_pcie *pcie)
1113 struct pci_host_bridge *host = pci_host_bridge_from_priv(pcie);
1121 struct mtk_pcie *pcie = platform_get_drvdata(pdev);
1122 struct pci_host_bridge *host = pci_host_bridge_from_priv(pcie);
1126 mtk_pcie_free_resources(pcie);
1128 mtk_pcie_irq_teardown(pcie);
1130 mtk_pcie_put_resources(pcie);
1137 struct mtk_pcie *pcie = dev_get_drvdata(dev);
1140 if (list_empty(&pcie->ports))
1143 list_for_each_entry(port, &pcie->ports, list) {
1154 clk_disable_unprepare(pcie->free_ck);
1161 struct mtk_pcie *pcie = dev_get_drvdata(dev);
1164 if (list_empty(&pcie->ports))
1167 clk_prepare_enable(pcie->free_ck);
1169 list_for_each_entry_safe(port, tmp, &pcie->ports, list)
1173 if (list_empty(&pcie->ports))
1174 clk_disable_unprepare(pcie->free_ck);
1212 { .compatible = "mediatek,mt2701-pcie", .data = &mtk_pcie_soc_v1 },
1213 { .compatible = "mediatek,mt7623-pcie", .data = &mtk_pcie_soc_v1 },
1214 { .compatible = "mediatek,mt2712-pcie", .data = &mtk_pcie_soc_mt2712 },
1215 { .compatible = "mediatek,mt7622-pcie", .data = &mtk_pcie_soc_mt7622 },
1216 { .compatible = "mediatek,mt7629-pcie", .data = &mtk_pcie_soc_mt7629 },
1224 .name = "mtk-pcie",