All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v6 0/7] drm/fbdev: Panel orientation connector property support
@ 2017-11-25 17:33 ` Hans de Goede
  0 siblings, 0 replies; 52+ messages in thread
From: Hans de Goede @ 2017-11-25 17:33 UTC (permalink / raw)
  To: Daniel Vetter, Jani Nikula, Sean Paul, Dave Airlie,
	Bartlomiej Zolnierkiewicz
  Cc: Hans de Goede, intel-gfx, linux-fbdev, dri-devel

Hi All,

Here is v6 of my series to add a "panel orientation" property to
the drm-connector for the LCD panel to let userspace know about LCD
panels which are not mounted upright, as well as detecting upside-down
panels without needing quirks (like we do for 90 degree rotated screens).

Bartlomiej, can we please have your Acked-by for merging patches 1,
6 and 7 through the drm tree?

New in v6:
-Fix / reference kernel-doc comments
-Don't export the DRM_MODE_PANEL_ORIENTATION_* defines in the UAPI
-Move i915 dsi hardware rotation state read-out to intel_dsi_init()

New in v5:
-Add kernel-doc comment documenting drm_get_panel_orientation_quirk()
-drm_fb_helper: Only use hardware (crtc primary plane) rotation for
 180 degrees for now as 9-/270 degrees rotation requires special handling

New in v4:
-Fix drm_fb_helper code setting an invalid rotation value on the primary
 plane of disabled/unused crtcs (caught by Fi.CI)

New in v3:
-As requested by Daniel v3 moves the quirks over from the fbdev
 subsys to the drm subsys. I've done this by simpy starting with a copy of
 the quirk table and eventually removing the fbdev version.

The 1st patch in this series is a small fbdev/fbcon patch, patches 2-5
are all drm patches and patches 6-7 are fbdev/fbcon patches again. As
discussed previously the plan is to merge all 7 patches through the
drm tree.

Regards,

Hans


^ permalink raw reply	[flat|nested] 52+ messages in thread
* Re: [Intel-gfx] [PATCH v6 6/7] efifb: Set info->fbcon_rotate_hint based on drm_get_panel_orientation
  2017-11-25 17:33   ` Hans de Goede
