Hi Thomas,

kernel test robot noticed the following build errors:

[auto build test ERROR on next-20241002]
[also build test ERROR on v6.12-rc1]
[cannot apply to drm-xe/drm-xe-next drm/drm-next drm-exynos/exynos-drm-next 
drm-intel/for-linux-next drm-intel/for-linux-next-fixes drm-misc/drm-misc-next 
drm-tip/drm-tip linus/master v6.12-rc1 v6.11 v6.11-rc7]
[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#_base_tree_information]

url:    
https://github.com/intel-lab-lkp/linux/commits/Thomas-Zimmermann/drm-i915-Select-DRM_CLIENT_SELECTION/20241002-211520
base:   next-20241002
patch link:    
https://lore.kernel.org/r/20241002131306.288618-4-tzimmermann%40suse.de
patch subject: [PATCH v2 03/11] drm/fbdev: Select fbdev I/O helpers from 
modules that require them
config: arm-aspeed_g5_defconfig 
(https://download.01.org/0day-ci/archive/20241005/202410050241.mox9qrjp-...@intel.com/config)
compiler: arm-linux-gnueabi-gcc (GCC) 13.3.0
reproduce (this is a W=1 build): 
(https://download.01.org/0day-ci/archive/20241005/202410050241.mox9qrjp-...@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 <l...@intel.com>
| Closes: 
https://lore.kernel.org/oe-kbuild-all/202410050241.mox9qrjp-...@intel.com/

All errors (new ones prefixed by >>):

   drivers/gpu/drm/drm_fbdev_dma.c: In function 
'drm_fbdev_dma_driver_fbdev_probe':
>> drivers/gpu/drm/drm_fbdev_dma.c:218:26: error: 'struct drm_fb_helper' has no 
>> member named 'fbdefio'
     218 |                 fb_helper->fbdefio.delay = HZ / 20;
         |                          ^~
   drivers/gpu/drm/drm_fbdev_dma.c:219:26: error: 'struct drm_fb_helper' has no 
member named 'fbdefio'
     219 |                 fb_helper->fbdefio.deferred_io = 
drm_fb_helper_deferred_io;
         |                          ^~
>> drivers/gpu/drm/drm_fbdev_dma.c:221:21: error: 'struct fb_info' has no 
>> member named 'fbdefio'
     221 |                 info->fbdefio = &fb_helper->fbdefio;
         |                     ^~
   drivers/gpu/drm/drm_fbdev_dma.c:221:43: error: 'struct drm_fb_helper' has no 
member named 'fbdefio'
     221 |                 info->fbdefio = &fb_helper->fbdefio;
         |                                           ^~
--
   In file included from include/linux/bitfield.h:10,
                    from arch/arm/include/asm/ptrace.h:13,
                    from arch/arm/include/asm/processor.h:14,
                    from include/linux/prefetch.h:15,
                    from arch/arm/include/asm/atomic.h:12,
                    from include/linux/atomic.h:7,
                    from include/linux/console.h:17,
                    from drivers/gpu/drm/drm_fb_helper.c:32:
   drivers/gpu/drm/drm_fb_helper.c: In function 'drm_fb_helper_deferred_io':
>> include/linux/container_of.h:20:54: error: invalid use of undefined type 
>> 'struct fb_deferred_io_pageref'
      20 |         static_assert(__same_type(*(ptr), ((type *)0)->member) ||    
   \
         |                                                      ^~
   include/linux/build_bug.h:78:56: note: in definition of macro 
'__static_assert'
      78 | #define __static_assert(expr, msg, ...) _Static_assert(expr, msg)
         |                                                        ^~~~
   include/linux/container_of.h:20:9: note: in expansion of macro 
'static_assert'
      20 |         static_assert(__same_type(*(ptr), ((type *)0)->member) ||    
   \
         |         ^~~~~~~~~~~~~
   include/linux/container_of.h:20:23: note: in expansion of macro '__same_type'
      20 |         static_assert(__same_type(*(ptr), ((type *)0)->member) ||    
   \
         |                       ^~~~~~~~~~~
   include/linux/list.h:601:9: note: in expansion of macro 'container_of'
     601 |         container_of(ptr, type, member)
         |         ^~~~~~~~~~~~
   include/linux/list.h:612:9: note: in expansion of macro 'list_entry'
     612 |         list_entry((ptr)->next, type, member)
         |         ^~~~~~~~~~
   include/linux/list.h:778:20: note: in expansion of macro 'list_first_entry'
     778 |         for (pos = list_first_entry(head, typeof(*pos), member);     
   \
         |                    ^~~~~~~~~~~~~~~~
   drivers/gpu/drm/drm_fb_helper.c:717:9: note: in expansion of macro 
'list_for_each_entry'
     717 |         list_for_each_entry(pageref, pagereflist, list) {
         |         ^~~~~~~~~~~~~~~~~~~
   include/linux/compiler_types.h:458:27: error: expression in static assertion 
is not an integer
     458 | #define __same_type(a, b) __builtin_types_compatible_p(typeof(a), 
typeof(b))
         |                           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/build_bug.h:78:56: note: in definition of macro 
'__static_assert'
      78 | #define __static_assert(expr, msg, ...) _Static_assert(expr, msg)
         |                                                        ^~~~
   include/linux/container_of.h:20:9: note: in expansion of macro 
'static_assert'
      20 |         static_assert(__same_type(*(ptr), ((type *)0)->member) ||    
   \
         |         ^~~~~~~~~~~~~
   include/linux/container_of.h:20:23: note: in expansion of macro '__same_type'
      20 |         static_assert(__same_type(*(ptr), ((type *)0)->member) ||    
   \
         |                       ^~~~~~~~~~~
   include/linux/list.h:601:9: note: in expansion of macro 'container_of'
     601 |         container_of(ptr, type, member)
         |         ^~~~~~~~~~~~
   include/linux/list.h:612:9: note: in expansion of macro 'list_entry'
     612 |         list_entry((ptr)->next, type, member)
         |         ^~~~~~~~~~
   include/linux/list.h:778:20: note: in expansion of macro 'list_first_entry'
     778 |         for (pos = list_first_entry(head, typeof(*pos), member);     
   \
         |                    ^~~~~~~~~~~~~~~~
   drivers/gpu/drm/drm_fb_helper.c:717:9: note: in expansion of macro 
'list_for_each_entry'
     717 |         list_for_each_entry(pageref, pagereflist, list) {
         |         ^~~~~~~~~~~~~~~~~~~
   In file included from include/uapi/linux/posix_types.h:5,
                    from include/uapi/linux/types.h:14,
                    from include/linux/types.h:6,
                    from include/linux/atomic.h:5:
>> include/linux/stddef.h:16:33: error: invalid use of undefined type 'struct 
>> fb_deferred_io_pageref'
      16 | #define offsetof(TYPE, MEMBER)  __builtin_offsetof(TYPE, MEMBER)
         |                                 ^~~~~~~~~~~~~~~~~~
   include/linux/container_of.h:23:28: note: in expansion of macro 'offsetof'
      23 |         ((type *)(__mptr - offsetof(type, member))); })
         |                            ^~~~~~~~
   include/linux/list.h:601:9: note: in expansion of macro 'container_of'
     601 |         container_of(ptr, type, member)
         |         ^~~~~~~~~~~~
   include/linux/list.h:612:9: note: in expansion of macro 'list_entry'
     612 |         list_entry((ptr)->next, type, member)
         |         ^~~~~~~~~~
   include/linux/list.h:778:20: note: in expansion of macro 'list_first_entry'
     778 |         for (pos = list_first_entry(head, typeof(*pos), member);     
   \
         |                    ^~~~~~~~~~~~~~~~
   drivers/gpu/drm/drm_fb_helper.c:717:9: note: in expansion of macro 
'list_for_each_entry'
     717 |         list_for_each_entry(pageref, pagereflist, list) {
         |         ^~~~~~~~~~~~~~~~~~~
   In file included from arch/arm/include/asm/traps.h:6,
                    from arch/arm/include/asm/thread_info.h:43,
                    from include/linux/thread_info.h:60,
                    from include/asm-generic/preempt.h:5,
                    from ./arch/arm/include/generated/asm/preempt.h:1,
                    from include/linux/preempt.h:79,
                    from include/linux/rcupdate.h:27,
                    from include/linux/rcuwait.h:5,
                    from include/linux/irq_work.h:6,
                    from include/linux/console.h:19:
>> include/linux/list.h:769:26: error: invalid use of undefined type 'struct 
>> fb_deferred_io_pageref'
     769 |         list_is_head(&pos->member, (head))
         |                          ^~
   include/linux/list.h:779:15: note: in expansion of macro 'list_entry_is_head'
     779 |              !list_entry_is_head(pos, head, member);                 
   \
         |               ^~~~~~~~~~~~~~~~~~
   drivers/gpu/drm/drm_fb_helper.c:717:9: note: in expansion of macro 
'list_for_each_entry'
     717 |         list_for_each_entry(pageref, pagereflist, list) {
         |         ^~~~~~~~~~~~~~~~~~~
   In file included from include/linux/llist.h:52,
                    from include/linux/smp_types.h:5,
                    from include/linux/irq_work.h:5:
   include/linux/list.h:645:25: error: invalid use of undefined type 'struct 
fb_deferred_io_pageref'
     645 |         list_entry((pos)->member.next, typeof(*(pos)), member)
         |                         ^~
   include/linux/container_of.h:19:33: note: in definition of macro 
'container_of'
      19 |         void *__mptr = (void *)(ptr);                                
   \
         |                                 ^~~
   include/linux/list.h:645:9: note: in expansion of macro 'list_entry'
     645 |         list_entry((pos)->member.next, typeof(*(pos)), member)
         |         ^~~~~~~~~~
   include/linux/list.h:780:20: note: in expansion of macro 'list_next_entry'
     780 |              pos = list_next_entry(pos, member))
         |                    ^~~~~~~~~~~~~~~
   drivers/gpu/drm/drm_fb_helper.c:717:9: note: in expansion of macro 
'list_for_each_entry'
     717 |         list_for_each_entry(pageref, pagereflist, list) {
         |         ^~~~~~~~~~~~~~~~~~~
   include/linux/list.h:645:25: error: invalid use of undefined type 'struct 
fb_deferred_io_pageref'
     645 |         list_entry((pos)->member.next, typeof(*(pos)), member)
         |                         ^~
   include/linux/build_bug.h:78:56: note: in definition of macro 
'__static_assert'
      78 | #define __static_assert(expr, msg, ...) _Static_assert(expr, msg)
         |                                                        ^~~~
   include/linux/container_of.h:20:9: note: in expansion of macro 
'static_assert'
      20 |         static_assert(__same_type(*(ptr), ((type *)0)->member) ||    
   \
         |         ^~~~~~~~~~~~~
   include/linux/container_of.h:20:23: note: in expansion of macro '__same_type'
      20 |         static_assert(__same_type(*(ptr), ((type *)0)->member) ||    
   \
         |                       ^~~~~~~~~~~
   include/linux/list.h:601:9: note: in expansion of macro 'container_of'
     601 |         container_of(ptr, type, member)
         |         ^~~~~~~~~~~~
   include/linux/list.h:645:9: note: in expansion of macro 'list_entry'
     645 |         list_entry((pos)->member.next, typeof(*(pos)), member)
         |         ^~~~~~~~~~
   include/linux/list.h:780:20: note: in expansion of macro 'list_next_entry'
     780 |              pos = list_next_entry(pos, member))
         |                    ^~~~~~~~~~~~~~~
   drivers/gpu/drm/drm_fb_helper.c:717:9: note: in expansion of macro 
'list_for_each_entry'
     717 |         list_for_each_entry(pageref, pagereflist, list) {
         |         ^~~~~~~~~~~~~~~~~~~
>> include/linux/container_of.h:20:54: error: invalid use of undefined type 
>> 'struct fb_deferred_io_pageref'
      20 |         static_assert(__same_type(*(ptr), ((type *)0)->member) ||    
   \
         |                                                      ^~
   include/linux/build_bug.h:78:56: note: in definition of macro 
'__static_assert'
      78 | #define __static_assert(expr, msg, ...) _Static_assert(expr, msg)
         |                                                        ^~~~
   include/linux/container_of.h:20:9: note: in expansion of macro 
'static_assert'
      20 |         static_assert(__same_type(*(ptr), ((type *)0)->member) ||    
   \
         |         ^~~~~~~~~~~~~
   include/linux/container_of.h:20:23: note: in expansion of macro '__same_type'
      20 |         static_assert(__same_type(*(ptr), ((type *)0)->member) ||    
   \
         |                       ^~~~~~~~~~~
   include/linux/list.h:601:9: note: in expansion of macro 'container_of'
     601 |         container_of(ptr, type, member)
         |         ^~~~~~~~~~~~
   include/linux/list.h:645:9: note: in expansion of macro 'list_entry'
     645 |         list_entry((pos)->member.next, typeof(*(pos)), member)
         |         ^~~~~~~~~~
   include/linux/list.h:780:20: note: in expansion of macro 'list_next_entry'
     780 |              pos = list_next_entry(pos, member))
         |                    ^~~~~~~~~~~~~~~
   drivers/gpu/drm/drm_fb_helper.c:717:9: note: in expansion of macro 
'list_for_each_entry'
     717 |         list_for_each_entry(pageref, pagereflist, list) {
         |         ^~~~~~~~~~~~~~~~~~~
   include/linux/list.h:645:25: error: invalid use of undefined type 'struct 
fb_deferred_io_pageref'
     645 |         list_entry((pos)->member.next, typeof(*(pos)), member)
         |                         ^~
   include/linux/build_bug.h:78:56: note: in definition of macro 
'__static_assert'
      78 | #define __static_assert(expr, msg, ...) _Static_assert(expr, msg)
         |                                                        ^~~~
   include/linux/container_of.h:20:9: note: in expansion of macro 
'static_assert'
      20 |         static_assert(__same_type(*(ptr), ((type *)0)->member) ||    
   \
         |         ^~~~~~~~~~~~~
   include/linux/container_of.h:21:23: note: in expansion of macro '__same_type'
      21 |                       __same_type(*(ptr), void),                     
   \
         |                       ^~~~~~~~~~~
   include/linux/list.h:601:9: note: in expansion of macro 'container_of'
     601 |         container_of(ptr, type, member)
         |         ^~~~~~~~~~~~
   include/linux/list.h:645:9: note: in expansion of macro 'list_entry'
     645 |         list_entry((pos)->member.next, typeof(*(pos)), member)
         |         ^~~~~~~~~~
   include/linux/list.h:780:20: note: in expansion of macro 'list_next_entry'
     780 |              pos = list_next_entry(pos, member))
         |                    ^~~~~~~~~~~~~~~
   drivers/gpu/drm/drm_fb_helper.c:717:9: note: in expansion of macro 
'list_for_each_entry'
     717 |         list_for_each_entry(pageref, pagereflist, list) {
         |         ^~~~~~~~~~~~~~~~~~~
   include/linux/compiler_types.h:458:27: error: expression in static assertion 
is not an integer
     458 | #define __same_type(a, b) __builtin_types_compatible_p(typeof(a), 
typeof(b))
         |                           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/build_bug.h:78:56: note: in definition of macro 
'__static_assert'
      78 | #define __static_assert(expr, msg, ...) _Static_assert(expr, msg)
         |                                                        ^~~~
   include/linux/container_of.h:20:9: note: in expansion of macro 
'static_assert'
      20 |         static_assert(__same_type(*(ptr), ((type *)0)->member) ||    
   \
         |         ^~~~~~~~~~~~~
   include/linux/container_of.h:20:23: note: in expansion of macro '__same_type'
      20 |         static_assert(__same_type(*(ptr), ((type *)0)->member) ||    
   \
         |                       ^~~~~~~~~~~
   include/linux/list.h:601:9: note: in expansion of macro 'container_of'
     601 |         container_of(ptr, type, member)
         |         ^~~~~~~~~~~~
   include/linux/list.h:645:9: note: in expansion of macro 'list_entry'
     645 |         list_entry((pos)->member.next, typeof(*(pos)), member)
         |         ^~~~~~~~~~
   include/linux/list.h:780:20: note: in expansion of macro 'list_next_entry'
     780 |              pos = list_next_entry(pos, member))
         |                    ^~~~~~~~~~~~~~~
   drivers/gpu/drm/drm_fb_helper.c:717:9: note: in expansion of macro 
'list_for_each_entry'
     717 |         list_for_each_entry(pageref, pagereflist, list) {
         |         ^~~~~~~~~~~~~~~~~~~
>> include/linux/stddef.h:16:33: error: invalid use of undefined type 'struct 
>> fb_deferred_io_pageref'
      16 | #define offsetof(TYPE, MEMBER)  __builtin_offsetof(TYPE, MEMBER)
         |                                 ^~~~~~~~~~~~~~~~~~
   include/linux/container_of.h:23:28: note: in expansion of macro 'offsetof'
      23 |         ((type *)(__mptr - offsetof(type, member))); })
         |                            ^~~~~~~~
   include/linux/list.h:601:9: note: in expansion of macro 'container_of'
     601 |         container_of(ptr, type, member)
         |         ^~~~~~~~~~~~
   include/linux/list.h:645:9: note: in expansion of macro 'list_entry'
     645 |         list_entry((pos)->member.next, typeof(*(pos)), member)
         |         ^~~~~~~~~~
   include/linux/list.h:780:20: note: in expansion of macro 'list_next_entry'
     780 |              pos = list_next_entry(pos, member))
         |                    ^~~~~~~~~~~~~~~
   drivers/gpu/drm/drm_fb_helper.c:717:9: note: in expansion of macro 
'list_for_each_entry'
     717 |         list_for_each_entry(pageref, pagereflist, list) {
         |         ^~~~~~~~~~~~~~~~~~~
>> drivers/gpu/drm/drm_fb_helper.c:718:32: error: invalid use of undefined type 
>> 'struct fb_deferred_io_pageref'
     718 |                 start = pageref->offset;
         |                                ^~


vim +218 drivers/gpu/drm/drm_fbdev_dma.c

8998eedda2539d Thomas Zimmermann 2024-09-24  125  
8998eedda2539d Thomas Zimmermann 2024-09-24  126  /*
8998eedda2539d Thomas Zimmermann 2024-09-24  127   * struct drm_fb_helper
8998eedda2539d Thomas Zimmermann 2024-09-24  128   */
8998eedda2539d Thomas Zimmermann 2024-09-24  129  
8998eedda2539d Thomas Zimmermann 2024-09-24  130  int 
drm_fbdev_dma_driver_fbdev_probe(struct drm_fb_helper *fb_helper,
8998eedda2539d Thomas Zimmermann 2024-09-24  131                                
     struct drm_fb_helper_surface_size *sizes)
b79fe9abd58bab Thomas Zimmermann 2023-03-13  132  {
b79fe9abd58bab Thomas Zimmermann 2023-03-13  133        struct drm_client_dev 
*client = &fb_helper->client;
b79fe9abd58bab Thomas Zimmermann 2023-03-13  134        struct drm_device *dev 
= fb_helper->dev;
5a498d4d06d6d9 Thomas Zimmermann 2024-09-04  135        bool use_deferred_io = 
false;
b79fe9abd58bab Thomas Zimmermann 2023-03-13  136        struct 
drm_client_buffer *buffer;
b79fe9abd58bab Thomas Zimmermann 2023-03-13  137        struct 
drm_gem_dma_object *dma_obj;
b79fe9abd58bab Thomas Zimmermann 2023-03-13  138        struct drm_framebuffer 
*fb;
b79fe9abd58bab Thomas Zimmermann 2023-03-13  139        struct fb_info *info;
b79fe9abd58bab Thomas Zimmermann 2023-03-13  140        u32 format;
b79fe9abd58bab Thomas Zimmermann 2023-03-13  141        struct iosys_map map;
b79fe9abd58bab Thomas Zimmermann 2023-03-13  142        int ret;
b79fe9abd58bab Thomas Zimmermann 2023-03-13  143  
b79fe9abd58bab Thomas Zimmermann 2023-03-13  144        drm_dbg_kms(dev, 
"surface width(%d), height(%d) and bpp(%d)\n",
b79fe9abd58bab Thomas Zimmermann 2023-03-13  145                    
sizes->surface_width, sizes->surface_height,
b79fe9abd58bab Thomas Zimmermann 2023-03-13  146                    
sizes->surface_bpp);
b79fe9abd58bab Thomas Zimmermann 2023-03-13  147  
cb31c58e8c294f Thomas Huth       2024-07-02  148        format = 
drm_driver_legacy_fb_format(dev, sizes->surface_bpp,
cb31c58e8c294f Thomas Huth       2024-07-02  149                                
             sizes->surface_depth);
b79fe9abd58bab Thomas Zimmermann 2023-03-13  150        buffer = 
drm_client_framebuffer_create(client, sizes->surface_width,
b79fe9abd58bab Thomas Zimmermann 2023-03-13  151                                
               sizes->surface_height, format);
b79fe9abd58bab Thomas Zimmermann 2023-03-13  152        if (IS_ERR(buffer))
b79fe9abd58bab Thomas Zimmermann 2023-03-13  153                return 
PTR_ERR(buffer);
b79fe9abd58bab Thomas Zimmermann 2023-03-13  154        dma_obj = 
to_drm_gem_dma_obj(buffer->gem);
b79fe9abd58bab Thomas Zimmermann 2023-03-13  155  
b79fe9abd58bab Thomas Zimmermann 2023-03-13  156        fb = buffer->fb;
b79fe9abd58bab Thomas Zimmermann 2023-03-13  157  
5a498d4d06d6d9 Thomas Zimmermann 2024-09-04  158        /*
5a498d4d06d6d9 Thomas Zimmermann 2024-09-04  159         * Deferred I/O 
requires struct page for framebuffer memory,
5a498d4d06d6d9 Thomas Zimmermann 2024-09-04  160         * which is not 
guaranteed for all DMA ranges. We thus only
5a498d4d06d6d9 Thomas Zimmermann 2024-09-04  161         * install deferred I/O 
if we have a framebuffer that requires
5a498d4d06d6d9 Thomas Zimmermann 2024-09-04  162         * it.
5a498d4d06d6d9 Thomas Zimmermann 2024-09-04  163         */
5a498d4d06d6d9 Thomas Zimmermann 2024-09-04  164        if (fb->funcs->dirty)
5a498d4d06d6d9 Thomas Zimmermann 2024-09-04  165                use_deferred_io 
= true;
5a498d4d06d6d9 Thomas Zimmermann 2024-09-04  166  
b79fe9abd58bab Thomas Zimmermann 2023-03-13  167        ret = 
drm_client_buffer_vmap(buffer, &map);
b79fe9abd58bab Thomas Zimmermann 2023-03-13  168        if (ret) {
b79fe9abd58bab Thomas Zimmermann 2023-03-13  169                goto 
err_drm_client_buffer_delete;
b79fe9abd58bab Thomas Zimmermann 2023-03-13  170        } else if 
(drm_WARN_ON(dev, map.is_iomem)) {
b79fe9abd58bab Thomas Zimmermann 2023-03-13  171                ret = -ENODEV; 
/* I/O memory not supported; use generic emulation */
b79fe9abd58bab Thomas Zimmermann 2023-03-13  172                goto 
err_drm_client_buffer_delete;
b79fe9abd58bab Thomas Zimmermann 2023-03-13  173        }
b79fe9abd58bab Thomas Zimmermann 2023-03-13  174  
8998eedda2539d Thomas Zimmermann 2024-09-24  175        fb_helper->funcs = 
&drm_fbdev_dma_helper_funcs;
b79fe9abd58bab Thomas Zimmermann 2023-03-13  176        fb_helper->buffer = 
buffer;
808a40b6946804 Thomas Zimmermann 2024-04-19  177        fb_helper->fb = fb;
b79fe9abd58bab Thomas Zimmermann 2023-03-13  178  
b79fe9abd58bab Thomas Zimmermann 2023-03-13  179        info = 
drm_fb_helper_alloc_info(fb_helper);
b79fe9abd58bab Thomas Zimmermann 2023-03-13  180        if (IS_ERR(info)) {
b79fe9abd58bab Thomas Zimmermann 2023-03-13  181                ret = 
PTR_ERR(info);
b79fe9abd58bab Thomas Zimmermann 2023-03-13  182                goto 
err_drm_client_buffer_vunmap;
b79fe9abd58bab Thomas Zimmermann 2023-03-13  183        }
b79fe9abd58bab Thomas Zimmermann 2023-03-13  184  
b79fe9abd58bab Thomas Zimmermann 2023-03-13  185        
drm_fb_helper_fill_info(info, fb_helper, sizes);
b79fe9abd58bab Thomas Zimmermann 2023-03-13  186  
5a498d4d06d6d9 Thomas Zimmermann 2024-09-04  187        if (use_deferred_io)
5a498d4d06d6d9 Thomas Zimmermann 2024-09-04  188                info->fbops = 
&drm_fbdev_dma_deferred_fb_ops;
5a498d4d06d6d9 Thomas Zimmermann 2024-09-04  189        else
b79fe9abd58bab Thomas Zimmermann 2023-03-13  190                info->fbops = 
&drm_fbdev_dma_fb_ops;
b79fe9abd58bab Thomas Zimmermann 2023-03-13  191  
b79fe9abd58bab Thomas Zimmermann 2023-03-13  192        /* screen */
b79fe9abd58bab Thomas Zimmermann 2023-03-13  193        info->flags |= 
FBINFO_VIRTFB; /* system memory */
b79fe9abd58bab Thomas Zimmermann 2023-03-13  194        if 
(dma_obj->map_noncoherent)
b79fe9abd58bab Thomas Zimmermann 2023-03-13  195                info->flags |= 
FBINFO_READS_FAST; /* signal caching */
b79fe9abd58bab Thomas Zimmermann 2023-03-13  196        info->screen_size = 
sizes->surface_height * fb->pitches[0];
b79fe9abd58bab Thomas Zimmermann 2023-03-13  197        info->screen_buffer = 
map.vaddr;
d92a7580392ad4 Thomas Zimmermann 2024-06-17  198        if (!(info->flags & 
FBINFO_HIDE_SMEM_START)) {
d92a7580392ad4 Thomas Zimmermann 2024-06-17  199                if 
(!drm_WARN_ON(dev, is_vmalloc_addr(info->screen_buffer)))
b79fe9abd58bab Thomas Zimmermann 2023-03-13  200                        
info->fix.smem_start = page_to_phys(virt_to_page(info->screen_buffer));
d92a7580392ad4 Thomas Zimmermann 2024-06-17  201        }
a51c7663f14460 Thomas Zimmermann 2023-03-20  202        info->fix.smem_len = 
info->screen_size;
b79fe9abd58bab Thomas Zimmermann 2023-03-13  203  
5a498d4d06d6d9 Thomas Zimmermann 2024-09-04  204        /*
5a498d4d06d6d9 Thomas Zimmermann 2024-09-04  205         * Only set up deferred 
I/O if the screen buffer supports
5a498d4d06d6d9 Thomas Zimmermann 2024-09-04  206         * it. If this 
disagrees with the previous test for ->dirty,
5a498d4d06d6d9 Thomas Zimmermann 2024-09-04  207         * mmap on the /dev/fb 
file might not work correctly.
5a498d4d06d6d9 Thomas Zimmermann 2024-09-04  208         */
5a498d4d06d6d9 Thomas Zimmermann 2024-09-04  209        if 
(!is_vmalloc_addr(info->screen_buffer) && info->fix.smem_start) {
5a498d4d06d6d9 Thomas Zimmermann 2024-09-04  210                unsigned long 
pfn = info->fix.smem_start >> PAGE_SHIFT;
5a498d4d06d6d9 Thomas Zimmermann 2024-09-04  211  
5a498d4d06d6d9 Thomas Zimmermann 2024-09-04  212                if 
(drm_WARN_ON(dev, !pfn_to_page(pfn)))
5a498d4d06d6d9 Thomas Zimmermann 2024-09-04  213                        
use_deferred_io = false;
5a498d4d06d6d9 Thomas Zimmermann 2024-09-04  214        }
5a498d4d06d6d9 Thomas Zimmermann 2024-09-04  215  
808a40b6946804 Thomas Zimmermann 2024-04-19  216        /* deferred I/O */
5a498d4d06d6d9 Thomas Zimmermann 2024-09-04  217        if (use_deferred_io) {
808a40b6946804 Thomas Zimmermann 2024-04-19 @218                
fb_helper->fbdefio.delay = HZ / 20;
808a40b6946804 Thomas Zimmermann 2024-04-19  219                
fb_helper->fbdefio.deferred_io = drm_fb_helper_deferred_io;
808a40b6946804 Thomas Zimmermann 2024-04-19  220  
808a40b6946804 Thomas Zimmermann 2024-04-19 @221                info->fbdefio = 
&fb_helper->fbdefio;

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

Reply via email to