Lines Matching refs:pcie

174 	struct mtk_pcie *pcie;  member
222 static void mtk_pcie_subsys_powerdown(struct mtk_pcie *pcie) in mtk_pcie_subsys_powerdown() argument
224 struct device *dev = pcie->dev; in mtk_pcie_subsys_powerdown()
226 clk_disable_unprepare(pcie->free_ck); in mtk_pcie_subsys_powerdown()
236 struct mtk_pcie *pcie = port->pcie; in mtk_pcie_port_free() local
237 struct device *dev = pcie->dev; in mtk_pcie_port_free()
244 static void mtk_pcie_put_resources(struct mtk_pcie *pcie) in mtk_pcie_put_resources() argument
248 list_for_each_entry_safe(port, tmp, &pcie->ports, list) { in mtk_pcie_put_resources()
260 mtk_pcie_subsys_powerdown(pcie); in mtk_pcie_put_resources()
338 struct mtk_pcie *pcie = bus->sysdata; in mtk_pcie_find_port() local
341 list_for_each_entry(port, &pcie->ports, list) in mtk_pcie_find_port()
388 struct mtk_pcie *pcie = port->pcie; in mtk_pcie_startup_port_v2() local
389 struct resource *mem = &pcie->mem; in mtk_pcie_startup_port_v2()
390 const struct mtk_pcie_soc *soc = port->pcie->soc; in mtk_pcie_startup_port_v2()
396 if (pcie->base) { in mtk_pcie_startup_port_v2()
397 val = readl(pcie->base + PCIE_SYS_CFG_V2); in mtk_pcie_startup_port_v2()
400 writel(val, pcie->base + PCIE_SYS_CFG_V2); in mtk_pcie_startup_port_v2()
467 dev_dbg(port->pcie->dev, "msi#%d address_hi %#x address_lo %#x\n", in mtk_compose_msi_msg()
527 dev_err(port->pcie->dev, "trying to free unused MSI#%lu\n", in mtk_pcie_irq_domain_free()
557 struct fwnode_handle *fwnode = of_node_to_fwnode(port->pcie->dev->of_node); in mtk_pcie_allocate_msi_domains()
564 dev_err(port->pcie->dev, "failed to create IRQ domain\n"); in mtk_pcie_allocate_msi_domains()
571 dev_err(port->pcie->dev, "failed to create MSI domain\n"); in mtk_pcie_allocate_msi_domains()
609 struct device *dev = port->pcie->dev; in mtk_pcie_init_irq_domain()
682 struct mtk_pcie *pcie = port->pcie; in mtk_pcie_setup_irq() local
683 struct device *dev = pcie->dev; in mtk_pcie_setup_irq()
702 struct mtk_pcie *pcie = bus->sysdata; in mtk_pcie_map_bus() local
705 bus->number), pcie->base + PCIE_CFG_ADDR); in mtk_pcie_map_bus()
707 return pcie->base + PCIE_CFG_DATA + (where & 3); in mtk_pcie_map_bus()
718 struct mtk_pcie *pcie = port->pcie; in mtk_pcie_startup_port() local
725 val = readl(pcie->base + PCIE_SYS_CFG); in mtk_pcie_startup_port()
727 writel(val, pcie->base + PCIE_SYS_CFG); in mtk_pcie_startup_port()
730 val = readl(pcie->base + PCIE_SYS_CFG); in mtk_pcie_startup_port()
732 writel(val, pcie->base + PCIE_SYS_CFG); in mtk_pcie_startup_port()
742 val = readl(pcie->base + PCIE_INT_ENABLE); in mtk_pcie_startup_port()
744 writel(val, pcie->base + PCIE_INT_ENABLE); in mtk_pcie_startup_port()
755 pcie->base + PCIE_CFG_ADDR); in mtk_pcie_startup_port()
756 val = readl(pcie->base + PCIE_CFG_DATA); in mtk_pcie_startup_port()
760 pcie->base + PCIE_CFG_ADDR); in mtk_pcie_startup_port()
761 writel(val, pcie->base + PCIE_CFG_DATA); in mtk_pcie_startup_port()
765 pcie->base + PCIE_CFG_ADDR); in mtk_pcie_startup_port()
766 val = readl(pcie->base + PCIE_CFG_DATA); in mtk_pcie_startup_port()
770 pcie->base + PCIE_CFG_ADDR); in mtk_pcie_startup_port()
771 writel(val, pcie->base + PCIE_CFG_DATA); in mtk_pcie_startup_port()
778 struct mtk_pcie *pcie = port->pcie; in mtk_pcie_enable_port() local
779 struct device *dev = pcie->dev; in mtk_pcie_enable_port()
833 if (!pcie->soc->startup(port)) in mtk_pcie_enable_port()
857 static int mtk_pcie_parse_port(struct mtk_pcie *pcie, in mtk_pcie_parse_port() argument
863 struct device *dev = pcie->dev; in mtk_pcie_parse_port()
951 port->pcie = pcie; in mtk_pcie_parse_port()
953 if (pcie->soc->setup_irq) { in mtk_pcie_parse_port()
954 err = pcie->soc->setup_irq(port, node); in mtk_pcie_parse_port()
960 list_add_tail(&port->list, &pcie->ports); in mtk_pcie_parse_port()
965 static int mtk_pcie_subsys_powerup(struct mtk_pcie *pcie) in mtk_pcie_subsys_powerup() argument
967 struct device *dev = pcie->dev; in mtk_pcie_subsys_powerup()
975 pcie->base = devm_ioremap_resource(dev, regs); in mtk_pcie_subsys_powerup()
976 if (IS_ERR(pcie->base)) { in mtk_pcie_subsys_powerup()
978 return PTR_ERR(pcie->base); in mtk_pcie_subsys_powerup()
982 pcie->free_ck = devm_clk_get(dev, "free_ck"); in mtk_pcie_subsys_powerup()
983 if (IS_ERR(pcie->free_ck)) { in mtk_pcie_subsys_powerup()
984 if (PTR_ERR(pcie->free_ck) == -EPROBE_DEFER) in mtk_pcie_subsys_powerup()
987 pcie->free_ck = NULL; in mtk_pcie_subsys_powerup()
996 err = clk_prepare_enable(pcie->free_ck); in mtk_pcie_subsys_powerup()
1013 static int mtk_pcie_setup(struct mtk_pcie *pcie) in mtk_pcie_setup() argument
1015 struct device *dev = pcie->dev; in mtk_pcie_setup()
1035 pcie->offset.io = res.start - range.pci_addr; in mtk_pcie_setup()
1037 memcpy(&pcie->pio, &res, sizeof(res)); in mtk_pcie_setup()
1038 pcie->pio.name = node->full_name; in mtk_pcie_setup()
1040 pcie->io.start = range.cpu_addr; in mtk_pcie_setup()
1041 pcie->io.end = range.cpu_addr + range.size - 1; in mtk_pcie_setup()
1042 pcie->io.flags = IORESOURCE_MEM; in mtk_pcie_setup()
1043 pcie->io.name = "I/O"; in mtk_pcie_setup()
1045 memcpy(&res, &pcie->io, sizeof(res)); in mtk_pcie_setup()
1049 pcie->offset.mem = res.start - range.pci_addr; in mtk_pcie_setup()
1051 memcpy(&pcie->mem, &res, sizeof(res)); in mtk_pcie_setup()
1052 pcie->mem.name = "non-prefetchable"; in mtk_pcie_setup()
1057 err = of_pci_parse_bus_range(node, &pcie->busn); in mtk_pcie_setup()
1060 pcie->busn.name = node->name; in mtk_pcie_setup()
1061 pcie->busn.start = 0; in mtk_pcie_setup()
1062 pcie->busn.end = 0xff; in mtk_pcie_setup()
1063 pcie->busn.flags = IORESOURCE_BUS; in mtk_pcie_setup()
1077 err = mtk_pcie_parse_port(pcie, child, slot); in mtk_pcie_setup()
1082 err = mtk_pcie_subsys_powerup(pcie); in mtk_pcie_setup()
1087 list_for_each_entry_safe(port, tmp, &pcie->ports, list) in mtk_pcie_setup()
1091 if (list_empty(&pcie->ports)) in mtk_pcie_setup()
1092 mtk_pcie_subsys_powerdown(pcie); in mtk_pcie_setup()
1097 static int mtk_pcie_request_resources(struct mtk_pcie *pcie) in mtk_pcie_request_resources() argument
1099 struct pci_host_bridge *host = pci_host_bridge_from_priv(pcie); in mtk_pcie_request_resources()
1101 struct device *dev = pcie->dev; in mtk_pcie_request_resources()
1104 pci_add_resource_offset(windows, &pcie->pio, pcie->offset.io); in mtk_pcie_request_resources()
1105 pci_add_resource_offset(windows, &pcie->mem, pcie->offset.mem); in mtk_pcie_request_resources()
1106 pci_add_resource(windows, &pcie->busn); in mtk_pcie_request_resources()
1112 devm_pci_remap_iospace(dev, &pcie->pio, pcie->io.start); in mtk_pcie_request_resources()
1119 struct mtk_pcie *pcie = pci_host_bridge_priv(host); in mtk_pcie_register_host() local
1123 host->busnr = pcie->busn.start; in mtk_pcie_register_host()
1124 host->dev.parent = pcie->dev; in mtk_pcie_register_host()
1125 host->ops = pcie->soc->ops; in mtk_pcie_register_host()
1128 host->sysdata = pcie; in mtk_pcie_register_host()
1148 struct mtk_pcie *pcie; in mtk_pcie_probe() local
1152 host = devm_pci_alloc_host_bridge(dev, sizeof(*pcie)); in mtk_pcie_probe()
1156 pcie = pci_host_bridge_priv(host); in mtk_pcie_probe()
1158 pcie->dev = dev; in mtk_pcie_probe()
1159 pcie->soc = of_device_get_match_data(dev); in mtk_pcie_probe()
1160 platform_set_drvdata(pdev, pcie); in mtk_pcie_probe()
1161 INIT_LIST_HEAD(&pcie->ports); in mtk_pcie_probe()
1163 err = mtk_pcie_setup(pcie); in mtk_pcie_probe()
1167 err = mtk_pcie_request_resources(pcie); in mtk_pcie_probe()
1178 if (!list_empty(&pcie->ports)) in mtk_pcie_probe()
1179 mtk_pcie_put_resources(pcie); in mtk_pcie_probe()