[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 15:47:42 UTC 2017


Hi Hans,

I love your patch! Yet something to improve:

[auto build test ERROR on linus/master]
[also build test ERROR on v4.15-rc1 next-20171128]
[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/20171128-225025
config: i386-randconfig-x003-201748 (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=i386 

All errors (new ones prefixed by >>):

   drivers/video/fbdev/efifb.c: In function 'efifb_probe':
>> drivers/video/fbdev/efifb.c:340: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:340:7: note: each undeclared identifier is reported only once for each function it appears in
>> drivers/video/fbdev/efifb.c:343: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:346: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 +340 drivers/video/fbdev/efifb.c

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

---
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: 33909 bytes
Desc: not available
URL: <https://lists.freedesktop.org/archives/intel-gfx/attachments/20171128/3cf0c091/attachment-0001.gz>


More information about the Intel-gfx mailing list