Lines Matching refs:kirin_pcie
70 struct kirin_pcie { struct
284 static int hi3660_pcie_phy_power_on(struct kirin_pcie *pcie) in hi3660_pcie_phy_power_on()
320 struct kirin_pcie *pcie) in hi3660_pcie_phy_init()
340 static int hi3660_pcie_phy_power_off(struct kirin_pcie *pcie) in hi3660_pcie_phy_power_off()
363 static int kirin_pcie_get_gpio_enable(struct kirin_pcie *pcie, in kirin_pcie_get_gpio_enable()
401 static int kirin_pcie_parse_port(struct kirin_pcie *pcie, in kirin_pcie_parse_port()
451 static long kirin_pcie_get_resource(struct kirin_pcie *kirin_pcie, in kirin_pcie_get_resource() argument
463 kirin_pcie->apb = devm_regmap_init_mmio(dev, apb_base, in kirin_pcie_get_resource()
465 if (IS_ERR(kirin_pcie->apb)) in kirin_pcie_get_resource()
466 return PTR_ERR(kirin_pcie->apb); in kirin_pcie_get_resource()
469 kirin_pcie->id_dwc_perst_gpio = devm_gpiod_get(dev, "reset", GPIOD_OUT_LOW); in kirin_pcie_get_resource()
470 if (IS_ERR(kirin_pcie->id_dwc_perst_gpio)) in kirin_pcie_get_resource()
471 return dev_err_probe(dev, PTR_ERR(kirin_pcie->id_dwc_perst_gpio), in kirin_pcie_get_resource()
473 gpiod_set_consumer_name(kirin_pcie->id_dwc_perst_gpio, "pcie_perst_bridge"); in kirin_pcie_get_resource()
475 ret = kirin_pcie_get_gpio_enable(kirin_pcie, pdev); in kirin_pcie_get_resource()
481 ret = kirin_pcie_parse_port(kirin_pcie, pdev, child); in kirin_pcie_get_resource()
493 static void kirin_pcie_sideband_dbi_w_mode(struct kirin_pcie *kirin_pcie, in kirin_pcie_sideband_dbi_w_mode() argument
498 regmap_read(kirin_pcie->apb, SOC_PCIECTRL_CTRL0_ADDR, &val); in kirin_pcie_sideband_dbi_w_mode()
504 regmap_write(kirin_pcie->apb, SOC_PCIECTRL_CTRL0_ADDR, val); in kirin_pcie_sideband_dbi_w_mode()
507 static void kirin_pcie_sideband_dbi_r_mode(struct kirin_pcie *kirin_pcie, in kirin_pcie_sideband_dbi_r_mode() argument
512 regmap_read(kirin_pcie->apb, SOC_PCIECTRL_CTRL1_ADDR, &val); in kirin_pcie_sideband_dbi_r_mode()
518 regmap_write(kirin_pcie->apb, SOC_PCIECTRL_CTRL1_ADDR, val); in kirin_pcie_sideband_dbi_r_mode()
548 struct kirin_pcie *kirin_pcie = to_kirin_pcie(pci); in kirin_pcie_add_bus() local
551 if (!kirin_pcie->num_slots) in kirin_pcie_add_bus()
555 for (i = 0; i < kirin_pcie->num_slots; i++) { in kirin_pcie_add_bus()
556 ret = gpiod_direction_output_raw(kirin_pcie->id_reset_gpio[i], 1); in kirin_pcie_add_bus()
559 kirin_pcie->reset_names[i], ret); in kirin_pcie_add_bus()
576 struct kirin_pcie *kirin_pcie = to_kirin_pcie(pci); in kirin_pcie_read_dbi() local
579 kirin_pcie_sideband_dbi_r_mode(kirin_pcie, true); in kirin_pcie_read_dbi()
581 kirin_pcie_sideband_dbi_r_mode(kirin_pcie, false); in kirin_pcie_read_dbi()
589 struct kirin_pcie *kirin_pcie = to_kirin_pcie(pci); in kirin_pcie_write_dbi() local
591 kirin_pcie_sideband_dbi_w_mode(kirin_pcie, true); in kirin_pcie_write_dbi()
593 kirin_pcie_sideband_dbi_w_mode(kirin_pcie, false); in kirin_pcie_write_dbi()
598 struct kirin_pcie *kirin_pcie = to_kirin_pcie(pci); in kirin_pcie_link_up() local
601 regmap_read(kirin_pcie->apb, PCIE_APB_PHY_STATUS0, &val); in kirin_pcie_link_up()
610 struct kirin_pcie *kirin_pcie = to_kirin_pcie(pci); in kirin_pcie_start_link() local
613 regmap_write(kirin_pcie->apb, PCIE_APP_LTSSM_ENABLE, in kirin_pcie_start_link()
637 static int kirin_pcie_power_off(struct kirin_pcie *kirin_pcie) in kirin_pcie_power_off() argument
641 if (kirin_pcie->type == PCIE_KIRIN_INTERNAL_PHY) in kirin_pcie_power_off()
642 return hi3660_pcie_phy_power_off(kirin_pcie); in kirin_pcie_power_off()
644 for (i = 0; i < kirin_pcie->n_gpio_clkreq; i++) in kirin_pcie_power_off()
645 gpiod_direction_output_raw(kirin_pcie->id_clkreq_gpio[i], 1); in kirin_pcie_power_off()
647 phy_power_off(kirin_pcie->phy); in kirin_pcie_power_off()
648 phy_exit(kirin_pcie->phy); in kirin_pcie_power_off()
654 struct kirin_pcie *kirin_pcie) in kirin_pcie_power_on() argument
659 if (kirin_pcie->type == PCIE_KIRIN_INTERNAL_PHY) { in kirin_pcie_power_on()
660 ret = hi3660_pcie_phy_init(pdev, kirin_pcie); in kirin_pcie_power_on()
664 ret = hi3660_pcie_phy_power_on(kirin_pcie); in kirin_pcie_power_on()
668 kirin_pcie->phy = devm_of_phy_get(dev, dev->of_node, NULL); in kirin_pcie_power_on()
669 if (IS_ERR(kirin_pcie->phy)) in kirin_pcie_power_on()
670 return PTR_ERR(kirin_pcie->phy); in kirin_pcie_power_on()
672 ret = phy_init(kirin_pcie->phy); in kirin_pcie_power_on()
676 ret = phy_power_on(kirin_pcie->phy); in kirin_pcie_power_on()
684 ret = gpiod_direction_output_raw(kirin_pcie->id_dwc_perst_gpio, 1); in kirin_pcie_power_on()
692 kirin_pcie_power_off(kirin_pcie); in kirin_pcie_power_on()
699 struct kirin_pcie *kirin_pcie = platform_get_drvdata(pdev); in kirin_pcie_remove() local
701 dw_pcie_host_deinit(&kirin_pcie->pci->pp); in kirin_pcie_remove()
703 kirin_pcie_power_off(kirin_pcie); in kirin_pcie_remove()
728 struct kirin_pcie *kirin_pcie; in kirin_pcie_probe() local
743 kirin_pcie = devm_kzalloc(dev, sizeof(struct kirin_pcie), GFP_KERNEL); in kirin_pcie_probe()
744 if (!kirin_pcie) in kirin_pcie_probe()
754 kirin_pcie->pci = pci; in kirin_pcie_probe()
755 kirin_pcie->type = data->phy_type; in kirin_pcie_probe()
757 ret = kirin_pcie_get_resource(kirin_pcie, pdev); in kirin_pcie_probe()
761 platform_set_drvdata(pdev, kirin_pcie); in kirin_pcie_probe()
763 ret = kirin_pcie_power_on(pdev, kirin_pcie); in kirin_pcie_probe()