diff mbox

[v2,02/19] media: omap3isp: allow it to build with COMPILE_TEST

Message ID f618981fec34acc5eee211b34a0018752634af9c.1522959716.git.mchehab@s-opensource.com (mailing list archive)
State New, archived
Headers show

Commit Message

Mauro Carvalho Chehab April 5, 2018, 8:29 p.m. UTC
There aren't much things required for it to build with COMPILE_TEST.
It just needs to provide stub for an arm-dependent include.

Let's replicate the same solution used by ipmmu-vmsa, in order
to allow building omap3 with COMPILE_TEST.

The actual logic here came from this driver:

   drivers/iommu/ipmmu-vmsa.c

Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
---
 drivers/media/platform/Kconfig        | 8 ++++----
 drivers/media/platform/omap3isp/isp.c | 7 +++++++
 2 files changed, 11 insertions(+), 4 deletions(-)

Comments

kernel test robot April 6, 2018, 12:56 p.m. UTC | #1
Hi Mauro,

I love your patch! Perhaps something to improve:

[auto build test WARNING on linuxtv-media/master]
[also build test WARNING on v4.16 next-20180406]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]

url:    https://github.com/0day-ci/linux/commits/Mauro-Carvalho-Chehab/Make-all-media-drivers-build-with-COMPILE_TEST/20180406-163048
base:   git://linuxtv.org/media_tree.git master
config: x86_64-allmodconfig (attached as .config)
compiler: gcc-7 (Debian 7.3.0-1) 7.3.0
reproduce:
        # save the attached .config to linux build tree
        make ARCH=x86_64 

All warnings (new ones prefixed by >>):

   drivers/media//platform/omap3isp/ispccdc.c: In function 'ccdc_config':
>> drivers/media//platform/omap3isp/ispccdc.c:738:9: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
            (__force void __user *)fpc.fpcaddr,
            ^

sparse warnings: (new ones prefixed by >>)

>> drivers/media/platform/omap3isp/isppreview.c:893:45: sparse: incorrect type in initializer (different address spaces) @@    expected void [noderef] <asn:1>*from @@    got void [noderef] <asn:1>*from @@
   drivers/media/platform/omap3isp/isppreview.c:893:45:    expected void [noderef] <asn:1>*from
   drivers/media/platform/omap3isp/isppreview.c:893:45:    got void *[noderef] <asn:1><noident>
>> drivers/media/platform/omap3isp/isppreview.c:893:47: sparse: dereference of noderef expression

vim +738 drivers/media//platform/omap3isp/ispccdc.c

