Lines Matching refs:pcie
319 static inline void appl_writel(struct tegra_pcie_dw *pcie, const u32 value, in appl_writel() argument
322 writel_relaxed(value, pcie->appl_base + reg); in appl_writel()
325 static inline u32 appl_readl(struct tegra_pcie_dw *pcie, const u32 reg) in appl_readl() argument
327 return readl_relaxed(pcie->appl_base + reg); in appl_readl()
337 struct tegra_pcie_dw *pcie = to_tegra_pcie(pci); in apply_bad_link_workaround() local
346 val = dw_pcie_readw_dbi(pci, pcie->pcie_cap_base + PCI_EXP_LNKSTA); in apply_bad_link_workaround()
350 if (pcie->init_link_width > current_link_width) { in apply_bad_link_workaround()
352 val = dw_pcie_readw_dbi(pci, pcie->pcie_cap_base + in apply_bad_link_workaround()
356 dw_pcie_writew_dbi(pci, pcie->pcie_cap_base + in apply_bad_link_workaround()
359 val = dw_pcie_readw_dbi(pci, pcie->pcie_cap_base + in apply_bad_link_workaround()
362 dw_pcie_writew_dbi(pci, pcie->pcie_cap_base + in apply_bad_link_workaround()
370 struct tegra_pcie_dw *pcie = arg; in tegra_pcie_rp_irq_handler() local
371 struct dw_pcie *pci = &pcie->pci; in tegra_pcie_rp_irq_handler()
376 status_l0 = appl_readl(pcie, APPL_INTR_STATUS_L0); in tegra_pcie_rp_irq_handler()
378 status_l1 = appl_readl(pcie, APPL_INTR_STATUS_L1_0_0); in tegra_pcie_rp_irq_handler()
379 appl_writel(pcie, status_l1, APPL_INTR_STATUS_L1_0_0); in tegra_pcie_rp_irq_handler()
382 val = appl_readl(pcie, APPL_CAR_RESET_OVRD); in tegra_pcie_rp_irq_handler()
384 appl_writel(pcie, val, APPL_CAR_RESET_OVRD); in tegra_pcie_rp_irq_handler()
386 val = appl_readl(pcie, APPL_CAR_RESET_OVRD); in tegra_pcie_rp_irq_handler()
388 appl_writel(pcie, val, APPL_CAR_RESET_OVRD); in tegra_pcie_rp_irq_handler()
397 status_l1 = appl_readl(pcie, APPL_INTR_STATUS_L1_8_0); in tegra_pcie_rp_irq_handler()
399 appl_writel(pcie, in tegra_pcie_rp_irq_handler()
405 appl_writel(pcie, in tegra_pcie_rp_irq_handler()
409 val_w = dw_pcie_readw_dbi(pci, pcie->pcie_cap_base + in tegra_pcie_rp_irq_handler()
417 status_l1 = appl_readl(pcie, APPL_INTR_STATUS_L1_18); in tegra_pcie_rp_irq_handler()
439 static void pex_ep_event_hot_rst_done(struct tegra_pcie_dw *pcie) in pex_ep_event_hot_rst_done() argument
443 appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L0); in pex_ep_event_hot_rst_done()
444 appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_0_0); in pex_ep_event_hot_rst_done()
445 appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_1); in pex_ep_event_hot_rst_done()
446 appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_2); in pex_ep_event_hot_rst_done()
447 appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_3); in pex_ep_event_hot_rst_done()
448 appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_6); in pex_ep_event_hot_rst_done()
449 appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_7); in pex_ep_event_hot_rst_done()
450 appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_8_0); in pex_ep_event_hot_rst_done()
451 appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_9); in pex_ep_event_hot_rst_done()
452 appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_10); in pex_ep_event_hot_rst_done()
453 appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_11); in pex_ep_event_hot_rst_done()
454 appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_13); in pex_ep_event_hot_rst_done()
455 appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_14); in pex_ep_event_hot_rst_done()
456 appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_15); in pex_ep_event_hot_rst_done()
457 appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_17); in pex_ep_event_hot_rst_done()
458 appl_writel(pcie, 0xFFFFFFFF, APPL_MSI_CTRL_2); in pex_ep_event_hot_rst_done()
460 val = appl_readl(pcie, APPL_CTRL); in pex_ep_event_hot_rst_done()
462 appl_writel(pcie, val, APPL_CTRL); in pex_ep_event_hot_rst_done()
467 struct tegra_pcie_dw *pcie = arg; in tegra_pcie_ep_irq_thread() local
468 struct dw_pcie *pci = &pcie->pci; in tegra_pcie_ep_irq_thread()
471 speed = dw_pcie_readw_dbi(pci, pcie->pcie_cap_base + PCI_EXP_LNKSTA) & in tegra_pcie_ep_irq_thread()
473 clk_set_rate(pcie->core_clk, pcie_gen_freq[speed - 1]); in tegra_pcie_ep_irq_thread()
476 val = dw_pcie_readl_dbi(pci, pcie->cfg_link_cap_l1sub); in tegra_pcie_ep_irq_thread()
488 appl_writel(pcie, val, APPL_LTR_MSG_1); in tegra_pcie_ep_irq_thread()
491 val = appl_readl(pcie, APPL_LTR_MSG_2); in tegra_pcie_ep_irq_thread()
493 appl_writel(pcie, val, APPL_LTR_MSG_2); in tegra_pcie_ep_irq_thread()
497 val = appl_readl(pcie, APPL_LTR_MSG_2); in tegra_pcie_ep_irq_thread()
505 dev_err(pcie->dev, "Failed to send LTR message\n"); in tegra_pcie_ep_irq_thread()
513 struct tegra_pcie_dw *pcie = arg; in tegra_pcie_ep_hard_irq() local
514 struct dw_pcie_ep *ep = &pcie->pci.ep; in tegra_pcie_ep_hard_irq()
518 status_l0 = appl_readl(pcie, APPL_INTR_STATUS_L0); in tegra_pcie_ep_hard_irq()
520 status_l1 = appl_readl(pcie, APPL_INTR_STATUS_L1_0_0); in tegra_pcie_ep_hard_irq()
521 appl_writel(pcie, status_l1, APPL_INTR_STATUS_L1_0_0); in tegra_pcie_ep_hard_irq()
524 pex_ep_event_hot_rst_done(pcie); in tegra_pcie_ep_hard_irq()
527 link_status = appl_readl(pcie, APPL_LINK_STATUS); in tegra_pcie_ep_hard_irq()
529 dev_dbg(pcie->dev, "Link is up with Host\n"); in tegra_pcie_ep_hard_irq()
538 status_l1 = appl_readl(pcie, APPL_INTR_STATUS_L1_15); in tegra_pcie_ep_hard_irq()
539 appl_writel(pcie, status_l1, APPL_INTR_STATUS_L1_15); in tegra_pcie_ep_hard_irq()
548 dev_warn(pcie->dev, "Random interrupt (STATUS = 0x%08X)\n", in tegra_pcie_ep_hard_irq()
550 appl_writel(pcie, status_l0, APPL_INTR_STATUS_L0); in tegra_pcie_ep_hard_irq()
595 static void disable_aspm_l11(struct tegra_pcie_dw *pcie) in disable_aspm_l11() argument
599 val = dw_pcie_readl_dbi(&pcie->pci, pcie->cfg_link_cap_l1sub); in disable_aspm_l11()
601 dw_pcie_writel_dbi(&pcie->pci, pcie->cfg_link_cap_l1sub, val); in disable_aspm_l11()
604 static void disable_aspm_l12(struct tegra_pcie_dw *pcie) in disable_aspm_l12() argument
608 val = dw_pcie_readl_dbi(&pcie->pci, pcie->cfg_link_cap_l1sub); in disable_aspm_l12()
610 dw_pcie_writel_dbi(&pcie->pci, pcie->cfg_link_cap_l1sub, val); in disable_aspm_l12()
613 static inline u32 event_counter_prog(struct tegra_pcie_dw *pcie, u32 event) in event_counter_prog() argument
617 val = dw_pcie_readl_dbi(&pcie->pci, event_cntr_ctrl_offset[pcie->cid]); in event_counter_prog()
622 dw_pcie_writel_dbi(&pcie->pci, event_cntr_ctrl_offset[pcie->cid], val); in event_counter_prog()
623 val = dw_pcie_readl_dbi(&pcie->pci, event_cntr_data_offset[pcie->cid]); in event_counter_prog()
630 struct tegra_pcie_dw *pcie = (struct tegra_pcie_dw *) in aspm_state_cnt() local
635 event_counter_prog(pcie, EVENT_COUNTER_EVENT_Tx_L0S)); in aspm_state_cnt()
638 event_counter_prog(pcie, EVENT_COUNTER_EVENT_Rx_L0S)); in aspm_state_cnt()
641 event_counter_prog(pcie, EVENT_COUNTER_EVENT_L1)); in aspm_state_cnt()
644 event_counter_prog(pcie, EVENT_COUNTER_EVENT_L1_1)); in aspm_state_cnt()
647 event_counter_prog(pcie, EVENT_COUNTER_EVENT_L1_2)); in aspm_state_cnt()
650 dw_pcie_writel_dbi(&pcie->pci, event_cntr_ctrl_offset[pcie->cid], in aspm_state_cnt()
656 dw_pcie_writel_dbi(&pcie->pci, event_cntr_ctrl_offset[pcie->cid], val); in aspm_state_cnt()
661 static void init_host_aspm(struct tegra_pcie_dw *pcie) in init_host_aspm() argument
663 struct dw_pcie *pci = &pcie->pci; in init_host_aspm()
667 pcie->cfg_link_cap_l1sub = val + PCI_L1SS_CAP; in init_host_aspm()
672 dw_pcie_writel_dbi(pci, event_cntr_ctrl_offset[pcie->cid], val); in init_host_aspm()
675 val = dw_pcie_readl_dbi(pci, pcie->cfg_link_cap_l1sub); in init_host_aspm()
677 val |= (pcie->aspm_cmrt << 8); in init_host_aspm()
678 val |= (pcie->aspm_pwr_on_t << 19); in init_host_aspm()
679 dw_pcie_writel_dbi(pci, pcie->cfg_link_cap_l1sub, val); in init_host_aspm()
684 val |= (pcie->aspm_l0s_enter_lat << PORT_AFR_L0S_ENTRANCE_LAT_SHIFT); in init_host_aspm()
689 static void init_debugfs(struct tegra_pcie_dw *pcie) in init_debugfs() argument
691 debugfs_create_devm_seqfile(pcie->dev, "aspm_state_cnt", pcie->debugfs, in init_debugfs()
695 static inline void disable_aspm_l12(struct tegra_pcie_dw *pcie) { return; } in disable_aspm_l12() argument
696 static inline void disable_aspm_l11(struct tegra_pcie_dw *pcie) { return; } in disable_aspm_l11() argument
697 static inline void init_host_aspm(struct tegra_pcie_dw *pcie) { return; } in init_host_aspm() argument
698 static inline void init_debugfs(struct tegra_pcie_dw *pcie) { return; } in init_debugfs() argument
704 struct tegra_pcie_dw *pcie = to_tegra_pcie(pci); in tegra_pcie_enable_system_interrupts() local
708 val = appl_readl(pcie, APPL_INTR_EN_L0_0); in tegra_pcie_enable_system_interrupts()
710 appl_writel(pcie, val, APPL_INTR_EN_L0_0); in tegra_pcie_enable_system_interrupts()
712 val = appl_readl(pcie, APPL_INTR_EN_L1_0_0); in tegra_pcie_enable_system_interrupts()
714 appl_writel(pcie, val, APPL_INTR_EN_L1_0_0); in tegra_pcie_enable_system_interrupts()
716 if (pcie->enable_cdm_check) { in tegra_pcie_enable_system_interrupts()
717 val = appl_readl(pcie, APPL_INTR_EN_L0_0); in tegra_pcie_enable_system_interrupts()
719 appl_writel(pcie, val, APPL_INTR_EN_L0_0); in tegra_pcie_enable_system_interrupts()
721 val = appl_readl(pcie, APPL_INTR_EN_L1_18); in tegra_pcie_enable_system_interrupts()
724 appl_writel(pcie, val, APPL_INTR_EN_L1_18); in tegra_pcie_enable_system_interrupts()
727 val_w = dw_pcie_readw_dbi(&pcie->pci, pcie->pcie_cap_base + in tegra_pcie_enable_system_interrupts()
729 pcie->init_link_width = (val_w & PCI_EXP_LNKSTA_NLW) >> in tegra_pcie_enable_system_interrupts()
732 val_w = dw_pcie_readw_dbi(&pcie->pci, pcie->pcie_cap_base + in tegra_pcie_enable_system_interrupts()
735 dw_pcie_writew_dbi(&pcie->pci, pcie->pcie_cap_base + PCI_EXP_LNKCTL, in tegra_pcie_enable_system_interrupts()
742 struct tegra_pcie_dw *pcie = to_tegra_pcie(pci); in tegra_pcie_enable_legacy_interrupts() local
746 val = appl_readl(pcie, APPL_INTR_EN_L0_0); in tegra_pcie_enable_legacy_interrupts()
749 appl_writel(pcie, val, APPL_INTR_EN_L0_0); in tegra_pcie_enable_legacy_interrupts()
751 val = appl_readl(pcie, APPL_INTR_EN_L1_8_0); in tegra_pcie_enable_legacy_interrupts()
757 appl_writel(pcie, val, APPL_INTR_EN_L1_8_0); in tegra_pcie_enable_legacy_interrupts()
763 struct tegra_pcie_dw *pcie = to_tegra_pcie(pci); in tegra_pcie_enable_msi_interrupts() local
769 val = appl_readl(pcie, APPL_INTR_EN_L0_0); in tegra_pcie_enable_msi_interrupts()
772 appl_writel(pcie, val, APPL_INTR_EN_L0_0); in tegra_pcie_enable_msi_interrupts()
778 struct tegra_pcie_dw *pcie = to_tegra_pcie(pci); in tegra_pcie_enable_interrupts() local
781 appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L0); in tegra_pcie_enable_interrupts()
782 appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_0_0); in tegra_pcie_enable_interrupts()
783 appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_1); in tegra_pcie_enable_interrupts()
784 appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_2); in tegra_pcie_enable_interrupts()
785 appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_3); in tegra_pcie_enable_interrupts()
786 appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_6); in tegra_pcie_enable_interrupts()
787 appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_7); in tegra_pcie_enable_interrupts()
788 appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_8_0); in tegra_pcie_enable_interrupts()
789 appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_9); in tegra_pcie_enable_interrupts()
790 appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_10); in tegra_pcie_enable_interrupts()
791 appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_11); in tegra_pcie_enable_interrupts()
792 appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_13); in tegra_pcie_enable_interrupts()
793 appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_14); in tegra_pcie_enable_interrupts()
794 appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_15); in tegra_pcie_enable_interrupts()
795 appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_17); in tegra_pcie_enable_interrupts()
803 static void config_gen3_gen4_eq_presets(struct tegra_pcie_dw *pcie) in config_gen3_gen4_eq_presets() argument
805 struct dw_pcie *pci = &pcie->pci; in config_gen3_gen4_eq_presets()
809 for (i = 0; i < pcie->num_lanes; i++) { in config_gen3_gen4_eq_presets()
859 struct tegra_pcie_dw *pcie = to_tegra_pcie(pci); in tegra_pcie_prepare_host() local
881 val = dw_pcie_readl_dbi(pci, pcie->pcie_cap_base + PCI_EXP_LNKCAP); in tegra_pcie_prepare_host()
883 val |= (pcie->num_lanes << PCI_EXP_LNKSTA_NLW_SHIFT); in tegra_pcie_prepare_host()
884 dw_pcie_writel_dbi(pci, pcie->pcie_cap_base + PCI_EXP_LNKCAP, val); in tegra_pcie_prepare_host()
886 config_gen3_gen4_eq_presets(pcie); in tegra_pcie_prepare_host()
888 init_host_aspm(pcie); in tegra_pcie_prepare_host()
894 if (pcie->update_fc_fixup) { in tegra_pcie_prepare_host()
902 clk_set_rate(pcie->core_clk, GEN4_CORE_CLK_FREQ); in tegra_pcie_prepare_host()
905 val = appl_readl(pcie, APPL_PINMUX); in tegra_pcie_prepare_host()
907 appl_writel(pcie, val, APPL_PINMUX); in tegra_pcie_prepare_host()
912 val = appl_readl(pcie, APPL_CTRL); in tegra_pcie_prepare_host()
914 appl_writel(pcie, val, APPL_CTRL); in tegra_pcie_prepare_host()
917 val = appl_readl(pcie, APPL_PINMUX); in tegra_pcie_prepare_host()
919 appl_writel(pcie, val, APPL_PINMUX); in tegra_pcie_prepare_host()
927 struct tegra_pcie_dw *pcie = to_tegra_pcie(pci); in tegra_pcie_dw_host_init() local
943 val = appl_readl(pcie, APPL_DEBUG); in tegra_pcie_dw_host_init()
946 tmp = appl_readl(pcie, APPL_LINK_STATUS); in tegra_pcie_dw_host_init()
956 val = appl_readl(pcie, APPL_CTRL); in tegra_pcie_dw_host_init()
958 appl_writel(pcie, val, APPL_CTRL); in tegra_pcie_dw_host_init()
960 reset_control_assert(pcie->core_rst); in tegra_pcie_dw_host_init()
961 reset_control_deassert(pcie->core_rst); in tegra_pcie_dw_host_init()
974 speed = dw_pcie_readw_dbi(pci, pcie->pcie_cap_base + PCI_EXP_LNKSTA) & in tegra_pcie_dw_host_init()
976 clk_set_rate(pcie->core_clk, pcie_gen_freq[speed - 1]); in tegra_pcie_dw_host_init()
985 struct tegra_pcie_dw *pcie = to_tegra_pcie(pci); in tegra_pcie_dw_link_up() local
986 u32 val = dw_pcie_readw_dbi(pci, pcie->pcie_cap_base + PCI_EXP_LNKSTA); in tegra_pcie_dw_link_up()
998 struct tegra_pcie_dw *pcie = to_tegra_pcie(pci); in tegra_pcie_dw_start_link() local
1000 enable_irq(pcie->pex_rst_irq); in tegra_pcie_dw_start_link()
1007 struct tegra_pcie_dw *pcie = to_tegra_pcie(pci); in tegra_pcie_dw_stop_link() local
1009 disable_irq(pcie->pex_rst_irq); in tegra_pcie_dw_stop_link()
1023 static void tegra_pcie_disable_phy(struct tegra_pcie_dw *pcie) in tegra_pcie_disable_phy() argument
1025 unsigned int phy_count = pcie->phy_count; in tegra_pcie_disable_phy()
1028 phy_power_off(pcie->phys[phy_count]); in tegra_pcie_disable_phy()
1029 phy_exit(pcie->phys[phy_count]); in tegra_pcie_disable_phy()
1033 static int tegra_pcie_enable_phy(struct tegra_pcie_dw *pcie) in tegra_pcie_enable_phy() argument
1038 for (i = 0; i < pcie->phy_count; i++) { in tegra_pcie_enable_phy()
1039 ret = phy_init(pcie->phys[i]); in tegra_pcie_enable_phy()
1043 ret = phy_power_on(pcie->phys[i]); in tegra_pcie_enable_phy()
1052 phy_power_off(pcie->phys[i]); in tegra_pcie_enable_phy()
1054 phy_exit(pcie->phys[i]); in tegra_pcie_enable_phy()
1060 static int tegra_pcie_dw_parse_dt(struct tegra_pcie_dw *pcie) in tegra_pcie_dw_parse_dt() argument
1062 struct device_node *np = pcie->dev->of_node; in tegra_pcie_dw_parse_dt()
1065 ret = of_property_read_u32(np, "nvidia,aspm-cmrt-us", &pcie->aspm_cmrt); in tegra_pcie_dw_parse_dt()
1067 dev_info(pcie->dev, "Failed to read ASPM T_cmrt: %d\n", ret); in tegra_pcie_dw_parse_dt()
1072 &pcie->aspm_pwr_on_t); in tegra_pcie_dw_parse_dt()
1074 dev_info(pcie->dev, "Failed to read ASPM Power On time: %d\n", in tegra_pcie_dw_parse_dt()
1078 &pcie->aspm_l0s_enter_lat); in tegra_pcie_dw_parse_dt()
1080 dev_info(pcie->dev, in tegra_pcie_dw_parse_dt()
1083 ret = of_property_read_u32(np, "num-lanes", &pcie->num_lanes); in tegra_pcie_dw_parse_dt()
1085 dev_err(pcie->dev, "Failed to read num-lanes: %d\n", ret); in tegra_pcie_dw_parse_dt()
1089 ret = of_property_read_u32_index(np, "nvidia,bpmp", 1, &pcie->cid); in tegra_pcie_dw_parse_dt()
1091 dev_err(pcie->dev, "Failed to read Controller-ID: %d\n", ret); in tegra_pcie_dw_parse_dt()
1097 dev_err(pcie->dev, "Failed to find PHY entries: %d\n", in tegra_pcie_dw_parse_dt()
1101 pcie->phy_count = ret; in tegra_pcie_dw_parse_dt()
1104 pcie->update_fc_fixup = true; in tegra_pcie_dw_parse_dt()
1106 pcie->supports_clkreq = in tegra_pcie_dw_parse_dt()
1107 of_property_read_bool(pcie->dev->of_node, "supports-clkreq"); in tegra_pcie_dw_parse_dt()
1109 pcie->enable_cdm_check = in tegra_pcie_dw_parse_dt()
1112 if (pcie->mode == DW_PCIE_RC_TYPE) in tegra_pcie_dw_parse_dt()
1116 pcie->pex_rst_gpiod = devm_gpiod_get(pcie->dev, "reset", GPIOD_IN); in tegra_pcie_dw_parse_dt()
1117 if (IS_ERR(pcie->pex_rst_gpiod)) { in tegra_pcie_dw_parse_dt()
1118 int err = PTR_ERR(pcie->pex_rst_gpiod); in tegra_pcie_dw_parse_dt()
1124 dev_printk(level, pcie->dev, in tegra_pcie_dw_parse_dt()
1130 pcie->pex_refclk_sel_gpiod = devm_gpiod_get(pcie->dev, in tegra_pcie_dw_parse_dt()
1133 if (IS_ERR(pcie->pex_refclk_sel_gpiod)) { in tegra_pcie_dw_parse_dt()
1134 int err = PTR_ERR(pcie->pex_refclk_sel_gpiod); in tegra_pcie_dw_parse_dt()
1140 dev_printk(level, pcie->dev, in tegra_pcie_dw_parse_dt()
1143 pcie->pex_refclk_sel_gpiod = NULL; in tegra_pcie_dw_parse_dt()
1149 static int tegra_pcie_bpmp_set_ctrl_state(struct tegra_pcie_dw *pcie, in tegra_pcie_bpmp_set_ctrl_state() argument
1157 if (pcie->cid == 5) in tegra_pcie_bpmp_set_ctrl_state()
1164 req.controller_state.pcie_controller = pcie->cid; in tegra_pcie_bpmp_set_ctrl_state()
1174 return tegra_bpmp_transfer(pcie->bpmp, &msg); in tegra_pcie_bpmp_set_ctrl_state()
1177 static int tegra_pcie_bpmp_set_pll_state(struct tegra_pcie_dw *pcie, in tegra_pcie_bpmp_set_pll_state() argument
1189 req.ep_ctrlr_pll_init.ep_controller = pcie->cid; in tegra_pcie_bpmp_set_pll_state()
1192 req.ep_ctrlr_pll_off.ep_controller = pcie->cid; in tegra_pcie_bpmp_set_pll_state()
1202 return tegra_bpmp_transfer(pcie->bpmp, &msg); in tegra_pcie_bpmp_set_pll_state()
1205 static void tegra_pcie_downstream_dev_to_D0(struct tegra_pcie_dw *pcie) in tegra_pcie_downstream_dev_to_D0() argument
1207 struct pcie_port *pp = &pcie->pci.pp; in tegra_pcie_downstream_dev_to_D0()
1229 dev_err(pcie->dev, "Failed to find downstream devices\n"); in tegra_pcie_downstream_dev_to_D0()
1236 dev_err(pcie->dev, in tegra_pcie_downstream_dev_to_D0()
1243 static int tegra_pcie_get_slot_regulators(struct tegra_pcie_dw *pcie) in tegra_pcie_get_slot_regulators() argument
1245 pcie->slot_ctl_3v3 = devm_regulator_get_optional(pcie->dev, "vpcie3v3"); in tegra_pcie_get_slot_regulators()
1246 if (IS_ERR(pcie->slot_ctl_3v3)) { in tegra_pcie_get_slot_regulators()
1247 if (PTR_ERR(pcie->slot_ctl_3v3) != -ENODEV) in tegra_pcie_get_slot_regulators()
1248 return PTR_ERR(pcie->slot_ctl_3v3); in tegra_pcie_get_slot_regulators()
1250 pcie->slot_ctl_3v3 = NULL; in tegra_pcie_get_slot_regulators()
1253 pcie->slot_ctl_12v = devm_regulator_get_optional(pcie->dev, "vpcie12v"); in tegra_pcie_get_slot_regulators()
1254 if (IS_ERR(pcie->slot_ctl_12v)) { in tegra_pcie_get_slot_regulators()
1255 if (PTR_ERR(pcie->slot_ctl_12v) != -ENODEV) in tegra_pcie_get_slot_regulators()
1256 return PTR_ERR(pcie->slot_ctl_12v); in tegra_pcie_get_slot_regulators()
1258 pcie->slot_ctl_12v = NULL; in tegra_pcie_get_slot_regulators()
1264 static int tegra_pcie_enable_slot_regulators(struct tegra_pcie_dw *pcie) in tegra_pcie_enable_slot_regulators() argument
1268 if (pcie->slot_ctl_3v3) { in tegra_pcie_enable_slot_regulators()
1269 ret = regulator_enable(pcie->slot_ctl_3v3); in tegra_pcie_enable_slot_regulators()
1271 dev_err(pcie->dev, in tegra_pcie_enable_slot_regulators()
1277 if (pcie->slot_ctl_12v) { in tegra_pcie_enable_slot_regulators()
1278 ret = regulator_enable(pcie->slot_ctl_12v); in tegra_pcie_enable_slot_regulators()
1280 dev_err(pcie->dev, in tegra_pcie_enable_slot_regulators()
1291 if (pcie->slot_ctl_3v3 || pcie->slot_ctl_12v) in tegra_pcie_enable_slot_regulators()
1297 if (pcie->slot_ctl_3v3) in tegra_pcie_enable_slot_regulators()
1298 regulator_disable(pcie->slot_ctl_3v3); in tegra_pcie_enable_slot_regulators()
1302 static void tegra_pcie_disable_slot_regulators(struct tegra_pcie_dw *pcie) in tegra_pcie_disable_slot_regulators() argument
1304 if (pcie->slot_ctl_12v) in tegra_pcie_disable_slot_regulators()
1305 regulator_disable(pcie->slot_ctl_12v); in tegra_pcie_disable_slot_regulators()
1306 if (pcie->slot_ctl_3v3) in tegra_pcie_disable_slot_regulators()
1307 regulator_disable(pcie->slot_ctl_3v3); in tegra_pcie_disable_slot_regulators()
1310 static int tegra_pcie_config_controller(struct tegra_pcie_dw *pcie, in tegra_pcie_config_controller() argument
1316 ret = tegra_pcie_bpmp_set_ctrl_state(pcie, true); in tegra_pcie_config_controller()
1318 dev_err(pcie->dev, in tegra_pcie_config_controller()
1319 "Failed to enable controller %u: %d\n", pcie->cid, ret); in tegra_pcie_config_controller()
1323 ret = tegra_pcie_enable_slot_regulators(pcie); in tegra_pcie_config_controller()
1327 ret = regulator_enable(pcie->pex_ctl_supply); in tegra_pcie_config_controller()
1329 dev_err(pcie->dev, "Failed to enable regulator: %d\n", ret); in tegra_pcie_config_controller()
1333 ret = clk_prepare_enable(pcie->core_clk); in tegra_pcie_config_controller()
1335 dev_err(pcie->dev, "Failed to enable core clock: %d\n", ret); in tegra_pcie_config_controller()
1339 ret = reset_control_deassert(pcie->core_apb_rst); in tegra_pcie_config_controller()
1341 dev_err(pcie->dev, "Failed to deassert core APB reset: %d\n", in tegra_pcie_config_controller()
1348 val = appl_readl(pcie, APPL_CTRL); in tegra_pcie_config_controller()
1352 appl_writel(pcie, val, APPL_CTRL); in tegra_pcie_config_controller()
1355 ret = tegra_pcie_enable_phy(pcie); in tegra_pcie_config_controller()
1357 dev_err(pcie->dev, "Failed to enable PHY: %d\n", ret); in tegra_pcie_config_controller()
1362 appl_writel(pcie, pcie->dbi_res->start & APPL_CFG_BASE_ADDR_MASK, in tegra_pcie_config_controller()
1366 appl_writel(pcie, APPL_DM_TYPE_RP, APPL_DM_TYPE); in tegra_pcie_config_controller()
1368 appl_writel(pcie, 0x0, APPL_CFG_SLCG_OVERRIDE); in tegra_pcie_config_controller()
1370 val = appl_readl(pcie, APPL_CTRL); in tegra_pcie_config_controller()
1371 appl_writel(pcie, val | APPL_CTRL_SYS_PRE_DET_STATE, APPL_CTRL); in tegra_pcie_config_controller()
1373 val = appl_readl(pcie, APPL_CFG_MISC); in tegra_pcie_config_controller()
1375 appl_writel(pcie, val, APPL_CFG_MISC); in tegra_pcie_config_controller()
1377 if (!pcie->supports_clkreq) { in tegra_pcie_config_controller()
1378 val = appl_readl(pcie, APPL_PINMUX); in tegra_pcie_config_controller()
1381 appl_writel(pcie, val, APPL_PINMUX); in tegra_pcie_config_controller()
1385 appl_writel(pcie, in tegra_pcie_config_controller()
1386 pcie->atu_dma_res->start & APPL_CFG_IATU_DMA_BASE_ADDR_MASK, in tegra_pcie_config_controller()
1389 reset_control_deassert(pcie->core_rst); in tegra_pcie_config_controller()
1391 pcie->pcie_cap_base = dw_pcie_find_capability(&pcie->pci, in tegra_pcie_config_controller()
1395 if (!pcie->supports_clkreq) { in tegra_pcie_config_controller()
1396 disable_aspm_l11(pcie); in tegra_pcie_config_controller()
1397 disable_aspm_l12(pcie); in tegra_pcie_config_controller()
1403 reset_control_assert(pcie->core_apb_rst); in tegra_pcie_config_controller()
1405 clk_disable_unprepare(pcie->core_clk); in tegra_pcie_config_controller()
1407 regulator_disable(pcie->pex_ctl_supply); in tegra_pcie_config_controller()
1409 tegra_pcie_disable_slot_regulators(pcie); in tegra_pcie_config_controller()
1411 tegra_pcie_bpmp_set_ctrl_state(pcie, false); in tegra_pcie_config_controller()
1416 static int __deinit_controller(struct tegra_pcie_dw *pcie) in __deinit_controller() argument
1420 ret = reset_control_assert(pcie->core_rst); in __deinit_controller()
1422 dev_err(pcie->dev, "Failed to assert \"core\" reset: %d\n", in __deinit_controller()
1427 tegra_pcie_disable_phy(pcie); in __deinit_controller()
1429 ret = reset_control_assert(pcie->core_apb_rst); in __deinit_controller()
1431 dev_err(pcie->dev, "Failed to assert APB reset: %d\n", ret); in __deinit_controller()
1435 clk_disable_unprepare(pcie->core_clk); in __deinit_controller()
1437 ret = regulator_disable(pcie->pex_ctl_supply); in __deinit_controller()
1439 dev_err(pcie->dev, "Failed to disable regulator: %d\n", ret); in __deinit_controller()
1443 tegra_pcie_disable_slot_regulators(pcie); in __deinit_controller()
1445 ret = tegra_pcie_bpmp_set_ctrl_state(pcie, false); in __deinit_controller()
1447 dev_err(pcie->dev, "Failed to disable controller %d: %d\n", in __deinit_controller()
1448 pcie->cid, ret); in __deinit_controller()
1455 static int tegra_pcie_init_controller(struct tegra_pcie_dw *pcie) in tegra_pcie_init_controller() argument
1457 struct dw_pcie *pci = &pcie->pci; in tegra_pcie_init_controller()
1461 ret = tegra_pcie_config_controller(pcie, false); in tegra_pcie_init_controller()
1469 dev_err(pcie->dev, "Failed to add PCIe port: %d\n", ret); in tegra_pcie_init_controller()
1476 return __deinit_controller(pcie); in tegra_pcie_init_controller()
1479 static int tegra_pcie_try_link_l2(struct tegra_pcie_dw *pcie) in tegra_pcie_try_link_l2() argument
1483 if (!tegra_pcie_dw_link_up(&pcie->pci)) in tegra_pcie_try_link_l2()
1486 val = appl_readl(pcie, APPL_RADM_STATUS); in tegra_pcie_try_link_l2()
1488 appl_writel(pcie, val, APPL_RADM_STATUS); in tegra_pcie_try_link_l2()
1490 return readl_poll_timeout_atomic(pcie->appl_base + APPL_DEBUG, val, in tegra_pcie_try_link_l2()
1495 static void tegra_pcie_dw_pme_turnoff(struct tegra_pcie_dw *pcie) in tegra_pcie_dw_pme_turnoff() argument
1500 if (!tegra_pcie_dw_link_up(&pcie->pci)) { in tegra_pcie_dw_pme_turnoff()
1501 dev_dbg(pcie->dev, "PCIe link is not up...!\n"); in tegra_pcie_dw_pme_turnoff()
1505 if (tegra_pcie_try_link_l2(pcie)) { in tegra_pcie_dw_pme_turnoff()
1506 dev_info(pcie->dev, "Link didn't transition to L2 state\n"); in tegra_pcie_dw_pme_turnoff()
1513 data = appl_readl(pcie, APPL_PINMUX); in tegra_pcie_dw_pme_turnoff()
1515 appl_writel(pcie, data, APPL_PINMUX); in tegra_pcie_dw_pme_turnoff()
1517 err = readl_poll_timeout_atomic(pcie->appl_base + APPL_DEBUG, in tegra_pcie_dw_pme_turnoff()
1525 dev_info(pcie->dev, "Link didn't go to detect state\n"); in tegra_pcie_dw_pme_turnoff()
1528 data = appl_readl(pcie, APPL_CTRL); in tegra_pcie_dw_pme_turnoff()
1530 appl_writel(pcie, data, APPL_CTRL); in tegra_pcie_dw_pme_turnoff()
1537 data = appl_readl(pcie, APPL_PINMUX); in tegra_pcie_dw_pme_turnoff()
1542 appl_writel(pcie, data, APPL_PINMUX); in tegra_pcie_dw_pme_turnoff()
1545 static int tegra_pcie_deinit_controller(struct tegra_pcie_dw *pcie) in tegra_pcie_deinit_controller() argument
1547 tegra_pcie_downstream_dev_to_D0(pcie); in tegra_pcie_deinit_controller()
1548 dw_pcie_host_deinit(&pcie->pci.pp); in tegra_pcie_deinit_controller()
1549 tegra_pcie_dw_pme_turnoff(pcie); in tegra_pcie_deinit_controller()
1551 return __deinit_controller(pcie); in tegra_pcie_deinit_controller()
1554 static int tegra_pcie_config_rp(struct tegra_pcie_dw *pcie) in tegra_pcie_config_rp() argument
1556 struct pcie_port *pp = &pcie->pci.pp; in tegra_pcie_config_rp()
1557 struct device *dev = pcie->dev; in tegra_pcie_config_rp()
1584 tegra_pcie_init_controller(pcie); in tegra_pcie_config_rp()
1586 pcie->link_state = tegra_pcie_dw_link_up(&pcie->pci); in tegra_pcie_config_rp()
1587 if (!pcie->link_state) { in tegra_pcie_config_rp()
1598 pcie->debugfs = debugfs_create_dir(name, NULL); in tegra_pcie_config_rp()
1599 init_debugfs(pcie); in tegra_pcie_config_rp()
1604 tegra_pcie_deinit_controller(pcie); in tegra_pcie_config_rp()
1611 static void pex_ep_event_pex_rst_assert(struct tegra_pcie_dw *pcie) in pex_ep_event_pex_rst_assert() argument
1616 if (pcie->ep_state == EP_STATE_DISABLED) in pex_ep_event_pex_rst_assert()
1620 val = appl_readl(pcie, APPL_CTRL); in pex_ep_event_pex_rst_assert()
1622 appl_writel(pcie, val, APPL_CTRL); in pex_ep_event_pex_rst_assert()
1624 ret = readl_poll_timeout(pcie->appl_base + APPL_DEBUG, val, in pex_ep_event_pex_rst_assert()
1630 dev_err(pcie->dev, "Failed to go Detect state: %d\n", ret); in pex_ep_event_pex_rst_assert()
1632 reset_control_assert(pcie->core_rst); in pex_ep_event_pex_rst_assert()
1634 tegra_pcie_disable_phy(pcie); in pex_ep_event_pex_rst_assert()
1636 reset_control_assert(pcie->core_apb_rst); in pex_ep_event_pex_rst_assert()
1638 clk_disable_unprepare(pcie->core_clk); in pex_ep_event_pex_rst_assert()
1640 pm_runtime_put_sync(pcie->dev); in pex_ep_event_pex_rst_assert()
1642 ret = tegra_pcie_bpmp_set_pll_state(pcie, false); in pex_ep_event_pex_rst_assert()
1644 dev_err(pcie->dev, "Failed to turn off UPHY: %d\n", ret); in pex_ep_event_pex_rst_assert()
1646 pcie->ep_state = EP_STATE_DISABLED; in pex_ep_event_pex_rst_assert()
1647 dev_dbg(pcie->dev, "Uninitialization of endpoint is completed\n"); in pex_ep_event_pex_rst_assert()
1650 static void pex_ep_event_pex_rst_deassert(struct tegra_pcie_dw *pcie) in pex_ep_event_pex_rst_deassert() argument
1652 struct dw_pcie *pci = &pcie->pci; in pex_ep_event_pex_rst_deassert()
1654 struct device *dev = pcie->dev; in pex_ep_event_pex_rst_deassert()
1658 if (pcie->ep_state == EP_STATE_ENABLED) in pex_ep_event_pex_rst_deassert()
1668 ret = tegra_pcie_bpmp_set_pll_state(pcie, true); in pex_ep_event_pex_rst_deassert()
1674 ret = clk_prepare_enable(pcie->core_clk); in pex_ep_event_pex_rst_deassert()
1680 ret = reset_control_deassert(pcie->core_apb_rst); in pex_ep_event_pex_rst_deassert()
1686 ret = tegra_pcie_enable_phy(pcie); in pex_ep_event_pex_rst_deassert()
1693 appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L0); in pex_ep_event_pex_rst_deassert()
1694 appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_0_0); in pex_ep_event_pex_rst_deassert()
1695 appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_1); in pex_ep_event_pex_rst_deassert()
1696 appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_2); in pex_ep_event_pex_rst_deassert()
1697 appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_3); in pex_ep_event_pex_rst_deassert()
1698 appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_6); in pex_ep_event_pex_rst_deassert()
1699 appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_7); in pex_ep_event_pex_rst_deassert()
1700 appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_8_0); in pex_ep_event_pex_rst_deassert()
1701 appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_9); in pex_ep_event_pex_rst_deassert()
1702 appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_10); in pex_ep_event_pex_rst_deassert()
1703 appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_11); in pex_ep_event_pex_rst_deassert()
1704 appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_13); in pex_ep_event_pex_rst_deassert()
1705 appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_14); in pex_ep_event_pex_rst_deassert()
1706 appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_15); in pex_ep_event_pex_rst_deassert()
1707 appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_17); in pex_ep_event_pex_rst_deassert()
1710 val = appl_readl(pcie, APPL_DM_TYPE); in pex_ep_event_pex_rst_deassert()
1713 appl_writel(pcie, val, APPL_DM_TYPE); in pex_ep_event_pex_rst_deassert()
1715 appl_writel(pcie, 0x0, APPL_CFG_SLCG_OVERRIDE); in pex_ep_event_pex_rst_deassert()
1717 val = appl_readl(pcie, APPL_CTRL); in pex_ep_event_pex_rst_deassert()
1720 appl_writel(pcie, val, APPL_CTRL); in pex_ep_event_pex_rst_deassert()
1722 val = appl_readl(pcie, APPL_CFG_MISC); in pex_ep_event_pex_rst_deassert()
1725 appl_writel(pcie, val, APPL_CFG_MISC); in pex_ep_event_pex_rst_deassert()
1727 val = appl_readl(pcie, APPL_PINMUX); in pex_ep_event_pex_rst_deassert()
1730 appl_writel(pcie, val, APPL_PINMUX); in pex_ep_event_pex_rst_deassert()
1732 appl_writel(pcie, pcie->dbi_res->start & APPL_CFG_BASE_ADDR_MASK, in pex_ep_event_pex_rst_deassert()
1735 appl_writel(pcie, pcie->atu_dma_res->start & in pex_ep_event_pex_rst_deassert()
1739 val = appl_readl(pcie, APPL_INTR_EN_L0_0); in pex_ep_event_pex_rst_deassert()
1743 appl_writel(pcie, val, APPL_INTR_EN_L0_0); in pex_ep_event_pex_rst_deassert()
1745 val = appl_readl(pcie, APPL_INTR_EN_L1_0_0); in pex_ep_event_pex_rst_deassert()
1748 appl_writel(pcie, val, APPL_INTR_EN_L1_0_0); in pex_ep_event_pex_rst_deassert()
1750 reset_control_deassert(pcie->core_rst); in pex_ep_event_pex_rst_deassert()
1752 if (pcie->update_fc_fixup) { in pex_ep_event_pex_rst_deassert()
1758 config_gen3_gen4_eq_presets(pcie); in pex_ep_event_pex_rst_deassert()
1760 init_host_aspm(pcie); in pex_ep_event_pex_rst_deassert()
1763 if (!pcie->supports_clkreq) { in pex_ep_event_pex_rst_deassert()
1764 disable_aspm_l11(pcie); in pex_ep_event_pex_rst_deassert()
1765 disable_aspm_l12(pcie); in pex_ep_event_pex_rst_deassert()
1772 pcie->pcie_cap_base = dw_pcie_find_capability(&pcie->pci, in pex_ep_event_pex_rst_deassert()
1774 clk_set_rate(pcie->core_clk, GEN4_CORE_CLK_FREQ); in pex_ep_event_pex_rst_deassert()
1791 val = appl_readl(pcie, APPL_CTRL); in pex_ep_event_pex_rst_deassert()
1793 appl_writel(pcie, val, APPL_CTRL); in pex_ep_event_pex_rst_deassert()
1795 pcie->ep_state = EP_STATE_ENABLED; in pex_ep_event_pex_rst_deassert()
1801 reset_control_assert(pcie->core_rst); in pex_ep_event_pex_rst_deassert()
1802 tegra_pcie_disable_phy(pcie); in pex_ep_event_pex_rst_deassert()
1804 reset_control_assert(pcie->core_apb_rst); in pex_ep_event_pex_rst_deassert()
1806 clk_disable_unprepare(pcie->core_clk); in pex_ep_event_pex_rst_deassert()
1808 tegra_pcie_bpmp_set_pll_state(pcie, false); in pex_ep_event_pex_rst_deassert()
1815 struct tegra_pcie_dw *pcie = arg; in tegra_pcie_ep_pex_rst_irq() local
1817 if (gpiod_get_value(pcie->pex_rst_gpiod)) in tegra_pcie_ep_pex_rst_irq()
1818 pex_ep_event_pex_rst_assert(pcie); in tegra_pcie_ep_pex_rst_irq()
1820 pex_ep_event_pex_rst_deassert(pcie); in tegra_pcie_ep_pex_rst_irq()
1825 static int tegra_pcie_ep_raise_legacy_irq(struct tegra_pcie_dw *pcie, u16 irq) in tegra_pcie_ep_raise_legacy_irq() argument
1831 appl_writel(pcie, 1, APPL_LEGACY_INTX); in tegra_pcie_ep_raise_legacy_irq()
1833 appl_writel(pcie, 0, APPL_LEGACY_INTX); in tegra_pcie_ep_raise_legacy_irq()
1837 static int tegra_pcie_ep_raise_msi_irq(struct tegra_pcie_dw *pcie, u16 irq) in tegra_pcie_ep_raise_msi_irq() argument
1842 appl_writel(pcie, BIT(irq), APPL_MSI_CTRL_1); in tegra_pcie_ep_raise_msi_irq()
1847 static int tegra_pcie_ep_raise_msix_irq(struct tegra_pcie_dw *pcie, u16 irq) in tegra_pcie_ep_raise_msix_irq() argument
1849 struct dw_pcie_ep *ep = &pcie->pci.ep; in tegra_pcie_ep_raise_msix_irq()
1861 struct tegra_pcie_dw *pcie = to_tegra_pcie(pci); in tegra_pcie_ep_raise_irq() local
1865 return tegra_pcie_ep_raise_legacy_irq(pcie, interrupt_num); in tegra_pcie_ep_raise_irq()
1868 return tegra_pcie_ep_raise_msi_irq(pcie, interrupt_num); in tegra_pcie_ep_raise_irq()
1871 return tegra_pcie_ep_raise_msix_irq(pcie, interrupt_num); in tegra_pcie_ep_raise_irq()
1902 static int tegra_pcie_config_ep(struct tegra_pcie_dw *pcie, in tegra_pcie_config_ep() argument
1905 struct dw_pcie *pci = &pcie->pci; in tegra_pcie_config_ep()
1906 struct device *dev = pcie->dev; in tegra_pcie_config_ep()
1923 ret = gpiod_set_debounce(pcie->pex_rst_gpiod, PERST_DEBOUNCE_TIME); in tegra_pcie_config_ep()
1930 ret = gpiod_to_irq(pcie->pex_rst_gpiod); in tegra_pcie_config_ep()
1935 pcie->pex_rst_irq = (unsigned int)ret; in tegra_pcie_config_ep()
1938 pcie->cid); in tegra_pcie_config_ep()
1944 irq_set_status_flags(pcie->pex_rst_irq, IRQ_NOAUTOEN); in tegra_pcie_config_ep()
1946 pcie->ep_state = EP_STATE_DISABLED; in tegra_pcie_config_ep()
1948 ret = devm_request_threaded_irq(dev, pcie->pex_rst_irq, NULL, in tegra_pcie_config_ep()
1952 name, (void *)pcie); in tegra_pcie_config_ep()
1959 pcie->cid); in tegra_pcie_config_ep()
1983 struct tegra_pcie_dw *pcie; in tegra_pcie_dw_probe() local
1994 pcie = devm_kzalloc(dev, sizeof(*pcie), GFP_KERNEL); in tegra_pcie_dw_probe()
1995 if (!pcie) in tegra_pcie_dw_probe()
1998 pci = &pcie->pci; in tegra_pcie_dw_probe()
2005 pcie->dev = &pdev->dev; in tegra_pcie_dw_probe()
2006 pcie->mode = (enum dw_pcie_device_mode)data->mode; in tegra_pcie_dw_probe()
2008 ret = tegra_pcie_dw_parse_dt(pcie); in tegra_pcie_dw_probe()
2021 ret = tegra_pcie_get_slot_regulators(pcie); in tegra_pcie_dw_probe()
2034 if (pcie->pex_refclk_sel_gpiod) in tegra_pcie_dw_probe()
2035 gpiod_set_value(pcie->pex_refclk_sel_gpiod, 1); in tegra_pcie_dw_probe()
2037 pcie->pex_ctl_supply = devm_regulator_get(dev, "vddio-pex-ctl"); in tegra_pcie_dw_probe()
2038 if (IS_ERR(pcie->pex_ctl_supply)) { in tegra_pcie_dw_probe()
2039 ret = PTR_ERR(pcie->pex_ctl_supply); in tegra_pcie_dw_probe()
2042 PTR_ERR(pcie->pex_ctl_supply)); in tegra_pcie_dw_probe()
2046 pcie->core_clk = devm_clk_get(dev, "core"); in tegra_pcie_dw_probe()
2047 if (IS_ERR(pcie->core_clk)) { in tegra_pcie_dw_probe()
2049 PTR_ERR(pcie->core_clk)); in tegra_pcie_dw_probe()
2050 return PTR_ERR(pcie->core_clk); in tegra_pcie_dw_probe()
2053 pcie->appl_res = platform_get_resource_byname(pdev, IORESOURCE_MEM, in tegra_pcie_dw_probe()
2055 if (!pcie->appl_res) { in tegra_pcie_dw_probe()
2060 pcie->appl_base = devm_ioremap_resource(dev, pcie->appl_res); in tegra_pcie_dw_probe()
2061 if (IS_ERR(pcie->appl_base)) in tegra_pcie_dw_probe()
2062 return PTR_ERR(pcie->appl_base); in tegra_pcie_dw_probe()
2064 pcie->core_apb_rst = devm_reset_control_get(dev, "apb"); in tegra_pcie_dw_probe()
2065 if (IS_ERR(pcie->core_apb_rst)) { in tegra_pcie_dw_probe()
2067 PTR_ERR(pcie->core_apb_rst)); in tegra_pcie_dw_probe()
2068 return PTR_ERR(pcie->core_apb_rst); in tegra_pcie_dw_probe()
2071 phys = devm_kcalloc(dev, pcie->phy_count, sizeof(*phys), GFP_KERNEL); in tegra_pcie_dw_probe()
2075 for (i = 0; i < pcie->phy_count; i++) { in tegra_pcie_dw_probe()
2091 pcie->phys = phys; in tegra_pcie_dw_probe()
2098 pcie->dbi_res = dbi_res; in tegra_pcie_dw_probe()
2113 pcie->atu_dma_res = atu_dma_res; in tegra_pcie_dw_probe()
2119 pcie->core_rst = devm_reset_control_get(dev, "core"); in tegra_pcie_dw_probe()
2120 if (IS_ERR(pcie->core_rst)) { in tegra_pcie_dw_probe()
2122 PTR_ERR(pcie->core_rst)); in tegra_pcie_dw_probe()
2123 return PTR_ERR(pcie->core_rst); in tegra_pcie_dw_probe()
2130 pcie->bpmp = tegra_bpmp_get(dev); in tegra_pcie_dw_probe()
2131 if (IS_ERR(pcie->bpmp)) in tegra_pcie_dw_probe()
2132 return PTR_ERR(pcie->bpmp); in tegra_pcie_dw_probe()
2134 platform_set_drvdata(pdev, pcie); in tegra_pcie_dw_probe()
2136 switch (pcie->mode) { in tegra_pcie_dw_probe()
2139 IRQF_SHARED, "tegra-pcie-intr", pcie); in tegra_pcie_dw_probe()
2146 ret = tegra_pcie_config_rp(pcie); in tegra_pcie_dw_probe()
2158 "tegra-pcie-ep-intr", pcie); in tegra_pcie_dw_probe()
2165 ret = tegra_pcie_config_ep(pcie, pdev); in tegra_pcie_dw_probe()
2171 dev_err(dev, "Invalid PCIe device type %d\n", pcie->mode); in tegra_pcie_dw_probe()
2175 tegra_bpmp_put(pcie->bpmp); in tegra_pcie_dw_probe()
2181 struct tegra_pcie_dw *pcie = platform_get_drvdata(pdev); in tegra_pcie_dw_remove() local
2183 if (!pcie->link_state) in tegra_pcie_dw_remove()
2186 debugfs_remove_recursive(pcie->debugfs); in tegra_pcie_dw_remove()
2187 tegra_pcie_deinit_controller(pcie); in tegra_pcie_dw_remove()
2188 pm_runtime_put_sync(pcie->dev); in tegra_pcie_dw_remove()
2189 pm_runtime_disable(pcie->dev); in tegra_pcie_dw_remove()
2190 tegra_bpmp_put(pcie->bpmp); in tegra_pcie_dw_remove()
2191 if (pcie->pex_refclk_sel_gpiod) in tegra_pcie_dw_remove()
2192 gpiod_set_value(pcie->pex_refclk_sel_gpiod, 0); in tegra_pcie_dw_remove()
2199 struct tegra_pcie_dw *pcie = dev_get_drvdata(dev); in tegra_pcie_dw_suspend_late() local
2202 if (!pcie->link_state) in tegra_pcie_dw_suspend_late()
2206 val = appl_readl(pcie, APPL_CTRL); in tegra_pcie_dw_suspend_late()
2210 appl_writel(pcie, val, APPL_CTRL); in tegra_pcie_dw_suspend_late()
2217 struct tegra_pcie_dw *pcie = dev_get_drvdata(dev); in tegra_pcie_dw_suspend_noirq() local
2219 if (!pcie->link_state) in tegra_pcie_dw_suspend_noirq()
2223 pcie->msi_ctrl_int = dw_pcie_readl_dbi(&pcie->pci, in tegra_pcie_dw_suspend_noirq()
2225 tegra_pcie_downstream_dev_to_D0(pcie); in tegra_pcie_dw_suspend_noirq()
2226 tegra_pcie_dw_pme_turnoff(pcie); in tegra_pcie_dw_suspend_noirq()
2228 return __deinit_controller(pcie); in tegra_pcie_dw_suspend_noirq()
2233 struct tegra_pcie_dw *pcie = dev_get_drvdata(dev); in tegra_pcie_dw_resume_noirq() local
2236 if (!pcie->link_state) in tegra_pcie_dw_resume_noirq()
2239 ret = tegra_pcie_config_controller(pcie, true); in tegra_pcie_dw_resume_noirq()
2243 ret = tegra_pcie_dw_host_init(&pcie->pci.pp); in tegra_pcie_dw_resume_noirq()
2250 dw_pcie_writel_dbi(&pcie->pci, PORT_LOGIC_MSI_CTRL_INT_0_EN, in tegra_pcie_dw_resume_noirq()
2251 pcie->msi_ctrl_int); in tegra_pcie_dw_resume_noirq()
2256 return __deinit_controller(pcie); in tegra_pcie_dw_resume_noirq()
2261 struct tegra_pcie_dw *pcie = dev_get_drvdata(dev); in tegra_pcie_dw_resume_early() local
2264 if (!pcie->link_state) in tegra_pcie_dw_resume_early()
2268 val = appl_readl(pcie, APPL_CTRL); in tegra_pcie_dw_resume_early()
2274 appl_writel(pcie, val, APPL_CTRL); in tegra_pcie_dw_resume_early()
2281 struct tegra_pcie_dw *pcie = platform_get_drvdata(pdev); in tegra_pcie_dw_shutdown() local
2283 if (!pcie->link_state) in tegra_pcie_dw_shutdown()
2286 debugfs_remove_recursive(pcie->debugfs); in tegra_pcie_dw_shutdown()
2287 tegra_pcie_downstream_dev_to_D0(pcie); in tegra_pcie_dw_shutdown()
2289 disable_irq(pcie->pci.pp.irq); in tegra_pcie_dw_shutdown()
2291 disable_irq(pcie->pci.pp.msi_irq); in tegra_pcie_dw_shutdown()
2293 tegra_pcie_dw_pme_turnoff(pcie); in tegra_pcie_dw_shutdown()
2294 __deinit_controller(pcie); in tegra_pcie_dw_shutdown()