Lines Matching refs:port
178 static int mtk_pcie_check_cfg_cpld(struct mtk_pcie_port *port) in mtk_pcie_check_cfg_cpld() argument
183 err = readl_poll_timeout(port->base + PCIE_APP_TLP_REQ, val, in mtk_pcie_check_cfg_cpld()
188 if (readl(port->base + PCIE_APP_TLP_REQ) & APP_CPL_STATUS) in mtk_pcie_check_cfg_cpld()
194 static int mtk_pcie_hw_rd_cfg(struct mtk_pcie_port *port, u32 bus, pci_dev_t devfn, in mtk_pcie_hw_rd_cfg() argument
200 port->base + PCIE_CFG_HEADER0); in mtk_pcie_hw_rd_cfg()
201 writel(CFG_HEADER_DW1(where, size), port->base + PCIE_CFG_HEADER1); in mtk_pcie_hw_rd_cfg()
203 port->base + PCIE_CFG_HEADER2); in mtk_pcie_hw_rd_cfg()
206 tmp = readl(port->base + PCIE_APP_TLP_REQ); in mtk_pcie_hw_rd_cfg()
208 writel(tmp, port->base + PCIE_APP_TLP_REQ); in mtk_pcie_hw_rd_cfg()
211 if (mtk_pcie_check_cfg_cpld(port)) in mtk_pcie_hw_rd_cfg()
215 *val = readl(port->base + PCIE_CFG_RDATA); in mtk_pcie_hw_rd_cfg()
225 static int mtk_pcie_hw_wr_cfg(struct mtk_pcie_port *port, u32 bus, pci_dev_t devfn, in mtk_pcie_hw_wr_cfg() argument
230 port->base + PCIE_CFG_HEADER0); in mtk_pcie_hw_wr_cfg()
231 writel(CFG_HEADER_DW1(where, size), port->base + PCIE_CFG_HEADER1); in mtk_pcie_hw_wr_cfg()
233 port->base + PCIE_CFG_HEADER2); in mtk_pcie_hw_wr_cfg()
237 writel(val, port->base + PCIE_CFG_WDATA); in mtk_pcie_hw_wr_cfg()
240 val = readl(port->base + PCIE_APP_TLP_REQ); in mtk_pcie_hw_wr_cfg()
242 writel(val, port->base + PCIE_APP_TLP_REQ); in mtk_pcie_hw_wr_cfg()
245 return mtk_pcie_check_cfg_cpld(port); in mtk_pcie_hw_wr_cfg()
252 struct mtk_pcie_port *port; in mtk_pcie_find_port() local
270 list_for_each_entry(port, &pcie->ports, list) { in mtk_pcie_find_port()
271 if ((PCI_BUS(bdf) == 0) && (PCI_DEV(bdf) == port->slot)) in mtk_pcie_find_port()
272 return port; in mtk_pcie_find_port()
275 PCI_DEV(pplat->devfn) == port->slot) in mtk_pcie_find_port()
276 return port; in mtk_pcie_find_port()
286 struct mtk_pcie_port *port; in mtk_pcie_config_read() local
289 port = mtk_pcie_find_port(bus, bdf); in mtk_pcie_config_read()
290 if (!port) { in mtk_pcie_config_read()
295 ret = mtk_pcie_hw_rd_cfg(port, PCI_BUS(bdf), bdf, offset, (1 << size), valuep); in mtk_pcie_config_read()
306 struct mtk_pcie_port *port; in mtk_pcie_config_write() local
308 port = mtk_pcie_find_port(bus, bdf); in mtk_pcie_config_write()
309 if (!port) in mtk_pcie_config_write()
316 return mtk_pcie_hw_wr_cfg(port, PCI_BUS(bdf), bdf, offset, (1 << size), value); in mtk_pcie_config_write()
324 static void mtk_pcie_port_free(struct mtk_pcie_port *port) in mtk_pcie_port_free() argument
326 list_del(&port->list); in mtk_pcie_port_free()
327 free(port); in mtk_pcie_port_free()
330 static int mtk_pcie_startup_port(struct mtk_pcie_port *port) in mtk_pcie_startup_port() argument
332 struct mtk_pcie *pcie = port->pcie; in mtk_pcie_startup_port()
333 u32 slot = PCI_DEV(port->slot << 11); in mtk_pcie_startup_port()
338 setbits_le32(pcie->base + PCIE_SYS_CFG, PCIE_PORT_PERST(port->slot)); in mtk_pcie_startup_port()
340 clrbits_le32(pcie->base + PCIE_SYS_CFG, PCIE_PORT_PERST(port->slot)); in mtk_pcie_startup_port()
343 err = readl_poll_timeout(port->base + PCIE_LINK_STATUS, val, in mtk_pcie_startup_port()
350 PCIE_PORT_INT_EN(port->slot)); in mtk_pcie_startup_port()
354 port->base + PCIE_BAR0_SETUP); in mtk_pcie_startup_port()
357 writel(PCIE_CLASS_CODE | PCIE_REVISION_ID, port->base + PCIE_CLASS); in mtk_pcie_startup_port()
373 static int mtk_pcie_startup_port_v2(struct mtk_pcie_port *port) in mtk_pcie_startup_port_v2() argument
375 struct mtk_pcie *pcie = port->pcie; in mtk_pcie_startup_port_v2()
384 val |= PCIE_CSR_LTSSM_EN(port->slot) | in mtk_pcie_startup_port_v2()
385 PCIE_CSR_ASPM_L1_EN(port->slot); in mtk_pcie_startup_port_v2()
390 writel(0, port->base + PCIE_RST_CTRL); in mtk_pcie_startup_port_v2()
397 writel(PCIE_LINKDOWN_RST_EN, port->base + PCIE_RST_CTRL); in mtk_pcie_startup_port_v2()
401 val = readl(port->base + PCIE_RST_CTRL); in mtk_pcie_startup_port_v2()
403 writel(val, port->base + PCIE_RST_CTRL); in mtk_pcie_startup_port_v2()
407 writel(val, port->base + PCIE_RST_CTRL); in mtk_pcie_startup_port_v2()
411 writew(val, port->base + PCIE_CONF_VEND_ID); in mtk_pcie_startup_port_v2()
414 writew(val, port->base + PCIE_CONF_CLASS_ID); in mtk_pcie_startup_port_v2()
417 err = readl_poll_timeout(port->base + PCIE_LINK_STATUS_V2, val, in mtk_pcie_startup_port_v2()
428 writel(val, port->base + PCIE_AHB_TRANS_BASE0_L); in mtk_pcie_startup_port_v2()
431 writel(val, port->base + PCIE_AHB_TRANS_BASE0_H); in mtk_pcie_startup_port_v2()
435 writel(val, port->base + PCIE_AXI_WINDOW0); in mtk_pcie_startup_port_v2()
440 static void mtk_pcie_enable_port(struct mtk_pcie_port *port) in mtk_pcie_enable_port() argument
444 err = clk_enable(&port->sys_ck); in mtk_pcie_enable_port()
448 err = reset_assert(&port->reset); in mtk_pcie_enable_port()
452 err = reset_deassert(&port->reset); in mtk_pcie_enable_port()
456 err = generic_phy_init(&port->phy); in mtk_pcie_enable_port()
460 err = generic_phy_power_on(&port->phy); in mtk_pcie_enable_port()
464 if (!mtk_pcie_startup_port(port)) in mtk_pcie_enable_port()
467 pr_err("Port%d link down\n", port->slot); in mtk_pcie_enable_port()
469 generic_phy_power_off(&port->phy); in mtk_pcie_enable_port()
471 generic_phy_exit(&port->phy); in mtk_pcie_enable_port()
474 clk_disable(&port->sys_ck); in mtk_pcie_enable_port()
476 mtk_pcie_port_free(port); in mtk_pcie_enable_port()
479 static void mtk_pcie_enable_port_v2(struct mtk_pcie_port *port) in mtk_pcie_enable_port_v2() argument
483 err = clk_enable(&port->sys_ck); in mtk_pcie_enable_port_v2()
489 err = clk_enable(&port->ahb_ck); in mtk_pcie_enable_port_v2()
495 err = clk_enable(&port->aux_ck); in mtk_pcie_enable_port_v2()
501 err = clk_enable(&port->axi_ck); in mtk_pcie_enable_port_v2()
507 err = clk_enable(&port->obff_ck); in mtk_pcie_enable_port_v2()
513 err = clk_enable(&port->pipe_ck); in mtk_pcie_enable_port_v2()
519 err = mtk_pcie_startup_port_v2(port); in mtk_pcie_enable_port_v2()
523 pr_err("Port%d link down\n", port->slot); in mtk_pcie_enable_port_v2()
525 mtk_pcie_port_free(port); in mtk_pcie_enable_port_v2()
531 struct mtk_pcie_port *port; in mtk_pcie_parse_port() local
535 port = devm_kzalloc(dev, sizeof(*port), GFP_KERNEL); in mtk_pcie_parse_port()
536 if (!port) in mtk_pcie_parse_port()
540 port->base = dev_remap_addr_name(dev, name); in mtk_pcie_parse_port()
541 if (!port->base) in mtk_pcie_parse_port()
545 err = clk_get_by_name(dev, name, &port->sys_ck); in mtk_pcie_parse_port()
549 err = reset_get_by_index(dev, slot, &port->reset); in mtk_pcie_parse_port()
553 err = generic_phy_get_by_index(dev, slot, &port->phy); in mtk_pcie_parse_port()
557 port->slot = slot; in mtk_pcie_parse_port()
558 port->pcie = pcie; in mtk_pcie_parse_port()
560 INIT_LIST_HEAD(&port->list); in mtk_pcie_parse_port()
561 list_add_tail(&port->list, &pcie->ports); in mtk_pcie_parse_port()
569 struct mtk_pcie_port *port; in mtk_pcie_parse_port_v2() local
573 port = devm_kzalloc(dev, sizeof(*port), GFP_KERNEL); in mtk_pcie_parse_port_v2()
574 if (!port) in mtk_pcie_parse_port_v2()
578 port->base = dev_remap_addr_name(dev, name); in mtk_pcie_parse_port_v2()
579 if (!port->base) { in mtk_pcie_parse_port_v2()
585 err = clk_get_by_name(dev, name, &port->sys_ck); in mtk_pcie_parse_port_v2()
592 err = clk_get_by_name(dev, name, &port->ahb_ck); in mtk_pcie_parse_port_v2()
599 err = clk_get_by_name(dev, name, &port->aux_ck); in mtk_pcie_parse_port_v2()
606 err = clk_get_by_name(dev, name, &port->axi_ck); in mtk_pcie_parse_port_v2()
613 err = clk_get_by_name(dev, name, &port->obff_ck); in mtk_pcie_parse_port_v2()
620 err = clk_get_by_name(dev, name, &port->pipe_ck); in mtk_pcie_parse_port_v2()
626 port->slot = slot; in mtk_pcie_parse_port_v2()
627 port->pcie = pcie; in mtk_pcie_parse_port_v2()
629 INIT_LIST_HEAD(&port->list); in mtk_pcie_parse_port_v2()
630 list_add_tail(&port->list, &pcie->ports); in mtk_pcie_parse_port_v2()
638 struct mtk_pcie_port *port, *tmp; in mtk_pcie_probe() local
676 list_for_each_entry_safe(port, tmp, &pcie->ports, list) in mtk_pcie_probe()
677 mtk_pcie_enable_port(port); in mtk_pcie_probe()
685 struct mtk_pcie_port *port, *tmp; in mtk_pcie_probe_v2() local
714 list_for_each_entry_safe(port, tmp, &pcie->ports, list) in mtk_pcie_probe_v2()
715 mtk_pcie_enable_port_v2(port); in mtk_pcie_probe_v2()