Re: [PATCH 08/15] media: s5p-mfc: Move firmware allocation to DMA configure function

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hello Marek,

On 02/14/2017 04:52 AM, Marek Szyprowski wrote:
> To complete DMA memory configuration for MFC device, allocation of the
> firmware buffer is needed, because some parameters are dependant on its base
> address. Till now, this has been handled in the s5p_mfc_alloc_firmware()
> function. This patch moves that logic to s5p_mfc_configure_dma_memory() to
> keep DMA memory related operations in a single place. This way
> s5p_mfc_alloc_firmware() is simplified and does what it name says. The
> other consequence of this change is moving s5p_mfc_alloc_firmware() call
> from the s5p_mfc_probe() function to the s5p_mfc_configure_dma_memory().
> 
> Signed-off-by: Marek Szyprowski <m.szyprowski@xxxxxxxxxxx>
> ---
>  drivers/media/platform/s5p-mfc/s5p_mfc.c      | 58 +++++++++++++++++++++------
>  drivers/media/platform/s5p-mfc/s5p_mfc_ctrl.c | 31 --------------
>  2 files changed, 45 insertions(+), 44 deletions(-)
> 
> diff --git a/drivers/media/platform/s5p-mfc/s5p_mfc.c b/drivers/media/platform/s5p-mfc/s5p_mfc.c
> index bc1aeb25ebeb..92a88c20b26d 100644
> --- a/drivers/media/platform/s5p-mfc/s5p_mfc.c
> +++ b/drivers/media/platform/s5p-mfc/s5p_mfc.c
> @@ -1110,6 +1110,10 @@ static struct device *s5p_mfc_alloc_memdev(struct device *dev,
>  static int s5p_mfc_configure_dma_memory(struct s5p_mfc_dev *mfc_dev)
>  {
>  	struct device *dev = &mfc_dev->plat_dev->dev;
> +	void *bank2_virt;
> +	dma_addr_t bank2_dma_addr;
> +	unsigned long align_size = 1 << MFC_BASE_ALIGN_ORDER;
> +	struct s5p_mfc_priv_buf *fw_buf = &mfc_dev->fw_buf;
>  
>  	/*
>  	 * When IOMMU is available, we cannot use the default configuration,
> @@ -1122,14 +1126,21 @@ static int s5p_mfc_configure_dma_memory(struct s5p_mfc_dev *mfc_dev)
>  	if (exynos_is_iommu_available(dev)) {
>  		int ret = exynos_configure_iommu(dev, S5P_MFC_IOMMU_DMA_BASE,
>  						 S5P_MFC_IOMMU_DMA_SIZE);
> -		if (ret == 0) {
> -			mfc_dev->mem_dev[BANK1_CTX] =
> -				mfc_dev->mem_dev[BANK2_CTX] = dev;
> -			vb2_dma_contig_set_max_seg_size(dev,
> -							DMA_BIT_MASK(32));
> +		if (ret)
> +			return ret;
> +
> +		mfc_dev->mem_dev[BANK1_CTX] = mfc_dev->mem_dev[BANK2_CTX] = dev;
> +		ret = s5p_mfc_alloc_firmware(mfc_dev);
> +		if (ret) {
> +			exynos_unconfigure_iommu(dev);
> +			return ret;
>  		}
>  
> -		return ret;
> +		mfc_dev->dma_base[BANK1_CTX] = mfc_dev->fw_buf.dma;
> +		mfc_dev->dma_base[BANK2_CTX] = mfc_dev->fw_buf.dma;

I guess you meant to use fw_buf->dma here? Since otherwise the fw_buf
variable won't be used.

> +		vb2_dma_contig_set_max_seg_size(dev, DMA_BIT_MASK(32));
> +
> +		return 0;
>  	}
>  
>  	/*
> @@ -1147,6 +1158,32 @@ static int s5p_mfc_configure_dma_memory(struct s5p_mfc_dev *mfc_dev)
>  		return -ENODEV;
>  	}
>  
> +	/* Allocate memory for firmware and initialize both banks addresses */
> +	ret = s5p_mfc_alloc_firmware(mfc_dev);
> +	if (ret)

Shouldn't you have to unregister both banks devices here in the error path?

Also, ret is not declared so this patch will cause a compile error, breaking
git bisect-ability.

> +		return ret;
> +
> +	mfc_dev->dma_base[BANK1_CTX] = mfc_dev->fw_buf.dma;

Same comment than before, probably you wanted to use fw_buf->dma here?

The rest of the patch looks good to me. 

Best regards,
-- 
Javier Martinez Canillas
Open Source Group
Samsung Research America



[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]
  Powered by Linux