dri-devel Archive on lore.kernel.org
 help / color / mirror / Atom feed
* [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