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.szyprow...@samsung.com>
> ---
>  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

Reply via email to