* [chrome-os:chromeos-6.1 18091/19418] drivers/gpu/drm/imx/lcdc/imx-lcdc.c:411:16: warning: assignment to 'struct drm_bridge *' from 'int' makes pointer from integer without a cast
@ 2023-11-02 10:13 kernel test robot
0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2023-11-02 10:13 UTC (permalink / raw)
To: cros-kernel-buildreports, Guenter Roeck; +Cc: oe-kbuild-all
tree: https://chromium.googlesource.com/chromiumos/third_party/kernel chromeos-6.1
head: 81f313361d7769059e5670bf82e47619d64e73c0
commit: 7f9a27710bf93d2ea46419283a1d272b355356b1 [18091/19418] UPSTREAM: drm/imx/lcdc: Implement DRM driver for imx25
config: xtensa-randconfig-002-20231102 (https://download.01.org/0day-ci/archive/20231102/202311021804.KXd3e8Sy-lkp@intel.com/config)
compiler: xtensa-linux-gcc (GCC) 13.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20231102/202311021804.KXd3e8Sy-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202311021804.KXd3e8Sy-lkp@intel.com/
All warnings (new ones prefixed by >>):
drivers/gpu/drm/imx/lcdc/imx-lcdc.c: In function 'imx_lcdc_probe':
drivers/gpu/drm/imx/lcdc/imx-lcdc.c:411:18: error: implicit declaration of function 'devm_drm_of_get_bridge' [-Werror=implicit-function-declaration]
411 | bridge = devm_drm_of_get_bridge(dev, dev->of_node, 0, 0);
| ^~~~~~~~~~~~~~~~~~~~~~
>> drivers/gpu/drm/imx/lcdc/imx-lcdc.c:411:16: warning: assignment to 'struct drm_bridge *' from 'int' makes pointer from integer without a cast [-Wint-conversion]
411 | bridge = devm_drm_of_get_bridge(dev, dev->of_node, 0, 0);
| ^
drivers/gpu/drm/imx/lcdc/imx-lcdc.c:449:15: error: implicit declaration of function 'drm_bridge_attach' [-Werror=implicit-function-declaration]
449 | ret = drm_bridge_attach(&lcdc->pipe.encoder, bridge, NULL, DRM_BRIDGE_ATTACH_NO_CONNECTOR);
| ^~~~~~~~~~~~~~~~~
drivers/gpu/drm/imx/lcdc/imx-lcdc.c:449:68: error: 'DRM_BRIDGE_ATTACH_NO_CONNECTOR' undeclared (first use in this function)
449 | ret = drm_bridge_attach(&lcdc->pipe.encoder, bridge, NULL, DRM_BRIDGE_ATTACH_NO_CONNECTOR);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/gpu/drm/imx/lcdc/imx-lcdc.c:449:68: note: each undeclared identifier is reported only once for each function it appears in
cc1: some warnings being treated as errors
vim +411 drivers/gpu/drm/imx/lcdc/imx-lcdc.c
390
391 static int imx_lcdc_probe(struct platform_device *pdev)
392 {
393 struct imx_lcdc *lcdc;
394 struct drm_device *drm;
395 struct drm_bridge *bridge;
396 int irq;
397 int ret;
398 struct device *dev = &pdev->dev;
399
400 lcdc = devm_drm_dev_alloc(dev, &imx_lcdc_drm_driver,
401 struct imx_lcdc, drm);
402 if (!lcdc)
403 return -ENOMEM;
404
405 drm = &lcdc->drm;
406
407 lcdc->base = devm_platform_ioremap_resource(pdev, 0);
408 if (IS_ERR(lcdc->base))
409 return dev_err_probe(dev, PTR_ERR(lcdc->base), "Cannot get IO memory\n");
410
> 411 bridge = devm_drm_of_get_bridge(dev, dev->of_node, 0, 0);
412 if (IS_ERR(bridge))
413 return dev_err_probe(dev, PTR_ERR(bridge), "Failed to find bridge\n");
414
415 /* Get Clocks */
416 lcdc->clk_ipg = devm_clk_get(dev, "ipg");
417 if (IS_ERR(lcdc->clk_ipg))
418 return dev_err_probe(dev, PTR_ERR(lcdc->clk_ipg), "Failed to get %s clk\n", "ipg");
419
420 lcdc->clk_ahb = devm_clk_get(dev, "ahb");
421 if (IS_ERR(lcdc->clk_ahb))
422 return dev_err_probe(dev, PTR_ERR(lcdc->clk_ahb), "Failed to get %s clk\n", "ahb");
423
424 lcdc->clk_per = devm_clk_get(dev, "per");
425 if (IS_ERR(lcdc->clk_per))
426 return dev_err_probe(dev, PTR_ERR(lcdc->clk_per), "Failed to get %s clk\n", "per");
427
428 ret = dma_set_mask_and_coherent(drm->dev, DMA_BIT_MASK(32));
429 if (ret)
430 return dev_err_probe(dev, ret, "Cannot set DMA Mask\n");
431
432 /* Modeset init */
433 ret = drmm_mode_config_init(drm);
434 if (ret)
435 return dev_err_probe(dev, ret, "Cannot initialize mode configuration structure\n");
436
437 /* CRTC, Plane, Encoder */
438 ret = drm_simple_display_pipe_init(drm, &lcdc->pipe,
439 &imx_lcdc_pipe_funcs,
440 imx_lcdc_formats,
441 ARRAY_SIZE(imx_lcdc_formats), NULL, NULL);
442 if (ret < 0)
443 return dev_err_probe(drm->dev, ret, "Cannot setup simple display pipe\n");
444
445 ret = drm_vblank_init(drm, drm->mode_config.num_crtc);
446 if (ret < 0)
447 return dev_err_probe(drm->dev, ret, "Failed to initialize vblank\n");
448
449 ret = drm_bridge_attach(&lcdc->pipe.encoder, bridge, NULL, DRM_BRIDGE_ATTACH_NO_CONNECTOR);
450 if (ret)
451 return dev_err_probe(drm->dev, ret, "Cannot attach bridge\n");
452
453 lcdc->connector = drm_bridge_connector_init(drm, &lcdc->pipe.encoder);
454 if (IS_ERR(lcdc->connector))
455 return dev_err_probe(drm->dev, PTR_ERR(lcdc->connector), "Cannot init bridge connector\n");
456
457 drm_connector_attach_encoder(lcdc->connector, &lcdc->pipe.encoder);
458
459 /*
460 * The LCDC controller does not have an enable bit. The
461 * controller starts directly when the clocks are enabled.
462 * If the clocks are enabled when the controller is not yet
463 * programmed with proper register values (enabled at the
464 * bootloader, for example) then it just goes into some undefined
465 * state.
466 * To avoid this issue, let's enable and disable LCDC IPG,
467 * PER and AHB clock so that we force some kind of 'reset'
468 * to the LCDC block.
469 */
470
471 ret = clk_prepare_enable(lcdc->clk_ipg);
472 if (ret)
473 return dev_err_probe(dev, ret, "Cannot enable ipg clock\n");
474 clk_disable_unprepare(lcdc->clk_ipg);
475
476 ret = clk_prepare_enable(lcdc->clk_per);
477 if (ret)
478 return dev_err_probe(dev, ret, "Cannot enable per clock\n");
479 clk_disable_unprepare(lcdc->clk_per);
480
481 ret = clk_prepare_enable(lcdc->clk_ahb);
482 if (ret)
483 return dev_err_probe(dev, ret, "Cannot enable ahb clock\n");
484 clk_disable_unprepare(lcdc->clk_ahb);
485
486 drm->mode_config.min_width = LCDC_MIN_XRES;
487 drm->mode_config.max_width = LCDC_MAX_XRES;
488 drm->mode_config.min_height = LCDC_MIN_YRES;
489 drm->mode_config.max_height = LCDC_MAX_YRES;
490 drm->mode_config.preferred_depth = 16;
491 drm->mode_config.funcs = &imx_lcdc_mode_config_funcs;
492 drm->mode_config.helper_private = &imx_lcdc_mode_config_helpers;
493
494 drm_mode_config_reset(drm);
495
496 irq = platform_get_irq(pdev, 0);
497 if (irq < 0) {
498 ret = irq;
499 return ret;
500 }
501
502 ret = devm_request_irq(dev, irq, imx_lcdc_irq_handler, 0, "imx-lcdc", lcdc);
503 if (ret < 0)
504 return dev_err_probe(drm->dev, ret, "Failed to install IRQ handler\n");
505
506 platform_set_drvdata(pdev, drm);
507
508 ret = drm_dev_register(&lcdc->drm, 0);
509 if (ret)
510 return dev_err_probe(dev, ret, "Cannot register device\n");
511
512 drm_fbdev_generic_setup(drm, 0);
513
514 return 0;
515 }
516
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2023-11-02 10:13 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-11-02 10:13 [chrome-os:chromeos-6.1 18091/19418] drivers/gpu/drm/imx/lcdc/imx-lcdc.c:411:16: warning: assignment to 'struct drm_bridge *' from 'int' makes pointer from integer without a cast kernel test robot
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.