Lines Matching refs:hba

122 #define ufshcd_is_link_off(hba) ((hba)->uic_link_state == UIC_LINK_OFF_STATE)  argument
123 #define ufshcd_is_link_active(hba) ((hba)->uic_link_state == \ argument
125 #define ufshcd_is_link_hibern8(hba) ((hba)->uic_link_state == \ argument
127 #define ufshcd_is_link_broken(hba) ((hba)->uic_link_state == \ argument
129 #define ufshcd_set_link_off(hba) ((hba)->uic_link_state = UIC_LINK_OFF_STATE) argument
130 #define ufshcd_set_link_active(hba) ((hba)->uic_link_state = \ argument
132 #define ufshcd_set_link_hibern8(hba) ((hba)->uic_link_state = \ argument
134 #define ufshcd_set_link_broken(hba) ((hba)->uic_link_state = \ argument
345 int (*apply_dev_quirks)(struct ufs_hba *hba);
346 void (*fixup_dev_quirks)(struct ufs_hba *hba);
349 void (*dbg_register_dump)(struct ufs_hba *hba);
351 int (*device_reset)(struct ufs_hba *hba);
352 void (*config_scaling_param)(struct ufs_hba *hba,
355 int (*program_key)(struct ufs_hba *hba,
357 void (*event_notify)(struct ufs_hba *hba,
952 static inline bool ufshcd_is_clkgating_allowed(struct ufs_hba *hba) in ufshcd_is_clkgating_allowed() argument
954 return hba->caps & UFSHCD_CAP_CLK_GATING; in ufshcd_is_clkgating_allowed()
956 static inline bool ufshcd_can_hibern8_during_gating(struct ufs_hba *hba) in ufshcd_can_hibern8_during_gating() argument
958 return hba->caps & UFSHCD_CAP_HIBERN8_WITH_CLK_GATING; in ufshcd_can_hibern8_during_gating()
960 static inline int ufshcd_is_clkscaling_supported(struct ufs_hba *hba) in ufshcd_is_clkscaling_supported() argument
962 return hba->caps & UFSHCD_CAP_CLK_SCALING; in ufshcd_is_clkscaling_supported()
964 static inline bool ufshcd_can_autobkops_during_suspend(struct ufs_hba *hba) in ufshcd_can_autobkops_during_suspend() argument
966 return hba->caps & UFSHCD_CAP_AUTO_BKOPS_SUSPEND; in ufshcd_can_autobkops_during_suspend()
968 static inline bool ufshcd_is_rpm_autosuspend_allowed(struct ufs_hba *hba) in ufshcd_is_rpm_autosuspend_allowed() argument
970 return hba->caps & UFSHCD_CAP_RPM_AUTOSUSPEND; in ufshcd_is_rpm_autosuspend_allowed()
973 static inline bool ufshcd_is_intr_aggr_allowed(struct ufs_hba *hba) in ufshcd_is_intr_aggr_allowed() argument
977 if ((hba->caps & UFSHCD_CAP_INTR_AGGR) && in ufshcd_is_intr_aggr_allowed()
978 !(hba->quirks & UFSHCD_QUIRK_BROKEN_INTR_AGGR)) in ufshcd_is_intr_aggr_allowed()
987 static inline bool ufshcd_can_aggressive_pc(struct ufs_hba *hba) in ufshcd_can_aggressive_pc() argument
989 return !!(ufshcd_is_link_hibern8(hba) && in ufshcd_can_aggressive_pc()
990 (hba->caps & UFSHCD_CAP_AGGR_POWER_COLLAPSE)); in ufshcd_can_aggressive_pc()
993 static inline bool ufshcd_is_auto_hibern8_supported(struct ufs_hba *hba) in ufshcd_is_auto_hibern8_supported() argument
995 return (hba->capabilities & MASK_AUTO_HIBERN8_SUPPORT) && in ufshcd_is_auto_hibern8_supported()
996 !(hba->quirks & UFSHCD_QUIRK_BROKEN_AUTO_HIBERN8); in ufshcd_is_auto_hibern8_supported()
999 static inline bool ufshcd_is_auto_hibern8_enabled(struct ufs_hba *hba) in ufshcd_is_auto_hibern8_enabled() argument
1001 return FIELD_GET(UFSHCI_AHIBERN8_TIMER_MASK, hba->ahit) ? true : false; in ufshcd_is_auto_hibern8_enabled()
1004 static inline bool ufshcd_is_wb_allowed(struct ufs_hba *hba) in ufshcd_is_wb_allowed() argument
1006 return hba->caps & UFSHCD_CAP_WB_EN; in ufshcd_is_wb_allowed()
1009 static inline bool ufshcd_is_user_access_allowed(struct ufs_hba *hba) in ufshcd_is_user_access_allowed() argument
1011 return !hba->shutting_down; in ufshcd_is_user_access_allowed()
1014 #define ufshcd_writel(hba, val, reg) \ argument
1015 writel((val), (hba)->mmio_base + (reg))
1016 #define ufshcd_readl(hba, reg) \ argument
1017 readl((hba)->mmio_base + (reg))
1026 static inline void ufshcd_rmwl(struct ufs_hba *hba, u32 mask, u32 val, u32 reg) in ufshcd_rmwl() argument
1030 tmp = ufshcd_readl(hba, reg); in ufshcd_rmwl()
1033 ufshcd_writel(hba, tmp, reg); in ufshcd_rmwl()
1038 int ufshcd_hba_enable(struct ufs_hba *hba);
1040 int ufshcd_link_recovery(struct ufs_hba *hba);
1041 int ufshcd_make_hba_operational(struct ufs_hba *hba);
1043 int ufshcd_uic_hibern8_exit(struct ufs_hba *hba);
1045 int ufshcd_wait_for_register(struct ufs_hba *hba, u32 reg, u32 mask,
1048 void ufshcd_parse_dev_ref_clk_freq(struct ufs_hba *hba, struct clk *refclk);
1049 void ufshcd_update_evt_hist(struct ufs_hba *hba, u32 id, u32 val);
1050 void ufshcd_hba_stop(struct ufs_hba *hba);
1063 static inline void ufshcd_set_variant(struct ufs_hba *hba, void *variant) in ufshcd_set_variant() argument
1065 BUG_ON(!hba); in ufshcd_set_variant()
1066 hba->priv = variant; in ufshcd_set_variant()
1073 static inline void *ufshcd_get_variant(struct ufs_hba *hba) in ufshcd_get_variant() argument
1075 BUG_ON(!hba); in ufshcd_get_variant()
1076 return hba->priv; in ufshcd_get_variant()
1079 struct ufs_hba *hba) in ufshcd_keep_autobkops_enabled_except_suspend() argument
1081 return hba->caps & UFSHCD_CAP_KEEP_AUTO_BKOPS_ENABLED_EXCEPT_SUSPEND; in ufshcd_keep_autobkops_enabled_except_suspend()
1084 static inline u8 ufshcd_wb_get_query_index(struct ufs_hba *hba) in ufshcd_wb_get_query_index() argument
1086 if (hba->dev_info.b_wb_buffer_type == WB_BUF_MODE_LU_DEDICATED) in ufshcd_wb_get_query_index()
1087 return hba->dev_info.wb_dedicated_lu; in ufshcd_wb_get_query_index()
1091 extern int ufshcd_runtime_suspend(struct ufs_hba *hba);
1092 extern int ufshcd_runtime_resume(struct ufs_hba *hba);
1093 extern int ufshcd_runtime_idle(struct ufs_hba *hba);
1094 extern int ufshcd_system_suspend(struct ufs_hba *hba);
1095 extern int ufshcd_system_resume(struct ufs_hba *hba);
1096 extern int ufshcd_shutdown(struct ufs_hba *hba);
1097 extern int ufshcd_dme_set_attr(struct ufs_hba *hba, u32 attr_sel,
1099 extern int ufshcd_dme_get_attr(struct ufs_hba *hba, u32 attr_sel,
1101 extern int ufshcd_config_pwr_mode(struct ufs_hba *hba,
1110 static inline int ufshcd_dme_set(struct ufs_hba *hba, u32 attr_sel, in ufshcd_dme_set() argument
1113 return ufshcd_dme_set_attr(hba, attr_sel, ATTR_SET_NOR, in ufshcd_dme_set()
1117 static inline int ufshcd_dme_st_set(struct ufs_hba *hba, u32 attr_sel, in ufshcd_dme_st_set() argument
1120 return ufshcd_dme_set_attr(hba, attr_sel, ATTR_SET_ST, in ufshcd_dme_st_set()
1124 static inline int ufshcd_dme_peer_set(struct ufs_hba *hba, u32 attr_sel, in ufshcd_dme_peer_set() argument
1127 return ufshcd_dme_set_attr(hba, attr_sel, ATTR_SET_NOR, in ufshcd_dme_peer_set()
1131 static inline int ufshcd_dme_peer_st_set(struct ufs_hba *hba, u32 attr_sel, in ufshcd_dme_peer_st_set() argument
1134 return ufshcd_dme_set_attr(hba, attr_sel, ATTR_SET_ST, in ufshcd_dme_peer_st_set()
1138 static inline int ufshcd_dme_get(struct ufs_hba *hba, in ufshcd_dme_get() argument
1141 return ufshcd_dme_get_attr(hba, attr_sel, mib_val, DME_LOCAL); in ufshcd_dme_get()
1144 static inline int ufshcd_dme_peer_get(struct ufs_hba *hba, in ufshcd_dme_peer_get() argument
1147 return ufshcd_dme_get_attr(hba, attr_sel, mib_val, DME_PEER); in ufshcd_dme_peer_get()
1158 static inline int ufshcd_disable_host_tx_lcc(struct ufs_hba *hba) in ufshcd_disable_host_tx_lcc() argument
1160 return ufshcd_dme_set(hba, UIC_ARG_MIB(PA_LOCAL_TX_LCC_ENABLE), 0); in ufshcd_disable_host_tx_lcc()
1164 int ufshcd_query_descriptor_retry(struct ufs_hba *hba,
1169 int ufshcd_read_desc_param(struct ufs_hba *hba,
1175 int ufshcd_query_attr(struct ufs_hba *hba, enum query_opcode opcode,
1177 int ufshcd_query_attr_retry(struct ufs_hba *hba,
1180 int ufshcd_query_flag(struct ufs_hba *hba, enum query_opcode opcode,
1182 int ufshcd_query_flag_retry(struct ufs_hba *hba,
1184 int ufshcd_bkops_ctrl(struct ufs_hba *hba, enum bkops_status status);
1186 void ufshcd_auto_hibern8_enable(struct ufs_hba *hba);
1187 void ufshcd_auto_hibern8_update(struct ufs_hba *hba, u32 ahit);
1188 void ufshcd_fixup_dev_quirks(struct ufs_hba *hba, struct ufs_dev_fix *fixups);
1191 int ufshcd_read_string_desc(struct ufs_hba *hba, u8 desc_index,
1194 int ufshcd_hold(struct ufs_hba *hba, bool async);
1195 void ufshcd_release(struct ufs_hba *hba);
1197 void ufshcd_map_desc_id_to_length(struct ufs_hba *hba, enum desc_idn desc_id,
1200 u32 ufshcd_get_local_unipro_ver(struct ufs_hba *hba);
1202 int ufshcd_send_uic_cmd(struct ufs_hba *hba, struct uic_command *uic_cmd);
1204 int ufshcd_exec_raw_upiu_cmd(struct ufs_hba *hba,
1212 static inline const char *ufshcd_get_var_name(struct ufs_hba *hba) in ufshcd_get_var_name() argument
1214 if (hba->vops) in ufshcd_get_var_name()
1215 return hba->vops->name; in ufshcd_get_var_name()
1219 static inline int ufshcd_vops_init(struct ufs_hba *hba) in ufshcd_vops_init() argument
1221 if (hba->vops && hba->vops->init) in ufshcd_vops_init()
1222 return hba->vops->init(hba); in ufshcd_vops_init()
1227 static inline void ufshcd_vops_exit(struct ufs_hba *hba) in ufshcd_vops_exit() argument
1229 if (hba->vops && hba->vops->exit) in ufshcd_vops_exit()
1230 return hba->vops->exit(hba); in ufshcd_vops_exit()
1233 static inline u32 ufshcd_vops_get_ufs_hci_version(struct ufs_hba *hba) in ufshcd_vops_get_ufs_hci_version() argument
1235 if (hba->vops && hba->vops->get_ufs_hci_version) in ufshcd_vops_get_ufs_hci_version()
1236 return hba->vops->get_ufs_hci_version(hba); in ufshcd_vops_get_ufs_hci_version()
1238 return ufshcd_readl(hba, REG_UFS_VERSION); in ufshcd_vops_get_ufs_hci_version()
1241 static inline bool ufshcd_has_utrlcnr(struct ufs_hba *hba) in ufshcd_has_utrlcnr() argument
1243 return (hba->ufs_version >= ufshci_version(3, 0)); in ufshcd_has_utrlcnr()
1246 static inline int ufshcd_vops_clk_scale_notify(struct ufs_hba *hba, in ufshcd_vops_clk_scale_notify() argument
1249 if (hba->vops && hba->vops->clk_scale_notify) in ufshcd_vops_clk_scale_notify()
1250 return hba->vops->clk_scale_notify(hba, up, status); in ufshcd_vops_clk_scale_notify()
1254 static inline void ufshcd_vops_event_notify(struct ufs_hba *hba, in ufshcd_vops_event_notify() argument
1258 if (hba->vops && hba->vops->event_notify) in ufshcd_vops_event_notify()
1259 hba->vops->event_notify(hba, evt, data); in ufshcd_vops_event_notify()
1262 static inline int ufshcd_vops_setup_clocks(struct ufs_hba *hba, bool on, in ufshcd_vops_setup_clocks() argument
1265 if (hba->vops && hba->vops->setup_clocks) in ufshcd_vops_setup_clocks()
1266 return hba->vops->setup_clocks(hba, on, status); in ufshcd_vops_setup_clocks()
1270 static inline int ufshcd_vops_setup_regulators(struct ufs_hba *hba, bool status) in ufshcd_vops_setup_regulators() argument
1272 if (hba->vops && hba->vops->setup_regulators) in ufshcd_vops_setup_regulators()
1273 return hba->vops->setup_regulators(hba, status); in ufshcd_vops_setup_regulators()
1278 static inline int ufshcd_vops_hce_enable_notify(struct ufs_hba *hba, in ufshcd_vops_hce_enable_notify() argument
1281 if (hba->vops && hba->vops->hce_enable_notify) in ufshcd_vops_hce_enable_notify()
1282 return hba->vops->hce_enable_notify(hba, status); in ufshcd_vops_hce_enable_notify()
1286 static inline int ufshcd_vops_link_startup_notify(struct ufs_hba *hba, in ufshcd_vops_link_startup_notify() argument
1289 if (hba->vops && hba->vops->link_startup_notify) in ufshcd_vops_link_startup_notify()
1290 return hba->vops->link_startup_notify(hba, status); in ufshcd_vops_link_startup_notify()
1295 static inline int ufshcd_vops_pwr_change_notify(struct ufs_hba *hba, in ufshcd_vops_pwr_change_notify() argument
1300 if (hba->vops && hba->vops->pwr_change_notify) in ufshcd_vops_pwr_change_notify()
1301 return hba->vops->pwr_change_notify(hba, status, in ufshcd_vops_pwr_change_notify()
1307 static inline void ufshcd_vops_setup_task_mgmt(struct ufs_hba *hba, in ufshcd_vops_setup_task_mgmt() argument
1310 if (hba->vops && hba->vops->setup_task_mgmt) in ufshcd_vops_setup_task_mgmt()
1311 return hba->vops->setup_task_mgmt(hba, tag, tm_function); in ufshcd_vops_setup_task_mgmt()
1314 static inline void ufshcd_vops_hibern8_notify(struct ufs_hba *hba, in ufshcd_vops_hibern8_notify() argument
1318 if (hba->vops && hba->vops->hibern8_notify) in ufshcd_vops_hibern8_notify()
1319 return hba->vops->hibern8_notify(hba, cmd, status); in ufshcd_vops_hibern8_notify()
1322 static inline int ufshcd_vops_apply_dev_quirks(struct ufs_hba *hba) in ufshcd_vops_apply_dev_quirks() argument
1324 if (hba->vops && hba->vops->apply_dev_quirks) in ufshcd_vops_apply_dev_quirks()
1325 return hba->vops->apply_dev_quirks(hba); in ufshcd_vops_apply_dev_quirks()
1329 static inline void ufshcd_vops_fixup_dev_quirks(struct ufs_hba *hba) in ufshcd_vops_fixup_dev_quirks() argument
1331 if (hba->vops && hba->vops->fixup_dev_quirks) in ufshcd_vops_fixup_dev_quirks()
1332 hba->vops->fixup_dev_quirks(hba); in ufshcd_vops_fixup_dev_quirks()
1335 static inline int ufshcd_vops_suspend(struct ufs_hba *hba, enum ufs_pm_op op) in ufshcd_vops_suspend() argument
1337 if (hba->vops && hba->vops->suspend) in ufshcd_vops_suspend()
1338 return hba->vops->suspend(hba, op); in ufshcd_vops_suspend()
1343 static inline int ufshcd_vops_resume(struct ufs_hba *hba, enum ufs_pm_op op) in ufshcd_vops_resume() argument
1345 if (hba->vops && hba->vops->resume) in ufshcd_vops_resume()
1346 return hba->vops->resume(hba, op); in ufshcd_vops_resume()
1351 static inline void ufshcd_vops_dbg_register_dump(struct ufs_hba *hba) in ufshcd_vops_dbg_register_dump() argument
1353 if (hba->vops && hba->vops->dbg_register_dump) in ufshcd_vops_dbg_register_dump()
1354 hba->vops->dbg_register_dump(hba); in ufshcd_vops_dbg_register_dump()
1357 static inline void ufshcd_vops_device_reset(struct ufs_hba *hba) in ufshcd_vops_device_reset() argument
1359 if (hba->vops && hba->vops->device_reset) { in ufshcd_vops_device_reset()
1360 int err = hba->vops->device_reset(hba); in ufshcd_vops_device_reset()
1363 ufshcd_set_ufs_dev_active(hba); in ufshcd_vops_device_reset()
1364 if (ufshcd_is_wb_allowed(hba)) { in ufshcd_vops_device_reset()
1365 hba->wb_enabled = false; in ufshcd_vops_device_reset()
1366 hba->wb_buf_flush_enabled = false; in ufshcd_vops_device_reset()
1370 ufshcd_update_evt_hist(hba, UFS_EVT_DEV_RESET, err); in ufshcd_vops_device_reset()
1374 static inline void ufshcd_vops_config_scaling_param(struct ufs_hba *hba, in ufshcd_vops_config_scaling_param() argument
1378 if (hba->vops && hba->vops->config_scaling_param) in ufshcd_vops_config_scaling_param()
1379 hba->vops->config_scaling_param(hba, profile, data); in ufshcd_vops_config_scaling_param()
1399 int ufshcd_dump_regs(struct ufs_hba *hba, size_t offset, size_t len,
1401 int ufshcd_uic_hibern8_enter(struct ufs_hba *hba);
1402 int ufshcd_uic_hibern8_exit(struct ufs_hba *hba);