de1135d4 drivers/media/video/omap3isp/ispccdc.c    Laurent Pinchart 2011-02-12  656  
de1135d4 drivers/media/video/omap3isp/ispccdc.c    Laurent Pinchart 2011-02-12  657  /*
de1135d4 drivers/media/video/omap3isp/ispccdc.c    Laurent Pinchart 2011-02-12  658   * ccdc_config - Set CCDC configuration from userspace
de1135d4 drivers/media/video/omap3isp/ispccdc.c    Laurent Pinchart 2011-02-12  659   * @ccdc: Pointer to ISP CCDC device.
872aba51 drivers/media/platform/omap3isp/ispccdc.c Lad, Prabhakar   2014-02-21  660   * @ccdc_struct: Structure containing CCDC configuration sent from userspace.
de1135d4 drivers/media/video/omap3isp/ispccdc.c    Laurent Pinchart 2011-02-12  661   *
de1135d4 drivers/media/video/omap3isp/ispccdc.c    Laurent Pinchart 2011-02-12  662   * Returns 0 if successful, -EINVAL if the pointer to the configuration
de1135d4 drivers/media/video/omap3isp/ispccdc.c    Laurent Pinchart 2011-02-12  663   * structure is null, or the copy_from_user function fails to copy user space
de1135d4 drivers/media/video/omap3isp/ispccdc.c    Laurent Pinchart 2011-02-12  664   * memory to kernel space memory.
de1135d4 drivers/media/video/omap3isp/ispccdc.c    Laurent Pinchart 2011-02-12  665   */
de1135d4 drivers/media/video/omap3isp/ispccdc.c    Laurent Pinchart 2011-02-12  666  static int ccdc_config(struct isp_ccdc_device *ccdc,
de1135d4 drivers/media/video/omap3isp/ispccdc.c    Laurent Pinchart 2011-02-12  667  		       struct omap3isp_ccdc_update_config *ccdc_struct)
de1135d4 drivers/media/video/omap3isp/ispccdc.c    Laurent Pinchart 2011-02-12  668  {
de1135d4 drivers/media/video/omap3isp/ispccdc.c    Laurent Pinchart 2011-02-12  669  	struct isp_device *isp = to_isp_device(ccdc);
de1135d4 drivers/media/video/omap3isp/ispccdc.c    Laurent Pinchart 2011-02-12  670  	unsigned long flags;
de1135d4 drivers/media/video/omap3isp/ispccdc.c    Laurent Pinchart 2011-02-12  671  
de1135d4 drivers/media/video/omap3isp/ispccdc.c    Laurent Pinchart 2011-02-12  672  	spin_lock_irqsave(&ccdc->lock, flags);
de1135d4 drivers/media/video/omap3isp/ispccdc.c    Laurent Pinchart 2011-02-12  673  	ccdc->shadow_update = 1;
de1135d4 drivers/media/video/omap3isp/ispccdc.c    Laurent Pinchart 2011-02-12  674  	spin_unlock_irqrestore(&ccdc->lock, flags);
de1135d4 drivers/media/video/omap3isp/ispccdc.c    Laurent Pinchart 2011-02-12  675  
de1135d4 drivers/media/video/omap3isp/ispccdc.c    Laurent Pinchart 2011-02-12  676  	if (OMAP3ISP_CCDC_ALAW & ccdc_struct->update) {
de1135d4 drivers/media/video/omap3isp/ispccdc.c    Laurent Pinchart 2011-02-12  677  		ccdc->alaw = !!(OMAP3ISP_CCDC_ALAW & ccdc_struct->flag);
de1135d4 drivers/media/video/omap3isp/ispccdc.c    Laurent Pinchart 2011-02-12  678  		ccdc->update |= OMAP3ISP_CCDC_ALAW;
de1135d4 drivers/media/video/omap3isp/ispccdc.c    Laurent Pinchart 2011-02-12  679  	}
de1135d4 drivers/media/video/omap3isp/ispccdc.c    Laurent Pinchart 2011-02-12  680  
de1135d4 drivers/media/video/omap3isp/ispccdc.c    Laurent Pinchart 2011-02-12  681  	if (OMAP3ISP_CCDC_LPF & ccdc_struct->update) {
de1135d4 drivers/media/video/omap3isp/ispccdc.c    Laurent Pinchart 2011-02-12  682  		ccdc->lpf = !!(OMAP3ISP_CCDC_LPF & ccdc_struct->flag);
de1135d4 drivers/media/video/omap3isp/ispccdc.c    Laurent Pinchart 2011-02-12  683  		ccdc->update |= OMAP3ISP_CCDC_LPF;
de1135d4 drivers/media/video/omap3isp/ispccdc.c    Laurent Pinchart 2011-02-12  684  	}
de1135d4 drivers/media/video/omap3isp/ispccdc.c    Laurent Pinchart 2011-02-12  685  
de1135d4 drivers/media/video/omap3isp/ispccdc.c    Laurent Pinchart 2011-02-12  686  	if (OMAP3ISP_CCDC_BLCLAMP & ccdc_struct->update) {
de1135d4 drivers/media/video/omap3isp/ispccdc.c    Laurent Pinchart 2011-02-12  687  		if (copy_from_user(&ccdc->clamp, ccdc_struct->bclamp,
de1135d4 drivers/media/video/omap3isp/ispccdc.c    Laurent Pinchart 2011-02-12  688  				   sizeof(ccdc->clamp))) {
de1135d4 drivers/media/video/omap3isp/ispccdc.c    Laurent Pinchart 2011-02-12  689  			ccdc->shadow_update = 0;
de1135d4 drivers/media/video/omap3isp/ispccdc.c    Laurent Pinchart 2011-02-12  690  			return -EFAULT;
de1135d4 drivers/media/video/omap3isp/ispccdc.c    Laurent Pinchart 2011-02-12  691  		}
de1135d4 drivers/media/video/omap3isp/ispccdc.c    Laurent Pinchart 2011-02-12  692  
de1135d4 drivers/media/video/omap3isp/ispccdc.c    Laurent Pinchart 2011-02-12  693  		ccdc->obclamp = !!(OMAP3ISP_CCDC_BLCLAMP & ccdc_struct->flag);
de1135d4 drivers/media/video/omap3isp/ispccdc.c    Laurent Pinchart 2011-02-12  694  		ccdc->update |= OMAP3ISP_CCDC_BLCLAMP;
de1135d4 drivers/media/video/omap3isp/ispccdc.c    Laurent Pinchart 2011-02-12  695  	}
de1135d4 drivers/media/video/omap3isp/ispccdc.c    Laurent Pinchart 2011-02-12  696  
de1135d4 drivers/media/video/omap3isp/ispccdc.c    Laurent Pinchart 2011-02-12  697  	if (OMAP3ISP_CCDC_BCOMP & ccdc_struct->update) {
de1135d4 drivers/media/video/omap3isp/ispccdc.c    Laurent Pinchart 2011-02-12  698  		if (copy_from_user(&ccdc->blcomp, ccdc_struct->blcomp,
de1135d4 drivers/media/video/omap3isp/ispccdc.c    Laurent Pinchart 2011-02-12  699  				   sizeof(ccdc->blcomp))) {
de1135d4 drivers/media/video/omap3isp/ispccdc.c    Laurent Pinchart 2011-02-12  700  			ccdc->shadow_update = 0;
de1135d4 drivers/media/video/omap3isp/ispccdc.c    Laurent Pinchart 2011-02-12  701  			return -EFAULT;
de1135d4 drivers/media/video/omap3isp/ispccdc.c    Laurent Pinchart 2011-02-12  702  		}
de1135d4 drivers/media/video/omap3isp/ispccdc.c    Laurent Pinchart 2011-02-12  703  
de1135d4 drivers/media/video/omap3isp/ispccdc.c    Laurent Pinchart 2011-02-12  704  		ccdc->update |= OMAP3ISP_CCDC_BCOMP;
de1135d4 drivers/media/video/omap3isp/ispccdc.c    Laurent Pinchart 2011-02-12  705  	}
de1135d4 drivers/media/video/omap3isp/ispccdc.c    Laurent Pinchart 2011-02-12  706  
de1135d4 drivers/media/video/omap3isp/ispccdc.c    Laurent Pinchart 2011-02-12  707  	ccdc->shadow_update = 0;
de1135d4 drivers/media/video/omap3isp/ispccdc.c    Laurent Pinchart 2011-02-12  708  
de1135d4 drivers/media/video/omap3isp/ispccdc.c    Laurent Pinchart 2011-02-12  709  	if (OMAP3ISP_CCDC_FPC & ccdc_struct->update) {
c60e153d drivers/media/platform/omap3isp/ispccdc.c Laurent Pinchart 2014-01-02  710  		struct omap3isp_ccdc_fpc fpc;
c60e153d drivers/media/platform/omap3isp/ispccdc.c Laurent Pinchart 2014-01-02  711  		struct ispccdc_fpc fpc_old = { .addr = NULL, };
c60e153d drivers/media/platform/omap3isp/ispccdc.c Laurent Pinchart 2014-01-02  712  		struct ispccdc_fpc fpc_new;
de1135d4 drivers/media/video/omap3isp/ispccdc.c    Laurent Pinchart 2011-02-12  713  		u32 size;
de1135d4 drivers/media/video/omap3isp/ispccdc.c    Laurent Pinchart 2011-02-12  714  
de1135d4 drivers/media/video/omap3isp/ispccdc.c    Laurent Pinchart 2011-02-12  715  		if (ccdc->state != ISP_PIPELINE_STREAM_STOPPED)
de1135d4 drivers/media/video/omap3isp/ispccdc.c    Laurent Pinchart 2011-02-12  716  			return -EBUSY;
de1135d4 drivers/media/video/omap3isp/ispccdc.c    Laurent Pinchart 2011-02-12  717  
de1135d4 drivers/media/video/omap3isp/ispccdc.c    Laurent Pinchart 2011-02-12  718  		ccdc->fpc_en = !!(OMAP3ISP_CCDC_FPC & ccdc_struct->flag);
de1135d4 drivers/media/video/omap3isp/ispccdc.c    Laurent Pinchart 2011-02-12  719  
de1135d4 drivers/media/video/omap3isp/ispccdc.c    Laurent Pinchart 2011-02-12  720  		if (ccdc->fpc_en) {
c60e153d drivers/media/platform/omap3isp/ispccdc.c Laurent Pinchart 2014-01-02  721  			if (copy_from_user(&fpc, ccdc_struct->fpc, sizeof(fpc)))
de1135d4 drivers/media/video/omap3isp/ispccdc.c    Laurent Pinchart 2011-02-12  722  				return -EFAULT;
de1135d4 drivers/media/video/omap3isp/ispccdc.c    Laurent Pinchart 2011-02-12  723  
c60e153d drivers/media/platform/omap3isp/ispccdc.c Laurent Pinchart 2014-01-02  724  			size = fpc.fpnum * 4;
c60e153d drivers/media/platform/omap3isp/ispccdc.c Laurent Pinchart 2014-01-02  725  
de1135d4 drivers/media/video/omap3isp/ispccdc.c    Laurent Pinchart 2011-02-12  726  			/*
c60e153d drivers/media/platform/omap3isp/ispccdc.c Laurent Pinchart 2014-01-02  727  			 * The table address must be 64-bytes aligned, which is
c60e153d drivers/media/platform/omap3isp/ispccdc.c Laurent Pinchart 2014-01-02  728  			 * guaranteed by dma_alloc_coherent().
de1135d4 drivers/media/video/omap3isp/ispccdc.c    Laurent Pinchart 2011-02-12  729  			 */
c60e153d drivers/media/platform/omap3isp/ispccdc.c Laurent Pinchart 2014-01-02  730  			fpc_new.fpnum = fpc.fpnum;
c60e153d drivers/media/platform/omap3isp/ispccdc.c Laurent Pinchart 2014-01-02  731  			fpc_new.addr = dma_alloc_coherent(isp->dev, size,
c60e153d drivers/media/platform/omap3isp/ispccdc.c Laurent Pinchart 2014-01-02  732  							  &fpc_new.dma,
c60e153d drivers/media/platform/omap3isp/ispccdc.c Laurent Pinchart 2014-01-02  733  							  GFP_KERNEL);
c60e153d drivers/media/platform/omap3isp/ispccdc.c Laurent Pinchart 2014-01-02  734  			if (fpc_new.addr == NULL)
de1135d4 drivers/media/video/omap3isp/ispccdc.c    Laurent Pinchart 2011-02-12  735  				return -ENOMEM;
de1135d4 drivers/media/video/omap3isp/ispccdc.c    Laurent Pinchart 2011-02-12  736  
c60e153d drivers/media/platform/omap3isp/ispccdc.c Laurent Pinchart 2014-01-02  737  			if (copy_from_user(fpc_new.addr,
c60e153d drivers/media/platform/omap3isp/ispccdc.c Laurent Pinchart 2014-01-02 @738  					   (__force void __user *)fpc.fpcaddr,
c60e153d drivers/media/platform/omap3isp/ispccdc.c Laurent Pinchart 2014-01-02  739  					   size)) {
c60e153d drivers/media/platform/omap3isp/ispccdc.c Laurent Pinchart 2014-01-02  740  				dma_free_coherent(isp->dev, size, fpc_new.addr,
c60e153d drivers/media/platform/omap3isp/ispccdc.c Laurent Pinchart 2014-01-02  741  						  fpc_new.dma);
de1135d4 drivers/media/video/omap3isp/ispccdc.c    Laurent Pinchart 2011-02-12  742  				return -EFAULT;
de1135d4 drivers/media/video/omap3isp/ispccdc.c    Laurent Pinchart 2011-02-12  743  			}
de1135d4 drivers/media/video/omap3isp/ispccdc.c    Laurent Pinchart 2011-02-12  744  
c60e153d drivers/media/platform/omap3isp/ispccdc.c Laurent Pinchart 2014-01-02  745  			fpc_old = ccdc->fpc;
c60e153d drivers/media/platform/omap3isp/ispccdc.c Laurent Pinchart 2014-01-02  746  			ccdc->fpc = fpc_new;
de1135d4 drivers/media/video/omap3isp/ispccdc.c    Laurent Pinchart 2011-02-12  747  		}
de1135d4 drivers/media/video/omap3isp/ispccdc.c    Laurent Pinchart 2011-02-12  748  
de1135d4 drivers/media/video/omap3isp/ispccdc.c    Laurent Pinchart 2011-02-12  749  		ccdc_configure_fpc(ccdc);
c60e153d drivers/media/platform/omap3isp/ispccdc.c Laurent Pinchart 2014-01-02  750  
c60e153d drivers/media/platform/omap3isp/ispccdc.c Laurent Pinchart 2014-01-02  751  		if (fpc_old.addr != NULL)
c60e153d drivers/media/platform/omap3isp/ispccdc.c Laurent Pinchart 2014-01-02  752  			dma_free_coherent(isp->dev, fpc_old.fpnum * 4,
c60e153d drivers/media/platform/omap3isp/ispccdc.c Laurent Pinchart 2014-01-02  753  					  fpc_old.addr, fpc_old.dma);
de1135d4 drivers/media/video/omap3isp/ispccdc.c    Laurent Pinchart 2011-02-12  754  	}
de1135d4 drivers/media/video/omap3isp/ispccdc.c    Laurent Pinchart 2011-02-12  755  
de1135d4 drivers/media/video/omap3isp/ispccdc.c    Laurent Pinchart 2011-02-12  756  	return ccdc_lsc_config(ccdc, ccdc_struct);
de1135d4 drivers/media/video/omap3isp/ispccdc.c    Laurent Pinchart 2011-02-12  757  }
de1135d4 drivers/media/video/omap3isp/ispccdc.c    Laurent Pinchart 2011-02-12  758  

