[Intel-gfx] [PATCH v6 6/7] efifb: Set info->fbcon_rotate_hint based on drm_get_panel_orientation_quirk

kbuild test robot lkp at intel.com
Tue Nov 28 22:19:44 UTC 2017


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-kexec (attached as .config)
compiler: gcc-7 (Debian 7.2.0-12) 7.2.1 20171025
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); did you mean 'DRM_MODE_PRESENT_BOTTOM_FIELD'?
     case DRM_MODE_PANEL_ORIENTATION_BOTTOM_UP:
          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          DRM_MODE_PRESENT_BOTTOM_FIELD
   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); did you mean 'DRM_MODE_PANEL_ORIENTATION_BOTTOM_UP'?
     case DRM_MODE_PANEL_ORIENTATION_LEFT_UP:
          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          DRM_MODE_PANEL_ORIENTATION_BOTTOM_UP
>> drivers/video/fbdev/efifb.c:345:7: error: 'DRM_MODE_PANEL_ORIENTATION_RIGHT_UP' undeclared (first use in this function); did you mean 'DRM_MODE_PANEL_ORIENTATION_LEFT_UP'?
     case DRM_MODE_PANEL_ORIENTATION_RIGHT_UP:
          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          DRM_MODE_PANEL_ORIENTATION_LEFT_UP

vim +339 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
-------------- next part --------------
A non-text attachment was scrubbed...
Name: .config.gz
Type: application/gzip
Size: 26185 bytes
Desc: not available
URL: <https://lists.freedesktop.org/archives/intel-gfx/attachments/20171129/b7a9fc1f/attachment-0001.gz>


More information about the Intel-gfx mailing list