[PATCH RESEND 1/2] Refactoring the fbcon packed pixel drawing routines
kernel test robot
lkp at intel.com
Mon Mar 10 02:22:42 UTC 2025
Hi Zsolt,
kernel test robot noticed the following build errors:
[auto build test ERROR on linus/master]
[also build test ERROR on v6.14-rc6 next-20250307]
[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/Zsolt-Kajtar/Refactoring-the-fbcon-packed-pixel-drawing-routines/20250310-025619
base: linus/master
patch link: https://lore.kernel.org/r/20250309184716.13732-2-soci%40c64.rulez.org
patch subject: [PATCH RESEND 1/2] Refactoring the fbcon packed pixel drawing routines
config: arm-randconfig-002-20250310 (https://download.01.org/0day-ci/archive/20250310/202503101013.VkX1hbJx-lkp@intel.com/config)
compiler: arm-linux-gnueabi-gcc (GCC) 14.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250310/202503101013.VkX1hbJx-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 at intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202503101013.VkX1hbJx-lkp@intel.com/
All error/warnings (new ones prefixed by >>):
In file included from drivers/video/fbdev/wmt_ge_rops.c:15:
>> drivers/video/fbdev/core/fb_draw.h:16:48: warning: 'struct fb_address' declared inside parameter list will not be visible outside of this definition or declaration
16 | static inline void fb_address_move_long(struct fb_address *adr, int offset)
| ^~~~~~~~~~
drivers/video/fbdev/core/fb_draw.h: In function 'fb_address_move_long':
>> drivers/video/fbdev/core/fb_draw.h:18:12: error: invalid use of undefined type 'struct fb_address'
18 | adr->address += offset * (BITS_PER_LONG / BITS_PER_BYTE);
| ^~
drivers/video/fbdev/core/fb_draw.h: At top level:
drivers/video/fbdev/core/fb_draw.h:22:46: warning: 'struct fb_address' declared inside parameter list will not be visible outside of this definition or declaration
22 | static inline void fb_address_forward(struct fb_address *adr, unsigned int offset)
| ^~~~~~~~~~
drivers/video/fbdev/core/fb_draw.h: In function 'fb_address_forward':
drivers/video/fbdev/core/fb_draw.h:24:46: error: invalid use of undefined type 'struct fb_address'
24 | unsigned int bits = (unsigned int)adr->bits + offset;
| ^~
drivers/video/fbdev/core/fb_draw.h:26:12: error: invalid use of undefined type 'struct fb_address'
26 | adr->bits = bits & (BITS_PER_LONG - 1u);
| ^~
drivers/video/fbdev/core/fb_draw.h:27:12: error: invalid use of undefined type 'struct fb_address'
27 | adr->address += (bits & ~(BITS_PER_LONG - 1u)) / BITS_PER_BYTE;
| ^~
drivers/video/fbdev/core/fb_draw.h: At top level:
drivers/video/fbdev/core/fb_draw.h:31:47: warning: 'struct fb_address' declared inside parameter list will not be visible outside of this definition or declaration
31 | static inline void fb_address_backward(struct fb_address *adr, unsigned int offset)
| ^~~~~~~~~~
drivers/video/fbdev/core/fb_draw.h: In function 'fb_address_backward':
drivers/video/fbdev/core/fb_draw.h:33:23: error: invalid use of undefined type 'struct fb_address'
33 | int bits = adr->bits - (int)offset;
| ^~
drivers/video/fbdev/core/fb_draw.h:35:12: error: invalid use of undefined type 'struct fb_address'
35 | adr->bits = bits & (BITS_PER_LONG - 1);
| ^~
drivers/video/fbdev/core/fb_draw.h:37:20: error: invalid use of undefined type 'struct fb_address'
37 | adr->address -= (adr->bits - bits) / BITS_PER_BYTE;
| ^~
drivers/video/fbdev/core/fb_draw.h:37:37: error: invalid use of undefined type 'struct fb_address'
37 | adr->address -= (adr->bits - bits) / BITS_PER_BYTE;
| ^~
drivers/video/fbdev/core/fb_draw.h:39:20: error: invalid use of undefined type 'struct fb_address'
39 | adr->address += (bits - adr->bits) / BITS_PER_BYTE;
| ^~
drivers/video/fbdev/core/fb_draw.h:39:44: error: invalid use of undefined type 'struct fb_address'
39 | adr->address += (bits - adr->bits) / BITS_PER_BYTE;
| ^~
drivers/video/fbdev/core/fb_draw.h: At top level:
drivers/video/fbdev/core/fb_draw.h:50:62: warning: 'struct fb_address' declared inside parameter list will not be visible outside of this definition or declaration
50 | int offset, const struct fb_address *dst)
| ^~~~~~~~~~
drivers/video/fbdev/core/fb_draw.h: In function 'fb_modify_offset':
>> drivers/video/fbdev/core/fb_draw.h:52:9: error: implicit declaration of function 'fb_write_offset'; did you mean 'fb_modify_offset'? [-Wimplicit-function-declaration]
52 | fb_write_offset(fb_comp(val, fb_read_offset(offset, dst), mask), offset, dst);
| ^~~~~~~~~~~~~~~
| fb_modify_offset
>> drivers/video/fbdev/core/fb_draw.h:52:38: error: implicit declaration of function 'fb_read_offset'; did you mean 'fb_modify_offset'? [-Wimplicit-function-declaration]
52 | fb_write_offset(fb_comp(val, fb_read_offset(offset, dst), mask), offset, dst);
| ^~~~~~~~~~~~~~
| fb_modify_offset
drivers/video/fbdev/core/fb_draw.h: In function 'fb_reverse_bits_long':
>> drivers/video/fbdev/core/fb_draw.h:106:16: error: implicit declaration of function 'bitrev8x4' [-Wimplicit-function-declaration]
106 | return bitrev8x4(val);
| ^~~~~~~~~
drivers/video/fbdev/wmt_ge_rops.c: In function 'wmt_ge_fillrect':
>> drivers/video/fbdev/wmt_ge_rops.c:57:15: error: implicit declaration of function 'pixel_to_pat' [-Wimplicit-function-declaration]
57 | pat = pixel_to_pat(p->var.bits_per_pixel, fg);
| ^~~~~~~~~~~~
vim +18 drivers/video/fbdev/core/fb_draw.h
14
15 /* move the address pointer by the number of words */
> 16 static inline void fb_address_move_long(struct fb_address *adr, int offset)
17 {
> 18 adr->address += offset * (BITS_PER_LONG / BITS_PER_BYTE);
19 }
20
21 /* move the address pointer forward with the number of bits */
22 static inline void fb_address_forward(struct fb_address *adr, unsigned int offset)
23 {
24 unsigned int bits = (unsigned int)adr->bits + offset;
25
26 adr->bits = bits & (BITS_PER_LONG - 1u);
27 adr->address += (bits & ~(BITS_PER_LONG - 1u)) / BITS_PER_BYTE;
28 }
29
30 /* move the address pointer backwards with the number of bits */
31 static inline void fb_address_backward(struct fb_address *adr, unsigned int offset)
32 {
33 int bits = adr->bits - (int)offset;
34
35 adr->bits = bits & (BITS_PER_LONG - 1);
36 if (bits < 0)
37 adr->address -= (adr->bits - bits) / BITS_PER_BYTE;
38 else
39 adr->address += (bits - adr->bits) / BITS_PER_BYTE;
40 }
41
42 /* compose pixels based on mask */
43 static inline unsigned long fb_comp(unsigned long set, unsigned long unset, unsigned long mask)
44 {
45 return ((set ^ unset) & mask) ^ unset;
46 }
47
48 /* framebuffer read-modify-write access for replacing bits in the mask */
49 static inline void fb_modify_offset(unsigned long val, unsigned long mask,
50 int offset, const struct fb_address *dst)
51 {
> 52 fb_write_offset(fb_comp(val, fb_read_offset(offset, dst), mask), offset, dst);
53 }
54
55 /*
56 * get current palette, if applicable for visual
57 *
58 * The pseudo color table entries (and colors) are right justified and in the
59 * same byte order as it's expected to be placed into a native ordered
60 * framebuffer memory. What that means:
61 *
62 * Expected bytes in framebuffer memory (in native order):
63 * RR GG BB RR GG BB RR GG BB ...
64 *
65 * Pseudo palette entry on little endian arch:
66 * RR | GG << 8 | BB << 16
67 *
68 * Pseudo palette entry on a big endian arch:
69 * RR << 16 | GG << 8 | BB
70 */
71 static inline const u32 *fb_palette(struct fb_info *info)
72 {
73 return (info->fix.visual == FB_VISUAL_TRUECOLOR ||
74 info->fix.visual == FB_VISUAL_DIRECTCOLOR) ? info->pseudo_palette : NULL;
75 }
76
77 /* move pixels right on screen when framebuffer is in native order */
78 static inline unsigned long fb_right(unsigned long value, int index)
79 {
80 #ifdef __LITTLE_ENDIAN
81 return value << index;
82 #else
83 return value >> index;
84 #endif
85 }
86
87 /* move pixels left on screen when framebuffer is in native order */
88 static inline unsigned long fb_left(unsigned long value, int index)
89 {
90 #ifdef __LITTLE_ENDIAN
91 return value >> index;
92 #else
93 return value << index;
94 #endif
95 }
96
97 /* reversal options */
98 struct fb_reverse {
99 bool byte, pixel;
100 };
101
102 /* reverse bits of each byte in a long */
103 static inline unsigned long fb_reverse_bits_long(unsigned long val)
104 {
105 #if defined(CONFIG_HAVE_ARCH_BITREVERSE) && BITS_PER_LONG == 32
> 106 return bitrev8x4(val);
107 #else
108 val = fb_comp(val >> 1, val << 1, ~0UL / 3);
109 val = fb_comp(val >> 2, val << 2, ~0UL / 5);
110 return fb_comp(val >> 4, val << 4, ~0UL / 17);
111 #endif
112 }
113
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
More information about the dri-devel
mailing list