@ 2017-11-28 15:47 ` kbuild test robot
  -1 siblings, 0 replies; 52+ messages in thread
From: kbuild test robot @ 2017-11-28 15:47 UTC (permalink / raw)
  To: linux-fbdev

[-- Attachment #1: Type: text/plain, Size: 10483 bytes --]

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

[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 33909 bytes --]

^ permalink raw reply	[flat|nested] 52+ messages in thread

end of thread, other threads:[~2017-11-29  9:59 UTC | newest]

Thread overview: 52+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-11-25 17:33 [PATCH v6 0/7] drm/fbdev: Panel orientation connector property support Hans de Goede
2017-11-25 17:33 ` Hans de Goede
2017-11-25 17:33 ` [PATCH v6 1/7] fbcon: Add fbcon_rotate_hint to struct fb_info Hans de Goede
2017-11-25 17:33   ` Hans de Goede
2017-11-25 17:33 ` [PATCH v6 2/7] drm: Add panel orientation quirks, v6 Hans de Goede
2017-11-25 17:33   ` Hans de Goede
2017-11-25 17:33 ` [PATCH v6 3/7] drm: Add support for a panel-orientation connector property, v6 Hans de Goede
2017-11-25 17:33   ` Hans de Goede
2017-11-25 17:33 ` [PATCH v6 4/7] drm/fb-helper: Apply panel orientation connector prop to the primary plane, v6 Hans de Goede
2017-11-25 17:33   ` Hans de Goede
2017-11-25 17:33 ` [PATCH v6 5/7] drm/i915: Add "panel orientation" property to the panel connector, v6 Hans de Goede
2017-11-25 17:33   ` Hans de Goede
2017-11-28 10:25   ` [Intel-gfx] " Daniel Vetter
2017-11-28 10:25     ` Daniel Vetter
2017-11-28 16:48     ` [Intel-gfx] " kbuild test robot
2017-11-28 16:48       ` kbuild test robot
2017-11-28 20:46     ` kbuild test robot
2017-11-28 20:46       ` kbuild test robot
2017-11-25 17:33 ` [PATCH v6 6/7] efifb: Set info->fbcon_rotate_hint based on drm_get_panel_orientation_quirk Hans de Goede
2017-11-25 17:33   ` Hans de Goede
2017-11-25 17:33 ` [PATCH v6 7/7] fbcon: Remove dmi quirk table Hans de Goede
2017-11-25 17:33   ` Hans de Goede
2017-11-25 17:37 ` ✗ Fi.CI.BAT: failure for drm/fbdev: Panel orientation connector property support (rev4) Patchwork
2017-11-25 19:16 ` [PATCH v6 0/7] drm/fbdev: Panel orientation connector property support Hans de Goede
2017-11-25 19:16   ` Hans de Goede
2017-11-25 19:16   ` [PATCH v6 1/7] fbcon: Add fbcon_rotate_hint to struct fb_info Hans de Goede
2017-11-25 19:16     ` Hans de Goede
2017-11-25 19:16   ` [PATCH v6 2/7] drm: Add panel orientation quirks, v6 Hans de Goede
2017-11-25 19:16     ` Hans de Goede
2017-11-25 19:16   ` [PATCH v6 3/7] drm: Add support for a panel-orientation connector property, v6 Hans de Goede
2017-11-25 19:16     ` Hans de Goede
2017-11-25 19:16   ` [PATCH v6 4/7] drm/fb-helper: Apply panel orientation connector prop to the primary plane, v6 Hans de Goede
2017-11-25 19:16     ` Hans de Goede
2017-11-25 19:16   ` [PATCH v6 5/7] drm/i915: Add "panel orientation" property to the panel connector, v6 Hans de Goede
2017-11-25 19:16     ` Hans de Goede
2017-11-25 19:16   ` [PATCH v6 6/7] efifb: Set info->fbcon_rotate_hint based on drm_get_panel_orientation_quirk Hans de Goede
2017-11-25 19:16     ` Hans de Goede
2017-11-25 19:16   ` [PATCH v6 7/7] fbcon: Remove dmi quirk table Hans de Goede
2017-11-25 19:16     ` Hans de Goede
2017-11-25 19:20   ` ✗ Fi.CI.BAT: failure for drm/fbdev: Panel orientation connector property support (rev5) Patchwork
2017-11-28 10:27 ` [Intel-gfx] [PATCH v6 0/7] drm/fbdev: Panel orientation connector property support Daniel Vetter
2017-11-28 10:27   ` Daniel Vetter
2017-11-28 13:36   ` Hans de Goede
2017-11-28 13:36     ` Hans de Goede
2017-11-29  9:59     ` Daniel Vetter
2017-11-29  9:59       ` Daniel Vetter
2017-11-28 15:47 [Intel-gfx] [PATCH v6 6/7] efifb: Set info->fbcon_rotate_hint based on drm_get_panel_orientation kbuild test robot
2017-11-28 15:47 ` [PATCH v6 6/7] efifb: Set info->fbcon_rotate_hint based on drm_get_panel_orientation_quirk kbuild test robot
2017-11-28 21:07 ` [Intel-gfx] [PATCH v6 6/7] efifb: Set info->fbcon_rotate_hint based on drm_get_panel_orientation kbuild test robot
2017-11-28 21:07   ` [Intel-gfx] [PATCH v6 6/7] efifb: Set info->fbcon_rotate_hint based on drm_get_panel_orientation_quirk kbuild test robot
2017-11-28 22:19 ` [Intel-gfx] [PATCH v6 6/7] efifb: Set info->fbcon_rotate_hint based on drm_get_panel_orientation kbuild test robot
2017-11-28 22:19   ` [PATCH v6 6/7] efifb: Set info->fbcon_rotate_hint based on drm_get_panel_orientation_quirk kbuild test robot

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.