mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-07 12:25:00 -04:00
mhi: core: Add support to pre allocate image buffers
This allows controller to keep the memory allocated for bhi vector table for rddm and fbc images. Memory remains allocated after controller powers down. Add a controller flag to make the decision for memory allocation. Change-Id: Ic8aee54ae57f5f9351158b18cd96faf7eeb81429 Signed-off-by: Hemant Kumar <hemantk@codeaurora.org>
This commit is contained in:
parent
04dae11da1
commit
407257c305
5 changed files with 26 additions and 26 deletions
|
|
@ -464,20 +464,22 @@ invalid_pm_state:
|
|||
}
|
||||
|
||||
void mhi_free_bhie_table(struct mhi_controller *mhi_cntrl,
|
||||
struct image_info *image_info)
|
||||
struct image_info **image_info)
|
||||
{
|
||||
int i;
|
||||
struct mhi_buf *mhi_buf = image_info->mhi_buf;
|
||||
struct mhi_buf *mhi_buf = (*image_info)->mhi_buf;
|
||||
|
||||
if (!image_info)
|
||||
if (mhi_cntrl->img_pre_alloc)
|
||||
return;
|
||||
|
||||
for (i = 0; i < image_info->entries; i++, mhi_buf++)
|
||||
for (i = 0; i < (*image_info)->entries; i++, mhi_buf++)
|
||||
mhi_free_contig_coherent(mhi_cntrl, mhi_buf->len, mhi_buf->buf,
|
||||
mhi_buf->dma_addr);
|
||||
|
||||
kfree(image_info->mhi_buf);
|
||||
kfree(image_info);
|
||||
kfree((*image_info)->mhi_buf);
|
||||
kfree(*image_info);
|
||||
|
||||
*image_info = NULL;
|
||||
}
|
||||
|
||||
int mhi_alloc_bhie_table(struct mhi_controller *mhi_cntrl,
|
||||
|
|
@ -491,6 +493,9 @@ int mhi_alloc_bhie_table(struct mhi_controller *mhi_cntrl,
|
|||
struct image_info *img_info;
|
||||
struct mhi_buf *mhi_buf;
|
||||
|
||||
if (mhi_cntrl->img_pre_alloc)
|
||||
return 0;
|
||||
|
||||
MHI_CNTRL_LOG("Allocating bytes:%zu seg_size:%zu total_seg:%u\n",
|
||||
alloc_size, seg_size, segments);
|
||||
|
||||
|
|
@ -662,7 +667,7 @@ void mhi_fw_load_handler(struct mhi_controller *mhi_cntrl)
|
|||
firmware->size);
|
||||
if (ret) {
|
||||
MHI_CNTRL_ERR("Error alloc size:%zu\n", firmware->size);
|
||||
goto fw_load_error_ready;
|
||||
goto fw_load_error_release;
|
||||
}
|
||||
|
||||
MHI_CNTRL_LOG("Copying firmware image into vector table\n");
|
||||
|
|
@ -715,8 +720,7 @@ fw_load_ee_pthru:
|
|||
return;
|
||||
|
||||
fw_load_error_ready:
|
||||
mhi_free_bhie_table(mhi_cntrl, mhi_cntrl->fbc_image);
|
||||
mhi_cntrl->fbc_image = NULL;
|
||||
mhi_free_bhie_table(mhi_cntrl, &mhi_cntrl->fbc_image);
|
||||
|
||||
fw_load_error_release:
|
||||
release_firmware(firmware);
|
||||
|
|
|
|||
|
|
@ -1820,10 +1820,8 @@ int mhi_prepare_for_power_up(struct mhi_controller *mhi_cntrl)
|
|||
return 0;
|
||||
|
||||
bhie_error:
|
||||
if (mhi_cntrl->rddm_image) {
|
||||
mhi_free_bhie_table(mhi_cntrl, mhi_cntrl->rddm_image);
|
||||
mhi_cntrl->rddm_image = NULL;
|
||||
}
|
||||
if (mhi_cntrl->rddm_image)
|
||||
mhi_free_bhie_table(mhi_cntrl, &mhi_cntrl->rddm_image);
|
||||
|
||||
error_dev_ctxt:
|
||||
mutex_unlock(&mhi_cntrl->pm_mutex);
|
||||
|
|
@ -1834,15 +1832,11 @@ EXPORT_SYMBOL(mhi_prepare_for_power_up);
|
|||
|
||||
void mhi_unprepare_after_power_down(struct mhi_controller *mhi_cntrl)
|
||||
{
|
||||
if (mhi_cntrl->fbc_image) {
|
||||
mhi_free_bhie_table(mhi_cntrl, mhi_cntrl->fbc_image);
|
||||
mhi_cntrl->fbc_image = NULL;
|
||||
}
|
||||
if (mhi_cntrl->fbc_image)
|
||||
mhi_free_bhie_table(mhi_cntrl, &mhi_cntrl->fbc_image);
|
||||
|
||||
if (mhi_cntrl->rddm_image) {
|
||||
mhi_free_bhie_table(mhi_cntrl, mhi_cntrl->rddm_image);
|
||||
mhi_cntrl->rddm_image = NULL;
|
||||
}
|
||||
if (mhi_cntrl->rddm_image)
|
||||
mhi_free_bhie_table(mhi_cntrl, &mhi_cntrl->rddm_image);
|
||||
|
||||
mhi_deinit_dev_ctxt(mhi_cntrl);
|
||||
mhi_cntrl->pre_init = false;
|
||||
|
|
|
|||
|
|
@ -941,7 +941,7 @@ void mhi_create_devices(struct mhi_controller *mhi_cntrl);
|
|||
int mhi_alloc_bhie_table(struct mhi_controller *mhi_cntrl,
|
||||
struct image_info **image_info, size_t alloc_size);
|
||||
void mhi_free_bhie_table(struct mhi_controller *mhi_cntrl,
|
||||
struct image_info *image_info);
|
||||
struct image_info **image_info);
|
||||
|
||||
int mhi_map_single_no_bb(struct mhi_controller *mhi_cntrl,
|
||||
struct mhi_buf_info *buf_info);
|
||||
|
|
|
|||
|
|
@ -1125,10 +1125,9 @@ void mhi_power_down(struct mhi_controller *mhi_cntrl, bool graceful)
|
|||
|
||||
if (!mhi_cntrl->pre_init) {
|
||||
/* free all allocated resources */
|
||||
if (mhi_cntrl->fbc_image) {
|
||||
mhi_free_bhie_table(mhi_cntrl, mhi_cntrl->fbc_image);
|
||||
mhi_cntrl->fbc_image = NULL;
|
||||
}
|
||||
if (mhi_cntrl->fbc_image)
|
||||
mhi_free_bhie_table(mhi_cntrl, &mhi_cntrl->fbc_image);
|
||||
|
||||
mhi_deinit_dev_ctxt(mhi_cntrl);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -229,6 +229,7 @@ struct reg_write_info {
|
|||
* @rddm_size: RAM dump size that host should allocate for debugging purpose
|
||||
* @sbl_size: SBL image size
|
||||
* @seg_len: BHIe vector size
|
||||
* @img_pre_alloc: allocate rddm and fbc image buffers one time
|
||||
* @fbc_image: Points to firmware image buffer
|
||||
* @rddm_image: Points to RAM dump buffer
|
||||
* @max_chan: Maximum number of channels controller support
|
||||
|
|
@ -302,6 +303,8 @@ struct mhi_controller {
|
|||
size_t seg_len;
|
||||
u32 session_id;
|
||||
u32 sequence_id;
|
||||
|
||||
bool img_pre_alloc;
|
||||
struct image_info *fbc_image;
|
||||
struct image_info *rddm_image;
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue