From: kernel test robot <lkp@intel.com>
To: kbuild-all@lists.01.org
Subject: Re: [RFC PATCH 4/6] drm: mxc-epdc: Add update management
Date: Sun, 06 Feb 2022 19:09:14 +0800 [thread overview]
Message-ID: <202202061935.pxyST7Cb-lkp@intel.com> (raw)
In-Reply-To: <20220206080016.796556-5-andreas@kemnade.info>
[-- Attachment #1: Type: text/plain, Size: 12594 bytes --]
Hi Andreas,
[FYI, it's a private test report for your RFC patch.]
[auto build test WARNING on drm/drm-next]
[also build test WARNING on robh/for-next v5.17-rc2 next-20220204]
[cannot apply to pza/reset/next]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]
url: https://github.com/0day-ci/linux/commits/Andreas-Kemnade/drm-EPDC-driver-for-i-MX6/20220206-162244
base: git://anongit.freedesktop.org/drm/drm drm-next
config: arc-allyesconfig (https://download.01.org/0day-ci/archive/20220206/202202061935.pxyST7Cb-lkp(a)intel.com/config)
compiler: arceb-elf-gcc (GCC) 11.2.0
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# https://github.com/0day-ci/linux/commit/eb5c0a854ad92babcd34da63230029077f3e35a3
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Andreas-Kemnade/drm-EPDC-driver-for-i-MX6/20220206-162244
git checkout eb5c0a854ad92babcd34da63230029077f3e35a3
# save the config file to linux build tree
mkdir build_dir
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-11.2.0 make.cross O=build_dir ARCH=arc SHELL=/bin/bash drivers/gpu/drm/mxc-epdc/
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
All warnings (new ones prefixed by >>):
drivers/gpu/drm/mxc-epdc/epdc_update.c: In function 'epdc_submit_work_func':
>> drivers/gpu/drm/mxc-epdc/epdc_update.c:516:13: warning: variable 'ret' set but not used [-Wunused-but-set-variable]
516 | int ret;
| ^~~
>> drivers/gpu/drm/mxc-epdc/epdc_update.c:515:18: warning: variable 'update_addr_virt' set but not used [-Wunused-but-set-variable]
515 | uint8_t *update_addr_virt;
| ^~~~~~~~~~~~~~~~
drivers/gpu/drm/mxc-epdc/epdc_update.c: At top level:
>> drivers/gpu/drm/mxc-epdc/epdc_update.c:739:6: warning: no previous prototype for 'mxc_epdc_flush_updates' [-Wmissing-prototypes]
739 | void mxc_epdc_flush_updates(struct mxc_epdc *priv)
| ^~~~~~~~~~~~~~~~~~~~~~
>> drivers/gpu/drm/mxc-epdc/epdc_update.c:778:6: warning: no previous prototype for 'mxc_epdc_draw_mode0' [-Wmissing-prototypes]
778 | void mxc_epdc_draw_mode0(struct mxc_epdc *priv)
| ^~~~~~~~~~~~~~~~~~~
drivers/gpu/drm/mxc-epdc/epdc_update.c: In function 'mxc_epdc_draw_mode0':
>> drivers/gpu/drm/mxc-epdc/epdc_update.c:780:14: warning: variable 'upd_buf_ptr' set but not used [-Wunused-but-set-variable]
780 | u32 *upd_buf_ptr;
| ^~~~~~~~~~~
drivers/gpu/drm/mxc-epdc/epdc_update.c: At top level:
>> drivers/gpu/drm/mxc-epdc/epdc_update.c:814:5: warning: no previous prototype for 'mxc_epdc_send_single_update' [-Wmissing-prototypes]
814 | int mxc_epdc_send_single_update(struct drm_rect *clip, int pitch, void *vaddr,
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/gpu/drm/mxc-epdc/epdc_update.c: In function 'epdc_intr_work_func':
>> drivers/gpu/drm/mxc-epdc/epdc_update.c:884:45: warning: variable 'epdc_luts_avail' set but not used [-Wunused-but-set-variable]
884 | u32 epdc_luts_active, epdc_wb_busy, epdc_luts_avail, epdc_lut_cancelled;
| ^~~~~~~~~~~~~~~
>> drivers/gpu/drm/mxc-epdc/epdc_update.c:882:14: warning: variable 'wb_lut_done' set but not used [-Wunused-but-set-variable]
882 | bool wb_lut_done = false;
| ^~~~~~~~~~~
drivers/gpu/drm/mxc-epdc/epdc_update.c: At top level:
>> drivers/gpu/drm/mxc-epdc/epdc_update.c:1134:5: warning: no previous prototype for 'mxc_epdc_init_update' [-Wmissing-prototypes]
1134 | int mxc_epdc_init_update(struct mxc_epdc *priv)
| ^~~~~~~~~~~~~~~~~~~~
vim +/ret +516 drivers/gpu/drm/mxc-epdc/epdc_update.c
501
502
503
504
505 static void epdc_submit_work_func(struct work_struct *work)
506 {
507 struct update_data_list *next_update, *temp_update;
508 struct update_desc_list *next_desc, *temp_desc;
509 struct mxc_epdc *priv =
510 container_of(work, struct mxc_epdc, epdc_submit_work);
511 struct update_data_list *upd_data_list = NULL;
512 struct drm_rect adj_update_region, *upd_region;
513 bool end_merge = false;
514 u32 update_addr;
> 515 uint8_t *update_addr_virt;
> 516 int ret;
517
518 /* Protect access to buffer queues and to update HW */
519 mutex_lock(&priv->queue_mutex);
520
521 /*
522 * Are any of our collision updates able to go now?
523 * Go through all updates in the collision list and check to see
524 * if the collision mask has been fully cleared
525 */
526 list_for_each_entry_safe(next_update, temp_update,
527 &priv->upd_buf_collision_list, list) {
528
529 if (next_update->collision_mask != 0)
530 continue;
531
532 dev_dbg(priv->drm.dev, "A collision update is ready to go!\n");
533
534 /* Force waveform mode to auto for resubmitted collisions */
535 next_update->update_desc->upd_data.waveform_mode =
536 WAVEFORM_MODE_AUTO;
537
538 /*
539 * We have a collision cleared, so select it for resubmission.
540 * If an update is already selected, attempt to merge.
541 */
542 if (!upd_data_list) {
543 upd_data_list = next_update;
544 list_del_init(&next_update->list);
545 } else {
546 switch (epdc_submit_merge(upd_data_list->update_desc,
547 next_update->update_desc,
548 priv)) {
549 case MERGE_OK:
550 dev_dbg(priv->drm.dev,
551 "Update merged [collision]\n");
552 list_del_init(&next_update->update_desc->list);
553 kfree(next_update->update_desc);
554 next_update->update_desc = NULL;
555 list_del_init(&next_update->list);
556 /* Add to free buffer list */
557 list_add_tail(&next_update->list,
558 &priv->upd_buf_free_list);
559 break;
560 case MERGE_FAIL:
561 dev_dbg(priv->drm.dev,
562 "Update not merged [collision]\n");
563 break;
564 case MERGE_BLOCK:
565 dev_dbg(priv->drm.dev,
566 "Merge blocked [collision]\n");
567 end_merge = true;
568 break;
569 }
570
571 if (end_merge) {
572 end_merge = false;
573 break;
574 }
575 }
576 }
577
578 /*
579 * If we didn't find a collision update ready to go, we
580 * need to get a free buffer and match it to a pending update.
581 */
582
583 /*
584 * Can't proceed if there are no free buffers (and we don't
585 * already have a collision update selected)
586 */
587 if (!upd_data_list &&
588 list_empty(&priv->upd_buf_free_list)) {
589 mutex_unlock(&priv->queue_mutex);
590 return;
591 }
592
593 list_for_each_entry_safe(next_desc, temp_desc,
594 &priv->upd_pending_list, list) {
595
596 dev_dbg(priv->drm.dev, "Found a pending update!\n");
597
598 if (!upd_data_list) {
599 if (list_empty(&priv->upd_buf_free_list))
600 break;
601 upd_data_list =
602 list_entry(priv->upd_buf_free_list.next,
603 struct update_data_list, list);
604 list_del_init(&upd_data_list->list);
605 upd_data_list->update_desc = next_desc;
606 list_del_init(&next_desc->list);
607 } else {
608 switch (epdc_submit_merge(upd_data_list->update_desc,
609 next_desc, priv)) {
610 case MERGE_OK:
611 dev_dbg(priv->drm.dev,
612 "Update merged [queue]\n");
613 list_del_init(&next_desc->list);
614 kfree(next_desc);
615 break;
616 case MERGE_FAIL:
617 dev_dbg(priv->drm.dev,
618 "Update not merged [queue]\n");
619 break;
620 case MERGE_BLOCK:
621 dev_dbg(priv->drm.dev,
622 "Merge blocked [collision]\n");
623 end_merge = true;
624 break;
625 }
626
627 if (end_merge)
628 break;
629 }
630 }
631
632 /* Is update list empty? */
633 if (!upd_data_list) {
634 mutex_unlock(&priv->queue_mutex);
635 return;
636 }
637
638 if ((!priv->powered)
639 || priv->powering_down)
640 mxc_epdc_powerup(priv);
641
642 /*
643 * Set update buffer pointer to the start of
644 * the update region in the frame buffer.
645 */
646 upd_region = &upd_data_list->update_desc->upd_data.update_region;
647 update_addr = priv->epdc_mem_phys +
648 ((upd_region->y1 * priv->epdc_mem_width) +
649 upd_region->x1);
650 update_addr_virt = (u8 *)(priv->epdc_mem_virt) +
651 ((upd_region->y1 * priv->epdc_mem_width) +
652 upd_region->x1);
653
654 adj_update_region = upd_data_list->update_desc->upd_data.update_region;
655 /*
656 * Is the working buffer idle?
657 * If the working buffer is busy, we must wait for the resource
658 * to become free. The IST will signal this event.
659 */
660 if (priv->cur_update != NULL) {
661 dev_dbg(priv->drm.dev, "working buf busy!\n");
662
663 /* Initialize event signalling an update resource is free */
664 init_completion(&priv->update_res_free);
665
666 priv->waiting_for_wb = true;
667
668 /* Leave spinlock while waiting for WB to complete */
669 mutex_unlock(&priv->queue_mutex);
670 wait_for_completion(&priv->update_res_free);
671 mutex_lock(&priv->queue_mutex);
672 }
673
674 /*
675 * If there are no LUTs available,
676 * then we must wait for the resource to become free.
677 * The IST will signal this event.
678 */
679 if (!epdc_any_luts_available(priv)) {
680 dev_dbg(priv->drm.dev, "no luts available!\n");
681
682 /* Initialize event signalling an update resource is free */
683 init_completion(&priv->update_res_free);
684
685 priv->waiting_for_lut = true;
686
687 /* Leave spinlock while waiting for LUT to free up */
688 mutex_unlock(&priv->queue_mutex);
689 wait_for_completion(&priv->update_res_free);
690 mutex_lock(&priv->queue_mutex);
691 }
692
693 ret = epdc_choose_next_lut(priv, &upd_data_list->lut_num);
694
695 /* LUTs are available, so we get one here */
696 priv->cur_update = upd_data_list;
697
698 /* Reset mask for LUTS that have completed during WB processing */
699 priv->luts_complete_wb = 0;
700
701 /* Mark LUT with order */
702 priv->lut_update_order[upd_data_list->lut_num] =
703 upd_data_list->update_desc->update_order;
704
705 epdc_lut_complete_intr(priv, upd_data_list->lut_num,
706 true);
707
708 /* Enable Collision and WB complete IRQs */
709 epdc_working_buf_intr(priv, true);
710
711 epdc_write(priv, EPDC_TEMP,
712 mxc_epdc_fb_get_temp_index(priv, TEMP_USE_AMBIENT));
713
714 /* Program EPDC update to process buffer */
715
716 epdc_set_update_area(priv, update_addr,
717 adj_update_region.x1, adj_update_region.y1,
718 drm_rect_width(&adj_update_region),
719 drm_rect_height(&adj_update_region),
720 priv->epdc_mem_width);
721
722 if (priv->wv_modes_update &&
723 (upd_data_list->update_desc->upd_data.waveform_mode
724 == WAVEFORM_MODE_AUTO)) {
725 mxc_epdc_set_update_waveform(priv, &priv->wv_modes);
726 priv->wv_modes_update = false;
727 }
728
729 epdc_submit_update(priv, upd_data_list->lut_num,
730 upd_data_list->update_desc->upd_data.waveform_mode,
731 upd_data_list->update_desc->upd_data.update_mode,
732 false,
733 false, 0);
734
735 /* Release buffer queues */
736 mutex_unlock(&priv->queue_mutex);
737 }
738
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org
next prev parent reply other threads:[~2022-02-06 11:09 UTC|newest]
Thread overview: 50+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-02-06 8:00 [RFC PATCH 0/6] drm: EPDC driver for i.MX6 Andreas Kemnade
2022-02-06 8:00 ` Andreas Kemnade
2022-02-06 8:00 ` [RFC PATCH 1/6] dt-bindings: display: imx: Add EPDC Andreas Kemnade
2022-02-06 8:00 ` Andreas Kemnade
2022-02-11 15:46 ` Rob Herring
2022-02-11 15:46 ` Rob Herring
2022-02-11 15:46 ` Rob Herring
2022-02-14 22:45 ` Andreas Kemnade
2022-02-14 22:45 ` Andreas Kemnade
2022-02-14 22:45 ` Andreas Kemnade
2022-02-16 23:52 ` Rob Herring
2022-02-16 23:52 ` Rob Herring
2022-02-16 23:52 ` Rob Herring
2022-02-17 9:21 ` Krzysztof Kozlowski
2022-02-17 9:21 ` Krzysztof Kozlowski
2022-02-17 11:31 ` Andreas Kemnade
2022-02-17 11:31 ` Andreas Kemnade
2022-02-17 11:31 ` Andreas Kemnade
2022-02-17 11:43 ` Krzysztof Kozlowski
2022-02-17 11:43 ` Krzysztof Kozlowski
2022-02-17 11:43 ` Krzysztof Kozlowski
2022-03-12 19:23 ` Jonathan Neuschäfer
2022-03-12 19:23 ` Jonathan Neuschäfer
2022-03-12 19:23 ` Jonathan Neuschäfer
2022-03-14 22:04 ` Andreas Kemnade
2022-03-14 22:04 ` Andreas Kemnade
2022-03-14 22:04 ` Andreas Kemnade
2022-02-06 8:00 ` [RFC PATCH 2/6] drm: Add skeleton for EPDC driver Andreas Kemnade
2022-02-06 8:00 ` Andreas Kemnade
2022-02-06 10:08 ` kernel test robot
2022-03-12 19:41 ` Jonathan Neuschäfer
2022-03-12 19:41 ` Jonathan Neuschäfer
2022-03-12 19:41 ` Jonathan Neuschäfer
2022-02-06 8:00 ` [RFC PATCH 3/6] drm: mxc-epdc: Add display and waveform initialisation Andreas Kemnade
2022-02-06 8:00 ` Andreas Kemnade
2022-02-06 10:08 ` kernel test robot
2022-02-06 10:18 ` kernel test robot
2022-03-12 20:12 ` Jonathan Neuschäfer
2022-03-12 20:12 ` Jonathan Neuschäfer
2022-03-12 20:12 ` Jonathan Neuschäfer
2022-02-06 8:00 ` [RFC PATCH 4/6] drm: mxc-epdc: Add update management Andreas Kemnade
2022-02-06 8:00 ` Andreas Kemnade
2022-02-06 11:09 ` kernel test robot [this message]
2022-03-12 20:21 ` Jonathan Neuschäfer
2022-03-12 20:21 ` Jonathan Neuschäfer
2022-03-12 20:21 ` Jonathan Neuschäfer
2022-02-06 8:00 ` [RFC PATCH 5/6] ARM: dts: imx6sll: add EPDC Andreas Kemnade
2022-02-06 8:00 ` Andreas Kemnade
2022-02-06 8:00 ` [RFC PATCH 6/6] arm: dts: imx6sl: Add EPDC Andreas Kemnade
2022-02-06 8:00 ` Andreas Kemnade
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=202202061935.pxyST7Cb-lkp@intel.com \
--to=lkp@intel.com \
--cc=kbuild-all@lists.01.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.