* [PATCH v2] drm/exynos: add has_vtsel flag
@ 2014-11-14 2:36 Joonyoung Shim
2014-11-14 2:36 ` [PATCH 1/2] drm/exynos: move triggering checking Joonyoung Shim
` (2 more replies)
0 siblings, 3 replies; 7+ messages in thread
From: Joonyoung Shim @ 2014-11-14 2:36 UTC (permalink / raw)
To: dri-devel; +Cc: linux-samsung-soc, inki.dae, sw0312.kim, yj44.cho
The exynos fimd provides video type selection bits from system register
but exynos3 series don't has it, so needs has_vtsel flag and we can
distinguish whether set video type selection bits.
Signed-off-by: Joonyoung Shim <jy0922.shim@samsung.com>
---
Changelog from v1:
- rebase on latest exynos-drm-next branch
- add has_vtsel for exynos4415
drivers/gpu/drm/exynos/exynos_drm_fimd.c | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/exynos/exynos_drm_fimd.c b/drivers/gpu/drm/exynos/exynos_drm_fimd.c
index 5cc57f7..93b263e 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_fimd.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_fimd.c
@@ -96,6 +96,7 @@ struct fimd_driver_data {
unsigned int has_clksel:1;
unsigned int has_limited_fmt:1;
unsigned int has_vidoutcon:1;
+ unsigned int has_vtsel:1;
};
static struct fimd_driver_data s3c64xx_fimd_driver_data = {
@@ -118,6 +119,7 @@ static struct fimd_driver_data exynos4_fimd_driver_data = {
.lcdblk_vt_shift = 10,
.lcdblk_bypass_shift = 1,
.has_shadowcon = 1,
+ .has_vtsel = 1,
};
static struct fimd_driver_data exynos4415_fimd_driver_data = {
@@ -127,6 +129,7 @@ static struct fimd_driver_data exynos4415_fimd_driver_data = {
.lcdblk_bypass_shift = 1,
.has_shadowcon = 1,
.has_vidoutcon = 1,
+ .has_vtsel = 1,
};
static struct fimd_driver_data exynos5_fimd_driver_data = {
@@ -136,6 +139,7 @@ static struct fimd_driver_data exynos5_fimd_driver_data = {
.lcdblk_bypass_shift = 15,
.has_shadowcon = 1,
.has_vidoutcon = 1,
+ .has_vtsel = 1,
};
struct fimd_win_data {
@@ -354,7 +358,8 @@ static void fimd_commit(struct exynos_drm_manager *mgr)
writel(0, timing_base + I80IFCONFBx(0));
/* set video type selection to I80 interface */
- if (ctx->sysreg && regmap_update_bits(ctx->sysreg,
+ if (driver_data->has_vtsel && ctx->sysreg &&
+ regmap_update_bits(ctx->sysreg,
driver_data->lcdblk_offset,
0x3 << driver_data->lcdblk_vt_shift,
0x1 << driver_data->lcdblk_vt_shift)) {
--
1.9.1
^ permalink raw reply related [flat|nested] 7+ messages in thread* [PATCH 1/2] drm/exynos: move triggering checking
2014-11-14 2:36 [PATCH v2] drm/exynos: add has_vtsel flag Joonyoung Shim
@ 2014-11-14 2:36 ` Joonyoung Shim
2014-11-14 2:36 ` [PATCH 2/2] drm/exynos: use irq_flags instead of triggering Joonyoung Shim
2014-11-14 2:56 ` [PATCH v2] drm/exynos: add has_vtsel flag Inki Dae
2 siblings, 0 replies; 7+ messages in thread
From: Joonyoung Shim @ 2014-11-14 2:36 UTC (permalink / raw)
To: dri-devel; +Cc: linux-samsung-soc, sw0312.kim
It's better to be checking whether triggerring in fimd_trigger function.
Also it will return if in triggerring on fimd_te_handler, then it can't
execute remain codes.
Signed-off-by: Joonyoung Shim <jy0922.shim@samsung.com>
---
Based on lastest exynos-drm-next branch.
drivers/gpu/drm/exynos/exynos_drm_fimd.c | 14 +++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)
diff --git a/drivers/gpu/drm/exynos/exynos_drm_fimd.c b/drivers/gpu/drm/exynos/exynos_drm_fimd.c
index 7593f62..033b18b 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_fimd.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_fimd.c
@@ -944,6 +944,13 @@ static void fimd_trigger(struct device *dev)
void *timing_base = ctx->regs + driver_data->timing_base;
u32 reg;
+ /*
+ * Skips to trigger if in triggering state, because multiple triggering
+ * requests can cause panel reset.
+ */
+ if (atomic_read(&ctx->triggering))
+ return;
+
atomic_set(&ctx->triggering, 1);
reg = readl(ctx->regs + VIDINTCON0);
@@ -964,13 +971,6 @@ static void fimd_te_handler(struct exynos_drm_manager *mgr)
if (ctx->pipe < 0 || !ctx->drm_dev)
return;
- /*
- * Skips to trigger if in triggering state, because multiple triggering
- * requests can cause panel reset.
- */
- if (atomic_read(&ctx->triggering))
- return;
-
/*
* If there is a page flip request, triggers and handles the page flip
* event so that current fb can be updated into panel GRAM.
--
1.9.1
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 2/2] drm/exynos: use irq_flags instead of triggering
2014-11-14 2:36 [PATCH v2] drm/exynos: add has_vtsel flag Joonyoung Shim
2014-11-14 2:36 ` [PATCH 1/2] drm/exynos: move triggering checking Joonyoung Shim
@ 2014-11-14 2:36 ` Joonyoung Shim
2014-11-14 5:01 ` YoungJun Cho
2014-11-14 2:56 ` [PATCH v2] drm/exynos: add has_vtsel flag Inki Dae
2 siblings, 1 reply; 7+ messages in thread
From: Joonyoung Shim @ 2014-11-14 2:36 UTC (permalink / raw)
To: dri-devel; +Cc: linux-samsung-soc, sw0312.kim
The drm_handle_vblank should be called whenever be vsync, te interrupt
means vsync on i80 interface.
Signed-off-by: Joonyoung Shim <jy0922.shim@samsung.com>
---
Based on lastest exynos-drm-next branch and patch of Youngjun Cho
("drm/exynos: fimd: move handle vblank position in TE handler").
drivers/gpu/drm/exynos/exynos_drm_fimd.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/exynos/exynos_drm_fimd.c b/drivers/gpu/drm/exynos/exynos_drm_fimd.c
index 033b18b..5cc57f7 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_fimd.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_fimd.c
@@ -984,7 +984,7 @@ static void fimd_te_handler(struct exynos_drm_manager *mgr)
wake_up(&ctx->wait_vsync_queue);
}
- if (!atomic_read(&ctx->triggering))
+ if (test_bit(0, &ctx->irq_flags))
drm_handle_vblank(ctx->drm_dev, ctx->pipe);
}
--
1.9.1
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply related [flat|nested] 7+ messages in thread* Re: [PATCH 2/2] drm/exynos: use irq_flags instead of triggering
2014-11-14 2:36 ` [PATCH 2/2] drm/exynos: use irq_flags instead of triggering Joonyoung Shim
@ 2014-11-14 5:01 ` YoungJun Cho
2014-11-14 5:12 ` Joonyoung Shim
0 siblings, 1 reply; 7+ messages in thread
From: YoungJun Cho @ 2014-11-14 5:01 UTC (permalink / raw)
To: Joonyoung Shim, dri-devel; +Cc: linux-samsung-soc, sw0312.kim
Hi JoonYoung,
On 11/14/2014 11:36 AM, Joonyoung Shim wrote:
> The drm_handle_vblank should be called whenever be vsync, te interrupt
> means vsync on i80 interface.
That's right.
>
> Signed-off-by: Joonyoung Shim <jy0922.shim@samsung.com>
> ---
> Based on lastest exynos-drm-next branch and patch of Youngjun Cho
> ("drm/exynos: fimd: move handle vblank position in TE handler").
>
> drivers/gpu/drm/exynos/exynos_drm_fimd.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/exynos/exynos_drm_fimd.c b/drivers/gpu/drm/exynos/exynos_drm_fimd.c
> index 033b18b..5cc57f7 100644
> --- a/drivers/gpu/drm/exynos/exynos_drm_fimd.c
> +++ b/drivers/gpu/drm/exynos/exynos_drm_fimd.c
> @@ -984,7 +984,7 @@ static void fimd_te_handler(struct exynos_drm_manager *mgr)
> wake_up(&ctx->wait_vsync_queue);
> }
>
> - if (!atomic_read(&ctx->triggering))
> + if (test_bit(0, &ctx->irq_flags))
> drm_handle_vblank(ctx->drm_dev, ctx->pipe);
But after triggering, "fimd_irq_handler()" is called by "lcd_sys"
interrupt and that calls "drm_handle_vblank()".
So I think "fimd_te_handler()" calls "drm_handle_vblank()" only
non-triggering condition.
Thank you.
Best regards YJ
> }
>
>
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply [flat|nested] 7+ messages in thread* Re: [PATCH 2/2] drm/exynos: use irq_flags instead of triggering
2014-11-14 5:01 ` YoungJun Cho
@ 2014-11-14 5:12 ` Joonyoung Shim
2014-11-14 5:28 ` YoungJun Cho
0 siblings, 1 reply; 7+ messages in thread
From: Joonyoung Shim @ 2014-11-14 5:12 UTC (permalink / raw)
To: YoungJun Cho, dri-devel; +Cc: linux-samsung-soc, sw0312.kim
Hi,
On 11/14/2014 02:01 PM, YoungJun Cho wrote:
> Hi JoonYoung,
>
> On 11/14/2014 11:36 AM, Joonyoung Shim wrote:
>> The drm_handle_vblank should be called whenever be vsync, te interrupt
>> means vsync on i80 interface.
>
> That's right.
>
>>
>> Signed-off-by: Joonyoung Shim <jy0922.shim@samsung.com>
>> ---
>> Based on lastest exynos-drm-next branch and patch of Youngjun Cho
>> ("drm/exynos: fimd: move handle vblank position in TE handler").
>>
>> drivers/gpu/drm/exynos/exynos_drm_fimd.c | 2 +-
>> 1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/drivers/gpu/drm/exynos/exynos_drm_fimd.c b/drivers/gpu/drm/exynos/exynos_drm_fimd.c
>> index 033b18b..5cc57f7 100644
>> --- a/drivers/gpu/drm/exynos/exynos_drm_fimd.c
>> +++ b/drivers/gpu/drm/exynos/exynos_drm_fimd.c
>> @@ -984,7 +984,7 @@ static void fimd_te_handler(struct exynos_drm_manager *mgr)
>> wake_up(&ctx->wait_vsync_queue);
>> }
>>
>> - if (!atomic_read(&ctx->triggering))
>> + if (test_bit(0, &ctx->irq_flags))
>> drm_handle_vblank(ctx->drm_dev, ctx->pipe);
>
> But after triggering, "fimd_irq_handler()" is called by "lcd_sys" interrupt and that calls "drm_handle_vblank()".
>
I missed the routine but i think drm_handle_vblank should be called by
vsync interrupt handler. As you know, fimd_irq_handler is not vsync
interrupt handler on i80 interface.
> So I think "fimd_te_handler()" calls "drm_handle_vblank()" only non-triggering condition.
>
> Thank you.
> Best regards YJ
>
>> }
>>
>>
>
>
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply [flat|nested] 7+ messages in thread* Re: [PATCH 2/2] drm/exynos: use irq_flags instead of triggering
2014-11-14 5:12 ` Joonyoung Shim
@ 2014-11-14 5:28 ` YoungJun Cho
0 siblings, 0 replies; 7+ messages in thread
From: YoungJun Cho @ 2014-11-14 5:28 UTC (permalink / raw)
To: Joonyoung Shim, dri-devel; +Cc: linux-samsung-soc, sw0312.kim
Hi JoonYoung,
On 11/14/2014 02:12 PM, Joonyoung Shim wrote:
> Hi,
>
> On 11/14/2014 02:01 PM, YoungJun Cho wrote:
>> Hi JoonYoung,
>>
>> On 11/14/2014 11:36 AM, Joonyoung Shim wrote:
>>> The drm_handle_vblank should be called whenever be vsync, te interrupt
>>> means vsync on i80 interface.
>>
>> That's right.
>>
>>>
>>> Signed-off-by: Joonyoung Shim <jy0922.shim@samsung.com>
>>> ---
>>> Based on lastest exynos-drm-next branch and patch of Youngjun Cho
>>> ("drm/exynos: fimd: move handle vblank position in TE handler").
>>>
>>> drivers/gpu/drm/exynos/exynos_drm_fimd.c | 2 +-
>>> 1 file changed, 1 insertion(+), 1 deletion(-)
>>>
>>> diff --git a/drivers/gpu/drm/exynos/exynos_drm_fimd.c b/drivers/gpu/drm/exynos/exynos_drm_fimd.c
>>> index 033b18b..5cc57f7 100644
>>> --- a/drivers/gpu/drm/exynos/exynos_drm_fimd.c
>>> +++ b/drivers/gpu/drm/exynos/exynos_drm_fimd.c
>>> @@ -984,7 +984,7 @@ static void fimd_te_handler(struct exynos_drm_manager *mgr)
>>> wake_up(&ctx->wait_vsync_queue);
>>> }
>>>
>>> - if (!atomic_read(&ctx->triggering))
>>> + if (test_bit(0, &ctx->irq_flags))
>>> drm_handle_vblank(ctx->drm_dev, ctx->pipe);
>>
>> But after triggering, "fimd_irq_handler()" is called by "lcd_sys" interrupt and that calls "drm_handle_vblank()".
>>
>
> I missed the routine but i think drm_handle_vblank should be called by
> vsync interrupt handler. As you know, fimd_irq_handler is not vsync
> interrupt handler on i80 interface.
That sounds reasonable.
For that, we should modify "fimd_irq_handler()" not to call
"drm_handle_vblank()" in I80 interface.
Thank you.
Best regards YJ
>
>> So I think "fimd_te_handler()" calls "drm_handle_vblank()" only non-triggering condition.
>>
>> Thank you.
>> Best regards YJ
>>
>>> }
>>>
>>>
>>
>>
>
>
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v2] drm/exynos: add has_vtsel flag
2014-11-14 2:36 [PATCH v2] drm/exynos: add has_vtsel flag Joonyoung Shim
2014-11-14 2:36 ` [PATCH 1/2] drm/exynos: move triggering checking Joonyoung Shim
2014-11-14 2:36 ` [PATCH 2/2] drm/exynos: use irq_flags instead of triggering Joonyoung Shim
@ 2014-11-14 2:56 ` Inki Dae
2 siblings, 0 replies; 7+ messages in thread
From: Inki Dae @ 2014-11-14 2:56 UTC (permalink / raw)
To: Joonyoung Shim; +Cc: dri-devel, linux-samsung-soc, sw0312.kim, yj44.cho
On 2014년 11월 14일 11:36, Joonyoung Shim wrote:
> The exynos fimd provides video type selection bits from system register
> but exynos3 series don't has it, so needs has_vtsel flag and we can
> distinguish whether set video type selection bits.
Applied.
Thanks,
Inki Dae
>
> Signed-off-by: Joonyoung Shim <jy0922.shim@samsung.com>
> ---
> Changelog from v1:
> - rebase on latest exynos-drm-next branch
> - add has_vtsel for exynos4415
>
> drivers/gpu/drm/exynos/exynos_drm_fimd.c | 7 ++++++-
> 1 file changed, 6 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/exynos/exynos_drm_fimd.c b/drivers/gpu/drm/exynos/exynos_drm_fimd.c
> index 5cc57f7..93b263e 100644
> --- a/drivers/gpu/drm/exynos/exynos_drm_fimd.c
> +++ b/drivers/gpu/drm/exynos/exynos_drm_fimd.c
> @@ -96,6 +96,7 @@ struct fimd_driver_data {
> unsigned int has_clksel:1;
> unsigned int has_limited_fmt:1;
> unsigned int has_vidoutcon:1;
> + unsigned int has_vtsel:1;
> };
>
> static struct fimd_driver_data s3c64xx_fimd_driver_data = {
> @@ -118,6 +119,7 @@ static struct fimd_driver_data exynos4_fimd_driver_data = {
> .lcdblk_vt_shift = 10,
> .lcdblk_bypass_shift = 1,
> .has_shadowcon = 1,
> + .has_vtsel = 1,
> };
>
> static struct fimd_driver_data exynos4415_fimd_driver_data = {
> @@ -127,6 +129,7 @@ static struct fimd_driver_data exynos4415_fimd_driver_data = {
> .lcdblk_bypass_shift = 1,
> .has_shadowcon = 1,
> .has_vidoutcon = 1,
> + .has_vtsel = 1,
> };
>
> static struct fimd_driver_data exynos5_fimd_driver_data = {
> @@ -136,6 +139,7 @@ static struct fimd_driver_data exynos5_fimd_driver_data = {
> .lcdblk_bypass_shift = 15,
> .has_shadowcon = 1,
> .has_vidoutcon = 1,
> + .has_vtsel = 1,
> };
>
> struct fimd_win_data {
> @@ -354,7 +358,8 @@ static void fimd_commit(struct exynos_drm_manager *mgr)
> writel(0, timing_base + I80IFCONFBx(0));
>
> /* set video type selection to I80 interface */
> - if (ctx->sysreg && regmap_update_bits(ctx->sysreg,
> + if (driver_data->has_vtsel && ctx->sysreg &&
> + regmap_update_bits(ctx->sysreg,
> driver_data->lcdblk_offset,
> 0x3 << driver_data->lcdblk_vt_shift,
> 0x1 << driver_data->lcdblk_vt_shift)) {
>
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2014-11-14 5:28 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-11-14 2:36 [PATCH v2] drm/exynos: add has_vtsel flag Joonyoung Shim
2014-11-14 2:36 ` [PATCH 1/2] drm/exynos: move triggering checking Joonyoung Shim
2014-11-14 2:36 ` [PATCH 2/2] drm/exynos: use irq_flags instead of triggering Joonyoung Shim
2014-11-14 5:01 ` YoungJun Cho
2014-11-14 5:12 ` Joonyoung Shim
2014-11-14 5:28 ` YoungJun Cho
2014-11-14 2:56 ` [PATCH v2] drm/exynos: add has_vtsel flag Inki Dae
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.