Hi everybody,
Here are two small fixes that disallow format changes in page flip operations, and perform a full mode set instead of a mode set base in the CRTC helper set config handler if the pixel format changed.
Laurent Pinchart (2): drm: Don't allow page flip to change pixel format drm: Perform a full mode set when the pixel format changed
drivers/gpu/drm/drm_crtc.c | 8 ++++++++ drivers/gpu/drm/drm_crtc_helper.c | 3 +++ 2 files changed, 11 insertions(+), 0 deletions(-)
A page flip is not a mode set, changing the frame buffer pixel format doesn't make sense and isn't handled by most drivers anyway. Disallow it.
Signed-off-by: Laurent Pinchart laurent.pinchart@ideasonboard.com --- drivers/gpu/drm/drm_crtc.c | 8 ++++++++ 1 files changed, 8 insertions(+), 0 deletions(-)
diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c index 92cea9d..0d15b56 100644 --- a/drivers/gpu/drm/drm_crtc.c +++ b/drivers/gpu/drm/drm_crtc.c @@ -3530,6 +3530,14 @@ int drm_mode_page_flip_ioctl(struct drm_device *dev, goto out; }
+ if (crtc->fb->pixel_format != fb->pixel_format || + crtc->fb->bits_per_pixel != crtc->fb->bits_per_pixel || + crtc->fb->depth != fb->depth) { + DRM_DEBUG_KMS("Page flip is not allowed to change frame buffer format.\n"); + ret = -EINVAL; + goto out; + } + if (page_flip->flags & DRM_MODE_PAGE_FLIP_EVENT) { ret = -ENOMEM; spin_lock_irqsave(&dev->event_lock, flags);
Does this by extension mean that stride changes should also not be allowed while page flipping? Thanks, Satyeshwar
-----Original Message----- From: dri-devel-bounces+satyeshwar.singh=intel.com@lists.freedesktop.org [mailto:dri-devel-bounces+satyeshwar.singh=intel.com@lists.freedesktop.org] On Behalf Of Laurent Pinchart Sent: Thursday, May 31, 2012 9:26 AM To: dri-devel@lists.freedesktop.org Subject: [PATCH 1/2] drm: Don't allow page flip to change pixel format
A page flip is not a mode set, changing the frame buffer pixel format doesn't make sense and isn't handled by most drivers anyway. Disallow it.
Signed-off-by: Laurent Pinchart laurent.pinchart@ideasonboard.com --- drivers/gpu/drm/drm_crtc.c | 8 ++++++++ 1 files changed, 8 insertions(+), 0 deletions(-)
diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c index 92cea9d..0d15b56 100644 --- a/drivers/gpu/drm/drm_crtc.c +++ b/drivers/gpu/drm/drm_crtc.c @@ -3530,6 +3530,14 @@ int drm_mode_page_flip_ioctl(struct drm_device *dev, goto out; }
+ if (crtc->fb->pixel_format != fb->pixel_format || + crtc->fb->bits_per_pixel != crtc->fb->bits_per_pixel || + crtc->fb->depth != fb->depth) { + DRM_DEBUG_KMS("Page flip is not allowed to change frame buffer format.\n"); + ret = -EINVAL; + goto out; + } + if (page_flip->flags & DRM_MODE_PAGE_FLIP_EVENT) { ret = -ENOMEM; spin_lock_irqsave(&dev->event_lock, flags); -- 1.7.3.4
_______________________________________________ dri-devel mailing list dri-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/dri-devel
On Thu, May 31, 2012 at 3:44 PM, Singh, Satyeshwar satyeshwar.singh@intel.com wrote:
Does this by extension mean that stride changes should also not be allowed while page flipping?
Everything beyond a crtc base address change should require a full modeset.
Alex
Thanks, Satyeshwar
-----Original Message----- From: dri-devel-bounces+satyeshwar.singh=intel.com@lists.freedesktop.org [mailto:dri-devel-bounces+satyeshwar.singh=intel.com@lists.freedesktop.org] On Behalf Of Laurent Pinchart Sent: Thursday, May 31, 2012 9:26 AM To: dri-devel@lists.freedesktop.org Subject: [PATCH 1/2] drm: Don't allow page flip to change pixel format
A page flip is not a mode set, changing the frame buffer pixel format doesn't make sense and isn't handled by most drivers anyway. Disallow it.
Signed-off-by: Laurent Pinchart laurent.pinchart@ideasonboard.com
drivers/gpu/drm/drm_crtc.c | 8 ++++++++ 1 files changed, 8 insertions(+), 0 deletions(-)
diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c index 92cea9d..0d15b56 100644 --- a/drivers/gpu/drm/drm_crtc.c +++ b/drivers/gpu/drm/drm_crtc.c @@ -3530,6 +3530,14 @@ int drm_mode_page_flip_ioctl(struct drm_device *dev, goto out; }
- if (crtc->fb->pixel_format != fb->pixel_format ||
- crtc->fb->bits_per_pixel != crtc->fb->bits_per_pixel ||
- crtc->fb->depth != fb->depth) {
- DRM_DEBUG_KMS("Page flip is not allowed to change frame buffer format.\n");
- ret = -EINVAL;
- goto out;
- }
if (page_flip->flags & DRM_MODE_PAGE_FLIP_EVENT) { ret = -ENOMEM; spin_lock_irqsave(&dev->event_lock, flags); -- 1.7.3.4
dri-devel mailing list dri-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/dri-devel _______________________________________________ dri-devel mailing list dri-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/dri-devel
On Thu, May 31, 2012 at 03:54:03PM -0400, Alex Deucher wrote:
On Thu, May 31, 2012 at 3:44 PM, Singh, Satyeshwar satyeshwar.singh@intel.com wrote:
Does this by extension mean that stride changes should also not be allowed while page flipping?
Everything beyond a crtc base address change should require a full modeset.
That's a rather silly limitation on decent hardware, but perhaps it makes sense with the current API. My recent patch for i915 just rejected pixel format, pitch and offset changes on the driver side. The hardware can actually handle such things, except currently the driver uses pipelined flips instead of direct register banging, which imposes these limitations.
For the atomic mode setting API I don't plan to special case page flips in generic code at all. I'll leave it up to the driver to decide what operations it can perform atomically and/or asynchronously.
-----Original Message----- From: dri-devel-bounces+satyeshwar.singh=intel.com@lists.freedesktop.org [mailto:dri-devel-bounces+satyeshwar.singh=intel.com@lists.freedesktop.org] On Behalf Of Laurent Pinchart Sent: Thursday, May 31, 2012 9:26 AM To: dri-devel@lists.freedesktop.org Subject: [PATCH 1/2] drm: Don't allow page flip to change pixel format
A page flip is not a mode set, changing the frame buffer pixel format doesn't make sense and isn't handled by most drivers anyway. Disallow it.
Signed-off-by: Laurent Pinchart laurent.pinchart@ideasonboard.com
drivers/gpu/drm/drm_crtc.c | 8 ++++++++ 1 files changed, 8 insertions(+), 0 deletions(-)
diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c index 92cea9d..0d15b56 100644 --- a/drivers/gpu/drm/drm_crtc.c +++ b/drivers/gpu/drm/drm_crtc.c @@ -3530,6 +3530,14 @@ int drm_mode_page_flip_ioctl(struct drm_device *dev, goto out; }
- if (crtc->fb->pixel_format != fb->pixel_format ||
- crtc->fb->bits_per_pixel != crtc->fb->bits_per_pixel ||
- crtc->fb->depth != fb->depth) {
The bits_per_pixel and depth comparisons are pointless. I'm thinking we should perhaps just remove them from the structure, so that drivers would be forced to actually use pixel_format.
I'm not sure if all the drivers have already been fixed to actually check the requested pixel_format or not, or can you ask for example RGBA8888 and have the hardware scan it out as ARGB8888 instead.
That's probably safest, however on Intel we can change the stride and tiling format for sync flips at least. But I'm ok with this patch; we generally need to recalculate bw requirements and watermarks when adjusting depth and such.
On Thu, 31 May 2012 15:54:03 -0400 Alex Deucher alexdeucher@gmail.com wrote:
On Thu, May 31, 2012 at 3:44 PM, Singh, Satyeshwar satyeshwar.singh@intel.com wrote:
Does this by extension mean that stride changes should also not be allowed while page flipping?
Everything beyond a crtc base address change should require a full modeset.
Alex
Thanks, Satyeshwar
-----Original Message----- From: dri-devel-bounces+satyeshwar.singh=intel.com@lists.freedesktop.org [mailto:dri-devel-bounces+satyeshwar.singh=intel.com@lists.freedesktop.org] On Behalf Of Laurent Pinchart Sent: Thursday, May 31, 2012 9:26 AM To: dri-devel@lists.freedesktop.org Subject: [PATCH 1/2] drm: Don't allow page flip to change pixel format
A page flip is not a mode set, changing the frame buffer pixel format doesn't make sense and isn't handled by most drivers anyway. Disallow it.
Signed-off-by: Laurent Pinchart laurent.pinchart@ideasonboard.com
drivers/gpu/drm/drm_crtc.c | 8 ++++++++ 1 files changed, 8 insertions(+), 0 deletions(-)
diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c index 92cea9d..0d15b56 100644 --- a/drivers/gpu/drm/drm_crtc.c +++ b/drivers/gpu/drm/drm_crtc.c @@ -3530,6 +3530,14 @@ int drm_mode_page_flip_ioctl(struct drm_device *dev, goto out; }
- if (crtc->fb->pixel_format != fb->pixel_format ||
- crtc->fb->bits_per_pixel != crtc->fb->bits_per_pixel ||
- crtc->fb->depth != fb->depth) {
- DRM_DEBUG_KMS("Page flip is not allowed to change frame buffer format.\n");
- ret = -EINVAL;
- goto out;
- }
if (page_flip->flags & DRM_MODE_PAGE_FLIP_EVENT) { ret = -ENOMEM; spin_lock_irqsave(&dev->event_lock, flags); -- 1.7.3.4
dri-devel mailing list dri-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/dri-devel _______________________________________________ dri-devel mailing list dri-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/dri-devel
dri-devel mailing list dri-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/dri-devel
Test whether the pixel format changes in the mode set handler, and perform a full mode set instead of a mode set base if it does.
Signed-off-by: Laurent Pinchart laurent.pinchart@ideasonboard.com --- drivers/gpu/drm/drm_crtc_helper.c | 3 +++ 1 files changed, 3 insertions(+), 0 deletions(-)
diff --git a/drivers/gpu/drm/drm_crtc_helper.c b/drivers/gpu/drm/drm_crtc_helper.c index 3252e70..0e8cd89 100644 --- a/drivers/gpu/drm/drm_crtc_helper.c +++ b/drivers/gpu/drm/drm_crtc_helper.c @@ -609,6 +609,9 @@ int drm_crtc_helper_set_config(struct drm_mode_set *set) } else if (set->fb->bits_per_pixel != set->crtc->fb->bits_per_pixel) { mode_changed = true; + } else if (set->fb->pixel_format != + set->crtc->fb->pixel_format) { + mode_changed = true; } else fb_changed = true; }
On Thursday 31 May 2012 18:26:14 Laurent Pinchart wrote:
Hi everybody,
Here are two small fixes that disallow format changes in page flip operations, and perform a full mode set instead of a mode set base in the CRTC helper set config handler if the pixel format changed.
Ping ? Can those two patches be applied ?
Laurent Pinchart (2): drm: Don't allow page flip to change pixel format drm: Perform a full mode set when the pixel format changed
drivers/gpu/drm/drm_crtc.c | 8 ++++++++ drivers/gpu/drm/drm_crtc_helper.c | 3 +++ 2 files changed, 11 insertions(+), 0 deletions(-)
On Thursday 19 July 2012 13:55:37 Laurent Pinchart wrote:
On Thursday 31 May 2012 18:26:14 Laurent Pinchart wrote:
Hi everybody,
Here are two small fixes that disallow format changes in page flip operations, and perform a full mode set instead of a mode set base in the CRTC helper set config handler if the pixel format changed.
Ping ? Can those two patches be applied ?
Ping again ?
Laurent Pinchart (2): drm: Don't allow page flip to change pixel format drm: Perform a full mode set when the pixel format changed
drivers/gpu/drm/drm_crtc.c | 8 ++++++++ drivers/gpu/drm/drm_crtc_helper.c | 3 +++ 2 files changed, 11 insertions(+), 0 deletions(-)
On Thursday 23 August 2012 12:05:27 Laurent Pinchart wrote:
On Thursday 19 July 2012 13:55:37 Laurent Pinchart wrote:
On Thursday 31 May 2012 18:26:14 Laurent Pinchart wrote:
Hi everybody,
Here are two small fixes that disallow format changes in page flip operations, and perform a full mode set instead of a mode set base in the CRTC helper set config handler if the pixel format changed.
Ping ? Can those two patches be applied ?
Ping again ?
And again ? :-)
Laurent Pinchart (2): drm: Don't allow page flip to change pixel format drm: Perform a full mode set when the pixel format changed
drivers/gpu/drm/drm_crtc.c | 8 ++++++++ drivers/gpu/drm/drm_crtc_helper.c | 3 +++ 2 files changed, 11 insertions(+), 0 deletions(-)
dri-devel@lists.freedesktop.org