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);
524 if (pcie_ep->link_status == QCOM_PCIE_EP_LINK_DISABLED) {
529 qcom_pcie_disable_resources(pcie_ep);
530 pcie_ep->link_status = QCOM_PCIE_EP_LINK_DISABLED;
542 struct qcom_pcie_ep *pcie_ep)
545 struct dw_pcie *pci = &pcie_ep->pci;
550 pcie_ep->parf = devm_platform_ioremap_resource_byname(pdev, "parf");
551 if (IS_ERR(pcie_ep->parf))
552 return PTR_ERR(pcie_ep->parf);
561 pcie_ep->elbi = devm_pci_remap_cfg_resource(dev, res);
562 if (IS_ERR(pcie_ep->elbi))
563 return PTR_ERR(pcie_ep->elbi);
565 pcie_ep->mmio_res = platform_get_resource_byname(pdev, IORESOURCE_MEM,
567 if (!pcie_ep->mmio_res) {
572 pcie_ep->mmio = devm_pci_remap_cfg_resource(dev, pcie_ep->mmio_res);
573 if (IS_ERR(pcie_ep->mmio))
574 return PTR_ERR(pcie_ep->mmio);
582 pcie_ep->perst_map = syscon_node_to_regmap(syscon);
584 if (IS_ERR(pcie_ep->perst_map))
585 return PTR_ERR(pcie_ep->perst_map);
588 1, &pcie_ep->perst_en);
595 2, &pcie_ep->perst_sep_en);
605 struct qcom_pcie_ep *pcie_ep)
610 ret = qcom_pcie_ep_get_io_resources(pdev, pcie_ep);
616 pcie_ep->num_clks = devm_clk_bulk_get_all(dev, &pcie_ep->clks);
617 if (pcie_ep->num_clks < 0) {
619 return pcie_ep->num_clks;
622 pcie_ep->core_reset = devm_reset_control_get_exclusive(dev, "core");
623 if (IS_ERR(pcie_ep->core_reset))
624 return PTR_ERR(pcie_ep->core_reset);
626 pcie_ep->reset = devm_gpiod_get(dev, "reset", GPIOD_IN);
627 if (IS_ERR(pcie_ep->reset))
628 return PTR_ERR(pcie_ep->reset);
630 pcie_ep->wake = devm_gpiod_get_optional(dev, "wake", GPIOD_OUT_LOW);
631 if (IS_ERR(pcie_ep->wake))
632 return PTR_ERR(pcie_ep->wake);
634 pcie_ep->phy = devm_phy_optional_get(dev, "pciephy");
635 if (IS_ERR(pcie_ep->phy))
636 ret = PTR_ERR(pcie_ep->phy);
638 pcie_ep->icc_mem = devm_of_icc_get(dev, "pcie-mem");
639 if (IS_ERR(pcie_ep->icc_mem))
640 ret = PTR_ERR(pcie_ep->icc_mem);
648 struct qcom_pcie_ep *pcie_ep = data;
649 struct dw_pcie *pci = &pcie_ep->pci;
651 u32 status = readl_relaxed(pcie_ep->parf + PARF_INT_ALL_STATUS);
652 u32 mask = readl_relaxed(pcie_ep->parf + PARF_INT_ALL_MASK);
655 writel_relaxed(status, pcie_ep->parf + PARF_INT_ALL_CLEAR);
660 pcie_ep->link_status = QCOM_PCIE_EP_LINK_DOWN;
664 pcie_ep->link_status = QCOM_PCIE_EP_LINK_ENABLED;
665 qcom_pcie_ep_icc_update(pcie_ep);
669 val = readl_relaxed(pcie_ep->parf + PARF_PM_CTRL);
671 writel_relaxed(val, pcie_ep->parf + PARF_PM_CTRL);
677 val = readl_relaxed(pcie_ep->parf + PARF_PM_CTRL);
679 writel_relaxed(val, pcie_ep->parf + PARF_PM_CTRL);
684 pcie_ep->link_status = QCOM_PCIE_EP_LINK_UP;
694 struct qcom_pcie_ep *pcie_ep = data;
695 struct dw_pcie *pci = &pcie_ep->pci;
699 perst = gpiod_get_value(pcie_ep->reset);
708 irq_set_irq_type(gpiod_to_irq(pcie_ep->reset),
715 struct qcom_pcie_ep *pcie_ep)
719 pcie_ep->global_irq = platform_get_irq_byname(pdev, "global");
720 if (pcie_ep->global_irq < 0)
721 return pcie_ep->global_irq;
723 ret = devm_request_threaded_irq(&pdev->dev, pcie_ep->global_irq, NULL,
726 "global_irq", pcie_ep);
732 pcie_ep->perst_irq = gpiod_to_irq(pcie_ep->reset);
733 irq_set_status_flags(pcie_ep->perst_irq, IRQ_NOAUTOEN);
734 ret = devm_request_threaded_irq(&pdev->dev, pcie_ep->perst_irq, NULL,
737 "perst_irq", pcie_ep);
740 disable_irq(pcie_ep->global_irq);
765 struct qcom_pcie_ep *pcie_ep = (struct qcom_pcie_ep *)
769 readl_relaxed(pcie_ep->mmio + PARF_DEBUG_CNT_PM_LINKST_IN_L0S));
772 readl_relaxed(pcie_ep->mmio + PARF_DEBUG_CNT_PM_LINKST_IN_L1));
775 readl_relaxed(pcie_ep->mmio + PARF_DEBUG_CNT_AUX_CLK_IN_L1SUB_L1));
778 readl_relaxed(pcie_ep->mmio + PARF_DEBUG_CNT_AUX_CLK_IN_L1SUB_L2));
781 readl_relaxed(pcie_ep->mmio + PARF_DEBUG_CNT_PM_LINKST_IN_L2));
786 static void qcom_pcie_ep_init_debugfs(struct qcom_pcie_ep *pcie_ep)
788 struct dw_pcie *pci = &pcie_ep->pci;
790 debugfs_create_devm_seqfile(pci->dev, "link_transition_count", pcie_ep->debugfs,
826 struct qcom_pcie_ep *pcie_ep;
830 pcie_ep = devm_kzalloc(dev, sizeof(*pcie_ep), GFP_KERNEL);
831 if (!pcie_ep)
834 pcie_ep->pci.dev = dev;
835 pcie_ep->pci.ops = &pci_ops;
836 pcie_ep->pci.ep.ops = &pci_ep_ops;
837 pcie_ep->pci.edma.nr_irqs = 1;
838 platform_set_drvdata(pdev, pcie_ep);
840 ret = qcom_pcie_ep_get_resources(pdev, pcie_ep);
844 ret = qcom_pcie_enable_resources(pcie_ep);
850 ret = dw_pcie_ep_init(&pcie_ep->pci.ep);
856 ret = qcom_pcie_ep_enable_irq_resources(pdev, pcie_ep);
866 pcie_ep->debugfs = debugfs_create_dir(name, NULL);
867 qcom_pcie_ep_init_debugfs(pcie_ep);
872 disable_irq(pcie_ep->global_irq);
873 disable_irq(pcie_ep->perst_irq);
876 qcom_pcie_disable_resources(pcie_ep);
883 struct qcom_pcie_ep *pcie_ep = platform_get_drvdata(pdev);
885 disable_irq(pcie_ep->global_irq);
886 disable_irq(pcie_ep->perst_irq);
888 debugfs_remove_recursive(pcie_ep->debugfs);
890 if (pcie_ep->link_status == QCOM_PCIE_EP_LINK_DISABLED)
893 qcom_pcie_disable_resources(pcie_ep);