drm/omapdrm: Couple of plane related fixes
Subsystems (3)
cover drm/omapdrm: Couple of plane related fixes
I hit these two problems while tracking scaling related problems with omapdrm on DSS5 HW.
Jyri Sarha (2):
Revert "drm: omapdrm: Let the DRM core skip plane commit on inactive
CRTCs"
drm/omapdrm: Move commit_modeset_enables() before commit_planes()
drivers/gpu/drm/omapdrm/omap_crtc.c | 8 +------- drivers/gpu/drm/omapdrm/omap_drv.c | 17 +++++++++++++++-- 2 files changed, 16 insertions(+), 9 deletions(-)
Signature · 6 lines
1.9.1 _______________________________________________ dri-devel mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/dri-devel
PATCH 1/2 Revert "drm: omapdrm: Let the DRM core skip plane commit on inactive CRTCs"
This reverts commit dadf4659d0608e034b6633f30300c2eff2dafb4c.
If planes are not disabled when the they are not on any crtc anymore they will remain active and may show as "ghosts" when the crtc they were last on is active again.
--- drivers/gpu/drm/omapdrm/omap_crtc.c | 8 +------- drivers/gpu/drm/omapdrm/omap_drv.c | 3 +-- 2 files changed, 2 insertions(+), 9 deletions(-)
drivers/gpu/drm/omapdrm/omap_crtc.c +1 -7
@@ -410,13 +410,7 @@ static void omap_crtc_atomic_flush(struct drm_crtc *crtc,dispc_mgr_set_gamma (omap_crtc->channel, lut, length); } -/* -* Only flush the CRTC if it is currently enabled. CRTCs that require a -* mode set are disabled prior plane updates and enabled afterwards. -* They are thus not active (regardless of what their CRTC core state -* reports) and the DRM core could thus call this function even though -* the CRTC is currently disabled. Do nothing in that case. -*/ +/* Only flush the CRTC if it is currently enabled. */ if (!omap_crtc->enabled)return ;
drivers/gpu/drm/omapdrm/omap_drv.c +1 -2
@@ -96,8 +96,7 @@ static void omap_atomic_complete(struct omap_atomic_state_commit *commit)dispc_runtime_get ();drm_atomic_helper_commit_modeset_disables (dev, old_state); -drm_atomic_helper_commit_planes (dev, old_state, -DRM_PLANE_COMMIT_ACTIVE_ONLY ); +drm_atomic_helper_commit_planes (dev, old_state,0 );drm_atomic_helper_commit_modeset_enables (dev, old_state);omap_atomic_wait_for_completion (dev, old_state);
Signature · 6 lines
1.9.1 _______________________________________________ dri-devel mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/dri-devel
PATCH 2/2 drm/omapdrm: Move commit_modeset_enables() before commit_planes()
In reply to Jyri SarhaMove drm_atomic_helper_commit_modeset_enables() call to before drm_atomic_helper_commit_planes() call and have a omap_atomic_wait_for_completion() call after both.
With the current dss dispc implementation we have to enable the new modeset before we can commit planes. The dispc ovl configuration relies on the video mode configuration been written into the HW when the ovl configuration is calculated.
This approach is not ideal because after a mode change the plane update is executed only after the first vblank interrupt. The dispc implementation should be fixed so that it is able use uncommitted drm state information. information.
--- drivers/gpu/drm/omapdrm/omap_drv.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-)
drivers/gpu/drm/omapdrm/omap_drv.c +15 -1
@@ -96,8 +96,22 @@ static void omap_atomic_complete(struct omap_atomic_state_commit *commit)dispc_runtime_get ();drm_atomic_helper_commit_modeset_disables (dev, old_state); -drm_atomic_helper_commit_planes (dev, old_state,0 ); + +/* With the current dss dispc implementation we have to enable +* the new modeset before we can commit planes. The dispc ovl +* configuration relies on the video mode configuration been +* written into the HW when the ovl configuration is +* calculated. +* +* This approach is not ideal because after a mode change the +* plane update is executed only after the first vblank +* interrupt. The dispc implementation should be fixed so that +* it is able use uncommitted drm state information. +*/ drm_atomic_helper_commit_modeset_enables (dev, old_state); +omap_atomic_wait_for_completion (dev, old_state); + +drm_atomic_helper_commit_planes (dev, old_state,0 );omap_atomic_wait_for_completion (dev, old_state);
Signature · 6 lines
1.9.1 _______________________________________________ dri-devel mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/dri-devel
Re: [PATCH 1/2] Revert "drm: omapdrm: Let the DRM core skip plane commit on inactive CRTCs"
In reply to Jyri SarhaHi Jyri,
Thank you for the patch.
Quoted 5 lines · On Friday 27 Jan 2017 12:04:54 Jyri Sarha wrote:
This reverts commit
dadf4659d0608e034b6633f30300c2eff2dafb4c.If planes are not disabled when the they are not on any crtc anymore they will remain active and may show as "ghosts" when the crtc they were last on is active again.
Sorry for the breakage.
The drm_atomic_helper_commit_planes() helper documentation states
* Unless otherwise needed, drivers are advised to set the ACTIVE_ONLY flag in
* @flags in order not to receive plane update notifications related to a
* disabled CRTC. This avoids the need to manually ignore plane updates in
* driver code when the driver and/or hardware can't or just don't need to
* deal with updates on disabled CRTCs, for example when supporting runtime
* PM.
I wonder what this implies when CRTCs are being disabled. I see very few cases where the hardware wouldn't need the plane atomic disable operation being called when a plane is being disabled due to its CRTC being disabled. Maybe this should thus be addressed in the core. Daniel, any comment on this ?
Quoted 11 lines
Signed-off-by Jyri Sarha <[email protected]>--- drivers/gpu/drm/omapdrm/omap_crtc.c | 8 +------- drivers/gpu/drm/omapdrm/omap_drv.c | 3 +-- 2 files changed, 2 insertions(+), 9 deletions(-)(quoted diff) +0
-0
b/drivers/gpu/drm/omapdrm/omap_crtc.cindex dd47dc1..b68c70e 100644
drivers/gpu/drm/omapdrm/omap_crtc.c static void omap_crtc_atomic_flush(struct drm_crtc · line 414
Quoted 5 lines
drivers/gpu/drm/omapdrm/omap_crtc.c +0
-2@@ -410,13 +410,7 @@ static void omap_crtc_atomic_flush(struct drm_crtc *crtc,dispc_mgr_set_gamma (omap_crtc->channel, lut, length); } -/* -* Only flush the CRTC if it is currently enabled. CRTCs that require
a
Quoted 23 lines
drivers/gpu/drm/omapdrm/omap_crtc.c +1
-5-* mode set are disabled prior plane updates and enabled afterwards. -* They are thus not active (regardless of what their CRTC core state -* reports) and the DRM core could thus call this function even though -* the CRTC is currently disabled. Do nothing in that case. -*/ +/* Only flush the CRTC if it is currently enabled. */ if (!omap_crtc->enabled)return ;(quoted diff) +0
-0
b/drivers/gpu/drm/omapdrm/omap_drv.cindex 00aa214..5e55f1b 100644drivers/gpu/drm/omapdrm/omap_drv.c +1
-2@@ -96,8 +96,7 @@ static void omap_atomic_complete(struct omap_atomic_state_commit *commit) dispc_runtime_get();drm_atomic_helper_commit_modeset_disables (dev, old_state); -drm_atomic_helper_commit_planes (dev, old_state, -DRM_PLANE_COMMIT_ACTIVE_ONLY ); +drm_atomic_helper_commit_planes (dev, old_state,0 );drm_atomic_helper_commit_modeset_enables (dev, old_state);omap_atomic_wait_for_completion (dev, old_state);
Signature · 8 lines
Regards, Laurent Pinchart _______________________________________________ dri-devel mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/dri-devel
Re: [PATCH 2/2] drm/omapdrm: Move commit_modeset_enables() before commit_planes()
In reply to Jyri SarhaHi Jyri,
Thank you for the patch.
Quoted 29 lines · On Friday 27 Jan 2017 12:04:55 Jyri Sarha wrote:
Move
drm_atomic_helper_commit_modeset_enables()call to beforedrm_atomic_helper_commit_planes()call and have aomap_atomic_wait_for_completion()call after both.With the current dss dispc implementation we have to enable the new modeset before we can commit planes. The dispc ovl configuration relies on the video mode configuration been written into the HW when the ovl configuration is calculated.
This approach is not ideal because after a mode change the plane update is executed only after the first vblank interrupt. The dispc implementation should be fixed so that it is able use uncommitted drm state information. information.
Signed-off-by Jyri Sarha <[email protected]>--- drivers/gpu/drm/omapdrm/omap_drv.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-)(quoted diff) +0
-0
b/drivers/gpu/drm/omapdrm/omap_drv.cindex 5e55f1b..8c15735 100644drivers/gpu/drm/omapdrm/omap_drv.c +1
-1@@ -96,8 +96,22 @@ static void omap_atomic_complete(struct omap_atomic_state_commit *commit) dispc_runtime_get();drm_atomic_helper_commit_modeset_disables (dev, old_state); -drm_atomic_helper_commit_planes (dev, old_state,0 ); +
drivers/gpu/drm/omapdrm/omap_drv.c static void omap_atomic_complete(struct · line 109
Quoted 10 lines
drivers/gpu/drm/omapdrm/omap_drv.c +10
-0+/* With the current dss dispc implementation we have to enable +* the new modeset before we can commit planes. The dispc ovl +* configuration relies on the video mode configuration been +* written into the HW when the ovl configuration is +* calculated. +* +* This approach is not ideal because after a mode change the +* plane update is executed only after the first vblank +* interrupt. The dispc implementation should be fixed so that +* it is able use uncommitted drm state information.
Any chance you could fix the dispc implementation ? ;-) Otherwise, could you rebase (and retest) this patch on top of "[PATCH 0/5] omapdrm: fences and zpos" ?
Quoted 7 lines
drivers/gpu/drm/omapdrm/omap_drv.c +4
-0+*/ drm_atomic_helper_commit_modeset_enables (dev, old_state); +omap_atomic_wait_for_completion (dev, old_state); + +drm_atomic_helper_commit_planes (dev, old_state,0 );omap_atomic_wait_for_completion (dev, old_state);
Signature · 8 lines
Regards, Laurent Pinchart _______________________________________________ dri-devel mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/dri-devel
Re: [PATCH 1/2] Revert "drm: omapdrm: Let the DRM core skip plane commit on inactive CRTCs"
In reply to Laurent PinchartQuoted 22 lines · Laurent Pinchart
Hi Jyri,
Thank you for the patch.
Quoted 5 lines · On Friday 27 Jan 2017 12:04:54 Jyri Sarha wrote:
This reverts commit
dadf4659d0608e034b6633f30300c2eff2dafb4c.If planes are not disabled when the they are not on any crtc anymore they will remain active and may show as "ghosts" when the crtc they were last on is active again.
Sorry for the breakage.
The
drm_atomic_helper_commit_planes()helper documentation states* Unless otherwise needed, drivers are advised to set the
ACTIVE_ONLYflag in
* @flags in order not to receive plane update notifications related to a
* disabled CRTC. This avoids the need to manually ignore plane updates in
* driver code when the driver and/or hardware can't or just don't need to
* deal with updates on disabled CRTCs, for example when supporting runtime
* PM.
Quoted 4 lines
I wonder what this implies when CRTCs are being disabled. I see very few cases where the hardware wouldn't need the plane atomic disable operation being called when a plane is being disabled due to its CRTC being disabled. Maybe this should thus be addressed in the core. Daniel, any comment on this ?
Similar change was done to mali in "drm: mali-dp: Don't set DRM_PLANE_COMMIT_ACTIVE_ONLY", so at least omapdrm is not alone here. I also wonder if this behavior is correct.
Tomi
_______________________________________________
dri-devel mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/dri-devel
Re: [PATCH 2/2] drm/omapdrm: Move commit_modeset_enables() before commit_planes()
In reply to Laurent PinchartQuoted 31 lines · Laurent Pinchart
Hi Jyri,
Thank you for the patch.
Quoted 26 lines · On Friday 27 Jan 2017 12:04:55 Jyri Sarha wrote:
Move
drm_atomic_helper_commit_modeset_enables()call to beforedrm_atomic_helper_commit_planes()call and have aomap_atomic_wait_for_completion()call after both.With the current dss dispc implementation we have to enable the new modeset before we can commit planes. The dispc ovl configuration relies on the video mode configuration been written into the HW when the ovl configuration is calculated.
This approach is not ideal because after a mode change the plane update is executed only after the first vblank interrupt. The dispc implementation should be fixed so that it is able use uncommitted drm state information. information.
Signed-off-by Jyri Sarha <[email protected]>--- drivers/gpu/drm/omapdrm/omap_drv.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-)(quoted diff) +0
-0
b/drivers/gpu/drm/omapdrm/omap_drv.cindex 5e55f1b..8c15735 100644drivers/gpu/drm/omapdrm/omap_drv.c +0
-0@@ -96,8 +96,22 @@ static void omap_atomic_complete(struct omap_atomic_state_commit *commit) dispc_runtime_get();
Quoted 15 lines
drivers/gpu/drm/omapdrm/omap_drv.c static void omap_atomic_complete(struct omap_atomic_state_commit *commit) · line 109
Quoted 13 lines
drivers/gpu/drm/omapdrm/omap_drv.c +11
-1drm_atomic_helper_commit_modeset_disables (dev, old_state); -drm_atomic_helper_commit_planes (dev, old_state,0 ); + +/* With the current dss dispc implementation we have to enable +* the new modeset before we can commit planes. The dispc ovl +* configuration relies on the video mode configuration been +* written into the HW when the ovl configuration is +* calculated. +* +* This approach is not ideal because after a mode change the +* plane update is executed only after the first vblank +* interrupt. The dispc implementation should be fixed so that +* it is able use uncommitted drm state information. Any chance you could fix the dispc implementation ? ;-) Otherwise, could you
Dispc change is on our todo, but the size of the change won't fit into "fix" definition =). There's a lot of state that the dispc side is looking at, which at the moment doesn't come from drm side.
Tomi
_______________________________________________
dri-devel mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/dri-devel
Re: [PATCH 2/2] drm/omapdrm: Move commit_modeset_enables() before commit_planes()
In reply to Laurent PinchartQuoted 31 lines · Laurent Pinchart
Hi Jyri,
Thank you for the patch.
Quoted 26 lines · On Friday 27 Jan 2017 12:04:55 Jyri Sarha wrote:
Move
drm_atomic_helper_commit_modeset_enables()call to beforedrm_atomic_helper_commit_planes()call and have aomap_atomic_wait_for_completion()call after both.With the current dss dispc implementation we have to enable the new modeset before we can commit planes. The dispc ovl configuration relies on the video mode configuration been written into the HW when the ovl configuration is calculated.
This approach is not ideal because after a mode change the plane update is executed only after the first vblank interrupt. The dispc implementation should be fixed so that it is able use uncommitted drm state information. information.
Signed-off-by Jyri Sarha <[email protected]>--- drivers/gpu/drm/omapdrm/omap_drv.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-)(quoted diff) +0
-0
b/drivers/gpu/drm/omapdrm/omap_drv.cindex 5e55f1b..8c15735 100644drivers/gpu/drm/omapdrm/omap_drv.c +0
-0@@ -96,8 +96,22 @@ static void omap_atomic_complete(struct omap_atomic_state_commit *commit) dispc_runtime_get();
Quoted 14 lines
drivers/gpu/drm/omapdrm/omap_drv.c static void omap_atomic_complete(struct omap_atomic_state_commit *commit) · line 109
Quoted 13 lines
drivers/gpu/drm/omapdrm/omap_drv.c +11
-1drm_atomic_helper_commit_modeset_disables (dev, old_state); -drm_atomic_helper_commit_planes (dev, old_state,0 ); + +/* With the current dss dispc implementation we have to enable +* the new modeset before we can commit planes. The dispc ovl +* configuration relies on the video mode configuration been +* written into the HW when the ovl configuration is +* calculated. +* +* This approach is not ideal because after a mode change the +* plane update is executed only after the first vblank +* interrupt. The dispc implementation should be fixed so that +* it is able use uncommitted drm state information. Any chance you could fix the dispc implementation ? ;-) Otherwise, could you
I am currently studying how to do it, but it tricky... really tricky. In DRM terms, the plane configuration is affected by the connector where the crtc is connected to. The whole DSS should have to made understand drm state structures. There certainly wont be any "fix" for 4.10, probably nothing for 4.11 either.
Quoted 3 lines
rebase (and retest) this patch on top of "[PATCH 0/5] omapdrm: fences and zpos" ?
Thanks, I'll do that.
BR,
Jyri
_______________________________________________
dri-devel mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/dri-devel
Re: [PATCH 2/2] drm/omapdrm: Move commit_modeset_enables() before commit_planes()
Hi Jyri,
Quoted 53 lines · On Monday 30 Jan 2017 13:11:56 Jyri Sarha wrote:
Quoted 30 lines · Laurent Pinchart
Quoted 29 lines · On Friday 27 Jan 2017 12:04:55 Jyri Sarha wrote:
Move
drm_atomic_helper_commit_modeset_enables()call to beforedrm_atomic_helper_commit_planes()call and have aomap_atomic_wait_for_completion()call after both.With the current dss dispc implementation we have to enable the new modeset before we can commit planes. The dispc ovl configuration relies on the video mode configuration been written into the HW when the ovl configuration is calculated.
This approach is not ideal because after a mode change the plane update is executed only after the first vblank interrupt. The dispc implementation should be fixed so that it is able use uncommitted drm state information. information.
Signed-off-by Jyri Sarha <[email protected]>---
drivers/gpu/drm/omapdrm/omap_drv.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-)(quoted diff) +0
-0
b/drivers/gpu/drm/omapdrm/omap_drv.cindex 5e55f1b..8c15735 100644drivers/gpu/drm/omapdrm/omap_drv.c +0
-0@@ -96,8 +96,22 @@ static void omap_atomic_complete(struct omap_atomic_state_commit *commit) dispc_runtime_get();drm_atomic_helper_commit_modeset_disables (dev, old_state);Quoted 15 lines
drivers/gpu/drm/omapdrm/omap_drv.c static void omap_atomic_complete(struct omap_atomic_state_commit *commit) · line 109
Quoted 12 lines
drivers/gpu/drm/omapdrm/omap_drv.c +11
-1-drm_atomic_helper_commit_planes (dev, old_state,0 ); + +/* With the current dss dispc implementation we have to enable +* the new modeset before we can commit planes. The dispc ovl +* configuration relies on the video mode configuration been +* written into the HW when the ovl configuration is +* calculated. +* +* This approach is not ideal because after a mode change the +* plane update is executed only after the first vblank +* interrupt. The dispc implementation should be fixed so that +* it is able use uncommitted drm state information. Any chance you could fix the dispc implementation ? ;-) Otherwise, could you
I am currently studying how to do it, but it tricky... really tricky. In DRM terms, the plane configuration is affected by the connector where the crtc is connected to. The whole DSS should have to made understand drm state structures. There certainly wont be any "fix" for 4.10, probably nothing for 4.11 either.
Quoted 4 lines
Quoted 2 lines
rebase (and retest) this patch on top of "[PATCH 0/5] omapdrm: fences and zpos" ?
Thanks, I'll do that.
If you intend on merging this patch as a v4.10 fix then there's no need to rebase. If it targets v4.11, the above-mentioned series will likely go in first.
Signature · 8 lines
Regards, Laurent Pinchart _______________________________________________ dri-devel mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/dri-devel
Re: [PATCH 2/2] drm/omapdrm: Move commit_modeset_enables() before commit_planes()
Quoted 6 lines · Laurent Pinchart
Quoted 3 lines
Quoted 2 lines
rebase (and retest) this patch on top of "[PATCH 0/5] omapdrm: fences and zpos" ?
Thanks, I'll do that.
If you intend on merging this patch as a v4.10 fix then there's no need to rebase. If it targets v4.11, the above-mentioned series will likely go in first.
Well perhaps this patch should go to v4.10 already. Because of the bug a plane commit may fail if the screen is blanked and there is no pclk available at the time the plane HW is configured.
Tomi, what do you think?
BR,
Jyri
_______________________________________________
dri-devel mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/dri-devel
Hi,
Quoted 12 lines · Jyri Sarha
I hit these two problems while tracking scaling related problems with omapdrm on DSS5 HW.
Jyri Sarha (2):
Revert "drm: omapdrm: Let the DRM core skip plane commit on inactive
CRTCs"
drm/omapdrm: Movecommit_modeset_enables()beforecommit_planes()drivers/gpu/drm/omapdrm/omap_crtc.c | 8 +------- drivers/gpu/drm/omapdrm/omap_drv.c | 17 +++++++++++++++-- 2 files changed, 16 insertions(+), 9 deletions(-)
Both look good, I'll queue them for 4.11. I'm not sending them as fixes to 4.10, as afaik they only affect atomic modesetting which is not that widely used, and we're quite late in the -rc cycle. And the latter one might well cause some regressions that we haven't found out...
Tomi
_______________________________________________
dri-devel mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/dri-devel