[PATCH 9/9] drm/exynos: unify exynos_drm_plane names with drm core
Inki Dae
inki.dae at samsung.com
Wed Jun 10 03:48:35 PDT 2015
On 2015년 06월 10일 19:42, Inki Dae wrote:
> Hi Gustavo,
>
> On 2015년 06월 09일 23:27, Gustavo Padovan wrote:
>> Hi Inki and Joonyoung,
>>
>> Any comments on this series?
>
> As you may know, I'm reviewing and testing iommu support patch series
> posted by Marek. With the patch series, I faced with page fault issue
> while booting like below,
>
> [ 1.161282] [drm] Initialized drm 1.1.0 20060810
> [ 1.168972] exynos-drm exynos-drm: bound exynos-drm-vidi (ops
> vidi_component_ops)
> [ 1.178462] ------------[ cut here ]------------
> [ 1.181610] WARNING: CPU: 0 PID: 0 at drivers/gpu/drm/drm_irq.c:1718
> drm_handle_vblank+0x2a0/0x308()
> [ 1.190710] Modules linked in:
> [ 1.193754] CPU: 0 PID: 0 Comm: swapper/0 Not tainted
> 4.1.0-rc4-00564-g9acf8e2-dirty #1385
> [ 1.201995] Hardware name: SAMSUNG EXYNOS (Flattened Device Tree)
> [ 1.208094] [<c0015388>] (unwind_backtrace) from [<c0012440>]
> (show_stack+0x10/0x14)
> [ 1.215810] [<c0012440>] (show_stack) from [<c04a35b8>]
> (dump_stack+0x84/0xc4)
> [ 1.223014] [<c04a35b8>] (dump_stack) from [<c00245cc>]
> (warn_slowpath_common+0x80/0xb0)
> [ 1.223059] exynos-drm exynos-drm: bound 11c00000.fimd (ops
> fimd_component_ops)
> [ 1.223403] exynos-drm exynos-drm: bound 11c80000.dsi (ops
> exynos_dsi_component_ops)
> [ 1.223408] [drm] Supports vblank timestamp caching Rev 2 (21.10.2013).
> [ 1.223411] [drm] No driver support for vblank timestamp query.
> [ 1.223455] [drm] Initialized exynos 1.0.0 20110530 on minor 0
> [ 1.264427] [<c00245cc>] (warn_slowpath_common) from [<c0024698>]
> (warn_slowpath_null+0x1c/0x24)
> [ 1.273184] [<c0024698>] (warn_slowpath_null) from [<c027c394>]
> (drm_handle_vblank+0x2a0/0x308)
> [ 1.281872] [<c027c394>] (drm_handle_vblank) from [<c0298964>]
> (fimd_irq_handler+0x78/0xcc)
> [ 1.290201] [<c0298964>] (fimd_irq_handler) from [<c0060708>]
> (handle_irq_event_percpu+0x78/0x134)
> [ 1.299134] [<c0060708>] (handle_irq_event_percpu) from [<c0060800>]
> (handle_irq_event+0x3c/0x5c)
> [ 1.307994] [<c0060800>] (handle_irq_event) from [<c00634a8>]
> (handle_level_irq+0xc4/0x13c)
> [ 1.308007] [<c00634a8>] (handle_level_irq) from [<c005fd8c>]
> (generic_handle_irq+0x2c/0x3c)
> [ 1.308021] [<c005fd8c>] (generic_handle_irq) from [<c02010cc>]
> (combiner_handle_cascade_irq+0x94/0x100)
> [ 1.308032] [<c02010cc>] (combiner_handle_cascade_irq) from
> [<c005fd8c>] (generic_handle_irq+0x2c/0x3c)
> [ 1.308042] [<c005fd8c>] (generic_handle_irq) from [<c0060058>]
> (__handle_domain_irq+0x7c/0xec)
> [ 1.308052] [<c0060058>] (__handle_domain_irq) from [<c0009434>]
> (gic_handle_irq+0x30/0x68)
> [ 1.308060] [<c0009434>] (gic_handle_irq) from [<c0012f40>]
> (__irq_svc+0x40/0x74)
> [ 1.308065] Exception stack(0xc06dbf68 to 0xc06dbfb0)
> [ 1.308072] bf60: 00000000 00000000 00001298
> c001cc80 c06da000 c06dc4f8
> [ 1.308080] bf80: c04abf50 c06d62c4 c06dbfb8 c070c121 00000001
> 00000000 01000000 c06dbfb0
> [ 1.308085] bfa0: c0010064 c0010068 60000113 ffffffff
> [ 1.308099] [<c0012f40>] (__irq_svc) from [<c0010068>]
> (arch_cpu_idle+0x38/0x3c)
> [ 1.308113] [<c0010068>] (arch_cpu_idle) from [<c0054358>]
> (cpu_startup_entry+0x12c/0x1c4)
> [ 1.308129] [<c0054358>] (cpu_startup_entry) from [<c0688c54>]
> (start_kernel+0x398/0x3a4)
> [ 1.308140] [<c0688c54>] (start_kernel) from [<4000807c>] (0x4000807c)
> [ 1.308157] ---[ end trace 489a69b2a98f6c1d ]---
> [ 1.341264] random: nonblocking pool is initialized
> [ 4.235177] panel_s6e8aa0 11c80000.dsi.0: ID: 0xa2, 0x60, 0x90
> [ 4.436180] Console: switching to colour frame buffer device 102x91
> [ 4.592094] exynos-drm exynos-drm: fb0: frame buffer device
> [ 4.597734] exynos-drm exynos-drm: registered panic notifier
>
Oops, sorry. My mistake. Above log is warning message happened while
booting. See the below log, page fault issue which happened when
modetest is released.
# modetest -s 31 at 29:720x1280
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.
setting mode 720x1280-60Hz at XR24 on connectors 31, crtc 29
[ 37.782766] PAGE FAULT occurred at 0x2055d200 by 11e20000.sysmmu(Page
table base: 0x6ebe0000)
[ 37.789807] Lv1 entry: 0x6e92dc01
[ 37.793225] ------------[ cut here ]------------
[ 37.797793] kernel BUG at drivers/iommu/exynos-iommu.c:364!
[ 37.803349] Internal error: Oops - BUG: 0 [#1] PREEMPT SMP ARM
[ 37.809163] Modules linked in:
[ 37.812207] CPU: 0 PID: 1475 Comm: modetest Tainted: G W
4.1.0-rc4-00564-g9acf8e2-dirty #1385
[ 37.821836] Hardware name: SAMSUNG EXYNOS (Flattened Device Tree)
[ 37.827914] task: ee3c9100 ti: ee342000 task.ti: ee342000
[ 37.833304] PC is at exynos_sysmmu_irq+0x184/0x208
[ 37.838070] LR is at exynos_sysmmu_irq+0xd4/0x208
[ 37.842758] pc : [<c0267bcc>] lr : [<c0267b1c>] psr: 60000193
[ 37.842758] sp : ee343cc8 ip : 00000000 fp : 00000000
[ 37.854214] r10: c070c123 r9 : 00000205 r8 : 2055d200
[ 37.859421] r7 : eebe0000 r6 : ee9b3428 r5 : ee9b3410 r4 : 00000000
[ 37.865931] r3 : 6e92dc01 r2 : 6e92dc01 r1 : eea55810 r0 : ee314480
[ 37.872443] Flags: nZCv IRQs off FIQs on Mode SVC_32 ISA ARM
Segment user
[ 37.879646] Control: 10c5387d Table: 6e1cc04a DAC: 00000015
[ 37.885375] Process modetest (pid: 1475, stack limit = 0xee342210)
[ 37.891538] Stack: (0xee343cc8 to 0xee344000)
[ 37.895881] 3cc0: ee343cd4 eea2e480 eea58294
6ebe0000 00000001 ee9b4280
[ 37.904040] 3ce0: ee84ad20 00000000 00000000 00000026 ee84acc0
c0060708 00000002 c04a8aec
[ 37.912199] 3d00: ee84acc0 ee84ad20 ee9b4280 00000015 ee804450
ee343da0 ee808000 c0060800
[ 37.920358] 3d20: ee84acc0 ee84ad20 ee807000 c00634a8 00000026
c06e9db8 ee807000 c005fd8c
[ 37.928517] 3d40: 0000000a c02010cc 00000015 00000000 00000015
00000000 00000001 c005fd8c
[ 37.936676] 3d60: c06d7aac c0060058 f002000c 00000015 c06dc7a0
ee343da0 f0020000 00000000
[ 37.944836] 3d80: 00000002 c0009434 c0298df8 20000013 ffffffff
ee343dd4 c06f44a8 c0012f40
[ 37.952995] 3da0: ee03fa78 00000000 00000000 04000400 00000000
ee03fa78 00000000 ee03fa78
[ 37.961154] 3dc0: c06f44a8 00000000 00000002 00000000 f0180000
ee343de8 c0298f54 c0298df8
[ 37.969313] 3de0: 20000013 ffffffff 00000000 ee03f010 00000000
c0298f54 ee03f010 00000000
[ 37.977472] 3e00: ee334400 c074adb4 c06f44a8 c0299b9c ee334400
00000001 ee334400 c0295550
[ 37.985632] 3e20: ee14cd40 c0270684 ee14cd40 edc68000 00000000
ee14cd40 edc23428 c029604c
[ 37.993791] 3e40: 00000002 ee334400 00000000 c027187c c02716dc
ee25a540 ee334400 00000050
[ 38.001950] 3e60: edc23380 00000002 00000000 ee30ec00 edc6814c
c0282a74 edc23428 00000000
[ 38.010109] 3e80: 00000050 edc23380 00000002 c02732d4 edc681b4
c0291c8c edc23380 edc23380
[ 38.018269] 3ea0: edc68000 edc68058 edc68000 edc68034 ee1df6a4
c02751a8 edc68000 c074adb4
[ 38.026428] 3ec0: edc68058 c027874c ee1df6a8 ee1df600 edc68058
c0278b50 ee66b980 00000001
[ 38.034587] 3ee0: ee314300 edc68154 60000013 00000000 ee66b980
ee1df300 ee2a05b0 00000000
[ 38.042746] 3f00: ee8ef010 ee6f1e40 00000008 ee1df308 00000000
c00d33c4 00000000 00000000
[ 38.050905] 3f20: ee3c947c 00000000 c0710c40 ee3c9100 ee3c948c
ee342000 00000000 c003b24c
[ 38.059065] 3f40: ee3c9100 edd4a1c0 00000001 ee343f60 ee3c948c
c0025994 0001d008 c00d2364
[ 38.067224] 3f60: 00000000 00000000 0001d008 ee3a1400 00000000
b6f63750 000000f8 c000f704
[ 38.075383] 3f80: ee342000 00000000 00000000 c0026e38 0006560a
00000000 b6f63750 c0026ec0
[ 38.083542] 3fa0: 0006560a c000f580 0006560a 00000000 00000000
000655f0 00000000 b6fbe4c0
[ 38.091701] 3fc0: 0006560a 00000000 b6f63750 000000f8 00000000
00000000 b6fc2000 00000000
[ 38.099860] 3fe0: 000000f8 beb8aa9c b6effaf7 b6eb2946 60000030
00000000 6f7fd821 6f7fdc21
[ 38.108034] [<c0267bcc>] (exynos_sysmmu_irq) from [<c0060708>]
(handle_irq_event_percpu+0x78/0x134)
[ 38.117053] [<c0060708>] (handle_irq_event_percpu) from [<c0060800>]
(handle_irq_event+0x3c/0x5c)
[ 38.125906] [<c0060800>] (handle_irq_event) from [<c00634a8>]
(handle_level_irq+0xc4/0x13c)
[ 38.134239] [<c00634a8>] (handle_level_irq) from [<c005fd8c>]
(generic_handle_irq+0x2c/0x3c)
[ 38.142660] [<c005fd8c>] (generic_handle_irq) from [<c02010cc>]
(combiner_handle_cascade_irq+0x94/0x100)
[ 38.152119] [<c02010cc>] (combiner_handle_cascade_irq) from
[<c005fd8c>] (generic_handle_irq+0x2c/0x3c)
[ 38.161491] [<c005fd8c>] (generic_handle_irq) from [<c0060058>]
(__handle_domain_irq+0x7c/0xec)
[ 38.170172] [<c0060058>] (__handle_domain_irq) from [<c0009434>]
(gic_handle_irq+0x30/0x68)
[ 38.178504] [<c0009434>] (gic_handle_irq) from [<c0012f40>]
(__irq_svc+0x40/0x74)
[ 38.185963] Exception stack(0xee343da0 to 0xee343de8)
[ 38.191001] 3da0: ee03fa78 00000000 00000000 04000400 00000000
ee03fa78 00000000 ee03fa78
[ 38.199160] 3dc0: c06f44a8 00000000 00000002 00000000 f0180000
ee343de8 c0298f54 c0298df8
[ 38.207316] 3de0: 20000013 ffffffff
[ 38.210802] [<c0012f40>] (__irq_svc) from [<c0298df8>]
(fimd_enable_shadow_channel_path.isra.4+0x14/0x4c)
[ 38.220345] [<c0298df8>] (fimd_enable_shadow_channel_path.isra.4)
from [<c0298f54>] (fimd_win_disable+0xb4/0xbc)
[ 38.230498] [<c0298f54>] (fimd_win_disable) from [<c0299b9c>]
(fimd_enable+0xe4/0x12c)
[ 38.238397] [<c0299b9c>] (fimd_enable) from [<c0295550>]
(exynos_drm_crtc_enable+0x28/0x3c)
[ 38.246735] [<c0295550>] (exynos_drm_crtc_enable) from [<c0270684>]
(drm_atomic_helper_commit_modeset_enables+0x90/0x1c4)
[ 38.257669] [<c0270684>] (drm_atomic_helper_commit_modeset_enables)
from [<c029604c>] (exynos_atomic_commit+0x3c/0x70)
[ 38.268344] [<c029604c>] (exynos_atomic_commit) from [<c027187c>]
(drm_atomic_helper_set_config+0x1a0/0x3f4)
[ 38.278153] [<c027187c>] (drm_atomic_helper_set_config) from
[<c0282a74>] (drm_mode_set_config_internal+0x58/0xd4)
[ 38.288482] [<c0282a74>] (drm_mode_set_config_internal) from
[<c02732d4>] (restore_fbdev_mode+0xd4/0xf4)
[ 38.297942] [<c02732d4>] (restore_fbdev_mode) from [<c02751a8>]
(drm_fb_helper_restore_fbdev_mode_unlocked+0x1c/0x5c)
[ 38.308531] [<c02751a8>] (drm_fb_helper_restore_fbdev_mode_unlocked)
from [<c027874c>] (drm_lastclose+0x34/0x118)
[ 38.318772] [<c027874c>] (drm_lastclose) from [<c0278b50>]
(drm_release+0x320/0x4cc)
[ 38.326502] [<c0278b50>] (drm_release) from [<c00d33c4>]
(__fput+0x80/0x1c8)
[ 38.333531] [<c00d33c4>] (__fput) from [<c003b24c>]
(task_work_run+0xac/0xe4)
[ 38.340649] [<c003b24c>] (task_work_run) from [<c0025994>]
(do_exit+0x2e8/0x970)
[ 38.348024] [<c0025994>] (do_exit) from [<c0026e38>]
(do_group_exit+0x4c/0xc4)
[ 38.355228] [<c0026e38>] (do_group_exit) from [<c0026ec0>]
(__wake_up_parent+0x0/0x1
Thanks,
Inki Dae
>
> Enabling IOMMU makes DMA device more sensitive so it seems that hided
> issues happen with iommu support. In this time, let's have more reviews.
> Look like that now atomic features aren't safe yet.
>
> Thanks,
> Inki Dae
>
>>
>> 2015-06-03 Gustavo Padovan <gustavo at padovan.org>:
>>
>>> From: Gustavo Padovan <gustavo.padovan at collabora.co.uk>
>>>
>>> Rename crtc_{widht,height} to crtc_{w,h} and src_{width,height} to
>>> src_{w,h} to make it similar to the atomic state names.
>>>
>>> Signed-off-by: Gustavo Padovan <gustavo.padovan at collabora.co.uk>
>>> ---
>>> drivers/gpu/drm/exynos/exynos7_drm_decon.c | 14 +++++++-------
>>> drivers/gpu/drm/exynos/exynos_drm_drv.h | 16 ++++++++--------
>>> drivers/gpu/drm/exynos/exynos_drm_fimd.c | 14 +++++++-------
>>> drivers/gpu/drm/exynos/exynos_drm_plane.c | 11 ++++++-----
>>> drivers/gpu/drm/exynos/exynos_mixer.c | 22 +++++++++++-----------
>>> 5 files changed, 39 insertions(+), 38 deletions(-)
>>>
>>> diff --git a/drivers/gpu/drm/exynos/exynos7_drm_decon.c b/drivers/gpu/drm/exynos/exynos7_drm_decon.c
>>> index 7a99237..4e63a9c 100644
>>> --- a/drivers/gpu/drm/exynos/exynos7_drm_decon.c
>>> +++ b/drivers/gpu/drm/exynos/exynos7_drm_decon.c
>>> @@ -442,25 +442,25 @@ static void decon_update_plane(struct exynos_drm_crtc *crtc,
>>> DRM_DEBUG_KMS("start addr = 0x%lx\n",
>>> (unsigned long)val);
>>> DRM_DEBUG_KMS("ovl_width = %d, ovl_height = %d\n",
>>> - plane->crtc_width, plane->crtc_height);
>>> + plane->crtc_w, plane->crtc_h);
>>>
>>> /*
>>> * OSD position.
>>> * In case the window layout goes of LCD layout, DECON fails.
>>> */
>>> - if ((plane->crtc_x + plane->crtc_width) > mode->hdisplay)
>>> - plane->crtc_x = mode->hdisplay - plane->crtc_width;
>>> - if ((plane->crtc_y + plane->crtc_height) > mode->vdisplay)
>>> - plane->crtc_y = mode->vdisplay - plane->crtc_height;
>>> + if ((plane->crtc_x + plane->crtc_w) > mode->hdisplay)
>>> + plane->crtc_x = mode->hdisplay - plane->crtc_w;
>>> + if ((plane->crtc_y + plane->crtc_h) > mode->vdisplay)
>>> + plane->crtc_y = mode->vdisplay - plane->crtc_h;
>>>
>>> val = VIDOSDxA_TOPLEFT_X(plane->crtc_x) |
>>> VIDOSDxA_TOPLEFT_Y(plane->crtc_y);
>>> writel(val, ctx->regs + VIDOSD_A(win));
>>>
>>> - last_x = plane->crtc_x + plane->crtc_width;
>>> + last_x = plane->crtc_x + plane->crtc_w;
>>> if (last_x)
>>> last_x--;
>>> - last_y = plane->crtc_y + plane->crtc_height;
>>> + last_y = plane->crtc_y + plane->crtc_h;
>>> if (last_y)
>>> last_y--;
>>>
>>> diff --git a/drivers/gpu/drm/exynos/exynos_drm_drv.h b/drivers/gpu/drm/exynos/exynos_drm_drv.h
>>> index b83d487..7c6196e 100644
>>> --- a/drivers/gpu/drm/exynos/exynos_drm_drv.h
>>> +++ b/drivers/gpu/drm/exynos/exynos_drm_drv.h
>>> @@ -51,12 +51,12 @@ enum exynos_drm_output_type {
>>> * - the unit is screen coordinates.
>>> * @src_y: offset y on a framebuffer to be displayed.
>>> * - the unit is screen coordinates.
>>> - * @src_width: width of a partial image to be displayed from framebuffer.
>>> - * @src_height: height of a partial image to be displayed from framebuffer.
>>> + * @src_w: width of a partial image to be displayed from framebuffer.
>>> + * @src_h: height of a partial image to be displayed from framebuffer.
>>> * @crtc_x: offset x on hardware screen.
>>> * @crtc_y: offset y on hardware screen.
>>> - * @crtc_width: window width to be displayed (hardware screen).
>>> - * @crtc_height: window height to be displayed (hardware screen).
>>> + * @crtc_w: window width to be displayed (hardware screen).
>>> + * @crtc_h: window height to be displayed (hardware screen).
>>> * @h_ratio: horizontal scaling ratio, 16.16 fixed point
>>> * @v_ratio: vertical scaling ratio, 16.16 fixed point
>>> * @dma_addr: array of bus(accessed by dma) address to the memory region
>>> @@ -73,12 +73,12 @@ struct exynos_drm_plane {
>>> struct drm_plane base;
>>> unsigned int src_x;
>>> unsigned int src_y;
>>> - unsigned int src_width;
>>> - unsigned int src_height;
>>> + unsigned int src_w;
>>> + unsigned int src_h;
>>> unsigned int crtc_x;
>>> unsigned int crtc_y;
>>> - unsigned int crtc_width;
>>> - unsigned int crtc_height;
>>> + unsigned int crtc_w;
>>> + unsigned int crtc_h;
>>> unsigned int h_ratio;
>>> unsigned int v_ratio;
>>> dma_addr_t dma_addr[MAX_FB_BUFFER];
>>> diff --git a/drivers/gpu/drm/exynos/exynos_drm_fimd.c b/drivers/gpu/drm/exynos/exynos_drm_fimd.c
>>> index 2ece83b..920727b 100644
>>> --- a/drivers/gpu/drm/exynos/exynos_drm_fimd.c
>>> +++ b/drivers/gpu/drm/exynos/exynos_drm_fimd.c
>>> @@ -659,18 +659,18 @@ static void fimd_update_plane(struct exynos_drm_crtc *crtc,
>>> writel(val, ctx->regs + VIDWx_BUF_START(win, 0));
>>>
>>> /* buffer end address */
>>> - size = pitch * plane->crtc_height;
>>> + size = pitch * plane->crtc_h;
>>> val = (unsigned long)(dma_addr + size);
>>> writel(val, ctx->regs + VIDWx_BUF_END(win, 0));
>>>
>>> DRM_DEBUG_KMS("start addr = 0x%lx, end addr = 0x%lx, size = 0x%lx\n",
>>> (unsigned long)dma_addr, val, size);
>>> DRM_DEBUG_KMS("ovl_width = %d, ovl_height = %d\n",
>>> - plane->crtc_width, plane->crtc_height);
>>> + plane->crtc_w, plane->crtc_h);
>>>
>>> /* buffer size */
>>> - buf_offsize = pitch - (plane->crtc_width * bpp);
>>> - line_size = plane->crtc_width * bpp;
>>> + buf_offsize = pitch - (plane->crtc_w * bpp);
>>> + line_size = plane->crtc_w * bpp;
>>> val = VIDW_BUF_SIZE_OFFSET(buf_offsize) |
>>> VIDW_BUF_SIZE_PAGEWIDTH(line_size) |
>>> VIDW_BUF_SIZE_OFFSET_E(buf_offsize) |
>>> @@ -684,10 +684,10 @@ static void fimd_update_plane(struct exynos_drm_crtc *crtc,
>>> VIDOSDxA_TOPLEFT_Y_E(plane->crtc_y);
>>> writel(val, ctx->regs + VIDOSD_A(win));
>>>
>>> - last_x = plane->crtc_x + plane->crtc_width;
>>> + last_x = plane->crtc_x + plane->crtc_w;
>>> if (last_x)
>>> last_x--;
>>> - last_y = plane->crtc_y + plane->crtc_height;
>>> + last_y = plane->crtc_y + plane->crtc_h;
>>> if (last_y)
>>> last_y--;
>>>
>>> @@ -704,7 +704,7 @@ static void fimd_update_plane(struct exynos_drm_crtc *crtc,
>>> u32 offset = VIDOSD_D(win);
>>> if (win == 0)
>>> offset = VIDOSD_C(win);
>>> - val = plane->crtc_width * plane->crtc_height;
>>> + val = plane->crtc_w * plane->crtc_h;
>>> writel(val, ctx->regs + offset);
>>>
>>> DRM_DEBUG_KMS("osd size = 0x%x\n", (unsigned int)val);
>>> diff --git a/drivers/gpu/drm/exynos/exynos_drm_plane.c b/drivers/gpu/drm/exynos/exynos_drm_plane.c
>>> index 9602797..bebc957 100644
>>> --- a/drivers/gpu/drm/exynos/exynos_drm_plane.c
>>> +++ b/drivers/gpu/drm/exynos/exynos_drm_plane.c
>>> @@ -97,17 +97,18 @@ static void exynos_plane_mode_set(struct drm_plane *plane,
>>> /* set drm framebuffer data. */
>>> exynos_plane->src_x = src_x;
>>> exynos_plane->src_y = src_y;
>>> - exynos_plane->src_width = (actual_w * exynos_plane->h_ratio) >> 16;
>>> - exynos_plane->src_height = (actual_h * exynos_plane->v_ratio) >> 16;
>>> + exynos_plane->src_w = (actual_w * exynos_plane->h_ratio) >> 16;
>>> + exynos_plane->src_h = (actual_h * exynos_plane->v_ratio) >> 16;
>>>
>>> /* set plane range to be displayed. */
>>> exynos_plane->crtc_x = crtc_x;
>>> exynos_plane->crtc_y = crtc_y;
>>> - exynos_plane->crtc_width = actual_w;
>>> - exynos_plane->crtc_height = actual_h;
>>> + exynos_plane->crtc_w = actual_w;
>>> + exynos_plane->crtc_h = actual_h;
>>> +
>>> DRM_DEBUG_KMS("plane : offset_x/y(%d,%d), width/height(%d,%d)",
>>> exynos_plane->crtc_x, exynos_plane->crtc_y,
>>> - exynos_plane->crtc_width, exynos_plane->crtc_height);
>>> + exynos_plane->crtc_w, exynos_plane->crtc_h);
>>>
>>> plane->crtc = crtc;
>>> }
>>> diff --git a/drivers/gpu/drm/exynos/exynos_mixer.c b/drivers/gpu/drm/exynos/exynos_mixer.c
>>> index 4fbafc9..f8ef8c6 100644
>>> --- a/drivers/gpu/drm/exynos/exynos_mixer.c
>>> +++ b/drivers/gpu/drm/exynos/exynos_mixer.c
>>> @@ -443,19 +443,19 @@ static void vp_video_buffer(struct mixer_context *ctx,
>>> vp_reg_write(res, VP_IMG_SIZE_C, VP_IMG_HSIZE(fb->pitches[0]) |
>>> VP_IMG_VSIZE(fb->height / 2));
>>>
>>> - vp_reg_write(res, VP_SRC_WIDTH, plane->src_width);
>>> - vp_reg_write(res, VP_SRC_HEIGHT, plane->src_height);
>>> + vp_reg_write(res, VP_SRC_WIDTH, plane->src_w);
>>> + vp_reg_write(res, VP_SRC_HEIGHT, plane->src_h);
>>> vp_reg_write(res, VP_SRC_H_POSITION,
>>> VP_SRC_H_POSITION_VAL(plane->src_x));
>>> vp_reg_write(res, VP_SRC_V_POSITION, plane->src_y);
>>>
>>> - vp_reg_write(res, VP_DST_WIDTH, plane->crtc_width);
>>> + vp_reg_write(res, VP_DST_WIDTH, plane->crtc_w);
>>> vp_reg_write(res, VP_DST_H_POSITION, plane->crtc_x);
>>> if (ctx->interlace) {
>>> - vp_reg_write(res, VP_DST_HEIGHT, plane->crtc_height / 2);
>>> + vp_reg_write(res, VP_DST_HEIGHT, plane->crtc_h / 2);
>>> vp_reg_write(res, VP_DST_V_POSITION, plane->crtc_y / 2);
>>> } else {
>>> - vp_reg_write(res, VP_DST_HEIGHT, plane->crtc_height);
>>> + vp_reg_write(res, VP_DST_HEIGHT, plane->crtc_h);
>>> vp_reg_write(res, VP_DST_V_POSITION, plane->crtc_y);
>>> }
>>>
>>> @@ -492,15 +492,15 @@ static void mixer_layer_update(struct mixer_context *ctx)
>>> static int mixer_setup_scale(const struct exynos_drm_plane *plane,
>>> unsigned int *x_ratio, unsigned int *y_ratio)
>>> {
>>> - if (plane->crtc_width != plane->src_width) {
>>> - if (plane->crtc_width == 2 * plane->src_width)
>>> + if (plane->crtc_w != plane->src_w) {
>>> + if (plane->crtc_w == 2 * plane->src_w)
>>> *x_ratio = 1;
>>> else
>>> goto fail;
>>> }
>>>
>>> - if (plane->crtc_height != plane->src_height) {
>>> - if (plane->crtc_height == 2 * plane->src_height)
>>> + if (plane->crtc_h != plane->src_h) {
>>> + if (plane->crtc_h == 2 * plane->src_h)
>>> *y_ratio = 1;
>>> else
>>> goto fail;
>>> @@ -589,8 +589,8 @@ static void mixer_graph_buffer(struct mixer_context *ctx,
>>> mixer_reg_write(res, MXR_RESOLUTION, val);
>>> }
>>>
>>> - val = MXR_GRP_WH_WIDTH(plane->src_width);
>>> - val |= MXR_GRP_WH_HEIGHT(plane->src_height);
>>> + val = MXR_GRP_WH_WIDTH(plane->src_w);
>>> + val |= MXR_GRP_WH_HEIGHT(plane->src_h);
>>> val |= MXR_GRP_WH_H_SCALE(x_ratio);
>>> val |= MXR_GRP_WH_V_SCALE(y_ratio);
>>> mixer_reg_write(res, MXR_GRAPHIC_WH(win), val);
>>> --
>>> 2.1.0
>>>
>>
>> Gustavo
>> --
>> To unsubscribe from this list: send the line "unsubscribe linux-samsung-soc" in
>> the body of a message to majordomo at vger.kernel.org
>> More majordomo info at http://vger.kernel.org/majordomo-info.html
>>
>
More information about the dri-devel
mailing list