Lines Matching refs:pcie

168  * @pcie: pointer to PCIe host info
190 struct mtk_pcie *pcie;
228 static void mtk_pcie_subsys_powerdown(struct mtk_pcie *pcie)
230 struct device *dev = pcie->dev;
232 clk_disable_unprepare(pcie->free_ck);
240 struct mtk_pcie *pcie = port->pcie;
241 struct device *dev = pcie->dev;
248 static void mtk_pcie_put_resources(struct mtk_pcie *pcie)
252 list_for_each_entry_safe(port, tmp, &pcie->ports, list) {
264 mtk_pcie_subsys_powerdown(pcie);
342 struct mtk_pcie *pcie = bus->sysdata;
356 list_for_each_entry(port, &pcie->ports, list)
406 dev_dbg(port->pcie->dev, "msi#%d address_hi %#x address_lo %#x\n",
466 dev_err(port->pcie->dev, "trying to free unused MSI#%lu\n",
496 struct fwnode_handle *fwnode = of_node_to_fwnode(port->pcie->dev->of_node);
503 dev_err(port->pcie->dev, "failed to create IRQ domain\n");
510 dev_err(port->pcie->dev, "failed to create MSI domain\n");
532 static void mtk_pcie_irq_teardown(struct mtk_pcie *pcie)
536 list_for_each_entry_safe(port, tmp, &pcie->ports, list) {
569 struct device *dev = port->pcie->dev;
641 struct mtk_pcie *pcie = port->pcie;
642 struct device *dev = pcie->dev;
668 struct mtk_pcie *pcie = port->pcie;
669 struct pci_host_bridge *host = pci_host_bridge_from_priv(pcie);
672 const struct mtk_pcie_soc *soc = port->pcie->soc;
683 if (pcie->base) {
684 val = readl(pcie->base + PCIE_SYS_CFG_V2);
687 writel(val, pcie->base + PCIE_SYS_CFG_V2);
688 } else if (pcie->cfg) {
691 regmap_update_bits(pcie->cfg, PCIE_SYS_CFG_V2, val, val);
762 struct mtk_pcie *pcie = bus->sysdata;
765 bus->number), pcie->base + PCIE_CFG_ADDR);
767 return pcie->base + PCIE_CFG_DATA + (where & 3);
778 struct mtk_pcie *pcie = port->pcie;
785 val = readl(pcie->base + PCIE_SYS_CFG);
787 writel(val, pcie->base + PCIE_SYS_CFG);
790 val = readl(pcie->base + PCIE_SYS_CFG);
792 writel(val, pcie->base + PCIE_SYS_CFG);
802 val = readl(pcie->base + PCIE_INT_ENABLE);
804 writel(val, pcie->base + PCIE_INT_ENABLE);
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);
825 pcie->base + PCIE_CFG_ADDR);
826 val = readl(pcie->base + PCIE_CFG_DATA);
830 pcie->base + PCIE_CFG_ADDR);
831 writel(val, pcie->base + PCIE_CFG_DATA);
838 struct mtk_pcie *pcie = port->pcie;
839 struct device *dev = pcie->dev;
893 if (!pcie->soc->startup(port))
917 static int mtk_pcie_parse_port(struct mtk_pcie *pcie,
922 struct device *dev = pcie->dev;
971 snprintf(name, sizeof(name), "pcie-rst%d", slot);
977 snprintf(name, sizeof(name), "pcie-phy%d", slot);
983 port->pcie = pcie;
985 if (pcie->soc->setup_irq) {
986 err = pcie->soc->setup_irq(port, node);
992 list_add_tail(&port->list, &pcie->ports);
997 static int mtk_pcie_subsys_powerup(struct mtk_pcie *pcie)
999 struct device *dev = pcie->dev;
1008 pcie->base = devm_ioremap_resource(dev, regs);
1009 if (IS_ERR(pcie->base))
1010 return PTR_ERR(pcie->base);
1016 pcie->cfg = syscon_node_to_regmap(cfg_node);
1018 if (IS_ERR(pcie->cfg))
1019 return PTR_ERR(pcie->cfg);
1022 pcie->free_ck = devm_clk_get(dev, "free_ck");
1023 if (IS_ERR(pcie->free_ck)) {
1024 if (PTR_ERR(pcie->free_ck) == -EPROBE_DEFER)
1027 pcie->free_ck = NULL;
1034 err = clk_prepare_enable(pcie->free_ck);
1049 static int mtk_pcie_setup(struct mtk_pcie *pcie)
1051 struct device *dev = pcie->dev;
1067 err = mtk_pcie_parse_port(pcie, child, slot);
1072 err = mtk_pcie_parse_port(pcie, node, slot);
1077 err = mtk_pcie_subsys_powerup(pcie);
1082 list_for_each_entry_safe(port, tmp, &pcie->ports, list)
1086 if (list_empty(&pcie->ports))
1087 mtk_pcie_subsys_powerdown(pcie);
1098 struct mtk_pcie *pcie;
1102 host = devm_pci_alloc_host_bridge(dev, sizeof(*pcie));
1106 pcie = pci_host_bridge_priv(host);
1108 pcie->dev = dev;
1109 pcie->soc = of_device_get_match_data(dev);
1110 platform_set_drvdata(pdev, pcie);
1111 INIT_LIST_HEAD(&pcie->ports);
1113 err = mtk_pcie_setup(pcie);
1117 host->ops = pcie->soc->ops;
1118 host->sysdata = pcie;
1119 host->msi_domain = pcie->soc->no_msi;
1128 if (!list_empty(&pcie->ports))
1129 mtk_pcie_put_resources(pcie);
1135 static void mtk_pcie_free_resources(struct mtk_pcie *pcie)
1137 struct pci_host_bridge *host = pci_host_bridge_from_priv(pcie);
1145 struct mtk_pcie *pcie = platform_get_drvdata(pdev);
1146 struct pci_host_bridge *host = pci_host_bridge_from_priv(pcie);
1150 mtk_pcie_free_resources(pcie);
1152 mtk_pcie_irq_teardown(pcie);
1154 mtk_pcie_put_resources(pcie);
1159 struct mtk_pcie *pcie = dev_get_drvdata(dev);
1162 if (list_empty(&pcie->ports))
1165 list_for_each_entry(port, &pcie->ports, list) {
1176 clk_disable_unprepare(pcie->free_ck);
1183 struct mtk_pcie *pcie = dev_get_drvdata(dev);
1186 if (list_empty(&pcie->ports))
1189 clk_prepare_enable(pcie->free_ck);
1191 list_for_each_entry_safe(port, tmp, &pcie->ports, list)
1195 if (list_empty(&pcie->ports))
1196 clk_disable_unprepare(pcie->free_ck);
1235 { .compatible = "mediatek,mt2701-pcie", .data = &mtk_pcie_soc_v1 },
1236 { .compatible = "mediatek,mt7623-pcie", .data = &mtk_pcie_soc_v1 },
1237 { .compatible = "mediatek,mt2712-pcie", .data = &mtk_pcie_soc_mt2712 },
1238 { .compatible = "mediatek,mt7622-pcie", .data = &mtk_pcie_soc_mt7622 },
1239 { .compatible = "mediatek,mt7629-pcie", .data = &mtk_pcie_soc_mt7629 },
1248 .name = "mtk-pcie",