:::::: The code at line 738 was first introduced by commit
:::::: c60e153d3407b5a94b72ebfcf274fae98979eed9 [media] omap3isp: ccdc: Use the DMA API for FPC

:::::: TO: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
:::::: CC: Mauro Carvalho Chehab <m.chehab@samsung.com>

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation
Laurent Pinchart April 7, 2018, 1:31 p.m. UTC | #2
Hi Mauro,

Thank you for the patch.

On Thursday, 5 April 2018 23:29:29 EEST Mauro Carvalho Chehab wrote:
> There aren't much things required for it to build with COMPILE_TEST.
> It just needs to provide stub for an arm-dependent include.
> 
> Let's replicate the same solution used by ipmmu-vmsa, in order
> to allow building omap3 with COMPILE_TEST.
> 
> The actual logic here came from this driver:
> 
>    drivers/iommu/ipmmu-vmsa.c
> 
> Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
> ---
>  drivers/media/platform/Kconfig        | 8 ++++----
>  drivers/media/platform/omap3isp/isp.c | 7 +++++++
>  2 files changed, 11 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/media/platform/Kconfig b/drivers/media/platform/Kconfig
> index c7a1cf8a1b01..03c9dfeb7781 100644
> --- a/drivers/media/platform/Kconfig
> +++ b/drivers/media/platform/Kconfig
> @@ -62,12 +62,12 @@ config VIDEO_MUX
> 
>  config VIDEO_OMAP3
>  	tristate "OMAP 3 Camera support"
> -	depends on VIDEO_V4L2 && I2C && VIDEO_V4L2_SUBDEV_API && ARCH_OMAP3
> +	depends on VIDEO_V4L2 && I2C && VIDEO_V4L2_SUBDEV_API
>  	depends on HAS_DMA && OF
> -	depends on OMAP_IOMMU
> -	select ARM_DMA_USE_IOMMU
> +	depends on ((ARCH_OMAP3 && OMAP_IOMMU) || COMPILE_TEST)
> +	select ARM_DMA_USE_IOMMU if OMAP_IOMMU
>  	select VIDEOBUF2_DMA_CONTIG
> -	select MFD_SYSCON
> +	select MFD_SYSCON if ARCH_OMAP3

