Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 804a2d5b authored by qctecmdr's avatar qctecmdr Committed by Gerrit - the friendly Code Review server
Browse files

Merge "cnss2: Notify MHI to use already allocated images"

parents 88dd3569 fbef9467
Loading
Loading
Loading
Loading
+13 −9
Original line number Diff line number Diff line
@@ -464,20 +464,22 @@ static int mhi_fw_load_bhi(struct mhi_controller *mhi_cntrl,
}

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 @@ void mhi_fw_load_handler(struct mhi_controller *mhi_cntrl)
	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);
+6 −12
Original line number Diff line number Diff line
@@ -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;
+1 −1
Original line number Diff line number Diff line
@@ -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);
+3 −4
Original line number Diff line number Diff line
@@ -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);
	}

+5 −0
Original line number Diff line number Diff line
@@ -1270,6 +1270,11 @@ static int cnss_pci_set_mhi_state(struct cnss_pci_data *pci_priv,
		break;
	case CNSS_MHI_POWER_ON:
		ret = mhi_sync_power_up(pci_priv->mhi_ctrl);
		/* Only set img_pre_alloc when power up succeeds */
		if (!ret && !pci_priv->mhi_ctrl->img_pre_alloc) {
			cnss_pr_dbg("Notify MHI to use already allocated images\n");
			pci_priv->mhi_ctrl->img_pre_alloc = true;
		}
		break;
	case CNSS_MHI_POWER_OFF:
		mhi_power_down(pci_priv->mhi_ctrl, true);
Loading