Lines Matching refs:mhi_cntrl
22 int mhi_rddm_prepare(struct mhi_controller *mhi_cntrl, in mhi_rddm_prepare() argument
27 void __iomem *base = mhi_cntrl->bhie; in mhi_rddm_prepare()
28 struct device *dev = &mhi_cntrl->mhi_dev->dev; in mhi_rddm_prepare()
40 mhi_write_reg(mhi_cntrl, base, BHIE_RXVECADDR_HIGH_OFFS, in mhi_rddm_prepare()
43 mhi_write_reg(mhi_cntrl, base, BHIE_RXVECADDR_LOW_OFFS, in mhi_rddm_prepare()
46 mhi_write_reg(mhi_cntrl, base, BHIE_RXVECSIZE_OFFS, mhi_buf->len); in mhi_rddm_prepare()
49 ret = mhi_write_reg_field(mhi_cntrl, base, BHIE_RXVECDB_OFFS, in mhi_rddm_prepare()
63 static int __mhi_download_rddm_in_panic(struct mhi_controller *mhi_cntrl) in __mhi_download_rddm_in_panic() argument
69 u32 retry = (mhi_cntrl->timeout_ms * 1000) / delayus; in __mhi_download_rddm_in_panic()
72 void __iomem *base = mhi_cntrl->bhie; in __mhi_download_rddm_in_panic()
73 struct device *dev = &mhi_cntrl->mhi_dev->dev; in __mhi_download_rddm_in_panic()
76 to_mhi_pm_state_str(mhi_cntrl->pm_state), in __mhi_download_rddm_in_panic()
77 mhi_state_str(mhi_cntrl->dev_state), in __mhi_download_rddm_in_panic()
78 TO_MHI_EXEC_STR(mhi_cntrl->ee)); in __mhi_download_rddm_in_panic()
90 mhi_cntrl->pm_state = MHI_PM_LD_ERR_FATAL_DETECT; in __mhi_download_rddm_in_panic()
100 ee = mhi_get_exec_env(mhi_cntrl); in __mhi_download_rddm_in_panic()
106 mhi_set_mhi_state(mhi_cntrl, MHI_STATE_SYS_ERR); in __mhi_download_rddm_in_panic()
110 ee = mhi_get_exec_env(mhi_cntrl); in __mhi_download_rddm_in_panic()
121 mhi_write_reg(mhi_cntrl, mhi_cntrl->regs, in __mhi_download_rddm_in_panic()
127 ee = mhi_get_exec_env(mhi_cntrl); in __mhi_download_rddm_in_panic()
135 ret = mhi_read_reg_field(mhi_cntrl, base, BHIE_RXVECSTATUS_OFFS, in __mhi_download_rddm_in_panic()
146 ee = mhi_get_exec_env(mhi_cntrl); in __mhi_download_rddm_in_panic()
147 ret = mhi_read_reg(mhi_cntrl, base, BHIE_RXVECSTATUS_OFFS, &rx_status); in __mhi_download_rddm_in_panic()
159 int mhi_download_rddm_image(struct mhi_controller *mhi_cntrl, bool in_panic) in mhi_download_rddm_image() argument
161 void __iomem *base = mhi_cntrl->bhie; in mhi_download_rddm_image()
162 struct device *dev = &mhi_cntrl->mhi_dev->dev; in mhi_download_rddm_image()
166 return __mhi_download_rddm_in_panic(mhi_cntrl); in mhi_download_rddm_image()
171 wait_event_timeout(mhi_cntrl->state_event, in mhi_download_rddm_image()
172 mhi_read_reg_field(mhi_cntrl, base, in mhi_download_rddm_image()
176 msecs_to_jiffies(mhi_cntrl->timeout_ms)); in mhi_download_rddm_image()
182 static int mhi_fw_load_bhie(struct mhi_controller *mhi_cntrl, in mhi_fw_load_bhie() argument
185 void __iomem *base = mhi_cntrl->bhie; in mhi_fw_load_bhie()
186 struct device *dev = &mhi_cntrl->mhi_dev->dev; in mhi_fw_load_bhie()
187 rwlock_t *pm_lock = &mhi_cntrl->pm_lock; in mhi_fw_load_bhie()
192 if (!MHI_REG_ACCESS_VALID(mhi_cntrl->pm_state)) { in mhi_fw_load_bhie()
200 mhi_write_reg(mhi_cntrl, base, BHIE_TXVECADDR_HIGH_OFFS, in mhi_fw_load_bhie()
203 mhi_write_reg(mhi_cntrl, base, BHIE_TXVECADDR_LOW_OFFS, in mhi_fw_load_bhie()
206 mhi_write_reg(mhi_cntrl, base, BHIE_TXVECSIZE_OFFS, mhi_buf->len); in mhi_fw_load_bhie()
208 ret = mhi_write_reg_field(mhi_cntrl, base, BHIE_TXVECDB_OFFS, in mhi_fw_load_bhie()
216 ret = wait_event_timeout(mhi_cntrl->state_event, in mhi_fw_load_bhie()
217 MHI_PM_IN_ERROR_STATE(mhi_cntrl->pm_state) || in mhi_fw_load_bhie()
218 mhi_read_reg_field(mhi_cntrl, base, in mhi_fw_load_bhie()
222 msecs_to_jiffies(mhi_cntrl->timeout_ms)); in mhi_fw_load_bhie()
223 if (MHI_PM_IN_ERROR_STATE(mhi_cntrl->pm_state) || in mhi_fw_load_bhie()
230 static int mhi_fw_load_bhi(struct mhi_controller *mhi_cntrl, in mhi_fw_load_bhi() argument
236 void __iomem *base = mhi_cntrl->bhi; in mhi_fw_load_bhi()
237 rwlock_t *pm_lock = &mhi_cntrl->pm_lock; in mhi_fw_load_bhi()
238 struct device *dev = &mhi_cntrl->mhi_dev->dev; in mhi_fw_load_bhi()
251 if (!MHI_REG_ACCESS_VALID(mhi_cntrl->pm_state)) { in mhi_fw_load_bhi()
259 mhi_write_reg(mhi_cntrl, base, BHI_STATUS, 0); in mhi_fw_load_bhi()
260 mhi_write_reg(mhi_cntrl, base, BHI_IMGADDR_HIGH, in mhi_fw_load_bhi()
262 mhi_write_reg(mhi_cntrl, base, BHI_IMGADDR_LOW, in mhi_fw_load_bhi()
264 mhi_write_reg(mhi_cntrl, base, BHI_IMGSIZE, size); in mhi_fw_load_bhi()
265 mhi_write_reg(mhi_cntrl, base, BHI_IMGTXDB, session_id); in mhi_fw_load_bhi()
269 ret = wait_event_timeout(mhi_cntrl->state_event, in mhi_fw_load_bhi()
270 MHI_PM_IN_ERROR_STATE(mhi_cntrl->pm_state) || in mhi_fw_load_bhi()
271 mhi_read_reg_field(mhi_cntrl, base, BHI_STATUS, in mhi_fw_load_bhi()
273 msecs_to_jiffies(mhi_cntrl->timeout_ms)); in mhi_fw_load_bhi()
274 if (MHI_PM_IN_ERROR_STATE(mhi_cntrl->pm_state)) in mhi_fw_load_bhi()
280 if (MHI_REG_ACCESS_VALID(mhi_cntrl->pm_state)) { in mhi_fw_load_bhi()
282 ret = mhi_read_reg(mhi_cntrl, base, in mhi_fw_load_bhi()
301 void mhi_free_bhie_table(struct mhi_controller *mhi_cntrl, in mhi_free_bhie_table() argument
308 dma_free_coherent(mhi_cntrl->cntrl_dev, mhi_buf->len, in mhi_free_bhie_table()
315 int mhi_alloc_bhie_table(struct mhi_controller *mhi_cntrl, in mhi_alloc_bhie_table() argument
319 size_t seg_size = mhi_cntrl->seg_len; in mhi_alloc_bhie_table()
345 mhi_buf->buf = dma_alloc_coherent(mhi_cntrl->cntrl_dev, in mhi_alloc_bhie_table()
360 dma_free_coherent(mhi_cntrl->cntrl_dev, mhi_buf->len, in mhi_alloc_bhie_table()
369 static void mhi_firmware_copy(struct mhi_controller *mhi_cntrl, in mhi_firmware_copy() argument
392 void mhi_fw_load_handler(struct mhi_controller *mhi_cntrl) in mhi_fw_load_handler() argument
395 struct device *dev = &mhi_cntrl->mhi_dev->dev; in mhi_fw_load_handler()
402 if (MHI_PM_IN_ERROR_STATE(mhi_cntrl->pm_state)) { in mhi_fw_load_handler()
408 ret = mhi_read_reg(mhi_cntrl, mhi_cntrl->bhi, BHI_SERIALNU, in mhi_fw_load_handler()
409 &mhi_cntrl->serial_number); in mhi_fw_load_handler()
413 for (i = 0; i < ARRAY_SIZE(mhi_cntrl->oem_pk_hash); i++) { in mhi_fw_load_handler()
414 ret = mhi_read_reg(mhi_cntrl, mhi_cntrl->bhi, BHI_OEMPKHASH(i), in mhi_fw_load_handler()
415 &mhi_cntrl->oem_pk_hash[i]); in mhi_fw_load_handler()
423 if (!MHI_FW_LOAD_CAPABLE(mhi_cntrl->ee)) in mhi_fw_load_handler()
426 fw_name = (mhi_cntrl->ee == MHI_EE_EDL) ? in mhi_fw_load_handler()
427 mhi_cntrl->edl_image : mhi_cntrl->fw_image; in mhi_fw_load_handler()
429 if (!fw_name || (mhi_cntrl->fbc_download && (!mhi_cntrl->sbl_size || in mhi_fw_load_handler()
430 !mhi_cntrl->seg_len))) { in mhi_fw_load_handler()
442 size = (mhi_cntrl->fbc_download) ? mhi_cntrl->sbl_size : firmware->size; in mhi_fw_load_handler()
448 buf = dma_alloc_coherent(mhi_cntrl->cntrl_dev, size, &dma_addr, in mhi_fw_load_handler()
457 ret = mhi_fw_load_bhi(mhi_cntrl, dma_addr, size); in mhi_fw_load_handler()
458 dma_free_coherent(mhi_cntrl->cntrl_dev, size, buf, dma_addr); in mhi_fw_load_handler()
468 if (fw_name == mhi_cntrl->edl_image) { in mhi_fw_load_handler()
473 write_lock_irq(&mhi_cntrl->pm_lock); in mhi_fw_load_handler()
474 mhi_cntrl->dev_state = MHI_STATE_RESET; in mhi_fw_load_handler()
475 write_unlock_irq(&mhi_cntrl->pm_lock); in mhi_fw_load_handler()
481 if (mhi_cntrl->fbc_download) { in mhi_fw_load_handler()
482 ret = mhi_alloc_bhie_table(mhi_cntrl, &mhi_cntrl->fbc_image, in mhi_fw_load_handler()
490 mhi_firmware_copy(mhi_cntrl, firmware, mhi_cntrl->fbc_image); in mhi_fw_load_handler()
497 ret = mhi_ready_state_transition(mhi_cntrl); in mhi_fw_load_handler()
507 if (mhi_cntrl->fbc_download) { in mhi_fw_load_handler()
508 mhi_free_bhie_table(mhi_cntrl, mhi_cntrl->fbc_image); in mhi_fw_load_handler()
509 mhi_cntrl->fbc_image = NULL; in mhi_fw_load_handler()
513 mhi_cntrl->pm_state = MHI_PM_FW_DL_ERR; in mhi_fw_load_handler()
514 wake_up_all(&mhi_cntrl->state_event); in mhi_fw_load_handler()
517 int mhi_download_amss_image(struct mhi_controller *mhi_cntrl) in mhi_download_amss_image() argument
519 struct image_info *image_info = mhi_cntrl->fbc_image; in mhi_download_amss_image()
520 struct device *dev = &mhi_cntrl->mhi_dev->dev; in mhi_download_amss_image()
526 ret = mhi_fw_load_bhie(mhi_cntrl, in mhi_download_amss_image()
531 mhi_cntrl->pm_state = MHI_PM_FW_DL_ERR; in mhi_download_amss_image()
532 wake_up_all(&mhi_cntrl->state_event); in mhi_download_amss_image()