* [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 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
* 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
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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox