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