Is this needed ? Can't MFD_SYSCON be selected on non-ARM platforms ?

>  	select V4L2_FWNODE
>  	---help---
>  	  Driver for an OMAP 3 camera controller.
> diff --git a/drivers/media/platform/omap3isp/isp.c
> b/drivers/media/platform/omap3isp/isp.c index 8eb000e3d8fd..2a11a709aa4f
> 100644
> --- a/drivers/media/platform/omap3isp/isp.c
> +++ b/drivers/media/platform/omap3isp/isp.c
> @@ -61,7 +61,14 @@
>  #include <linux/sched.h>
>  #include <linux/vmalloc.h>
> 
> +#if defined(CONFIG_ARM) && !defined(CONFIG_IOMMU_DMA)
>  #include <asm/dma-iommu.h>
> +#else
> +#define arm_iommu_create_mapping(...)	NULL
> +#define arm_iommu_attach_device(...)	-ENODEV
> +#define arm_iommu_release_mapping(...)	do {} while (0)
> +#define arm_iommu_detach_device(...)	do {} while (0)
> +#endif
> 
>  #include <media/v4l2-common.h>
>  #include <media/v4l2-fwnode.h>

As just commented on in a reply to v1 I still don't think this is a proper 
solution. I'm all for extending compile-test coverage, but I don't believe we 
need to make all drivers compile on every platform. ARM is certainly a 
mainstream-enough platform nowadays to be worth having the media tree compiled 
for.
diff mbox

