Lines Matching refs:hba
98 #define ufshcd_is_link_off(hba) ((hba)->uic_link_state == UIC_LINK_OFF_STATE) argument
99 #define ufshcd_is_link_active(hba) ((hba)->uic_link_state == \ argument
101 #define ufshcd_is_link_hibern8(hba) ((hba)->uic_link_state == \ argument
103 #define ufshcd_is_link_broken(hba) ((hba)->uic_link_state == \ argument
105 #define ufshcd_set_link_off(hba) ((hba)->uic_link_state = UIC_LINK_OFF_STATE) argument
106 #define ufshcd_set_link_active(hba) ((hba)->uic_link_state = \ argument
108 #define ufshcd_set_link_hibern8(hba) ((hba)->uic_link_state = \ argument
110 #define ufshcd_set_link_broken(hba) ((hba)->uic_link_state = \ argument
318 int (*apply_dev_quirks)(struct ufs_hba *hba);
319 void (*fixup_dev_quirks)(struct ufs_hba *hba);
322 void (*dbg_register_dump)(struct ufs_hba *hba);
324 int (*device_reset)(struct ufs_hba *hba);
325 void (*config_scaling_param)(struct ufs_hba *hba,
328 int (*program_key)(struct ufs_hba *hba,
814 static inline bool ufshcd_is_clkgating_allowed(struct ufs_hba *hba) in ufshcd_is_clkgating_allowed() argument
816 return hba->caps & UFSHCD_CAP_CLK_GATING; in ufshcd_is_clkgating_allowed()
818 static inline bool ufshcd_can_hibern8_during_gating(struct ufs_hba *hba) in ufshcd_can_hibern8_during_gating() argument
820 return hba->caps & UFSHCD_CAP_HIBERN8_WITH_CLK_GATING; in ufshcd_can_hibern8_during_gating()
822 static inline int ufshcd_is_clkscaling_supported(struct ufs_hba *hba) in ufshcd_is_clkscaling_supported() argument
824 return hba->caps & UFSHCD_CAP_CLK_SCALING; in ufshcd_is_clkscaling_supported()
826 static inline bool ufshcd_can_autobkops_during_suspend(struct ufs_hba *hba) in ufshcd_can_autobkops_during_suspend() argument
828 return hba->caps & UFSHCD_CAP_AUTO_BKOPS_SUSPEND; in ufshcd_can_autobkops_during_suspend()
830 static inline bool ufshcd_is_rpm_autosuspend_allowed(struct ufs_hba *hba) in ufshcd_is_rpm_autosuspend_allowed() argument
832 return hba->caps & UFSHCD_CAP_RPM_AUTOSUSPEND; in ufshcd_is_rpm_autosuspend_allowed()
835 static inline bool ufshcd_is_intr_aggr_allowed(struct ufs_hba *hba) in ufshcd_is_intr_aggr_allowed() argument
839 if ((hba->caps & UFSHCD_CAP_INTR_AGGR) && in ufshcd_is_intr_aggr_allowed()
840 !(hba->quirks & UFSHCD_QUIRK_BROKEN_INTR_AGGR)) in ufshcd_is_intr_aggr_allowed()
849 static inline bool ufshcd_is_auto_hibern8_supported(struct ufs_hba *hba) in ufshcd_is_auto_hibern8_supported() argument
851 return (hba->capabilities & MASK_AUTO_HIBERN8_SUPPORT) && in ufshcd_is_auto_hibern8_supported()
852 !(hba->quirks & UFSHCD_QUIRK_BROKEN_AUTO_HIBERN8); in ufshcd_is_auto_hibern8_supported()
855 static inline bool ufshcd_is_auto_hibern8_enabled(struct ufs_hba *hba) in ufshcd_is_auto_hibern8_enabled() argument
857 return FIELD_GET(UFSHCI_AHIBERN8_TIMER_MASK, hba->ahit) ? true : false; in ufshcd_is_auto_hibern8_enabled()
860 static inline bool ufshcd_is_wb_allowed(struct ufs_hba *hba) in ufshcd_is_wb_allowed() argument
862 return hba->caps & UFSHCD_CAP_WB_EN; in ufshcd_is_wb_allowed()
865 #define ufshcd_writel(hba, val, reg) \ argument
866 writel((val), (hba)->mmio_base + (reg))
867 #define ufshcd_readl(hba, reg) \ argument
868 readl((hba)->mmio_base + (reg))
877 static inline void ufshcd_rmwl(struct ufs_hba *hba, u32 mask, u32 val, u32 reg) in ufshcd_rmwl() argument
881 tmp = ufshcd_readl(hba, reg); in ufshcd_rmwl()
884 ufshcd_writel(hba, tmp, reg); in ufshcd_rmwl()
889 int ufshcd_hba_enable(struct ufs_hba *hba);
891 int ufshcd_link_recovery(struct ufs_hba *hba);
892 int ufshcd_make_hba_operational(struct ufs_hba *hba);
894 int ufshcd_uic_hibern8_exit(struct ufs_hba *hba);
896 int ufshcd_wait_for_register(struct ufs_hba *hba, u32 reg, u32 mask,
899 void ufshcd_parse_dev_ref_clk_freq(struct ufs_hba *hba, struct clk *refclk);
914 static inline void ufshcd_set_variant(struct ufs_hba *hba, void *variant) in ufshcd_set_variant() argument
916 BUG_ON(!hba); in ufshcd_set_variant()
917 hba->priv = variant; in ufshcd_set_variant()
924 static inline void *ufshcd_get_variant(struct ufs_hba *hba) in ufshcd_get_variant() argument
926 BUG_ON(!hba); in ufshcd_get_variant()
927 return hba->priv; in ufshcd_get_variant()
930 struct ufs_hba *hba) in ufshcd_keep_autobkops_enabled_except_suspend() argument
932 return hba->caps & UFSHCD_CAP_KEEP_AUTO_BKOPS_ENABLED_EXCEPT_SUSPEND; in ufshcd_keep_autobkops_enabled_except_suspend()
935 static inline u8 ufshcd_wb_get_query_index(struct ufs_hba *hba) in ufshcd_wb_get_query_index() argument
937 if (hba->dev_info.b_wb_buffer_type == WB_BUF_MODE_LU_DEDICATED) in ufshcd_wb_get_query_index()
938 return hba->dev_info.wb_dedicated_lu; in ufshcd_wb_get_query_index()
942 extern int ufshcd_runtime_suspend(struct ufs_hba *hba);
943 extern int ufshcd_runtime_resume(struct ufs_hba *hba);
944 extern int ufshcd_runtime_idle(struct ufs_hba *hba);
945 extern int ufshcd_system_suspend(struct ufs_hba *hba);
946 extern int ufshcd_system_resume(struct ufs_hba *hba);
947 extern int ufshcd_shutdown(struct ufs_hba *hba);
948 extern int ufshcd_dme_set_attr(struct ufs_hba *hba, u32 attr_sel,
950 extern int ufshcd_dme_get_attr(struct ufs_hba *hba, u32 attr_sel,
952 extern int ufshcd_config_pwr_mode(struct ufs_hba *hba,
961 static inline int ufshcd_dme_set(struct ufs_hba *hba, u32 attr_sel, in ufshcd_dme_set() argument
964 return ufshcd_dme_set_attr(hba, attr_sel, ATTR_SET_NOR, in ufshcd_dme_set()
968 static inline int ufshcd_dme_st_set(struct ufs_hba *hba, u32 attr_sel, in ufshcd_dme_st_set() argument
971 return ufshcd_dme_set_attr(hba, attr_sel, ATTR_SET_ST, in ufshcd_dme_st_set()
975 static inline int ufshcd_dme_peer_set(struct ufs_hba *hba, u32 attr_sel, in ufshcd_dme_peer_set() argument
978 return ufshcd_dme_set_attr(hba, attr_sel, ATTR_SET_NOR, in ufshcd_dme_peer_set()
982 static inline int ufshcd_dme_peer_st_set(struct ufs_hba *hba, u32 attr_sel, in ufshcd_dme_peer_st_set() argument
985 return ufshcd_dme_set_attr(hba, attr_sel, ATTR_SET_ST, in ufshcd_dme_peer_st_set()
989 static inline int ufshcd_dme_get(struct ufs_hba *hba, in ufshcd_dme_get() argument
992 return ufshcd_dme_get_attr(hba, attr_sel, mib_val, DME_LOCAL); in ufshcd_dme_get()
995 static inline int ufshcd_dme_peer_get(struct ufs_hba *hba, in ufshcd_dme_peer_get() argument
998 return ufshcd_dme_get_attr(hba, attr_sel, mib_val, DME_PEER); in ufshcd_dme_peer_get()
1009 static inline int ufshcd_disable_host_tx_lcc(struct ufs_hba *hba) in ufshcd_disable_host_tx_lcc() argument
1011 return ufshcd_dme_set(hba, UIC_ARG_MIB(PA_LOCAL_TX_LCC_ENABLE), 0); in ufshcd_disable_host_tx_lcc()
1015 int ufshcd_query_descriptor_retry(struct ufs_hba *hba,
1020 int ufshcd_read_desc_param(struct ufs_hba *hba,
1026 int ufshcd_query_attr(struct ufs_hba *hba, enum query_opcode opcode,
1028 int ufshcd_query_flag(struct ufs_hba *hba, enum query_opcode opcode,
1031 void ufshcd_auto_hibern8_enable(struct ufs_hba *hba);
1032 void ufshcd_auto_hibern8_update(struct ufs_hba *hba, u32 ahit);
1033 void ufshcd_fixup_dev_quirks(struct ufs_hba *hba, struct ufs_dev_fix *fixups);
1036 int ufshcd_read_string_desc(struct ufs_hba *hba, u8 desc_index,
1039 int ufshcd_hold(struct ufs_hba *hba, bool async);
1040 void ufshcd_release(struct ufs_hba *hba);
1042 void ufshcd_map_desc_id_to_length(struct ufs_hba *hba, enum desc_idn desc_id,
1045 u32 ufshcd_get_local_unipro_ver(struct ufs_hba *hba);
1047 int ufshcd_send_uic_cmd(struct ufs_hba *hba, struct uic_command *uic_cmd);
1049 int ufshcd_exec_raw_upiu_cmd(struct ufs_hba *hba,
1057 static inline const char *ufshcd_get_var_name(struct ufs_hba *hba) in ufshcd_get_var_name() argument
1059 if (hba->vops) in ufshcd_get_var_name()
1060 return hba->vops->name; in ufshcd_get_var_name()
1064 static inline int ufshcd_vops_init(struct ufs_hba *hba) in ufshcd_vops_init() argument
1066 if (hba->vops && hba->vops->init) in ufshcd_vops_init()
1067 return hba->vops->init(hba); in ufshcd_vops_init()
1072 static inline void ufshcd_vops_exit(struct ufs_hba *hba) in ufshcd_vops_exit() argument
1074 if (hba->vops && hba->vops->exit) in ufshcd_vops_exit()
1075 return hba->vops->exit(hba); in ufshcd_vops_exit()
1078 static inline u32 ufshcd_vops_get_ufs_hci_version(struct ufs_hba *hba) in ufshcd_vops_get_ufs_hci_version() argument
1080 if (hba->vops && hba->vops->get_ufs_hci_version) in ufshcd_vops_get_ufs_hci_version()
1081 return hba->vops->get_ufs_hci_version(hba); in ufshcd_vops_get_ufs_hci_version()
1083 return ufshcd_readl(hba, REG_UFS_VERSION); in ufshcd_vops_get_ufs_hci_version()
1086 static inline int ufshcd_vops_clk_scale_notify(struct ufs_hba *hba, in ufshcd_vops_clk_scale_notify() argument
1089 if (hba->vops && hba->vops->clk_scale_notify) in ufshcd_vops_clk_scale_notify()
1090 return hba->vops->clk_scale_notify(hba, up, status); in ufshcd_vops_clk_scale_notify()
1094 static inline int ufshcd_vops_setup_clocks(struct ufs_hba *hba, bool on, in ufshcd_vops_setup_clocks() argument
1097 if (hba->vops && hba->vops->setup_clocks) in ufshcd_vops_setup_clocks()
1098 return hba->vops->setup_clocks(hba, on, status); in ufshcd_vops_setup_clocks()
1102 static inline int ufshcd_vops_setup_regulators(struct ufs_hba *hba, bool status) in ufshcd_vops_setup_regulators() argument
1104 if (hba->vops && hba->vops->setup_regulators) in ufshcd_vops_setup_regulators()
1105 return hba->vops->setup_regulators(hba, status); in ufshcd_vops_setup_regulators()
1110 static inline int ufshcd_vops_hce_enable_notify(struct ufs_hba *hba, in ufshcd_vops_hce_enable_notify() argument
1113 if (hba->vops && hba->vops->hce_enable_notify) in ufshcd_vops_hce_enable_notify()
1114 return hba->vops->hce_enable_notify(hba, status); in ufshcd_vops_hce_enable_notify()
1118 static inline int ufshcd_vops_link_startup_notify(struct ufs_hba *hba, in ufshcd_vops_link_startup_notify() argument
1121 if (hba->vops && hba->vops->link_startup_notify) in ufshcd_vops_link_startup_notify()
1122 return hba->vops->link_startup_notify(hba, status); in ufshcd_vops_link_startup_notify()
1127 static inline int ufshcd_vops_pwr_change_notify(struct ufs_hba *hba, in ufshcd_vops_pwr_change_notify() argument
1132 if (hba->vops && hba->vops->pwr_change_notify) in ufshcd_vops_pwr_change_notify()
1133 return hba->vops->pwr_change_notify(hba, status, in ufshcd_vops_pwr_change_notify()
1139 static inline void ufshcd_vops_setup_xfer_req(struct ufs_hba *hba, int tag, in ufshcd_vops_setup_xfer_req() argument
1142 if (hba->vops && hba->vops->setup_xfer_req) in ufshcd_vops_setup_xfer_req()
1143 return hba->vops->setup_xfer_req(hba, tag, is_scsi_cmd); in ufshcd_vops_setup_xfer_req()
1146 static inline void ufshcd_vops_setup_task_mgmt(struct ufs_hba *hba, in ufshcd_vops_setup_task_mgmt() argument
1149 if (hba->vops && hba->vops->setup_task_mgmt) in ufshcd_vops_setup_task_mgmt()
1150 return hba->vops->setup_task_mgmt(hba, tag, tm_function); in ufshcd_vops_setup_task_mgmt()
1153 static inline void ufshcd_vops_hibern8_notify(struct ufs_hba *hba, in ufshcd_vops_hibern8_notify() argument
1157 if (hba->vops && hba->vops->hibern8_notify) in ufshcd_vops_hibern8_notify()
1158 return hba->vops->hibern8_notify(hba, cmd, status); in ufshcd_vops_hibern8_notify()
1161 static inline int ufshcd_vops_apply_dev_quirks(struct ufs_hba *hba) in ufshcd_vops_apply_dev_quirks() argument
1163 if (hba->vops && hba->vops->apply_dev_quirks) in ufshcd_vops_apply_dev_quirks()
1164 return hba->vops->apply_dev_quirks(hba); in ufshcd_vops_apply_dev_quirks()
1168 static inline void ufshcd_vops_fixup_dev_quirks(struct ufs_hba *hba) in ufshcd_vops_fixup_dev_quirks() argument
1170 if (hba->vops && hba->vops->fixup_dev_quirks) in ufshcd_vops_fixup_dev_quirks()
1171 hba->vops->fixup_dev_quirks(hba); in ufshcd_vops_fixup_dev_quirks()
1174 static inline int ufshcd_vops_suspend(struct ufs_hba *hba, enum ufs_pm_op op) in ufshcd_vops_suspend() argument
1176 if (hba->vops && hba->vops->suspend) in ufshcd_vops_suspend()
1177 return hba->vops->suspend(hba, op); in ufshcd_vops_suspend()
1182 static inline int ufshcd_vops_resume(struct ufs_hba *hba, enum ufs_pm_op op) in ufshcd_vops_resume() argument
1184 if (hba->vops && hba->vops->resume) in ufshcd_vops_resume()
1185 return hba->vops->resume(hba, op); in ufshcd_vops_resume()
1190 static inline void ufshcd_vops_dbg_register_dump(struct ufs_hba *hba) in ufshcd_vops_dbg_register_dump() argument
1192 if (hba->vops && hba->vops->dbg_register_dump) in ufshcd_vops_dbg_register_dump()
1193 hba->vops->dbg_register_dump(hba); in ufshcd_vops_dbg_register_dump()
1196 static inline void ufshcd_vops_device_reset(struct ufs_hba *hba) in ufshcd_vops_device_reset() argument
1198 if (hba->vops && hba->vops->device_reset) { in ufshcd_vops_device_reset()
1199 int err = hba->vops->device_reset(hba); in ufshcd_vops_device_reset()
1202 ufshcd_set_ufs_dev_active(hba); in ufshcd_vops_device_reset()
1203 if (ufshcd_is_wb_allowed(hba)) { in ufshcd_vops_device_reset()
1204 hba->wb_enabled = false; in ufshcd_vops_device_reset()
1205 hba->wb_buf_flush_enabled = false; in ufshcd_vops_device_reset()
1209 ufshcd_update_reg_hist(&hba->ufs_stats.dev_reset, err); in ufshcd_vops_device_reset()
1213 static inline void ufshcd_vops_config_scaling_param(struct ufs_hba *hba, in ufshcd_vops_config_scaling_param() argument
1217 if (hba->vops && hba->vops->config_scaling_param) in ufshcd_vops_config_scaling_param()
1218 hba->vops->config_scaling_param(hba, profile, data); in ufshcd_vops_config_scaling_param()
1238 int ufshcd_dump_regs(struct ufs_hba *hba, size_t offset, size_t len,