Lines Matching refs:kirin_pcie
72 struct kirin_pcie {
286 static int hi3660_pcie_phy_power_on(struct kirin_pcie *pcie)
322 struct kirin_pcie *pcie)
342 static int hi3660_pcie_phy_power_off(struct kirin_pcie *pcie)
365 static int kirin_pcie_get_gpio_enable(struct kirin_pcie *pcie,
400 static int kirin_pcie_parse_port(struct kirin_pcie *pcie,
451 static long kirin_pcie_get_resource(struct kirin_pcie *kirin_pcie,
463 kirin_pcie->apb = devm_regmap_init_mmio(dev, apb_base,
465 if (IS_ERR(kirin_pcie->apb))
466 return PTR_ERR(kirin_pcie->apb);
469 kirin_pcie->gpio_id_dwc_perst = of_get_named_gpio(dev->of_node,
471 if (kirin_pcie->gpio_id_dwc_perst == -EPROBE_DEFER) {
473 } else if (!gpio_is_valid(kirin_pcie->gpio_id_dwc_perst)) {
478 ret = kirin_pcie_get_gpio_enable(kirin_pcie, pdev);
484 ret = kirin_pcie_parse_port(kirin_pcie, pdev, child);
496 static void kirin_pcie_sideband_dbi_w_mode(struct kirin_pcie *kirin_pcie,
501 regmap_read(kirin_pcie->apb, SOC_PCIECTRL_CTRL0_ADDR, &val);
507 regmap_write(kirin_pcie->apb, SOC_PCIECTRL_CTRL0_ADDR, val);
510 static void kirin_pcie_sideband_dbi_r_mode(struct kirin_pcie *kirin_pcie,
515 regmap_read(kirin_pcie->apb, SOC_PCIECTRL_CTRL1_ADDR, &val);
521 regmap_write(kirin_pcie->apb, SOC_PCIECTRL_CTRL1_ADDR, val);
551 struct kirin_pcie *kirin_pcie = to_kirin_pcie(pci);
554 if (!kirin_pcie->num_slots)
558 for (i = 0; i < kirin_pcie->num_slots; i++) {
559 ret = gpio_direction_output(kirin_pcie->gpio_id_reset[i], 1);
562 kirin_pcie->reset_names[i], ret);
579 struct kirin_pcie *kirin_pcie = to_kirin_pcie(pci);
582 kirin_pcie_sideband_dbi_r_mode(kirin_pcie, true);
584 kirin_pcie_sideband_dbi_r_mode(kirin_pcie, false);
592 struct kirin_pcie *kirin_pcie = to_kirin_pcie(pci);
594 kirin_pcie_sideband_dbi_w_mode(kirin_pcie, true);
596 kirin_pcie_sideband_dbi_w_mode(kirin_pcie, false);
601 struct kirin_pcie *kirin_pcie = to_kirin_pcie(pci);
604 regmap_read(kirin_pcie->apb, PCIE_APB_PHY_STATUS0, &val);
613 struct kirin_pcie *kirin_pcie = to_kirin_pcie(pci);
616 regmap_write(kirin_pcie->apb, PCIE_APP_LTSSM_ENABLE,
629 static int kirin_pcie_gpio_request(struct kirin_pcie *kirin_pcie,
634 for (i = 0; i < kirin_pcie->num_slots; i++) {
635 if (!gpio_is_valid(kirin_pcie->gpio_id_reset[i])) {
637 kirin_pcie->reset_names[i]);
641 ret = devm_gpio_request(dev, kirin_pcie->gpio_id_reset[i],
642 kirin_pcie->reset_names[i]);
647 for (i = 0; i < kirin_pcie->n_gpio_clkreq; i++) {
648 if (!gpio_is_valid(kirin_pcie->gpio_id_clkreq[i])) {
650 kirin_pcie->clkreq_names[i]);
654 ret = devm_gpio_request(dev, kirin_pcie->gpio_id_clkreq[i],
655 kirin_pcie->clkreq_names[i]);
659 ret = gpio_direction_output(kirin_pcie->gpio_id_clkreq[i], 0);
678 static int kirin_pcie_power_off(struct kirin_pcie *kirin_pcie)
682 if (kirin_pcie->type == PCIE_KIRIN_INTERNAL_PHY)
683 return hi3660_pcie_phy_power_off(kirin_pcie);
685 for (i = 0; i < kirin_pcie->n_gpio_clkreq; i++)
686 gpio_direction_output(kirin_pcie->gpio_id_clkreq[i], 1);
688 phy_power_off(kirin_pcie->phy);
689 phy_exit(kirin_pcie->phy);
695 struct kirin_pcie *kirin_pcie)
700 if (kirin_pcie->type == PCIE_KIRIN_INTERNAL_PHY) {
701 ret = hi3660_pcie_phy_init(pdev, kirin_pcie);
705 ret = hi3660_pcie_phy_power_on(kirin_pcie);
709 kirin_pcie->phy = devm_of_phy_get(dev, dev->of_node, NULL);
710 if (IS_ERR(kirin_pcie->phy))
711 return PTR_ERR(kirin_pcie->phy);
713 ret = kirin_pcie_gpio_request(kirin_pcie, dev);
717 ret = phy_init(kirin_pcie->phy);
721 ret = phy_power_on(kirin_pcie->phy);
729 if (!gpio_request(kirin_pcie->gpio_id_dwc_perst, "pcie_perst_bridge")) {
730 ret = gpio_direction_output(kirin_pcie->gpio_id_dwc_perst, 1);
739 kirin_pcie_power_off(kirin_pcie);
746 struct kirin_pcie *kirin_pcie = platform_get_drvdata(pdev);
748 dw_pcie_host_deinit(&kirin_pcie->pci->pp);
750 kirin_pcie_power_off(kirin_pcie);
777 struct kirin_pcie *kirin_pcie;
792 kirin_pcie = devm_kzalloc(dev, sizeof(struct kirin_pcie), GFP_KERNEL);
793 if (!kirin_pcie)
803 kirin_pcie->pci = pci;
804 kirin_pcie->type = data->phy_type;
806 ret = kirin_pcie_get_resource(kirin_pcie, pdev);
810 platform_set_drvdata(pdev, kirin_pcie);
812 ret = kirin_pcie_power_on(pdev, kirin_pcie);