Patch

diff --git a/drivers/media/platform/Kconfig b/drivers/media/platform/Kconfig
index c7a1cf8a1b01..03c9dfeb7781 100644
--- a/drivers/media/platform/Kconfig
+++ b/drivers/media/platform/Kconfig
@@ -62,12 +62,12 @@  config VIDEO_MUX
 
 config VIDEO_OMAP3
 	tristate "OMAP 3 Camera support"
-	depends on VIDEO_V4L2 && I2C && VIDEO_V4L2_SUBDEV_API && ARCH_OMAP3
+	depends on VIDEO_V4L2 && I2C && VIDEO_V4L2_SUBDEV_API
 	depends on HAS_DMA && OF
-	depends on OMAP_IOMMU
-	select ARM_DMA_USE_IOMMU
+	depends on ((ARCH_OMAP3 && OMAP_IOMMU) || COMPILE_TEST)
+	select ARM_DMA_USE_IOMMU if OMAP_IOMMU
 	select VIDEOBUF2_DMA_CONTIG
-	select MFD_SYSCON
+	select MFD_SYSCON if ARCH_OMAP3
 	select V4L2_FWNODE
 	---help---
 	  Driver for an OMAP 3 camera controller.
diff --git a/drivers/media/platform/omap3isp/isp.c b/drivers/media/platform/omap3isp/isp.c
index 8eb000e3d8fd..2a11a709aa4f 100644
--- a/drivers/media/platform/omap3isp/isp.c
+++ b/drivers/media/platform/omap3isp/isp.c
@@ -61,7 +61,14 @@ 
 #include <linux/sched.h>
 #include <linux/vmalloc.h>
 
+#if defined(CONFIG_ARM) && !defined(CONFIG_IOMMU_DMA)
 #include <asm/dma-iommu.h>
+#else
+#define arm_iommu_create_mapping(...)	NULL
+#define arm_iommu_attach_device(...)	-ENODEV
+#define arm_iommu_release_mapping(...)	do {} while (0)
+#define arm_iommu_detach_device(...)	do {} while (0)
+#endif
 
 #include <media/v4l2-common.h>
 #include <media/v4l2-fwnode.h>