Lines Matching refs:hba
33 static int ufs_qcom_get_connected_tx_lanes(struct ufs_hba *hba, u32 *tx_lanes) in ufs_qcom_get_connected_tx_lanes() argument
37 err = ufshcd_dme_get(hba, in ufs_qcom_get_connected_tx_lanes()
40 dev_err(hba->dev, "%s: couldn't read PA_CONNECTEDTXDATALANES %d\n", in ufs_qcom_get_connected_tx_lanes()
92 struct device *dev = host->hba->dev; in ufs_qcom_enable_lane_clks()
133 struct device *dev = host->hba->dev; in ufs_qcom_init_lane_clks()
156 static int ufs_qcom_link_startup_post_change(struct ufs_hba *hba) in ufs_qcom_link_startup_post_change() argument
158 struct ufs_qcom_host *host = hba->priv; in ufs_qcom_link_startup_post_change()
163 err = ufs_qcom_get_connected_tx_lanes(hba, &tx_lanes); in ufs_qcom_link_startup_post_change()
169 dev_err(hba->dev, "%s: ufs_qcom_phy_set_tx_lane_enable failed\n", in ufs_qcom_link_startup_post_change()
176 static int ufs_qcom_check_hibern8(struct ufs_hba *hba) in ufs_qcom_check_hibern8() argument
183 err = ufshcd_dme_get(hba, in ufs_qcom_check_hibern8()
197 err = ufshcd_dme_get(hba, in ufs_qcom_check_hibern8()
201 dev_err(hba->dev, "%s: unable to get TX_FSM_STATE, err %d\n", in ufs_qcom_check_hibern8()
205 dev_err(hba->dev, "%s: invalid TX_FSM_STATE = %d\n", in ufs_qcom_check_hibern8()
212 static int ufs_qcom_power_up_sequence(struct ufs_hba *hba) in ufs_qcom_power_up_sequence() argument
214 struct ufs_qcom_host *host = hba->priv; in ufs_qcom_power_up_sequence()
221 ufs_qcom_assert_reset(hba); in ufs_qcom_power_up_sequence()
227 dev_err(hba->dev, "%s: ufs_qcom_phy_calibrate_phy() failed, ret = %d\n", in ufs_qcom_power_up_sequence()
233 ufs_qcom_deassert_reset(hba); in ufs_qcom_power_up_sequence()
242 dev_err(hba->dev, "%s: ufs_qcom_phy_start_serdes() failed, ret = %d\n", in ufs_qcom_power_up_sequence()
249 dev_err(hba->dev, "%s: is_physical_coding_sublayer_ready() failed, ret = %d\n", in ufs_qcom_power_up_sequence()
264 static void ufs_qcom_enable_hw_clk_gating(struct ufs_hba *hba) in ufs_qcom_enable_hw_clk_gating() argument
266 ufshcd_writel(hba, in ufs_qcom_enable_hw_clk_gating()
267 ufshcd_readl(hba, REG_UFS_CFG2) | REG_UFS_CFG2_CGC_EN_ALL, in ufs_qcom_enable_hw_clk_gating()
274 static int ufs_qcom_hce_enable_notify(struct ufs_hba *hba, bool status) in ufs_qcom_hce_enable_notify() argument
276 struct ufs_qcom_host *host = hba->priv; in ufs_qcom_hce_enable_notify()
281 ufs_qcom_power_up_sequence(hba); in ufs_qcom_hce_enable_notify()
291 err = ufs_qcom_check_hibern8(hba); in ufs_qcom_hce_enable_notify()
292 ufs_qcom_enable_hw_clk_gating(hba); in ufs_qcom_hce_enable_notify()
296 dev_err(hba->dev, "%s: invalid status %d\n", __func__, status); in ufs_qcom_hce_enable_notify()
308 ufs_qcom_cfg_timers(struct ufs_hba *hba, u32 gear, u32 hs, u32 rate) in ufs_qcom_cfg_timers() argument
334 dev_err(hba->dev, "%s: invalid gear = %d\n", __func__, gear); in ufs_qcom_cfg_timers()
338 list_for_each_entry(clki, &hba->clk_list_head, list) { in ufs_qcom_cfg_timers()
348 ufshcd_writel(hba, core_clk_cycles_per_us, REG_UFS_SYS1CLK_1US); in ufs_qcom_cfg_timers()
359 dev_err(hba->dev, in ufs_qcom_cfg_timers()
368 dev_err(hba->dev, in ufs_qcom_cfg_timers()
376 dev_err(hba->dev, "%s: invalid rate = %d\n", in ufs_qcom_cfg_timers()
384 dev_err(hba->dev, in ufs_qcom_cfg_timers()
394 dev_err(hba->dev, "%s: invalid mode = %d\n", __func__, hs); in ufs_qcom_cfg_timers()
399 ufshcd_writel(hba, core_clk_period_in_ns | tx_clk_cycles_per_us, in ufs_qcom_cfg_timers()
409 static int ufs_qcom_link_startup_notify(struct ufs_hba *hba, bool status) in ufs_qcom_link_startup_notify() argument
416 core_clk_rate = ufs_qcom_cfg_timers(hba, UFS_PWM_G1, in ufs_qcom_link_startup_notify()
419 dev_err(hba->dev, "%s: ufs_qcom_cfg_timers() failed\n", in ufs_qcom_link_startup_notify()
425 ufshcd_writel(hba, core_clk_cycles_per_100ms, in ufs_qcom_link_startup_notify()
429 ufs_qcom_link_startup_post_change(hba); in ufs_qcom_link_startup_notify()
438 static int ufs_qcom_suspend(struct ufs_hba *hba, enum ufs_pm_op pm_op) in ufs_qcom_suspend() argument
440 struct ufs_qcom_host *host = hba->priv; in ufs_qcom_suspend()
444 if (ufs_qcom_is_link_off(hba)) { in ufs_qcom_suspend()
454 ufs_qcom_assert_reset(hba); in ufs_qcom_suspend()
462 if (!ufs_qcom_is_link_active(hba)) in ufs_qcom_suspend()
469 static int ufs_qcom_resume(struct ufs_hba *hba, enum ufs_pm_op pm_op) in ufs_qcom_resume() argument
471 struct ufs_qcom_host *host = hba->priv; in ufs_qcom_resume()
477 dev_err(hba->dev, "%s: failed enabling regs, err = %d\n", in ufs_qcom_resume()
482 hba->is_sys_suspended = false; in ufs_qcom_resume()
601 dev_err(host->hba->dev, "%s: failed %d\n", __func__, err); in ufs_qcom_update_bus_bw_vote()
607 static int ufs_qcom_pwr_change_notify(struct ufs_hba *hba, in ufs_qcom_pwr_change_notify() argument
613 struct ufs_qcom_host *host = hba->priv; in ufs_qcom_pwr_change_notify()
652 if (!ufs_qcom_cfg_timers(hba, dev_req_params->gear_rx, in ufs_qcom_pwr_change_notify()
655 dev_err(hba->dev, "%s: ufs_qcom_cfg_timers() failed\n", in ufs_qcom_pwr_change_notify()
668 dev_err(hba->dev, "%s: ufs_qcom_phy_set_tx_lane_enable() failed res = %d\n", in ufs_qcom_pwr_change_notify()
695 static void ufs_qcom_advertise_quirks(struct ufs_hba *hba) in ufs_qcom_advertise_quirks() argument
697 struct ufs_qcom_host *host = hba->priv; in ufs_qcom_advertise_quirks()
700 hba->quirks |= UFSHCD_QUIRK_DELAY_BEFORE_DME_CMDS; in ufs_qcom_advertise_quirks()
705 hba->quirks |= UFSHCD_QUIRK_DELAY_BEFORE_DME_CMDS; in ufs_qcom_advertise_quirks()
709 static void ufs_qcom_set_caps(struct ufs_hba *hba) in ufs_qcom_set_caps() argument
711 struct ufs_qcom_host *host = hba->priv; in ufs_qcom_set_caps()
720 struct device *dev = host->hba->dev; in ufs_qcom_get_bus_vote()
780 static int ufs_qcom_setup_clocks(struct ufs_hba *hba, bool on) in ufs_qcom_setup_clocks() argument
782 struct ufs_qcom_host *host = hba->priv; in ufs_qcom_setup_clocks()
801 dev_err(hba->dev, "%s enable phy ref clock failed, err=%d\n", in ufs_qcom_setup_clocks()
814 if (!ufs_qcom_is_link_active(hba)) { in ufs_qcom_setup_clocks()
825 dev_err(hba->dev, "%s: set bus vote failed %d\n", in ufs_qcom_setup_clocks()
836 struct ufs_hba *hba = dev_get_drvdata(dev); in show_ufs_to_mem_max_bus_bw() local
837 struct ufs_qcom_host *host = hba->priv; in show_ufs_to_mem_max_bus_bw()
847 struct ufs_hba *hba = dev_get_drvdata(dev); in store_ufs_to_mem_max_bus_bw() local
848 struct ufs_qcom_host *host = hba->priv; in store_ufs_to_mem_max_bus_bw()
862 struct device *dev = host->hba->dev; in ufs_qcom_bus_register()
905 static int ufs_qcom_init(struct ufs_hba *hba) in ufs_qcom_init() argument
908 struct device *dev = hba->dev; in ufs_qcom_init()
921 host->hba = hba; in ufs_qcom_init()
922 hba->priv = (void *)host; in ufs_qcom_init()
936 ufs_qcom_get_controller_revision(hba, &host->hw_ver.major, in ufs_qcom_init()
952 ufs_qcom_set_caps(hba); in ufs_qcom_init()
953 ufs_qcom_advertise_quirks(hba); in ufs_qcom_init()
955 hba->caps |= UFSHCD_CAP_CLK_GATING | UFSHCD_CAP_CLK_SCALING; in ufs_qcom_init()
956 hba->caps |= UFSHCD_CAP_AUTO_BKOPS_SUSPEND; in ufs_qcom_init()
958 ufs_qcom_setup_clocks(hba, true); in ufs_qcom_init()
960 if (hba->dev->id < MAX_UFS_QCOM_HOSTS) in ufs_qcom_init()
961 ufs_qcom_hosts[hba->dev->id] = host; in ufs_qcom_init()
971 hba->priv = NULL; in ufs_qcom_init()
976 static void ufs_qcom_exit(struct ufs_hba *hba) in ufs_qcom_exit() argument
978 struct ufs_qcom_host *host = hba->priv; in ufs_qcom_exit()
985 void ufs_qcom_clk_scale_notify(struct ufs_hba *hba) in ufs_qcom_clk_scale_notify() argument
987 struct ufs_qcom_host *host = hba->priv; in ufs_qcom_clk_scale_notify()
993 ufs_qcom_cfg_timers(hba, dev_req_params->gear_rx, in ufs_qcom_clk_scale_notify()