Hi Jacopo,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on linus/master]
[also build test WARNING on v4.15-rc8]
[cannot apply to linuxtv-media/master next-20180119]
[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/Jacopo-Mondi/Renesas-Capture-Engine-Unit-CEU-V4L2-driver/20180120-053007
config: ia64-allmodconfig (attached as .config)
compiler: ia64-linux-gcc (GCC) 7.2.0
reproduce:
        wget 
https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O 
~/bin/make.cross
        chmod +x ~/bin/make.cross
        # save the attached .config to linux build tree
        make.cross ARCH=ia64 

Note: it may well be a FALSE warning. FWIW you are at least aware of it now.
http://gcc.gnu.org/wiki/Better_Uninitialized_Warnings

All warnings (new ones prefixed by >>):

   drivers/media/platform/renesas-ceu.c: In function 'ceu_start_streaming':
>> drivers/media/platform/renesas-ceu.c:287:2: warning: 'cdwdr' may be used 
>> uninitialized in this function [-Wmaybe-uninitialized]
     iowrite32(data, priv->base + reg_offs);
     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/media/platform/renesas-ceu.c:335:27: note: 'cdwdr' was declared here
     u32 camcr, cdocr, cfzsr, cdwdr, capwr;
                              ^~~~~
>> drivers/media/platform/renesas-ceu.c:287:2: warning: 'cfzsr' may be used 
>> uninitialized in this function [-Wmaybe-uninitialized]
     iowrite32(data, priv->base + reg_offs);
     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/media/platform/renesas-ceu.c:335:20: note: 'cfzsr' was declared here
     u32 camcr, cdocr, cfzsr, cdwdr, capwr;
                       ^~~~~
>> drivers/media/platform/renesas-ceu.c:415:8: warning: 'camcr' may be used 
>> uninitialized in this function [-Wmaybe-uninitialized]
     camcr |= mbus_flags & V4L2_MBUS_HSYNC_ACTIVE_LOW ? 1 << 0 : 0;
     ~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/media/platform/renesas-ceu.c:335:6: note: 'camcr' was declared here
     u32 camcr, cdocr, cfzsr, cdwdr, capwr;
         ^~~~~
   drivers/media/platform/renesas-ceu.c: In function 'ceu_probe':
>> drivers/media/platform/renesas-ceu.c:1621:9: warning: 'ret' may be used 
>> uninitialized in this function [-Wmaybe-uninitialized]
     return ret;
            ^~~

vim +/cdwdr +287 drivers/media/platform/renesas-ceu.c

   284  
   285  static void ceu_write(struct ceu_device *priv, unsigned int reg_offs, 
u32 data)
   286  {
 > 287          iowrite32(data, priv->base + reg_offs);
   288  }
   289  
   290  static u32 ceu_read(struct ceu_device *priv, unsigned int reg_offs)
   291  {
   292          return ioread32(priv->base + reg_offs);
   293  }
   294  
   295  /*
   296   * ceu_soft_reset() - Software reset the CEU interface.
   297   * @ceu_device: CEU device.
   298   *
   299   * Returns 0 for success, -EIO for error.
   300   */
   301  static int ceu_soft_reset(struct ceu_device *ceudev)
   302  {
   303          unsigned int i;
   304  
   305          ceu_write(ceudev, CEU_CAPSR, CEU_CAPSR_CPKIL);
   306  
   307          for (i = 0; i < 100; i++) {
   308                  if (!(ceu_read(ceudev, CEU_CSTSR) & CEU_CSTRST_CPTON))
   309                          break;
   310                  udelay(1);
   311          }
   312  
   313          if (i == 100) {
   314                  dev_err(ceudev->dev, "soft reset time out\n");
   315                  return -EIO;
   316          }
   317  
   318          for (i = 0; i < 100; i++) {
   319                  if (!(ceu_read(ceudev, CEU_CAPSR) & CEU_CAPSR_CPKIL))
   320                          return 0;
   321                  udelay(1);
   322          }
   323  
   324          /* If we get here, CEU has not reset properly. */
   325          return -EIO;
   326  }
   327  
   328  /* --- CEU Capture Operations --- */
   329  
   330  /*
   331   * ceu_hw_config() - Configure CEU interface registers.
   332   */
   333  static int ceu_hw_config(struct ceu_device *ceudev)
   334  {
 > 335          u32 camcr, cdocr, cfzsr, cdwdr, capwr;
   336          struct v4l2_pix_format_mplane *pix = &ceudev->v4l2_pix;
   337          struct ceu_subdev *ceu_sd = ceudev->sd;
   338          struct ceu_mbus_fmt *mbus_fmt = &ceu_sd->mbus_fmt;
   339          unsigned int mbus_flags = ceu_sd->mbus_flags;
   340  
   341          /* Start configuring CEU registers */
   342          ceu_write(ceudev, CEU_CAIFR, 0);
   343          ceu_write(ceudev, CEU_CFWCR, 0);
   344          ceu_write(ceudev, CEU_CRCNTR, 0);
   345          ceu_write(ceudev, CEU_CRCMPR, 0);
   346  
   347          /* Set the frame capture period for both image capture and data 
sync. */
   348          capwr = (pix->height << 16) | pix->width * mbus_fmt->bpp / 8;
   349  
   350          /*
   351           * Swap input data endianness by default.
   352           * In data fetch mode bytes are received in chunks of 8 bytes.
   353           * D0, D1, D2, D3, D4, D5, D6, D7 (D0 received first)
   354           * The data is however by default written to memory in reverse 
order:
   355           * D7, D6, D5, D4, D3, D2, D1, D0 (D7 written to lowest byte)
   356           *
   357           * Use CEU_CDOCR[2:0] to swap data ordering.
   358           */
   359          cdocr = CEU_CDOCR_SWAP_ENDIANNESS;
   360  
   361          /*
   362           * Configure CAMCR and CDOCR:
   363           * match input components ordering with memory output format and
   364           * handle downsampling to YUV420.
   365           *
   366           * If the memory output planar format is 'swapped' (Cr before 
Cb) and
   367           * input format is not, use the swapped version of CAMCR.DTARY.
   368           *
   369           * If the memory output planar format is not 'swapped' (Cb 
before Cr)
   370           * and input format is, use the swapped version of CAMCR.DTARY.
   371           *
   372           * CEU by default downsample to planar YUV420 (CDCOR[4] = 0).
   373           * If output is planar YUV422 set CDOCR[4] = 1
   374           *
   375           * No downsample for data fetch sync mode.
   376           */
   377          switch (pix->pixelformat) {
   378          /* Data fetch sync mode */
   379          case V4L2_PIX_FMT_YUYV:
   380                  /* TODO: handle YUYV permutations through DTARY bits. */
   381                  camcr   = CEU_CAMCR_JPEG;
   382                  cdocr   |= CEU_CDOCR_NO_DOWSAMPLE;
   383                  cfzsr   = (pix->height << 16) | pix->width;
   384                  cdwdr   = pix->plane_fmt[0].bytesperline;
   385                  break;
   386  
   387          /* Non-swapped planar image capture mode. */
   388          case V4L2_PIX_FMT_NV16:
   389                  cdocr   |= CEU_CDOCR_NO_DOWSAMPLE;
   390          case V4L2_PIX_FMT_NV12:
   391                  if (mbus_fmt->swapped)
   392                          camcr = mbus_fmt->fmt_order_swap;
   393                  else
   394                          camcr = mbus_fmt->fmt_order;
   395  
   396                  cfzsr   = (pix->height << 16) | pix->width;
   397                  cdwdr   = pix->width;
   398                  break;
   399  
   400          /* Swapped planar image capture mode. */
   401          case V4L2_PIX_FMT_NV61:
   402                  cdocr   |= CEU_CDOCR_NO_DOWSAMPLE;
   403          case V4L2_PIX_FMT_NV21:
   404                  if (mbus_fmt->swapped)
   405                          camcr = mbus_fmt->fmt_order;
   406                  else
   407                          camcr = mbus_fmt->fmt_order_swap;
   408  
   409                  cfzsr   = (pix->height << 16) | pix->width;
   410                  cdwdr   = pix->width;
   411                  break;
   412          }
   413  
   414          camcr |= mbus_flags & V4L2_MBUS_VSYNC_ACTIVE_LOW ? 1 << 1 : 0;
 > 415          camcr |= mbus_flags & V4L2_MBUS_HSYNC_ACTIVE_LOW ? 1 << 0 : 0;
   416  
   417          /* TODO: handle 16 bit bus width with DTIF bit in CAMCR */
   418          ceu_write(ceudev, CEU_CAMCR, camcr);
   419          ceu_write(ceudev, CEU_CDOCR, cdocr);
   420          ceu_write(ceudev, CEU_CAPCR, CEU_CAPCR_BUS_WIDTH256);
   421  
   422          /*
   423           * TODO: make CAMOR offsets configurable.
   424           * CAMOR wants to know the number of blanks between a VS/HS 
signal
   425           * and valid data. This value should actually come from the 
sensor...
   426           */
   427          ceu_write(ceudev, CEU_CAMOR, 0);
   428  
   429          /* TODO: 16 bit bus width require re-calculation of cdwdr and 
cfzsr */
   430          ceu_write(ceudev, CEU_CAPWR, capwr);
   431          ceu_write(ceudev, CEU_CFSZR, cfzsr);
   432          ceu_write(ceudev, CEU_CDWDR, cdwdr);
   433  
   434          return 0;
   435  }
   436  

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation

Attachment: .config.gz
Description: application/gzip

Reply via email to