Lines Matching refs:pcie_ep

203 static int qcom_pcie_ep_core_reset(struct qcom_pcie_ep *pcie_ep)
205 struct dw_pcie *pci = &pcie_ep->pci;
209 ret = reset_control_assert(pcie_ep->core_reset);
217 ret = reset_control_deassert(pcie_ep->core_reset);
233 static void qcom_pcie_ep_configure_tcsr(struct qcom_pcie_ep *pcie_ep)
235 if (pcie_ep->perst_map) {
236 regmap_write(pcie_ep->perst_map, pcie_ep->perst_en, 0);
237 regmap_write(pcie_ep->perst_map, pcie_ep->perst_sep_en, 0);
243 struct qcom_pcie_ep *pcie_ep = to_pcie_ep(pci);
246 reg = readl_relaxed(pcie_ep->elbi + ELBI_SYS_STTS);
253 struct qcom_pcie_ep *pcie_ep = to_pcie_ep(pci);
255 enable_irq(pcie_ep->perst_irq);
262 struct qcom_pcie_ep *pcie_ep = to_pcie_ep(pci);
264 disable_irq(pcie_ep->perst_irq);
270 struct qcom_pcie_ep *pcie_ep = to_pcie_ep(pci);
273 writel(1, pcie_ep->elbi + ELBI_CS2_ENABLE);
279 writel(0, pcie_ep->elbi + ELBI_CS2_ENABLE);
282 static void qcom_pcie_ep_icc_update(struct qcom_pcie_ep *pcie_ep)
284 struct dw_pcie *pci = &pcie_ep->pci;
289 if (!pcie_ep->icc_mem)
316 ret = icc_set_bw(pcie_ep->icc_mem, 0, width * bw);
322 static int qcom_pcie_enable_resources(struct qcom_pcie_ep *pcie_ep)
324 struct dw_pcie *pci = &pcie_ep->pci;
327 ret = clk_bulk_prepare_enable(pcie_ep->num_clks, pcie_ep->clks);
331 ret = qcom_pcie_ep_core_reset(pcie_ep);
335 ret = phy_init(pcie_ep->phy);
339 ret = phy_set_mode_ext(pcie_ep->phy, PHY_MODE_PCIE, PHY_MODE_PCIE_EP);
343 ret = phy_power_on(pcie_ep->phy);
354 ret = icc_set_bw(pcie_ep->icc_mem, 0, MBps_to_icc(PCIE_GEN1_BW_MBPS));
364 phy_power_off(pcie_ep->phy);
366 phy_exit(pcie_ep->phy);
368 clk_bulk_disable_unprepare(pcie_ep->num_clks, pcie_ep->clks);
373 static void qcom_pcie_disable_resources(struct qcom_pcie_ep *pcie_ep)
375 icc_set_bw(pcie_ep->icc_mem, 0, 0);
376 phy_power_off(pcie_ep->phy);
377 phy_exit(pcie_ep->phy);
378 clk_bulk_disable_unprepare(pcie_ep->num_clks, pcie_ep->clks);
383 struct qcom_pcie_ep *pcie_ep = to_pcie_ep(pci);
388 ret = qcom_pcie_enable_resources(pcie_ep);
395 gpiod_set_value_cansleep(pcie_ep->wake, 1);
397 gpiod_set_value_cansleep(pcie_ep->wake, 0);
399 qcom_pcie_ep_configure_tcsr(pcie_ep);
402 val = readl_relaxed(pcie_ep->parf + PARF_BDF_TO_SID_CFG);
404 writel_relaxed(val, pcie_ep->parf + PARF_BDF_TO_SID_CFG);
407 val = readl_relaxed(pcie_ep->parf + PARF_DEBUG_INT_EN);
411 writel_relaxed(val, pcie_ep->parf + PARF_DEBUG_INT_EN);
414 writel_relaxed(PARF_DEVICE_TYPE_EP, pcie_ep->parf + PARF_DEVICE_TYPE);
417 val = readl_relaxed(pcie_ep->parf + PARF_PM_CTRL);
419 writel_relaxed(val, pcie_ep->parf + PARF_PM_CTRL);
422 val = readl_relaxed(pcie_ep->parf + PARF_AXI_MSTR_RD_HALT_NO_WRITES);
424 writel_relaxed(val, pcie_ep->parf + PARF_AXI_MSTR_RD_HALT_NO_WRITES);
427 val = readl_relaxed(pcie_ep->parf + PARF_AXI_MSTR_WR_ADDR_HALT);
429 writel_relaxed(val, pcie_ep->parf + PARF_AXI_MSTR_WR_ADDR_HALT);
432 val = readl_relaxed(pcie_ep->parf + PARF_Q2A_FLUSH);
434 writel_relaxed(val, pcie_ep->parf + PARF_Q2A_FLUSH);
442 val = readl_relaxed(pcie_ep->parf + PARF_SYS_CTRL);
447 writel_relaxed(val, pcie_ep->parf + PARF_SYS_CTRL);
450 val = readl_relaxed(pcie_ep->parf + PARF_DB_CTRL);
454 writel_relaxed(val, pcie_ep->parf + PARF_DB_CTRL);
457 val = readl_relaxed(pcie_ep->parf + PARF_CFG_BITS);
459 writel_relaxed(val, pcie_ep->parf + PARF_CFG_BITS);
479 writel_relaxed(0, pcie_ep->parf + PARF_INT_ALL_MASK);
483 writel_relaxed(val, pcie_ep->parf + PARF_INT_ALL_MASK);
485 ret = dw_pcie_ep_init_complete(&pcie_ep->pci.ep);
495 writel_relaxed(pcie_ep->mmio_res->start,
496 pcie_ep->parf + PARF_MHI_BASE_ADDR_LOWER);
497 writel_relaxed(0, pcie_ep->parf + PARF_MHI_BASE_ADDR_UPPER);
500 val = readl_relaxed(pcie_ep->parf + PARF_MHI_CLOCK_RESET_CTRL);
502 writel_relaxed(val, pcie_ep->parf + PARF_MHI_CLOCK_RESET_CTRL);
504 dw_pcie_ep_init_notify(&pcie_ep->pci.ep);
507 val = readl_relaxed(pcie_ep->parf + PARF_LTSSM);
509 writel_relaxed(val, pcie_ep->parf + PARF_LTSSM);
514 qcom_pcie_disable_resources(pcie_ep);
521 struct qcom_pcie_ep *pcie_ep = to_pcie_ep(pci);
523 qcom_pcie_disable_resources(pcie_ep);
524 pcie_ep->link_status = QCOM_PCIE_EP_LINK_DISABLED;
536 struct qcom_pcie_ep *pcie_ep)
539 struct dw_pcie *pci = &pcie_ep->pci;
544 pcie_ep->parf = devm_platform_ioremap_resource_byname(pdev, "parf");
545 if (IS_ERR(pcie_ep->parf))
546 return PTR_ERR(pcie_ep->parf);
555 pcie_ep->elbi = devm_pci_remap_cfg_resource(dev, res);
556 if (IS_ERR(pcie_ep->elbi))
557 return PTR_ERR(pcie_ep->elbi);
559 pcie_ep->mmio_res = platform_get_resource_byname(pdev, IORESOURCE_MEM,
561 if (!pcie_ep->mmio_res) {
566 pcie_ep->mmio = devm_pci_remap_cfg_resource(dev, pcie_ep->mmio_res);
567 if (IS_ERR(pcie_ep->mmio))
568 return PTR_ERR(pcie_ep->mmio);
576 pcie_ep->perst_map = syscon_node_to_regmap(syscon);
578 if (IS_ERR(pcie_ep->perst_map))
579 return PTR_ERR(pcie_ep->perst_map);
582 1, &pcie_ep->perst_en);
589 2, &pcie_ep->perst_sep_en);
599 struct qcom_pcie_ep *pcie_ep)
604 ret = qcom_pcie_ep_get_io_resources(pdev, pcie_ep);
610 pcie_ep->num_clks = devm_clk_bulk_get_all(dev, &pcie_ep->clks);
611 if (pcie_ep->num_clks < 0) {
613 return pcie_ep->num_clks;
616 pcie_ep->core_reset = devm_reset_control_get_exclusive(dev, "core");
617 if (IS_ERR(pcie_ep->core_reset))
618 return PTR_ERR(pcie_ep->core_reset);
620 pcie_ep->reset = devm_gpiod_get(dev, "reset", GPIOD_IN);
621 if (IS_ERR(pcie_ep->reset))
622 return PTR_ERR(pcie_ep->reset);
624 pcie_ep->wake = devm_gpiod_get_optional(dev, "wake", GPIOD_OUT_LOW);
625 if (IS_ERR(pcie_ep->wake))
626 return PTR_ERR(pcie_ep->wake);
628 pcie_ep->phy = devm_phy_optional_get(dev, "pciephy");
629 if (IS_ERR(pcie_ep->phy))
630 ret = PTR_ERR(pcie_ep->phy);
632 pcie_ep->icc_mem = devm_of_icc_get(dev, "pcie-mem");
633 if (IS_ERR(pcie_ep->icc_mem))
634 ret = PTR_ERR(pcie_ep->icc_mem);
642 struct qcom_pcie_ep *pcie_ep = data;
643 struct dw_pcie *pci = &pcie_ep->pci;
645 u32 status = readl_relaxed(pcie_ep->parf + PARF_INT_ALL_STATUS);
646 u32 mask = readl_relaxed(pcie_ep->parf + PARF_INT_ALL_MASK);
649 writel_relaxed(status, pcie_ep->parf + PARF_INT_ALL_CLEAR);
654 pcie_ep->link_status = QCOM_PCIE_EP_LINK_DOWN;
658 pcie_ep->link_status = QCOM_PCIE_EP_LINK_ENABLED;
659 qcom_pcie_ep_icc_update(pcie_ep);
663 val = readl_relaxed(pcie_ep->parf + PARF_PM_CTRL);
665 writel_relaxed(val, pcie_ep->parf + PARF_PM_CTRL);
671 val = readl_relaxed(pcie_ep->parf + PARF_PM_CTRL);
673 writel_relaxed(val, pcie_ep->parf + PARF_PM_CTRL);
678 pcie_ep->link_status = QCOM_PCIE_EP_LINK_UP;
688 struct qcom_pcie_ep *pcie_ep = data;
689 struct dw_pcie *pci = &pcie_ep->pci;
693 perst = gpiod_get_value(pcie_ep->reset);
702 irq_set_irq_type(gpiod_to_irq(pcie_ep->reset),
709 struct qcom_pcie_ep *pcie_ep)
713 pcie_ep->global_irq = platform_get_irq_byname(pdev, "global");
714 if (pcie_ep->global_irq < 0)
715 return pcie_ep->global_irq;
717 ret = devm_request_threaded_irq(&pdev->dev, pcie_ep->global_irq, NULL,
720 "global_irq", pcie_ep);
726 pcie_ep->perst_irq = gpiod_to_irq(pcie_ep->reset);
727 irq_set_status_flags(pcie_ep->perst_irq, IRQ_NOAUTOEN);
728 ret = devm_request_threaded_irq(&pdev->dev, pcie_ep->perst_irq, NULL,
731 "perst_irq", pcie_ep);
734 disable_irq(pcie_ep->global_irq);
759 struct qcom_pcie_ep *pcie_ep = (struct qcom_pcie_ep *)
763 readl_relaxed(pcie_ep->mmio + PARF_DEBUG_CNT_PM_LINKST_IN_L0S));
766 readl_relaxed(pcie_ep->mmio + PARF_DEBUG_CNT_PM_LINKST_IN_L1));
769 readl_relaxed(pcie_ep->mmio + PARF_DEBUG_CNT_AUX_CLK_IN_L1SUB_L1));
772 readl_relaxed(pcie_ep->mmio + PARF_DEBUG_CNT_AUX_CLK_IN_L1SUB_L2));
775 readl_relaxed(pcie_ep->mmio + PARF_DEBUG_CNT_PM_LINKST_IN_L2));
780 static void qcom_pcie_ep_init_debugfs(struct qcom_pcie_ep *pcie_ep)
782 struct dw_pcie *pci = &pcie_ep->pci;
784 debugfs_create_devm_seqfile(pci->dev, "link_transition_count", pcie_ep->debugfs,
820 struct qcom_pcie_ep *pcie_ep;
824 pcie_ep = devm_kzalloc(dev, sizeof(*pcie_ep), GFP_KERNEL);
825 if (!pcie_ep)
828 pcie_ep->pci.dev = dev;
829 pcie_ep->pci.ops = &pci_ops;
830 pcie_ep->pci.ep.ops = &pci_ep_ops;
831 pcie_ep->pci.edma.nr_irqs = 1;
832 platform_set_drvdata(pdev, pcie_ep);
834 ret = qcom_pcie_ep_get_resources(pdev, pcie_ep);
838 ret = qcom_pcie_enable_resources(pcie_ep);
844 ret = dw_pcie_ep_init(&pcie_ep->pci.ep);
850 ret = qcom_pcie_ep_enable_irq_resources(pdev, pcie_ep);
860 pcie_ep->debugfs = debugfs_create_dir(name, NULL);
861 qcom_pcie_ep_init_debugfs(pcie_ep);
866 disable_irq(pcie_ep->global_irq);
867 disable_irq(pcie_ep->perst_irq);
870 qcom_pcie_disable_resources(pcie_ep);
877 struct qcom_pcie_ep *pcie_ep = platform_get_drvdata(pdev);
879 disable_irq(pcie_ep->global_irq);
880 disable_irq(pcie_ep->perst_irq);
882 debugfs_remove_recursive(pcie_ep->debugfs);
884 if (pcie_ep->link_status == QCOM_PCIE_EP_LINK_DISABLED)
887 qcom_pcie_disable_resources(pcie_ep);