Lines Matching refs:pcie
186 struct mtk_pcie *pcie; member
225 static void mtk_pcie_subsys_powerdown(struct mtk_pcie *pcie) in mtk_pcie_subsys_powerdown() argument
227 struct device *dev = pcie->dev; in mtk_pcie_subsys_powerdown()
229 clk_disable_unprepare(pcie->free_ck); in mtk_pcie_subsys_powerdown()
237 struct mtk_pcie *pcie = port->pcie; in mtk_pcie_port_free() local
238 struct device *dev = pcie->dev; in mtk_pcie_port_free()
245 static void mtk_pcie_put_resources(struct mtk_pcie *pcie) in mtk_pcie_put_resources() argument
249 list_for_each_entry_safe(port, tmp, &pcie->ports, list) { in mtk_pcie_put_resources()
261 mtk_pcie_subsys_powerdown(pcie); in mtk_pcie_put_resources()
339 struct mtk_pcie *pcie = bus->sysdata; in mtk_pcie_find_port() local
353 list_for_each_entry(port, &pcie->ports, list) in mtk_pcie_find_port()
410 dev_dbg(port->pcie->dev, "msi#%d address_hi %#x address_lo %#x\n", in mtk_compose_msi_msg()
470 dev_err(port->pcie->dev, "trying to free unused MSI#%lu\n", in mtk_pcie_irq_domain_free()
500 struct fwnode_handle *fwnode = of_node_to_fwnode(port->pcie->dev->of_node); in mtk_pcie_allocate_msi_domains()
507 dev_err(port->pcie->dev, "failed to create IRQ domain\n"); in mtk_pcie_allocate_msi_domains()
514 dev_err(port->pcie->dev, "failed to create MSI domain\n"); in mtk_pcie_allocate_msi_domains()
536 static void mtk_pcie_irq_teardown(struct mtk_pcie *pcie) in mtk_pcie_irq_teardown() argument
540 list_for_each_entry_safe(port, tmp, &pcie->ports, list) { in mtk_pcie_irq_teardown()
573 struct device *dev = port->pcie->dev; in mtk_pcie_init_irq_domain()
643 struct mtk_pcie *pcie = port->pcie; in mtk_pcie_setup_irq() local
644 struct device *dev = pcie->dev; in mtk_pcie_setup_irq()
663 struct mtk_pcie *pcie = port->pcie; in mtk_pcie_startup_port_v2() local
664 struct resource *mem = &pcie->mem; in mtk_pcie_startup_port_v2()
665 const struct mtk_pcie_soc *soc = port->pcie->soc; in mtk_pcie_startup_port_v2()
670 if (pcie->base) { in mtk_pcie_startup_port_v2()
671 val = readl(pcie->base + PCIE_SYS_CFG_V2); in mtk_pcie_startup_port_v2()
674 writel(val, pcie->base + PCIE_SYS_CFG_V2); in mtk_pcie_startup_port_v2()
738 struct mtk_pcie *pcie = bus->sysdata; in mtk_pcie_map_bus() local
741 bus->number), pcie->base + PCIE_CFG_ADDR); in mtk_pcie_map_bus()
743 return pcie->base + PCIE_CFG_DATA + (where & 3); in mtk_pcie_map_bus()
754 struct mtk_pcie *pcie = port->pcie; in mtk_pcie_startup_port() local
761 val = readl(pcie->base + PCIE_SYS_CFG); in mtk_pcie_startup_port()
763 writel(val, pcie->base + PCIE_SYS_CFG); in mtk_pcie_startup_port()
766 val = readl(pcie->base + PCIE_SYS_CFG); in mtk_pcie_startup_port()
768 writel(val, pcie->base + PCIE_SYS_CFG); in mtk_pcie_startup_port()
778 val = readl(pcie->base + PCIE_INT_ENABLE); in mtk_pcie_startup_port()
780 writel(val, pcie->base + PCIE_INT_ENABLE); in mtk_pcie_startup_port()
791 pcie->base + PCIE_CFG_ADDR); in mtk_pcie_startup_port()
792 val = readl(pcie->base + PCIE_CFG_DATA); in mtk_pcie_startup_port()
796 pcie->base + PCIE_CFG_ADDR); in mtk_pcie_startup_port()
797 writel(val, pcie->base + PCIE_CFG_DATA); in mtk_pcie_startup_port()
801 pcie->base + PCIE_CFG_ADDR); in mtk_pcie_startup_port()
802 val = readl(pcie->base + PCIE_CFG_DATA); in mtk_pcie_startup_port()
806 pcie->base + PCIE_CFG_ADDR); in mtk_pcie_startup_port()
807 writel(val, pcie->base + PCIE_CFG_DATA); in mtk_pcie_startup_port()
814 struct mtk_pcie *pcie = port->pcie; in mtk_pcie_enable_port() local
815 struct device *dev = pcie->dev; in mtk_pcie_enable_port()
869 if (!pcie->soc->startup(port)) in mtk_pcie_enable_port()
893 static int mtk_pcie_parse_port(struct mtk_pcie *pcie, in mtk_pcie_parse_port() argument
899 struct device *dev = pcie->dev; in mtk_pcie_parse_port()
961 port->pcie = pcie; in mtk_pcie_parse_port()
963 if (pcie->soc->setup_irq) { in mtk_pcie_parse_port()
964 err = pcie->soc->setup_irq(port, node); in mtk_pcie_parse_port()
970 list_add_tail(&port->list, &pcie->ports); in mtk_pcie_parse_port()
975 static int mtk_pcie_subsys_powerup(struct mtk_pcie *pcie) in mtk_pcie_subsys_powerup() argument
977 struct device *dev = pcie->dev; in mtk_pcie_subsys_powerup()
985 pcie->base = devm_ioremap_resource(dev, regs); in mtk_pcie_subsys_powerup()
986 if (IS_ERR(pcie->base)) { in mtk_pcie_subsys_powerup()
988 return PTR_ERR(pcie->base); in mtk_pcie_subsys_powerup()
992 pcie->free_ck = devm_clk_get(dev, "free_ck"); in mtk_pcie_subsys_powerup()
993 if (IS_ERR(pcie->free_ck)) { in mtk_pcie_subsys_powerup()
994 if (PTR_ERR(pcie->free_ck) == -EPROBE_DEFER) in mtk_pcie_subsys_powerup()
997 pcie->free_ck = NULL; in mtk_pcie_subsys_powerup()
1004 err = clk_prepare_enable(pcie->free_ck); in mtk_pcie_subsys_powerup()
1019 static int mtk_pcie_setup(struct mtk_pcie *pcie) in mtk_pcie_setup() argument
1021 struct device *dev = pcie->dev; in mtk_pcie_setup()
1024 struct pci_host_bridge *host = pci_host_bridge_from_priv(pcie); in mtk_pcie_setup()
1051 memcpy(&pcie->mem, win->res, sizeof(*win->res)); in mtk_pcie_setup()
1052 pcie->mem.name = "non-prefetchable"; in mtk_pcie_setup()
1055 pcie->busnr = win->res->start; in mtk_pcie_setup()
1071 err = mtk_pcie_parse_port(pcie, child, slot); in mtk_pcie_setup()
1076 err = mtk_pcie_subsys_powerup(pcie); in mtk_pcie_setup()
1081 list_for_each_entry_safe(port, tmp, &pcie->ports, list) in mtk_pcie_setup()
1085 if (list_empty(&pcie->ports)) in mtk_pcie_setup()
1086 mtk_pcie_subsys_powerdown(pcie); in mtk_pcie_setup()
1094 struct mtk_pcie *pcie; in mtk_pcie_probe() local
1098 host = devm_pci_alloc_host_bridge(dev, sizeof(*pcie)); in mtk_pcie_probe()
1102 pcie = pci_host_bridge_priv(host); in mtk_pcie_probe()
1104 pcie->dev = dev; in mtk_pcie_probe()
1105 pcie->soc = of_device_get_match_data(dev); in mtk_pcie_probe()
1106 platform_set_drvdata(pdev, pcie); in mtk_pcie_probe()
1107 INIT_LIST_HEAD(&pcie->ports); in mtk_pcie_probe()
1109 err = mtk_pcie_setup(pcie); in mtk_pcie_probe()
1113 host->busnr = pcie->busnr; in mtk_pcie_probe()
1114 host->dev.parent = pcie->dev; in mtk_pcie_probe()
1115 host->ops = pcie->soc->ops; in mtk_pcie_probe()
1118 host->sysdata = pcie; in mtk_pcie_probe()
1127 if (!list_empty(&pcie->ports)) in mtk_pcie_probe()
1128 mtk_pcie_put_resources(pcie); in mtk_pcie_probe()
1134 static void mtk_pcie_free_resources(struct mtk_pcie *pcie) in mtk_pcie_free_resources() argument
1136 struct pci_host_bridge *host = pci_host_bridge_from_priv(pcie); in mtk_pcie_free_resources()
1144 struct mtk_pcie *pcie = platform_get_drvdata(pdev); in mtk_pcie_remove() local
1145 struct pci_host_bridge *host = pci_host_bridge_from_priv(pcie); in mtk_pcie_remove()
1149 mtk_pcie_free_resources(pcie); in mtk_pcie_remove()
1151 mtk_pcie_irq_teardown(pcie); in mtk_pcie_remove()
1153 mtk_pcie_put_resources(pcie); in mtk_pcie_remove()
1160 struct mtk_pcie *pcie = dev_get_drvdata(dev); in mtk_pcie_suspend_noirq() local
1163 if (list_empty(&pcie->ports)) in mtk_pcie_suspend_noirq()
1166 list_for_each_entry(port, &pcie->ports, list) { in mtk_pcie_suspend_noirq()
1177 clk_disable_unprepare(pcie->free_ck); in mtk_pcie_suspend_noirq()
1184 struct mtk_pcie *pcie = dev_get_drvdata(dev); in mtk_pcie_resume_noirq() local
1187 if (list_empty(&pcie->ports)) in mtk_pcie_resume_noirq()
1190 clk_prepare_enable(pcie->free_ck); in mtk_pcie_resume_noirq()
1192 list_for_each_entry_safe(port, tmp, &pcie->ports, list) in mtk_pcie_resume_noirq()
1196 if (list_empty(&pcie->ports)) in mtk_pcie_resume_noirq()
1197 clk_disable_unprepare(pcie->free_ck); in mtk_pcie_resume_noirq()