linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] bus: mhi: core: Replace DMA allocation wrappers with original APIs
@ 2021-06-22 20:07 Bhaumik Bhatt
  2021-07-16 11:52 ` Manivannan Sadhasivam
  2021-07-16 11:54 ` Manivannan Sadhasivam
  0 siblings, 2 replies; 3+ messages in thread
From: Bhaumik Bhatt @ 2021-06-22 20:07 UTC (permalink / raw)
  To: manivannan.sadhasivam
  Cc: linux-arm-msm, hemantk, jhugo, linux-kernel, loic.poulain, Bhaumik Bhatt

There is nothing special done within the mhi_alloc_coherent() and
the mhi_free_coherent() wrapper functions. They only directly
call the equivalent DMA allocation functions. Replace them with
the original function calls such that the implementation is clear
and direct.

Signed-off-by: Bhaumik Bhatt <bbhatt@codeaurora.org>
---
 drivers/bus/mhi/core/boot.c     | 17 +++++++++--------
 drivers/bus/mhi/core/init.c     | 32 ++++++++++++++++----------------
 drivers/bus/mhi/core/internal.h | 20 --------------------
 drivers/bus/mhi/core/main.c     |  6 +++---
 4 files changed, 28 insertions(+), 47 deletions(-)

diff --git a/drivers/bus/mhi/core/boot.c b/drivers/bus/mhi/core/boot.c
index 8100cf5..0a97262 100644
--- a/drivers/bus/mhi/core/boot.c
+++ b/drivers/bus/mhi/core/boot.c
@@ -302,8 +302,8 @@ void mhi_free_bhie_table(struct mhi_controller *mhi_cntrl,
 	struct mhi_buf *mhi_buf = image_info->mhi_buf;
 
 	for (i = 0; i < image_info->entries; i++, mhi_buf++)
-		mhi_free_coherent(mhi_cntrl, mhi_buf->len, mhi_buf->buf,
-				  mhi_buf->dma_addr);
+		dma_free_coherent(mhi_cntrl->cntrl_dev, mhi_buf->len,
+				  mhi_buf->buf, mhi_buf->dma_addr);
 
 	kfree(image_info->mhi_buf);
 	kfree(image_info);
@@ -339,8 +339,8 @@ int mhi_alloc_bhie_table(struct mhi_controller *mhi_cntrl,
 			vec_size = sizeof(struct bhi_vec_entry) * i;
 
 		mhi_buf->len = vec_size;
-		mhi_buf->buf = mhi_alloc_coherent(mhi_cntrl, vec_size,
-						  &mhi_buf->dma_addr,
+		mhi_buf->buf = dma_alloc_coherent(mhi_cntrl->cntrl_dev,
+						  vec_size, &mhi_buf->dma_addr,
 						  GFP_KERNEL);
 		if (!mhi_buf->buf)
 			goto error_alloc_segment;
@@ -354,8 +354,8 @@ int mhi_alloc_bhie_table(struct mhi_controller *mhi_cntrl,
 
 error_alloc_segment:
 	for (--i, --mhi_buf; i >= 0; i--, mhi_buf--)
-		mhi_free_coherent(mhi_cntrl, mhi_buf->len, mhi_buf->buf,
-				  mhi_buf->dma_addr);
+		dma_free_coherent(mhi_cntrl->cntrl_dev, mhi_buf->len,
+				  mhi_buf->buf, mhi_buf->dma_addr);
 
 error_alloc_mhi_buf:
 	kfree(img_info);
@@ -442,7 +442,8 @@ void mhi_fw_load_handler(struct mhi_controller *mhi_cntrl)
 	if (size > firmware->size)
 		size = firmware->size;
 
-	buf = mhi_alloc_coherent(mhi_cntrl, size, &dma_addr, GFP_KERNEL);
+	buf = dma_alloc_coherent(mhi_cntrl->cntrl_dev, size, &dma_addr,
+				 GFP_KERNEL);
 	if (!buf) {
 		release_firmware(firmware);
 		goto error_fw_load;
@@ -451,7 +452,7 @@ void mhi_fw_load_handler(struct mhi_controller *mhi_cntrl)
 	/* Download image using BHI */
 	memcpy(buf, firmware->data, size);
 	ret = mhi_fw_load_bhi(mhi_cntrl, dma_addr, size);
-	mhi_free_coherent(mhi_cntrl, size, buf, dma_addr);
+	dma_free_coherent(mhi_cntrl->cntrl_dev, size, buf, dma_addr);
 
 	/* Error or in EDL mode, we're done */
 	if (ret) {
diff --git a/drivers/bus/mhi/core/init.c b/drivers/bus/mhi/core/init.c
index 4446760..c7ba715 100644
--- a/drivers/bus/mhi/core/init.c
+++ b/drivers/bus/mhi/core/init.c
@@ -129,7 +129,7 @@ static int mhi_alloc_aligned_ring(struct mhi_controller *mhi_cntrl,
 				  u64 len)
 {
 	ring->alloc_size = len + (len - 1);
-	ring->pre_aligned = mhi_alloc_coherent(mhi_cntrl, ring->alloc_size,
+	ring->pre_aligned = dma_alloc_coherent(mhi_cntrl->cntrl_dev, ring->alloc_size,
 					       &ring->dma_handle, GFP_KERNEL);
 	if (!ring->pre_aligned)
 		return -ENOMEM;
@@ -221,13 +221,13 @@ void mhi_deinit_dev_ctxt(struct mhi_controller *mhi_cntrl)
 	mhi_cmd = mhi_cntrl->mhi_cmd;
 	for (i = 0; i < NR_OF_CMD_RINGS; i++, mhi_cmd++) {
 		ring = &mhi_cmd->ring;
-		mhi_free_coherent(mhi_cntrl, ring->alloc_size,
+		dma_free_coherent(mhi_cntrl->cntrl_dev, ring->alloc_size,
 				  ring->pre_aligned, ring->dma_handle);
 		ring->base = NULL;
 		ring->iommu_base = 0;
 	}
 
-	mhi_free_coherent(mhi_cntrl,
+	dma_free_coherent(mhi_cntrl->cntrl_dev,
 			  sizeof(*mhi_ctxt->cmd_ctxt) * NR_OF_CMD_RINGS,
 			  mhi_ctxt->cmd_ctxt, mhi_ctxt->cmd_ctxt_addr);
 
@@ -237,17 +237,17 @@ void mhi_deinit_dev_ctxt(struct mhi_controller *mhi_cntrl)
 			continue;
 
 		ring = &mhi_event->ring;
-		mhi_free_coherent(mhi_cntrl, ring->alloc_size,
+		dma_free_coherent(mhi_cntrl->cntrl_dev, ring->alloc_size,
 				  ring->pre_aligned, ring->dma_handle);
 		ring->base = NULL;
 		ring->iommu_base = 0;
 	}
 
-	mhi_free_coherent(mhi_cntrl, sizeof(*mhi_ctxt->er_ctxt) *
+	dma_free_coherent(mhi_cntrl->cntrl_dev, sizeof(*mhi_ctxt->er_ctxt) *
 			  mhi_cntrl->total_ev_rings, mhi_ctxt->er_ctxt,
 			  mhi_ctxt->er_ctxt_addr);
 
-	mhi_free_coherent(mhi_cntrl, sizeof(*mhi_ctxt->chan_ctxt) *
+	dma_free_coherent(mhi_cntrl->cntrl_dev, sizeof(*mhi_ctxt->chan_ctxt) *
 			  mhi_cntrl->max_chan, mhi_ctxt->chan_ctxt,
 			  mhi_ctxt->chan_ctxt_addr);
 
@@ -275,7 +275,7 @@ int mhi_init_dev_ctxt(struct mhi_controller *mhi_cntrl)
 		return -ENOMEM;
 
 	/* Setup channel ctxt */
-	mhi_ctxt->chan_ctxt = mhi_alloc_coherent(mhi_cntrl,
+	mhi_ctxt->chan_ctxt = dma_alloc_coherent(mhi_cntrl->cntrl_dev,
 						 sizeof(*mhi_ctxt->chan_ctxt) *
 						 mhi_cntrl->max_chan,
 						 &mhi_ctxt->chan_ctxt_addr,
@@ -307,7 +307,7 @@ int mhi_init_dev_ctxt(struct mhi_controller *mhi_cntrl)
 	}
 
 	/* Setup event context */
-	mhi_ctxt->er_ctxt = mhi_alloc_coherent(mhi_cntrl,
+	mhi_ctxt->er_ctxt = dma_alloc_coherent(mhi_cntrl->cntrl_dev,
 					       sizeof(*mhi_ctxt->er_ctxt) *
 					       mhi_cntrl->total_ev_rings,
 					       &mhi_ctxt->er_ctxt_addr,
@@ -354,7 +354,7 @@ int mhi_init_dev_ctxt(struct mhi_controller *mhi_cntrl)
 
 	/* Setup cmd context */
 	ret = -ENOMEM;
-	mhi_ctxt->cmd_ctxt = mhi_alloc_coherent(mhi_cntrl,
+	mhi_ctxt->cmd_ctxt = dma_alloc_coherent(mhi_cntrl->cntrl_dev,
 						sizeof(*mhi_ctxt->cmd_ctxt) *
 						NR_OF_CMD_RINGS,
 						&mhi_ctxt->cmd_ctxt_addr,
@@ -389,10 +389,10 @@ int mhi_init_dev_ctxt(struct mhi_controller *mhi_cntrl)
 	for (--i, --mhi_cmd; i >= 0; i--, mhi_cmd--) {
 		struct mhi_ring *ring = &mhi_cmd->ring;
 
-		mhi_free_coherent(mhi_cntrl, ring->alloc_size,
+		dma_free_coherent(mhi_cntrl->cntrl_dev, ring->alloc_size,
 				  ring->pre_aligned, ring->dma_handle);
 	}
-	mhi_free_coherent(mhi_cntrl,
+	dma_free_coherent(mhi_cntrl->cntrl_dev,
 			  sizeof(*mhi_ctxt->cmd_ctxt) * NR_OF_CMD_RINGS,
 			  mhi_ctxt->cmd_ctxt, mhi_ctxt->cmd_ctxt_addr);
 	i = mhi_cntrl->total_ev_rings;
@@ -405,15 +405,15 @@ int mhi_init_dev_ctxt(struct mhi_controller *mhi_cntrl)
 		if (mhi_event->offload_ev)
 			continue;
 
-		mhi_free_coherent(mhi_cntrl, ring->alloc_size,
+		dma_free_coherent(mhi_cntrl->cntrl_dev, ring->alloc_size,
 				  ring->pre_aligned, ring->dma_handle);
 	}
-	mhi_free_coherent(mhi_cntrl, sizeof(*mhi_ctxt->er_ctxt) *
+	dma_free_coherent(mhi_cntrl->cntrl_dev, sizeof(*mhi_ctxt->er_ctxt) *
 			  mhi_cntrl->total_ev_rings, mhi_ctxt->er_ctxt,
 			  mhi_ctxt->er_ctxt_addr);
 
 error_alloc_er_ctxt:
-	mhi_free_coherent(mhi_cntrl, sizeof(*mhi_ctxt->chan_ctxt) *
+	dma_free_coherent(mhi_cntrl->cntrl_dev, sizeof(*mhi_ctxt->chan_ctxt) *
 			  mhi_cntrl->max_chan, mhi_ctxt->chan_ctxt,
 			  mhi_ctxt->chan_ctxt_addr);
 
@@ -567,7 +567,7 @@ void mhi_deinit_chan_ctxt(struct mhi_controller *mhi_cntrl,
 	if (!chan_ctxt->rbase) /* Already uninitialized */
 		return;
 
-	mhi_free_coherent(mhi_cntrl, tre_ring->alloc_size,
+	dma_free_coherent(mhi_cntrl->cntrl_dev, tre_ring->alloc_size,
 			  tre_ring->pre_aligned, tre_ring->dma_handle);
 	vfree(buf_ring->base);
 
@@ -610,7 +610,7 @@ int mhi_init_chan_ctxt(struct mhi_controller *mhi_cntrl,
 	buf_ring->base = vzalloc(buf_ring->len);
 
 	if (!buf_ring->base) {
-		mhi_free_coherent(mhi_cntrl, tre_ring->alloc_size,
+		dma_free_coherent(mhi_cntrl->cntrl_dev, tre_ring->alloc_size,
 				  tre_ring->pre_aligned, tre_ring->dma_handle);
 		return -ENOMEM;
 	}
diff --git a/drivers/bus/mhi/core/internal.h b/drivers/bus/mhi/core/internal.h
index 672052f..b5594fa 100644
--- a/drivers/bus/mhi/core/internal.h
+++ b/drivers/bus/mhi/core/internal.h
@@ -690,26 +690,6 @@ void mhi_deinit_chan_ctxt(struct mhi_controller *mhi_cntrl,
 void mhi_reset_chan(struct mhi_controller *mhi_cntrl,
 		    struct mhi_chan *mhi_chan);
 
-/* Memory allocation methods */
-static inline void *mhi_alloc_coherent(struct mhi_controller *mhi_cntrl,
-				       size_t size,
-				       dma_addr_t *dma_handle,
-				       gfp_t gfp)
-{
-	void *buf = dma_alloc_coherent(mhi_cntrl->cntrl_dev, size, dma_handle,
-				       gfp);
-
-	return buf;
-}
-
-static inline void mhi_free_coherent(struct mhi_controller *mhi_cntrl,
-				     size_t size,
-				     void *vaddr,
-				     dma_addr_t dma_handle)
-{
-	dma_free_coherent(mhi_cntrl->cntrl_dev, size, vaddr, dma_handle);
-}
-
 /* Event processing methods */
 void mhi_ctrl_ev_task(unsigned long data);
 void mhi_ev_task(unsigned long data);
diff --git a/drivers/bus/mhi/core/main.c b/drivers/bus/mhi/core/main.c
index 02c8c09..409c68bc 100644
--- a/drivers/bus/mhi/core/main.c
+++ b/drivers/bus/mhi/core/main.c
@@ -193,7 +193,7 @@ int mhi_map_single_no_bb(struct mhi_controller *mhi_cntrl,
 int mhi_map_single_use_bb(struct mhi_controller *mhi_cntrl,
 			  struct mhi_buf_info *buf_info)
 {
-	void *buf = mhi_alloc_coherent(mhi_cntrl, buf_info->len,
+	void *buf = dma_alloc_coherent(mhi_cntrl->cntrl_dev, buf_info->len,
 				       &buf_info->p_addr, GFP_ATOMIC);
 
 	if (!buf)
@@ -220,8 +220,8 @@ void mhi_unmap_single_use_bb(struct mhi_controller *mhi_cntrl,
 	if (buf_info->dir == DMA_FROM_DEVICE)
 		memcpy(buf_info->v_addr, buf_info->bb_addr, buf_info->len);
 
-	mhi_free_coherent(mhi_cntrl, buf_info->len, buf_info->bb_addr,
-			  buf_info->p_addr);
+	dma_free_coherent(mhi_cntrl->cntrl_dev, buf_info->len,
+			  buf_info->bb_addr, buf_info->p_addr);
 }
 
 static int get_nr_avail_ring_elements(struct mhi_controller *mhi_cntrl,
-- 
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,
a Linux Foundation Collaborative Project


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH] bus: mhi: core: Replace DMA allocation wrappers with original APIs
  2021-06-22 20:07 [PATCH] bus: mhi: core: Replace DMA allocation wrappers with original APIs Bhaumik Bhatt
@ 2021-07-16 11:52 ` Manivannan Sadhasivam
  2021-07-16 11:54 ` Manivannan Sadhasivam
  1 sibling, 0 replies; 3+ messages in thread
From: Manivannan Sadhasivam @ 2021-07-16 11:52 UTC (permalink / raw)
  To: Bhaumik Bhatt; +Cc: linux-arm-msm, hemantk, jhugo, linux-kernel, loic.poulain

On Tue, Jun 22, 2021 at 01:07:08PM -0700, Bhaumik Bhatt wrote:
> There is nothing special done within the mhi_alloc_coherent() and
> the mhi_free_coherent() wrapper functions. They only directly
> call the equivalent DMA allocation functions. Replace them with
> the original function calls such that the implementation is clear
> and direct.

There you go :) I was tempted to do this for a while...

> 
> Signed-off-by: Bhaumik Bhatt <bbhatt@codeaurora.org>

Reviewed-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>

Thanks,
Mani

> ---
>  drivers/bus/mhi/core/boot.c     | 17 +++++++++--------
>  drivers/bus/mhi/core/init.c     | 32 ++++++++++++++++----------------
>  drivers/bus/mhi/core/internal.h | 20 --------------------
>  drivers/bus/mhi/core/main.c     |  6 +++---
>  4 files changed, 28 insertions(+), 47 deletions(-)
> 
> diff --git a/drivers/bus/mhi/core/boot.c b/drivers/bus/mhi/core/boot.c
> index 8100cf5..0a97262 100644
> --- a/drivers/bus/mhi/core/boot.c
> +++ b/drivers/bus/mhi/core/boot.c
> @@ -302,8 +302,8 @@ void mhi_free_bhie_table(struct mhi_controller *mhi_cntrl,
>  	struct mhi_buf *mhi_buf = image_info->mhi_buf;
>  
>  	for (i = 0; i < image_info->entries; i++, mhi_buf++)
> -		mhi_free_coherent(mhi_cntrl, mhi_buf->len, mhi_buf->buf,
> -				  mhi_buf->dma_addr);
> +		dma_free_coherent(mhi_cntrl->cntrl_dev, mhi_buf->len,
> +				  mhi_buf->buf, mhi_buf->dma_addr);
>  
>  	kfree(image_info->mhi_buf);
>  	kfree(image_info);
> @@ -339,8 +339,8 @@ int mhi_alloc_bhie_table(struct mhi_controller *mhi_cntrl,
>  			vec_size = sizeof(struct bhi_vec_entry) * i;
>  
>  		mhi_buf->len = vec_size;
> -		mhi_buf->buf = mhi_alloc_coherent(mhi_cntrl, vec_size,
> -						  &mhi_buf->dma_addr,
> +		mhi_buf->buf = dma_alloc_coherent(mhi_cntrl->cntrl_dev,
> +						  vec_size, &mhi_buf->dma_addr,
>  						  GFP_KERNEL);
>  		if (!mhi_buf->buf)
>  			goto error_alloc_segment;
> @@ -354,8 +354,8 @@ int mhi_alloc_bhie_table(struct mhi_controller *mhi_cntrl,
>  
>  error_alloc_segment:
>  	for (--i, --mhi_buf; i >= 0; i--, mhi_buf--)
> -		mhi_free_coherent(mhi_cntrl, mhi_buf->len, mhi_buf->buf,
> -				  mhi_buf->dma_addr);
> +		dma_free_coherent(mhi_cntrl->cntrl_dev, mhi_buf->len,
> +				  mhi_buf->buf, mhi_buf->dma_addr);
>  
>  error_alloc_mhi_buf:
>  	kfree(img_info);
> @@ -442,7 +442,8 @@ void mhi_fw_load_handler(struct mhi_controller *mhi_cntrl)
>  	if (size > firmware->size)
>  		size = firmware->size;
>  
> -	buf = mhi_alloc_coherent(mhi_cntrl, size, &dma_addr, GFP_KERNEL);
> +	buf = dma_alloc_coherent(mhi_cntrl->cntrl_dev, size, &dma_addr,
> +				 GFP_KERNEL);
>  	if (!buf) {
>  		release_firmware(firmware);
>  		goto error_fw_load;
> @@ -451,7 +452,7 @@ void mhi_fw_load_handler(struct mhi_controller *mhi_cntrl)
>  	/* Download image using BHI */
>  	memcpy(buf, firmware->data, size);
>  	ret = mhi_fw_load_bhi(mhi_cntrl, dma_addr, size);
> -	mhi_free_coherent(mhi_cntrl, size, buf, dma_addr);
> +	dma_free_coherent(mhi_cntrl->cntrl_dev, size, buf, dma_addr);
>  
>  	/* Error or in EDL mode, we're done */
>  	if (ret) {
> diff --git a/drivers/bus/mhi/core/init.c b/drivers/bus/mhi/core/init.c
> index 4446760..c7ba715 100644
> --- a/drivers/bus/mhi/core/init.c
> +++ b/drivers/bus/mhi/core/init.c
> @@ -129,7 +129,7 @@ static int mhi_alloc_aligned_ring(struct mhi_controller *mhi_cntrl,
>  				  u64 len)
>  {
>  	ring->alloc_size = len + (len - 1);
> -	ring->pre_aligned = mhi_alloc_coherent(mhi_cntrl, ring->alloc_size,
> +	ring->pre_aligned = dma_alloc_coherent(mhi_cntrl->cntrl_dev, ring->alloc_size,
>  					       &ring->dma_handle, GFP_KERNEL);
>  	if (!ring->pre_aligned)
>  		return -ENOMEM;
> @@ -221,13 +221,13 @@ void mhi_deinit_dev_ctxt(struct mhi_controller *mhi_cntrl)
>  	mhi_cmd = mhi_cntrl->mhi_cmd;
>  	for (i = 0; i < NR_OF_CMD_RINGS; i++, mhi_cmd++) {
>  		ring = &mhi_cmd->ring;
> -		mhi_free_coherent(mhi_cntrl, ring->alloc_size,
> +		dma_free_coherent(mhi_cntrl->cntrl_dev, ring->alloc_size,
>  				  ring->pre_aligned, ring->dma_handle);
>  		ring->base = NULL;
>  		ring->iommu_base = 0;
>  	}
>  
> -	mhi_free_coherent(mhi_cntrl,
> +	dma_free_coherent(mhi_cntrl->cntrl_dev,
>  			  sizeof(*mhi_ctxt->cmd_ctxt) * NR_OF_CMD_RINGS,
>  			  mhi_ctxt->cmd_ctxt, mhi_ctxt->cmd_ctxt_addr);
>  
> @@ -237,17 +237,17 @@ void mhi_deinit_dev_ctxt(struct mhi_controller *mhi_cntrl)
>  			continue;
>  
>  		ring = &mhi_event->ring;
> -		mhi_free_coherent(mhi_cntrl, ring->alloc_size,
> +		dma_free_coherent(mhi_cntrl->cntrl_dev, ring->alloc_size,
>  				  ring->pre_aligned, ring->dma_handle);
>  		ring->base = NULL;
>  		ring->iommu_base = 0;
>  	}
>  
> -	mhi_free_coherent(mhi_cntrl, sizeof(*mhi_ctxt->er_ctxt) *
> +	dma_free_coherent(mhi_cntrl->cntrl_dev, sizeof(*mhi_ctxt->er_ctxt) *
>  			  mhi_cntrl->total_ev_rings, mhi_ctxt->er_ctxt,
>  			  mhi_ctxt->er_ctxt_addr);
>  
> -	mhi_free_coherent(mhi_cntrl, sizeof(*mhi_ctxt->chan_ctxt) *
> +	dma_free_coherent(mhi_cntrl->cntrl_dev, sizeof(*mhi_ctxt->chan_ctxt) *
>  			  mhi_cntrl->max_chan, mhi_ctxt->chan_ctxt,
>  			  mhi_ctxt->chan_ctxt_addr);
>  
> @@ -275,7 +275,7 @@ int mhi_init_dev_ctxt(struct mhi_controller *mhi_cntrl)
>  		return -ENOMEM;
>  
>  	/* Setup channel ctxt */
> -	mhi_ctxt->chan_ctxt = mhi_alloc_coherent(mhi_cntrl,
> +	mhi_ctxt->chan_ctxt = dma_alloc_coherent(mhi_cntrl->cntrl_dev,
>  						 sizeof(*mhi_ctxt->chan_ctxt) *
>  						 mhi_cntrl->max_chan,
>  						 &mhi_ctxt->chan_ctxt_addr,
> @@ -307,7 +307,7 @@ int mhi_init_dev_ctxt(struct mhi_controller *mhi_cntrl)
>  	}
>  
>  	/* Setup event context */
> -	mhi_ctxt->er_ctxt = mhi_alloc_coherent(mhi_cntrl,
> +	mhi_ctxt->er_ctxt = dma_alloc_coherent(mhi_cntrl->cntrl_dev,
>  					       sizeof(*mhi_ctxt->er_ctxt) *
>  					       mhi_cntrl->total_ev_rings,
>  					       &mhi_ctxt->er_ctxt_addr,
> @@ -354,7 +354,7 @@ int mhi_init_dev_ctxt(struct mhi_controller *mhi_cntrl)
>  
>  	/* Setup cmd context */
>  	ret = -ENOMEM;
> -	mhi_ctxt->cmd_ctxt = mhi_alloc_coherent(mhi_cntrl,
> +	mhi_ctxt->cmd_ctxt = dma_alloc_coherent(mhi_cntrl->cntrl_dev,
>  						sizeof(*mhi_ctxt->cmd_ctxt) *
>  						NR_OF_CMD_RINGS,
>  						&mhi_ctxt->cmd_ctxt_addr,
> @@ -389,10 +389,10 @@ int mhi_init_dev_ctxt(struct mhi_controller *mhi_cntrl)
>  	for (--i, --mhi_cmd; i >= 0; i--, mhi_cmd--) {
>  		struct mhi_ring *ring = &mhi_cmd->ring;
>  
> -		mhi_free_coherent(mhi_cntrl, ring->alloc_size,
> +		dma_free_coherent(mhi_cntrl->cntrl_dev, ring->alloc_size,
>  				  ring->pre_aligned, ring->dma_handle);
>  	}
> -	mhi_free_coherent(mhi_cntrl,
> +	dma_free_coherent(mhi_cntrl->cntrl_dev,
>  			  sizeof(*mhi_ctxt->cmd_ctxt) * NR_OF_CMD_RINGS,
>  			  mhi_ctxt->cmd_ctxt, mhi_ctxt->cmd_ctxt_addr);
>  	i = mhi_cntrl->total_ev_rings;
> @@ -405,15 +405,15 @@ int mhi_init_dev_ctxt(struct mhi_controller *mhi_cntrl)
>  		if (mhi_event->offload_ev)
>  			continue;
>  
> -		mhi_free_coherent(mhi_cntrl, ring->alloc_size,
> +		dma_free_coherent(mhi_cntrl->cntrl_dev, ring->alloc_size,
>  				  ring->pre_aligned, ring->dma_handle);
>  	}
> -	mhi_free_coherent(mhi_cntrl, sizeof(*mhi_ctxt->er_ctxt) *
> +	dma_free_coherent(mhi_cntrl->cntrl_dev, sizeof(*mhi_ctxt->er_ctxt) *
>  			  mhi_cntrl->total_ev_rings, mhi_ctxt->er_ctxt,
>  			  mhi_ctxt->er_ctxt_addr);
>  
>  error_alloc_er_ctxt:
> -	mhi_free_coherent(mhi_cntrl, sizeof(*mhi_ctxt->chan_ctxt) *
> +	dma_free_coherent(mhi_cntrl->cntrl_dev, sizeof(*mhi_ctxt->chan_ctxt) *
>  			  mhi_cntrl->max_chan, mhi_ctxt->chan_ctxt,
>  			  mhi_ctxt->chan_ctxt_addr);
>  
> @@ -567,7 +567,7 @@ void mhi_deinit_chan_ctxt(struct mhi_controller *mhi_cntrl,
>  	if (!chan_ctxt->rbase) /* Already uninitialized */
>  		return;
>  
> -	mhi_free_coherent(mhi_cntrl, tre_ring->alloc_size,
> +	dma_free_coherent(mhi_cntrl->cntrl_dev, tre_ring->alloc_size,
>  			  tre_ring->pre_aligned, tre_ring->dma_handle);
>  	vfree(buf_ring->base);
>  
> @@ -610,7 +610,7 @@ int mhi_init_chan_ctxt(struct mhi_controller *mhi_cntrl,
>  	buf_ring->base = vzalloc(buf_ring->len);
>  
>  	if (!buf_ring->base) {
> -		mhi_free_coherent(mhi_cntrl, tre_ring->alloc_size,
> +		dma_free_coherent(mhi_cntrl->cntrl_dev, tre_ring->alloc_size,
>  				  tre_ring->pre_aligned, tre_ring->dma_handle);
>  		return -ENOMEM;
>  	}
> diff --git a/drivers/bus/mhi/core/internal.h b/drivers/bus/mhi/core/internal.h
> index 672052f..b5594fa 100644
> --- a/drivers/bus/mhi/core/internal.h
> +++ b/drivers/bus/mhi/core/internal.h
> @@ -690,26 +690,6 @@ void mhi_deinit_chan_ctxt(struct mhi_controller *mhi_cntrl,
>  void mhi_reset_chan(struct mhi_controller *mhi_cntrl,
>  		    struct mhi_chan *mhi_chan);
>  
> -/* Memory allocation methods */
> -static inline void *mhi_alloc_coherent(struct mhi_controller *mhi_cntrl,
> -				       size_t size,
> -				       dma_addr_t *dma_handle,
> -				       gfp_t gfp)
> -{
> -	void *buf = dma_alloc_coherent(mhi_cntrl->cntrl_dev, size, dma_handle,
> -				       gfp);
> -
> -	return buf;
> -}
> -
> -static inline void mhi_free_coherent(struct mhi_controller *mhi_cntrl,
> -				     size_t size,
> -				     void *vaddr,
> -				     dma_addr_t dma_handle)
> -{
> -	dma_free_coherent(mhi_cntrl->cntrl_dev, size, vaddr, dma_handle);
> -}
> -
>  /* Event processing methods */
>  void mhi_ctrl_ev_task(unsigned long data);
>  void mhi_ev_task(unsigned long data);
> diff --git a/drivers/bus/mhi/core/main.c b/drivers/bus/mhi/core/main.c
> index 02c8c09..409c68bc 100644
> --- a/drivers/bus/mhi/core/main.c
> +++ b/drivers/bus/mhi/core/main.c
> @@ -193,7 +193,7 @@ int mhi_map_single_no_bb(struct mhi_controller *mhi_cntrl,
>  int mhi_map_single_use_bb(struct mhi_controller *mhi_cntrl,
>  			  struct mhi_buf_info *buf_info)
>  {
> -	void *buf = mhi_alloc_coherent(mhi_cntrl, buf_info->len,
> +	void *buf = dma_alloc_coherent(mhi_cntrl->cntrl_dev, buf_info->len,
>  				       &buf_info->p_addr, GFP_ATOMIC);
>  
>  	if (!buf)
> @@ -220,8 +220,8 @@ void mhi_unmap_single_use_bb(struct mhi_controller *mhi_cntrl,
>  	if (buf_info->dir == DMA_FROM_DEVICE)
>  		memcpy(buf_info->v_addr, buf_info->bb_addr, buf_info->len);
>  
> -	mhi_free_coherent(mhi_cntrl, buf_info->len, buf_info->bb_addr,
> -			  buf_info->p_addr);
> +	dma_free_coherent(mhi_cntrl->cntrl_dev, buf_info->len,
> +			  buf_info->bb_addr, buf_info->p_addr);
>  }
>  
>  static int get_nr_avail_ring_elements(struct mhi_controller *mhi_cntrl,
> -- 
> The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,
> a Linux Foundation Collaborative Project
> 

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] bus: mhi: core: Replace DMA allocation wrappers with original APIs
  2021-06-22 20:07 [PATCH] bus: mhi: core: Replace DMA allocation wrappers with original APIs Bhaumik Bhatt
  2021-07-16 11:52 ` Manivannan Sadhasivam
@ 2021-07-16 11:54 ` Manivannan Sadhasivam
  1 sibling, 0 replies; 3+ messages in thread
From: Manivannan Sadhasivam @ 2021-07-16 11:54 UTC (permalink / raw)
  To: Bhaumik Bhatt; +Cc: linux-arm-msm, hemantk, jhugo, linux-kernel, loic.poulain

On Tue, Jun 22, 2021 at 01:07:08PM -0700, Bhaumik Bhatt wrote:
> There is nothing special done within the mhi_alloc_coherent() and
> the mhi_free_coherent() wrapper functions. They only directly
> call the equivalent DMA allocation functions. Replace them with
> the original function calls such that the implementation is clear
> and direct.
> 
> Signed-off-by: Bhaumik Bhatt <bbhatt@codeaurora.org>

Applied to mhi-next!

Thanks,
Mani

> ---
>  drivers/bus/mhi/core/boot.c     | 17 +++++++++--------
>  drivers/bus/mhi/core/init.c     | 32 ++++++++++++++++----------------
>  drivers/bus/mhi/core/internal.h | 20 --------------------
>  drivers/bus/mhi/core/main.c     |  6 +++---
>  4 files changed, 28 insertions(+), 47 deletions(-)
> 
> diff --git a/drivers/bus/mhi/core/boot.c b/drivers/bus/mhi/core/boot.c
> index 8100cf5..0a97262 100644
> --- a/drivers/bus/mhi/core/boot.c
> +++ b/drivers/bus/mhi/core/boot.c
> @@ -302,8 +302,8 @@ void mhi_free_bhie_table(struct mhi_controller *mhi_cntrl,
>  	struct mhi_buf *mhi_buf = image_info->mhi_buf;
>  
>  	for (i = 0; i < image_info->entries; i++, mhi_buf++)
> -		mhi_free_coherent(mhi_cntrl, mhi_buf->len, mhi_buf->buf,
> -				  mhi_buf->dma_addr);
> +		dma_free_coherent(mhi_cntrl->cntrl_dev, mhi_buf->len,
> +				  mhi_buf->buf, mhi_buf->dma_addr);
>  
>  	kfree(image_info->mhi_buf);
>  	kfree(image_info);
> @@ -339,8 +339,8 @@ int mhi_alloc_bhie_table(struct mhi_controller *mhi_cntrl,
>  			vec_size = sizeof(struct bhi_vec_entry) * i;
>  
>  		mhi_buf->len = vec_size;
> -		mhi_buf->buf = mhi_alloc_coherent(mhi_cntrl, vec_size,
> -						  &mhi_buf->dma_addr,
> +		mhi_buf->buf = dma_alloc_coherent(mhi_cntrl->cntrl_dev,
> +						  vec_size, &mhi_buf->dma_addr,
>  						  GFP_KERNEL);
>  		if (!mhi_buf->buf)
>  			goto error_alloc_segment;
> @@ -354,8 +354,8 @@ int mhi_alloc_bhie_table(struct mhi_controller *mhi_cntrl,
>  
>  error_alloc_segment:
>  	for (--i, --mhi_buf; i >= 0; i--, mhi_buf--)
> -		mhi_free_coherent(mhi_cntrl, mhi_buf->len, mhi_buf->buf,
> -				  mhi_buf->dma_addr);
> +		dma_free_coherent(mhi_cntrl->cntrl_dev, mhi_buf->len,
> +				  mhi_buf->buf, mhi_buf->dma_addr);
>  
>  error_alloc_mhi_buf:
>  	kfree(img_info);
> @@ -442,7 +442,8 @@ void mhi_fw_load_handler(struct mhi_controller *mhi_cntrl)
>  	if (size > firmware->size)
>  		size = firmware->size;
>  
> -	buf = mhi_alloc_coherent(mhi_cntrl, size, &dma_addr, GFP_KERNEL);
> +	buf = dma_alloc_coherent(mhi_cntrl->cntrl_dev, size, &dma_addr,
> +				 GFP_KERNEL);
>  	if (!buf) {
>  		release_firmware(firmware);
>  		goto error_fw_load;
> @@ -451,7 +452,7 @@ void mhi_fw_load_handler(struct mhi_controller *mhi_cntrl)
>  	/* Download image using BHI */
>  	memcpy(buf, firmware->data, size);
>  	ret = mhi_fw_load_bhi(mhi_cntrl, dma_addr, size);
> -	mhi_free_coherent(mhi_cntrl, size, buf, dma_addr);
> +	dma_free_coherent(mhi_cntrl->cntrl_dev, size, buf, dma_addr);
>  
>  	/* Error or in EDL mode, we're done */
>  	if (ret) {
> diff --git a/drivers/bus/mhi/core/init.c b/drivers/bus/mhi/core/init.c
> index 4446760..c7ba715 100644
> --- a/drivers/bus/mhi/core/init.c
> +++ b/drivers/bus/mhi/core/init.c
> @@ -129,7 +129,7 @@ static int mhi_alloc_aligned_ring(struct mhi_controller *mhi_cntrl,
>  				  u64 len)
>  {
>  	ring->alloc_size = len + (len - 1);
> -	ring->pre_aligned = mhi_alloc_coherent(mhi_cntrl, ring->alloc_size,
> +	ring->pre_aligned = dma_alloc_coherent(mhi_cntrl->cntrl_dev, ring->alloc_size,
>  					       &ring->dma_handle, GFP_KERNEL);
>  	if (!ring->pre_aligned)
>  		return -ENOMEM;
> @@ -221,13 +221,13 @@ void mhi_deinit_dev_ctxt(struct mhi_controller *mhi_cntrl)
>  	mhi_cmd = mhi_cntrl->mhi_cmd;
>  	for (i = 0; i < NR_OF_CMD_RINGS; i++, mhi_cmd++) {
>  		ring = &mhi_cmd->ring;
> -		mhi_free_coherent(mhi_cntrl, ring->alloc_size,
> +		dma_free_coherent(mhi_cntrl->cntrl_dev, ring->alloc_size,
>  				  ring->pre_aligned, ring->dma_handle);
>  		ring->base = NULL;
>  		ring->iommu_base = 0;
>  	}
>  
> -	mhi_free_coherent(mhi_cntrl,
> +	dma_free_coherent(mhi_cntrl->cntrl_dev,
>  			  sizeof(*mhi_ctxt->cmd_ctxt) * NR_OF_CMD_RINGS,
>  			  mhi_ctxt->cmd_ctxt, mhi_ctxt->cmd_ctxt_addr);
>  
> @@ -237,17 +237,17 @@ void mhi_deinit_dev_ctxt(struct mhi_controller *mhi_cntrl)
>  			continue;
>  
>  		ring = &mhi_event->ring;
> -		mhi_free_coherent(mhi_cntrl, ring->alloc_size,
> +		dma_free_coherent(mhi_cntrl->cntrl_dev, ring->alloc_size,
>  				  ring->pre_aligned, ring->dma_handle);
>  		ring->base = NULL;
>  		ring->iommu_base = 0;
>  	}
>  
> -	mhi_free_coherent(mhi_cntrl, sizeof(*mhi_ctxt->er_ctxt) *
> +	dma_free_coherent(mhi_cntrl->cntrl_dev, sizeof(*mhi_ctxt->er_ctxt) *
>  			  mhi_cntrl->total_ev_rings, mhi_ctxt->er_ctxt,
>  			  mhi_ctxt->er_ctxt_addr);
>  
> -	mhi_free_coherent(mhi_cntrl, sizeof(*mhi_ctxt->chan_ctxt) *
> +	dma_free_coherent(mhi_cntrl->cntrl_dev, sizeof(*mhi_ctxt->chan_ctxt) *
>  			  mhi_cntrl->max_chan, mhi_ctxt->chan_ctxt,
>  			  mhi_ctxt->chan_ctxt_addr);
>  
> @@ -275,7 +275,7 @@ int mhi_init_dev_ctxt(struct mhi_controller *mhi_cntrl)
>  		return -ENOMEM;
>  
>  	/* Setup channel ctxt */
> -	mhi_ctxt->chan_ctxt = mhi_alloc_coherent(mhi_cntrl,
> +	mhi_ctxt->chan_ctxt = dma_alloc_coherent(mhi_cntrl->cntrl_dev,
>  						 sizeof(*mhi_ctxt->chan_ctxt) *
>  						 mhi_cntrl->max_chan,
>  						 &mhi_ctxt->chan_ctxt_addr,
> @@ -307,7 +307,7 @@ int mhi_init_dev_ctxt(struct mhi_controller *mhi_cntrl)
>  	}
>  
>  	/* Setup event context */
> -	mhi_ctxt->er_ctxt = mhi_alloc_coherent(mhi_cntrl,
> +	mhi_ctxt->er_ctxt = dma_alloc_coherent(mhi_cntrl->cntrl_dev,
>  					       sizeof(*mhi_ctxt->er_ctxt) *
>  					       mhi_cntrl->total_ev_rings,
>  					       &mhi_ctxt->er_ctxt_addr,
> @@ -354,7 +354,7 @@ int mhi_init_dev_ctxt(struct mhi_controller *mhi_cntrl)
>  
>  	/* Setup cmd context */
>  	ret = -ENOMEM;
> -	mhi_ctxt->cmd_ctxt = mhi_alloc_coherent(mhi_cntrl,
> +	mhi_ctxt->cmd_ctxt = dma_alloc_coherent(mhi_cntrl->cntrl_dev,
>  						sizeof(*mhi_ctxt->cmd_ctxt) *
>  						NR_OF_CMD_RINGS,
>  						&mhi_ctxt->cmd_ctxt_addr,
> @@ -389,10 +389,10 @@ int mhi_init_dev_ctxt(struct mhi_controller *mhi_cntrl)
>  	for (--i, --mhi_cmd; i >= 0; i--, mhi_cmd--) {
>  		struct mhi_ring *ring = &mhi_cmd->ring;
>  
> -		mhi_free_coherent(mhi_cntrl, ring->alloc_size,
> +		dma_free_coherent(mhi_cntrl->cntrl_dev, ring->alloc_size,
>  				  ring->pre_aligned, ring->dma_handle);
>  	}
> -	mhi_free_coherent(mhi_cntrl,
> +	dma_free_coherent(mhi_cntrl->cntrl_dev,
>  			  sizeof(*mhi_ctxt->cmd_ctxt) * NR_OF_CMD_RINGS,
>  			  mhi_ctxt->cmd_ctxt, mhi_ctxt->cmd_ctxt_addr);
>  	i = mhi_cntrl->total_ev_rings;
> @@ -405,15 +405,15 @@ int mhi_init_dev_ctxt(struct mhi_controller *mhi_cntrl)
>  		if (mhi_event->offload_ev)
>  			continue;
>  
> -		mhi_free_coherent(mhi_cntrl, ring->alloc_size,
> +		dma_free_coherent(mhi_cntrl->cntrl_dev, ring->alloc_size,
>  				  ring->pre_aligned, ring->dma_handle);
>  	}
> -	mhi_free_coherent(mhi_cntrl, sizeof(*mhi_ctxt->er_ctxt) *
> +	dma_free_coherent(mhi_cntrl->cntrl_dev, sizeof(*mhi_ctxt->er_ctxt) *
>  			  mhi_cntrl->total_ev_rings, mhi_ctxt->er_ctxt,
>  			  mhi_ctxt->er_ctxt_addr);
>  
>  error_alloc_er_ctxt:
> -	mhi_free_coherent(mhi_cntrl, sizeof(*mhi_ctxt->chan_ctxt) *
> +	dma_free_coherent(mhi_cntrl->cntrl_dev, sizeof(*mhi_ctxt->chan_ctxt) *
>  			  mhi_cntrl->max_chan, mhi_ctxt->chan_ctxt,
>  			  mhi_ctxt->chan_ctxt_addr);
>  
> @@ -567,7 +567,7 @@ void mhi_deinit_chan_ctxt(struct mhi_controller *mhi_cntrl,
>  	if (!chan_ctxt->rbase) /* Already uninitialized */
>  		return;
>  
> -	mhi_free_coherent(mhi_cntrl, tre_ring->alloc_size,
> +	dma_free_coherent(mhi_cntrl->cntrl_dev, tre_ring->alloc_size,
>  			  tre_ring->pre_aligned, tre_ring->dma_handle);
>  	vfree(buf_ring->base);
>  
> @@ -610,7 +610,7 @@ int mhi_init_chan_ctxt(struct mhi_controller *mhi_cntrl,
>  	buf_ring->base = vzalloc(buf_ring->len);
>  
>  	if (!buf_ring->base) {
> -		mhi_free_coherent(mhi_cntrl, tre_ring->alloc_size,
> +		dma_free_coherent(mhi_cntrl->cntrl_dev, tre_ring->alloc_size,
>  				  tre_ring->pre_aligned, tre_ring->dma_handle);
>  		return -ENOMEM;
>  	}
> diff --git a/drivers/bus/mhi/core/internal.h b/drivers/bus/mhi/core/internal.h
> index 672052f..b5594fa 100644
> --- a/drivers/bus/mhi/core/internal.h
> +++ b/drivers/bus/mhi/core/internal.h
> @@ -690,26 +690,6 @@ void mhi_deinit_chan_ctxt(struct mhi_controller *mhi_cntrl,
>  void mhi_reset_chan(struct mhi_controller *mhi_cntrl,
>  		    struct mhi_chan *mhi_chan);
>  
> -/* Memory allocation methods */
> -static inline void *mhi_alloc_coherent(struct mhi_controller *mhi_cntrl,
> -				       size_t size,
> -				       dma_addr_t *dma_handle,
> -				       gfp_t gfp)
> -{
> -	void *buf = dma_alloc_coherent(mhi_cntrl->cntrl_dev, size, dma_handle,
> -				       gfp);
> -
> -	return buf;
> -}
> -
> -static inline void mhi_free_coherent(struct mhi_controller *mhi_cntrl,
> -				     size_t size,
> -				     void *vaddr,
> -				     dma_addr_t dma_handle)
> -{
> -	dma_free_coherent(mhi_cntrl->cntrl_dev, size, vaddr, dma_handle);
> -}
> -
>  /* Event processing methods */
>  void mhi_ctrl_ev_task(unsigned long data);
>  void mhi_ev_task(unsigned long data);
> diff --git a/drivers/bus/mhi/core/main.c b/drivers/bus/mhi/core/main.c
> index 02c8c09..409c68bc 100644
> --- a/drivers/bus/mhi/core/main.c
> +++ b/drivers/bus/mhi/core/main.c
> @@ -193,7 +193,7 @@ int mhi_map_single_no_bb(struct mhi_controller *mhi_cntrl,
>  int mhi_map_single_use_bb(struct mhi_controller *mhi_cntrl,
>  			  struct mhi_buf_info *buf_info)
>  {
> -	void *buf = mhi_alloc_coherent(mhi_cntrl, buf_info->len,
> +	void *buf = dma_alloc_coherent(mhi_cntrl->cntrl_dev, buf_info->len,
>  				       &buf_info->p_addr, GFP_ATOMIC);
>  
>  	if (!buf)
> @@ -220,8 +220,8 @@ void mhi_unmap_single_use_bb(struct mhi_controller *mhi_cntrl,
>  	if (buf_info->dir == DMA_FROM_DEVICE)
>  		memcpy(buf_info->v_addr, buf_info->bb_addr, buf_info->len);
>  
> -	mhi_free_coherent(mhi_cntrl, buf_info->len, buf_info->bb_addr,
> -			  buf_info->p_addr);
> +	dma_free_coherent(mhi_cntrl->cntrl_dev, buf_info->len,
> +			  buf_info->bb_addr, buf_info->p_addr);
>  }
>  
>  static int get_nr_avail_ring_elements(struct mhi_controller *mhi_cntrl,
> -- 
> The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,
> a Linux Foundation Collaborative Project
> 

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2021-07-16 11:54 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-06-22 20:07 [PATCH] bus: mhi: core: Replace DMA allocation wrappers with original APIs Bhaumik Bhatt
2021-07-16 11:52 ` Manivannan Sadhasivam
2021-07-16 11:54 ` Manivannan Sadhasivam

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).