Hi Hans, I love your patch! Yet something to improve: [auto build test ERROR on drm/drm-next] [also build test ERROR on v4.15-rc1 next-20171128] [cannot apply to linus/master] [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/Hans-de-Goede/drm-fbdev-Panel-orientation-connector-property-support/20171129-001142 base: git://people.freedesktop.org/~airlied/linux.git drm-next config: x86_64-randconfig-s1-11282357 (attached as .config) compiler: gcc-6 (Debian 6.4.0-9) 6.4.0 20171026 reproduce: # save the attached .config to linux build tree make ARCH=x86_64 All errors (new ones prefixed by >>): drivers/video/fbdev/efifb.c: In function 'efifb_probe': drivers/video/fbdev/efifb.c:339:7: error: 'DRM_MODE_PANEL_ORIENTATION_BOTTOM_UP' undeclared (first use in this function) case DRM_MODE_PANEL_ORIENTATION_BOTTOM_UP: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/video/fbdev/efifb.c:339:7: note: each undeclared identifier is reported only once for each function it appears in >> drivers/video/fbdev/efifb.c:342:7: error: 'DRM_MODE_PANEL_ORIENTATION_LEFT_UP' undeclared (first use in this function) case DRM_MODE_PANEL_ORIENTATION_LEFT_UP: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ >> drivers/video/fbdev/efifb.c:345:7: error: 'DRM_MODE_PANEL_ORIENTATION_RIGHT_UP' undeclared (first use in this function) case DRM_MODE_PANEL_ORIENTATION_RIGHT_UP: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ vim +/DRM_MODE_PANEL_ORIENTATION_LEFT_UP +342 drivers/video/fbdev/efifb.c 157 158 static int efifb_probe(struct platform_device *dev) 159 { 160 struct fb_info *info; 161 int err, orientation; 162 unsigned int size_vmode; 163 unsigned int size_remap; 164 unsigned int size_total; 165 char *option = NULL; 166 167 if (screen_info.orig_video_isVGA != VIDEO_TYPE_EFI || pci_dev_disabled) 168 return -ENODEV; 169 170 if (fb_get_options("efifb", &option)) 171 return -ENODEV; 172 efifb_setup(option); 173 174 /* We don't get linelength from UGA Draw Protocol, only from 175 * EFI Graphics Protocol. So if it's not in DMI, and it's not 176 * passed in from the user, we really can't use the framebuffer. 177 */ 178 if (!screen_info.lfb_linelength) 179 return -ENODEV; 180 181 if (!screen_info.lfb_depth) 182 screen_info.lfb_depth = 32; 183 if (!screen_info.pages) 184 screen_info.pages = 1; 185 if (!fb_base_is_valid()) { 186 printk(KERN_DEBUG "efifb: invalid framebuffer address\n"); 187 return -ENODEV; 188 } 189 printk(KERN_INFO "efifb: probing for efifb\n"); 190 191 /* just assume they're all unset if any are */ 192 if (!screen_info.blue_size) { 193 screen_info.blue_size = 8; 194 screen_info.blue_pos = 0; 195 screen_info.green_size = 8; 196 screen_info.green_pos = 8; 197 screen_info.red_size = 8; 198 screen_info.red_pos = 16; 199 screen_info.rsvd_size = 8; 200 screen_info.rsvd_pos = 24; 201 } 202 203 efifb_fix.smem_start = screen_info.lfb_base; 204 205 if (screen_info.capabilities & VIDEO_CAPABILITY_64BIT_BASE) { 206 u64 ext_lfb_base; 207 208 ext_lfb_base = (u64)(unsigned long)screen_info.ext_lfb_base << 32; 209 efifb_fix.smem_start |= ext_lfb_base; 210 } 211 212 if (bar_resource && 213 bar_resource->start + bar_offset != efifb_fix.smem_start) { 214 dev_info(&efifb_pci_dev->dev, 215 "BAR has moved, updating efifb address\n"); 216 efifb_fix.smem_start = bar_resource->start + bar_offset; 217 } 218 219 efifb_defined.bits_per_pixel = screen_info.lfb_depth; 220 efifb_defined.xres = screen_info.lfb_width; 221 efifb_defined.yres = screen_info.lfb_height; 222 efifb_fix.line_length = screen_info.lfb_linelength; 223 224 /* size_vmode -- that is the amount of memory needed for the 225 * used video mode, i.e. the minimum amount of 226 * memory we need. */ 227 size_vmode = efifb_defined.yres * efifb_fix.line_length; 228 229 /* size_total -- all video memory we have. Used for 230 * entries, ressource allocation and bounds 231 * checking. */ 232 size_total = screen_info.lfb_size; 233 if (size_total < size_vmode) 234 size_total = size_vmode; 235 236 /* size_remap -- the amount of video memory we are going to 237 * use for efifb. With modern cards it is no 238 * option to simply use size_total as that 239 * wastes plenty of kernel address space. */ 240 size_remap = size_vmode * 2; 241 if (size_remap > size_total) 242 size_remap = size_total; 243 if (size_remap % PAGE_SIZE) 244 size_remap += PAGE_SIZE - (size_remap % PAGE_SIZE); 245 efifb_fix.smem_len = size_remap; 246 247 if (request_mem_region(efifb_fix.smem_start, size_remap, "efifb")) { 248 request_mem_succeeded = true; 249 } else { 250 /* We cannot make this fatal. Sometimes this comes from magic 251 spaces our resource handlers simply don't know about */ 252 pr_warn("efifb: cannot reserve video memory at 0x%lx\n", 253 efifb_fix.smem_start); 254 } 255 256 info = framebuffer_alloc(sizeof(u32) * 16, &dev->dev); 257 if (!info) { 258 pr_err("efifb: cannot allocate framebuffer\n"); 259 err = -ENOMEM; 260 goto err_release_mem; 261 } 262 platform_set_drvdata(dev, info); 263 info->pseudo_palette = info->par; 264 info->par = NULL; 265 266 info->apertures = alloc_apertures(1); 267 if (!info->apertures) { 268 err = -ENOMEM; 269 goto err_release_fb; 270 } 271 info->apertures->ranges[0].base = efifb_fix.smem_start; 272 info->apertures->ranges[0].size = size_remap; 273 274 if (nowc) 275 info->screen_base = ioremap(efifb_fix.smem_start, efifb_fix.smem_len); 276 else 277 info->screen_base = ioremap_wc(efifb_fix.smem_start, efifb_fix.smem_len); 278 if (!info->screen_base) { 279 pr_err("efifb: abort, cannot ioremap video memory 0x%x @ 0x%lx\n", 280 efifb_fix.smem_len, efifb_fix.smem_start); 281 err = -EIO; 282 goto err_release_fb; 283 } 284 285 pr_info("efifb: framebuffer at 0x%lx, using %dk, total %dk\n", 286 efifb_fix.smem_start, size_remap/1024, size_total/1024); 287 pr_info("efifb: mode is %dx%dx%d, linelength=%d, pages=%d\n", 288 efifb_defined.xres, efifb_defined.yres, 289 efifb_defined.bits_per_pixel, efifb_fix.line_length, 290 screen_info.pages); 291 292 efifb_defined.xres_virtual = efifb_defined.xres; 293 efifb_defined.yres_virtual = efifb_fix.smem_len / 294 efifb_fix.line_length; 295 pr_info("efifb: scrolling: redraw\n"); 296 efifb_defined.yres_virtual = efifb_defined.yres; 297 298 /* some dummy values for timing to make fbset happy */ 299 efifb_defined.pixclock = 10000000 / efifb_defined.xres * 300 1000 / efifb_defined.yres; 301 efifb_defined.left_margin = (efifb_defined.xres / 8) & 0xf8; 302 efifb_defined.hsync_len = (efifb_defined.xres / 8) & 0xf8; 303 304 efifb_defined.red.offset = screen_info.red_pos; 305 efifb_defined.red.length = screen_info.red_size; 306 efifb_defined.green.offset = screen_info.green_pos; 307 efifb_defined.green.length = screen_info.green_size; 308 efifb_defined.blue.offset = screen_info.blue_pos; 309 efifb_defined.blue.length = screen_info.blue_size; 310 efifb_defined.transp.offset = screen_info.rsvd_pos; 311 efifb_defined.transp.length = screen_info.rsvd_size; 312 313 pr_info("efifb: %s: " 314 "size=%d:%d:%d:%d, shift=%d:%d:%d:%d\n", 315 "Truecolor", 316 screen_info.rsvd_size, 317 screen_info.red_size, 318 screen_info.green_size, 319 screen_info.blue_size, 320 screen_info.rsvd_pos, 321 screen_info.red_pos, 322 screen_info.green_pos, 323 screen_info.blue_pos); 324 325 efifb_fix.ypanstep = 0; 326 efifb_fix.ywrapstep = 0; 327 328 info->fbops = &efifb_ops; 329 info->var = efifb_defined; 330 info->fix = efifb_fix; 331 info->flags = FBINFO_FLAG_DEFAULT | FBINFO_MISC_FIRMWARE; 332 333 orientation = drm_get_panel_orientation_quirk(efifb_defined.xres, 334 efifb_defined.yres); 335 switch (orientation) { 336 default: 337 info->fbcon_rotate_hint = FB_ROTATE_UR; 338 break; > 339 case DRM_MODE_PANEL_ORIENTATION_BOTTOM_UP: 340 info->fbcon_rotate_hint = FB_ROTATE_UD; 341 break; > 342 case DRM_MODE_PANEL_ORIENTATION_LEFT_UP: 343 info->fbcon_rotate_hint = FB_ROTATE_CCW; 344 break; > 345 case DRM_MODE_PANEL_ORIENTATION_RIGHT_UP: 346 info->fbcon_rotate_hint = FB_ROTATE_CW; 347 break; 348 } 349 350 err = sysfs_create_groups(&dev->dev.kobj, efifb_groups); 351 if (err) { 352 pr_err("efifb: cannot add sysfs attrs\n"); 353 goto err_unmap; 354 } 355 err = fb_alloc_cmap(&info->cmap, 256, 0); 356 if (err < 0) { 357 pr_err("efifb: cannot allocate colormap\n"); 358 goto err_groups; 359 } 360 err = register_framebuffer(info); 361 if (err < 0) { 362 pr_err("efifb: cannot register framebuffer\n"); 363 goto err_fb_dealoc; 364 } 365 fb_info(info, "%s frame buffer device\n", info->fix.id); 366 return 0; 367 368 err_fb_dealoc: 369 fb_dealloc_cmap(&info->cmap); 370 err_groups: 371 sysfs_remove_groups(&dev->dev.kobj, efifb_groups); 372 err_unmap: 373 iounmap(info->screen_base); 374 err_release_fb: 375 framebuffer_release(info); 376 err_release_mem: 377 if (request_mem_succeeded) 378 release_mem_region(efifb_fix.smem_start, size_total); 379 return err; 380 } 381 --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation
Attachment:
.config.gz
Description: application/gzip
_______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx