Lines Matching defs:pcie_ep
230 static int qcom_pcie_ep_core_reset(struct qcom_pcie_ep *pcie_ep)
232 struct dw_pcie *pci = &pcie_ep->pci;
236 ret = reset_control_assert(pcie_ep->core_reset);
244 ret = reset_control_deassert(pcie_ep->core_reset);
260 static void qcom_pcie_ep_configure_tcsr(struct qcom_pcie_ep *pcie_ep)
262 if (pcie_ep->perst_map) {
263 regmap_write(pcie_ep->perst_map, pcie_ep->perst_en, 0);
264 regmap_write(pcie_ep->perst_map, pcie_ep->perst_sep_en, 0);
270 struct qcom_pcie_ep *pcie_ep = to_pcie_ep(pci);
273 reg = readl_relaxed(pcie_ep->elbi + ELBI_SYS_STTS);
280 struct qcom_pcie_ep *pcie_ep = to_pcie_ep(pci);
282 enable_irq(pcie_ep->perst_irq);
289 struct qcom_pcie_ep *pcie_ep = to_pcie_ep(pci);
291 disable_irq(pcie_ep->perst_irq);
297 struct qcom_pcie_ep *pcie_ep = to_pcie_ep(pci);
300 writel(1, pcie_ep->elbi + ELBI_CS2_ENABLE);
306 writel(0, pcie_ep->elbi + ELBI_CS2_ENABLE);
309 static void qcom_pcie_ep_icc_update(struct qcom_pcie_ep *pcie_ep)
311 struct dw_pcie *pci = &pcie_ep->pci;
316 if (!pcie_ep->icc_mem)
325 ret = icc_set_bw(pcie_ep->icc_mem, 0, width * QCOM_PCIE_LINK_SPEED_TO_BW(speed));
331 static int qcom_pcie_enable_resources(struct qcom_pcie_ep *pcie_ep)
333 struct dw_pcie *pci = &pcie_ep->pci;
336 ret = clk_bulk_prepare_enable(pcie_ep->num_clks, pcie_ep->clks);
340 ret = qcom_pcie_ep_core_reset(pcie_ep);
344 ret = phy_init(pcie_ep->phy);
348 ret = phy_set_mode_ext(pcie_ep->phy, PHY_MODE_PCIE, PHY_MODE_PCIE_EP);
352 ret = phy_power_on(pcie_ep->phy);
363 ret = icc_set_bw(pcie_ep->icc_mem, 0, QCOM_PCIE_LINK_SPEED_TO_BW(1));
373 phy_power_off(pcie_ep->phy);
375 phy_exit(pcie_ep->phy);
377 clk_bulk_disable_unprepare(pcie_ep->num_clks, pcie_ep->clks);
382 static void qcom_pcie_disable_resources(struct qcom_pcie_ep *pcie_ep)
384 icc_set_bw(pcie_ep->icc_mem, 0, 0);
385 phy_power_off(pcie_ep->phy);
386 phy_exit(pcie_ep->phy);
387 clk_bulk_disable_unprepare(pcie_ep->num_clks, pcie_ep->clks);
392 struct qcom_pcie_ep *pcie_ep = to_pcie_ep(pci);
397 ret = qcom_pcie_enable_resources(pcie_ep);
408 gpiod_set_value_cansleep(pcie_ep->wake, 1);
410 gpiod_set_value_cansleep(pcie_ep->wake, 0);
412 qcom_pcie_ep_configure_tcsr(pcie_ep);
415 val = readl_relaxed(pcie_ep->parf + PARF_BDF_TO_SID_CFG);
417 writel_relaxed(val, pcie_ep->parf + PARF_BDF_TO_SID_CFG);
420 val = readl_relaxed(pcie_ep->parf + PARF_DEBUG_INT_EN);
424 writel_relaxed(val, pcie_ep->parf + PARF_DEBUG_INT_EN);
427 writel_relaxed(PARF_DEVICE_TYPE_EP, pcie_ep->parf + PARF_DEVICE_TYPE);
430 val = readl_relaxed(pcie_ep->parf + PARF_PM_CTRL);
432 writel_relaxed(val, pcie_ep->parf + PARF_PM_CTRL);
435 val = readl_relaxed(pcie_ep->parf + PARF_AXI_MSTR_RD_HALT_NO_WRITES);
437 writel_relaxed(val, pcie_ep->parf + PARF_AXI_MSTR_RD_HALT_NO_WRITES);
440 val = readl_relaxed(pcie_ep->parf + PARF_AXI_MSTR_WR_ADDR_HALT);
442 writel_relaxed(val, pcie_ep->parf + PARF_AXI_MSTR_WR_ADDR_HALT);
445 val = readl_relaxed(pcie_ep->parf + PARF_Q2A_FLUSH);
447 writel_relaxed(val, pcie_ep->parf + PARF_Q2A_FLUSH);
455 val = readl_relaxed(pcie_ep->parf + PARF_SYS_CTRL);
460 writel_relaxed(val, pcie_ep->parf + PARF_SYS_CTRL);
463 val = readl_relaxed(pcie_ep->parf + PARF_DB_CTRL);
467 writel_relaxed(val, pcie_ep->parf + PARF_DB_CTRL);
470 val = readl_relaxed(pcie_ep->parf + PARF_CFG_BITS);
472 writel_relaxed(val, pcie_ep->parf + PARF_CFG_BITS);
492 writel_relaxed(0, pcie_ep->parf + PARF_INT_ALL_MASK);
496 writel_relaxed(val, pcie_ep->parf + PARF_INT_ALL_MASK);
498 if (pcie_ep->cfg && pcie_ep->cfg->disable_mhi_ram_parity_check) {
499 val = readl_relaxed(pcie_ep->parf + PARF_INT_ALL_5_MASK);
501 writel_relaxed(val, pcie_ep->parf + PARF_INT_ALL_5_MASK);
504 val = readl_relaxed(pcie_ep->parf + PARF_INT_ALL_3_MASK);
506 writel_relaxed(val, pcie_ep->parf + PARF_INT_ALL_3_MASK);
508 ret = dw_pcie_ep_init_registers(&pcie_ep->pci.ep);
523 writel_relaxed(pcie_ep->mmio_res->start,
524 pcie_ep->parf + PARF_MHI_BASE_ADDR_LOWER);
525 writel_relaxed(0, pcie_ep->parf + PARF_MHI_BASE_ADDR_UPPER);
528 val = readl_relaxed(pcie_ep->parf + PARF_MHI_CLOCK_RESET_CTRL);
530 writel_relaxed(val, pcie_ep->parf + PARF_MHI_CLOCK_RESET_CTRL);
532 pci_epc_init_notify(pcie_ep->pci.ep.epc);
535 val = readl_relaxed(pcie_ep->parf + PARF_LTSSM);
537 writel_relaxed(val, pcie_ep->parf + PARF_LTSSM);
539 if (pcie_ep->cfg && pcie_ep->cfg->override_no_snoop)
541 pcie_ep->parf + PARF_NO_SNOOP_OVERRIDE);
546 qcom_pcie_disable_resources(pcie_ep);
553 struct qcom_pcie_ep *pcie_ep = to_pcie_ep(pci);
555 qcom_pcie_disable_resources(pcie_ep);
556 pcie_ep->link_status = QCOM_PCIE_EP_LINK_DISABLED;
568 struct qcom_pcie_ep *pcie_ep)
571 struct dw_pcie *pci = &pcie_ep->pci;
576 pcie_ep->parf = devm_platform_ioremap_resource_byname(pdev, "parf");
577 if (IS_ERR(pcie_ep->parf))
578 return PTR_ERR(pcie_ep->parf);
587 pcie_ep->elbi = devm_pci_remap_cfg_resource(dev, res);
588 if (IS_ERR(pcie_ep->elbi))
589 return PTR_ERR(pcie_ep->elbi);
591 pcie_ep->mmio_res = platform_get_resource_byname(pdev, IORESOURCE_MEM,
593 if (!pcie_ep->mmio_res) {
598 pcie_ep->mmio = devm_pci_remap_cfg_resource(dev, pcie_ep->mmio_res);
599 if (IS_ERR(pcie_ep->mmio))
600 return PTR_ERR(pcie_ep->mmio);
608 pcie_ep->perst_map = syscon_node_to_regmap(syscon);
610 if (IS_ERR(pcie_ep->perst_map))
611 return PTR_ERR(pcie_ep->perst_map);
614 1, &pcie_ep->perst_en);
621 2, &pcie_ep->perst_sep_en);
631 struct qcom_pcie_ep *pcie_ep)
636 ret = qcom_pcie_ep_get_io_resources(pdev, pcie_ep);
642 pcie_ep->num_clks = devm_clk_bulk_get_all(dev, &pcie_ep->clks);
643 if (pcie_ep->num_clks < 0) {
645 return pcie_ep->num_clks;
648 pcie_ep->core_reset = devm_reset_control_get_exclusive(dev, "core");
649 if (IS_ERR(pcie_ep->core_reset))
650 return PTR_ERR(pcie_ep->core_reset);
652 pcie_ep->reset = devm_gpiod_get(dev, "reset", GPIOD_IN);
653 if (IS_ERR(pcie_ep->reset))
654 return PTR_ERR(pcie_ep->reset);
656 pcie_ep->wake = devm_gpiod_get_optional(dev, "wake", GPIOD_OUT_LOW);
657 if (IS_ERR(pcie_ep->wake))
658 return PTR_ERR(pcie_ep->wake);
660 pcie_ep->phy = devm_phy_optional_get(dev, "pciephy");
661 if (IS_ERR(pcie_ep->phy))
662 ret = PTR_ERR(pcie_ep->phy);
664 pcie_ep->icc_mem = devm_of_icc_get(dev, "pcie-mem");
665 if (IS_ERR(pcie_ep->icc_mem))
666 ret = PTR_ERR(pcie_ep->icc_mem);
674 struct qcom_pcie_ep *pcie_ep = data;
675 struct dw_pcie *pci = &pcie_ep->pci;
677 u32 status = readl_relaxed(pcie_ep->parf + PARF_INT_ALL_STATUS);
680 writel_relaxed(status, pcie_ep->parf + PARF_INT_ALL_CLEAR);
684 pcie_ep->link_status = QCOM_PCIE_EP_LINK_DOWN;
688 pcie_ep->link_status = QCOM_PCIE_EP_LINK_ENABLED;
689 qcom_pcie_ep_icc_update(pcie_ep);
693 val = readl_relaxed(pcie_ep->parf + PARF_PM_CTRL);
695 writel_relaxed(val, pcie_ep->parf + PARF_PM_CTRL);
701 val = readl_relaxed(pcie_ep->parf + PARF_PM_CTRL);
703 writel_relaxed(val, pcie_ep->parf + PARF_PM_CTRL);
708 pcie_ep->link_status = QCOM_PCIE_EP_LINK_UP;
719 struct qcom_pcie_ep *pcie_ep = data;
720 struct dw_pcie *pci = &pcie_ep->pci;
724 perst = gpiod_get_value(pcie_ep->reset);
733 irq_set_irq_type(gpiod_to_irq(pcie_ep->reset),
740 struct qcom_pcie_ep *pcie_ep)
742 struct device *dev = pcie_ep->pci.dev;
747 pcie_ep->pci.ep.epc->domain_nr);
751 pcie_ep->global_irq = platform_get_irq_byname(pdev, "global");
752 if (pcie_ep->global_irq < 0)
753 return pcie_ep->global_irq;
755 ret = devm_request_threaded_irq(&pdev->dev, pcie_ep->global_irq, NULL,
758 name, pcie_ep);
765 pcie_ep->pci.ep.epc->domain_nr);
769 pcie_ep->perst_irq = gpiod_to_irq(pcie_ep->reset);
770 irq_set_status_flags(pcie_ep->perst_irq, IRQ_NOAUTOEN);
771 ret = devm_request_threaded_irq(&pdev->dev, pcie_ep->perst_irq, NULL,
774 name, pcie_ep);
777 disable_irq(pcie_ep->global_irq);
802 struct qcom_pcie_ep *pcie_ep = (struct qcom_pcie_ep *)
806 readl_relaxed(pcie_ep->mmio + PARF_DEBUG_CNT_PM_LINKST_IN_L0S));
809 readl_relaxed(pcie_ep->mmio + PARF_DEBUG_CNT_PM_LINKST_IN_L1));
812 readl_relaxed(pcie_ep->mmio + PARF_DEBUG_CNT_AUX_CLK_IN_L1SUB_L1));
815 readl_relaxed(pcie_ep->mmio + PARF_DEBUG_CNT_AUX_CLK_IN_L1SUB_L2));
818 readl_relaxed(pcie_ep->mmio + PARF_DEBUG_CNT_PM_LINKST_IN_L2));
823 static void qcom_pcie_ep_init_debugfs(struct qcom_pcie_ep *pcie_ep)
825 struct dw_pcie *pci = &pcie_ep->pci;
827 debugfs_create_devm_seqfile(pci->dev, "link_transition_count", pcie_ep->debugfs,
866 struct qcom_pcie_ep *pcie_ep;
870 pcie_ep = devm_kzalloc(dev, sizeof(*pcie_ep), GFP_KERNEL);
871 if (!pcie_ep)
874 pcie_ep->pci.dev = dev;
875 pcie_ep->pci.ops = &pci_ops;
876 pcie_ep->pci.ep.ops = &pci_ep_ops;
877 pcie_ep->pci.edma.nr_irqs = 1;
879 pcie_ep->cfg = of_device_get_match_data(dev);
880 if (pcie_ep->cfg && pcie_ep->cfg->hdma_support) {
881 pcie_ep->pci.edma.ll_wr_cnt = 8;
882 pcie_ep->pci.edma.ll_rd_cnt = 8;
883 pcie_ep->pci.edma.mf = EDMA_MF_HDMA_NATIVE;
886 platform_set_drvdata(pdev, pcie_ep);
888 ret = qcom_pcie_ep_get_resources(pdev, pcie_ep);
892 ret = dw_pcie_ep_init(&pcie_ep->pci.ep);
898 ret = qcom_pcie_ep_enable_irq_resources(pdev, pcie_ep);
908 pcie_ep->debugfs = debugfs_create_dir(name, NULL);
909 qcom_pcie_ep_init_debugfs(pcie_ep);
914 disable_irq(pcie_ep->global_irq);
915 disable_irq(pcie_ep->perst_irq);
918 dw_pcie_ep_deinit(&pcie_ep->pci.ep);
925 struct qcom_pcie_ep *pcie_ep = platform_get_drvdata(pdev);
927 disable_irq(pcie_ep->global_irq);
928 disable_irq(pcie_ep->perst_irq);
930 debugfs_remove_recursive(pcie_ep->debugfs);
932 if (pcie_ep->link_status == QCOM_PCIE_EP_LINK_DISABLED)
935 qcom_pcie_disable_resources(pcie_ep);