[PATCH] drm/exynos: Fix disharmony when setting plane on/off
Joonyoung Shim
jy0922.shim at samsung.com
Tue Feb 3 18:02:26 PST 2015
Hi,
On 02/03/2015 10:41 PM, Gustavo Padovan wrote:
> From: Gustavo Padovan <gustavo.padovan at collabora.co.uk>
>
> This issue was caused by the latest exynos_update_plane() clean up
> that unified plane operations. After those changes the plane failed
> to go the On state. This patch fix this problem by doing correct account
> of exynos_crtc->enabled.
>
> Signed-off-by: Gustavo Padovan <gustavo.padovan at collabora.co.uk>
> ---
> drivers/gpu/drm/exynos/exynos_drm_crtc.c | 12 ++++++++++--
> 1 file changed, 10 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/exynos/exynos_drm_crtc.c b/drivers/gpu/drm/exynos/exynos_drm_crtc.c
> index a85c451..1dbd0e3 100644
> --- a/drivers/gpu/drm/exynos/exynos_drm_crtc.c
> +++ b/drivers/gpu/drm/exynos/exynos_drm_crtc.c
> @@ -119,6 +119,7 @@ static int exynos_drm_crtc_mode_set_base(struct drm_crtc *crtc, int x, int y,
> struct drm_framebuffer *fb = crtc->primary->fb;
> unsigned int crtc_w;
> unsigned int crtc_h;
> + int ret;
>
> /* when framebuffer changing is requested, crtc's dpms should be on */
> if (exynos_crtc->dpms > DRM_MODE_DPMS_ON) {
> @@ -129,8 +130,15 @@ static int exynos_drm_crtc_mode_set_base(struct drm_crtc *crtc, int x, int y,
> crtc_w = fb->width - x;
> crtc_h = fb->height - y;
>
> - return exynos_update_plane(crtc->primary, crtc, fb, 0, 0,
> - crtc_w, crtc_h, x, y, crtc_w, crtc_h);
> + ret = exynos_update_plane(crtc->primary, crtc, fb, 0, 0,
> + crtc_w, crtc_h, x, y, crtc_w, crtc_h);
> + if (!ret)
> + return ret;
> +
> + exynos_plane_dpms(crtc->primary, DRM_MODE_DPMS_ON);
> +
> + return 0;
> +
> }
>
> static void exynos_drm_crtc_disable(struct drm_crtc *crtc)
>
This patch fails to fix disharmony problem of plane on/off because it
causes the problem when do setplane.
Please test setplane like below and i get errors when terminate it.
Thanks.
# modetest -P 24:1920x1080
trying to open device 'i915'...failed.
trying to open device 'radeon'...failed.
trying to open device 'nouveau'...failed.
trying to open device 'vmwgfx'...failed.
trying to open device 'omapdrm'...failed.
trying to open device 'exynos'...success.
testing 1920x1080 at XR24 overlay plane 17
[ 33.766264] PAGE FAULT occurred at 0x20801e80 by 14650000.sysmmu(Page table base: 0x6e3f0000)
[ 33.773310] Lv1 entry: 0x6e228801
[ 33.776748] ------------[ cut here ]------------
[ 33.781283] kernel BUG at drivers/iommu/exynos-iommu.c:358!
[ 33.786829] Internal error: Oops - BUG: 0 [#1] PREEMPT SMP ARM
[ 33.792634] Modules linked in:
[ 33.795672] CPU: 0 PID: 1561 Comm: modetest Not tainted 3.19.0-rc7-00692-g9630be0 #112
[ 33.803551] Hardware name: SAMSUNG EXYNOS (Flattened Device Tree)
[ 33.809620] task: ed4a5400 ti: ed84c000 task.ti: ed84c000
[ 33.815002] PC is at exynos_sysmmu_irq+0x180/0x204
[ 33.819758] LR is at exynos_sysmmu_irq+0xd4/0x204
[ 33.824439] pc : [<c0298b74>] lr : [<c0298ac8>] psr: 60000193
[ 33.824439] sp : ed84dce0 ip : 00000000 fp : 000b9e4d
[ 33.835875] r10: c07ae3a4 r9 : 00000208 r8 : 20801e80
[ 33.841074] r7 : ee3f0000 r6 : ee0df128 r5 : ee0df110 r4 : 00000000
[ 33.847574] r3 : 6e228801 r2 : 6e228801 r1 : ee379610 r0 : ee13a500
[ 33.854074] Flags: nZCv IRQs off FIQs on Mode SVC_32 ISA ARM Segment user
[ 33.861265] Control: 10c5387d Table: 6e14c06a DAC: 00000015
[ 33.866984] Process modetest (pid: 1561, stack limit = 0xed84c238)
[ 33.873136] Stack: (0xed84dce0 to 0xed84e000)
...
More information about the dri-devel
mailing list