linux-omap.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 1/2] OMAPDSS: use DISPC register to detect context loss
@ 2014-02-14  8:29 Tomi Valkeinen
  2014-02-14  8:29 ` [PATCH 2/2] OMAPDSS: Remove unused get_context_loss_count support Tomi Valkeinen
  2014-02-18 11:39 ` [PATCH 1/2] OMAPDSS: use DISPC register to detect context loss Archit Taneja
  0 siblings, 2 replies; 3+ messages in thread
From: Tomi Valkeinen @ 2014-02-14  8:29 UTC (permalink / raw)
  To: linux-fbdev, linux-omap, Archit Taneja; +Cc: Nishanth Menon, Tomi Valkeinen

Instead of relying on the OMAP specific
omap_pm_get_dev_context_loss_count() to detect register context loss, we
can achieve the same in a much simpler way by just observing the DISPC
registers.

We always set DISPC's load mode to LOAD_FRAME_ONLY, which is not the
reset value. Thus we can just observe the load mode to see if we have
lost register context.

Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
---
 drivers/video/omap2/dss/dispc.c | 24 +++++++++++-------------
 1 file changed, 11 insertions(+), 13 deletions(-)

diff --git a/drivers/video/omap2/dss/dispc.c b/drivers/video/omap2/dss/dispc.c
index bbeb8dd7f108..1659aa912d2b 100644
--- a/drivers/video/omap2/dss/dispc.c
+++ b/drivers/video/omap2/dss/dispc.c
@@ -100,8 +100,6 @@ static struct {
 	struct platform_device *pdev;
 	void __iomem    *base;
 
-	int		ctx_loss_cnt;
-
 	int irq;
 
 	unsigned long core_clk_rate;
@@ -357,29 +355,20 @@ static void dispc_save_context(void)
 	if (dss_has_feature(FEAT_CORE_CLK_DIV))
 		SR(DIVISOR);
 
-	dispc.ctx_loss_cnt = dss_get_ctx_loss_count();
 	dispc.ctx_valid = true;
 
-	DSSDBG("context saved, ctx_loss_count %d\n", dispc.ctx_loss_cnt);
+	DSSDBG("context saved\n");
 }
 
 static void dispc_restore_context(void)
 {
-	int i, j, ctx;
+	int i, j;
 
 	DSSDBG("dispc_restore_context\n");
 
 	if (!dispc.ctx_valid)
 		return;
 
-	ctx = dss_get_ctx_loss_count();
-
-	if (ctx >= 0 && ctx == dispc.ctx_loss_cnt)
-		return;
-
-	DSSDBG("ctx_loss_count: saved %d, current %d\n",
-			dispc.ctx_loss_cnt, ctx);
-
 	/*RR(IRQENABLE);*/
 	/*RR(CONTROL);*/
 	RR(CONFIG);
@@ -3768,6 +3757,15 @@ static int dispc_runtime_suspend(struct device *dev)
 
 static int dispc_runtime_resume(struct device *dev)
 {
+	/*
+	 * The reset value for load mode is 0 (OMAP_DSS_LOAD_CLUT_AND_FRAME)
+	 * but we always initialize it to 2 (OMAP_DSS_LOAD_FRAME_ONLY) in
+	 * _omap_dispc_initial_config(). We can thus use it to detect if
+	 * we have lost register context.
+	 */
+	if (REG_GET(DISPC_CONFIG, 2, 1) == OMAP_DSS_LOAD_FRAME_ONLY)
+		return 0;
+
 	_omap_dispc_initial_config();
 
 	dispc_restore_context();
-- 
1.8.3.2


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* [PATCH 2/2] OMAPDSS: Remove unused get_context_loss_count support
  2014-02-14  8:29 [PATCH 1/2] OMAPDSS: use DISPC register to detect context loss Tomi Valkeinen
@ 2014-02-14  8:29 ` Tomi Valkeinen
  2014-02-18 11:39 ` [PATCH 1/2] OMAPDSS: use DISPC register to detect context loss Archit Taneja
  1 sibling, 0 replies; 3+ messages in thread
From: Tomi Valkeinen @ 2014-02-14  8:29 UTC (permalink / raw)
  To: linux-fbdev, linux-omap, Archit Taneja; +Cc: Nishanth Menon, Tomi Valkeinen

The omapdss driver no longer uses get_context_loss_count call, so we can
remove it.

Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
---
 arch/arm/mach-omap2/display.c |  1 -
 drivers/video/omap2/dss/dss.c | 16 ----------------
 drivers/video/omap2/dss/dss.h |  2 --
 include/video/omapdss.h       |  1 -
 4 files changed, 20 deletions(-)

diff --git a/arch/arm/mach-omap2/display.c b/arch/arm/mach-omap2/display.c
index 4cf165502b35..93ebb4007ea9 100644
--- a/arch/arm/mach-omap2/display.c
+++ b/arch/arm/mach-omap2/display.c
@@ -301,7 +301,6 @@ int __init omap_display_init(struct omap_dss_board_info *board_data)
 	board_data->version = ver;
 	board_data->dsi_enable_pads = omap_dsi_enable_pads;
 	board_data->dsi_disable_pads = omap_dsi_disable_pads;
-	board_data->get_context_loss_count = omap_pm_get_dev_context_loss_count;
 	board_data->set_min_bus_tput = omap_dss_set_min_bus_tput;
 
 	omap_display_device.dev.platform_data = board_data;
diff --git a/drivers/video/omap2/dss/dss.c b/drivers/video/omap2/dss/dss.c
index 9a145da35ad3..96e400c51001 100644
--- a/drivers/video/omap2/dss/dss.c
+++ b/drivers/video/omap2/dss/dss.c
@@ -154,22 +154,6 @@ static void dss_restore_context(void)
 #undef SR
 #undef RR
 
-int dss_get_ctx_loss_count(void)
-{
-	struct platform_device *core_pdev = dss_get_core_pdev();
-	struct omap_dss_board_info *board_data = core_pdev->dev.platform_data;
-	int cnt;
-
-	if (!board_data->get_context_loss_count)
-		return -ENOENT;
-
-	cnt = board_data->get_context_loss_count(&dss.pdev->dev);
-
-	WARN_ONCE(cnt < 0, "get_context_loss_count failed: %d\n", cnt);
-
-	return cnt;
-}
-
 void dss_sdi_init(int datapairs)
 {
 	u32 l;
diff --git a/drivers/video/omap2/dss/dss.h b/drivers/video/omap2/dss/dss.h
index 057f24c8a332..570f7ed2bcbc 100644
--- a/drivers/video/omap2/dss/dss.h
+++ b/drivers/video/omap2/dss/dss.h
@@ -225,8 +225,6 @@ void dss_dump_clocks(struct seq_file *s);
 void dss_debug_dump_clocks(struct seq_file *s);
 #endif
 
-int dss_get_ctx_loss_count(void);
-
 void dss_sdi_init(int datapairs);
 int dss_sdi_enable(void);
 void dss_sdi_disable(void);
diff --git a/include/video/omapdss.h b/include/video/omapdss.h
index 3d7c51a6f9ff..1eb9aa605eee 100644
--- a/include/video/omapdss.h
+++ b/include/video/omapdss.h
@@ -323,7 +323,6 @@ enum omapdss_version {
 
 /* Board specific data */
 struct omap_dss_board_info {
-	int (*get_context_loss_count)(struct device *dev);
 	int num_devices;
 	struct omap_dss_device **devices;
 	struct omap_dss_device *default_device;
-- 
1.8.3.2


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH 1/2] OMAPDSS: use DISPC register to detect context loss
  2014-02-14  8:29 [PATCH 1/2] OMAPDSS: use DISPC register to detect context loss Tomi Valkeinen
  2014-02-14  8:29 ` [PATCH 2/2] OMAPDSS: Remove unused get_context_loss_count support Tomi Valkeinen
@ 2014-02-18 11:39 ` Archit Taneja
  1 sibling, 0 replies; 3+ messages in thread
From: Archit Taneja @ 2014-02-18 11:39 UTC (permalink / raw)
  To: Tomi Valkeinen, linux-fbdev, linux-omap; +Cc: Nishanth Menon

On Friday 14 February 2014 01:59 PM, Tomi Valkeinen wrote:
> Instead of relying on the OMAP specific
> omap_pm_get_dev_context_loss_count() to detect register context loss, we
> can achieve the same in a much simpler way by just observing the DISPC
> registers.
>
> We always set DISPC's load mode to LOAD_FRAME_ONLY, which is not the
> reset value. Thus we can just observe the load mode to see if we have
> lost register context.

Nice trick :p

Reviewed-by: Archit Taneja <archit@ti.com>

Archit

>
> Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
> ---
>   drivers/video/omap2/dss/dispc.c | 24 +++++++++++-------------
>   1 file changed, 11 insertions(+), 13 deletions(-)
>
> diff --git a/drivers/video/omap2/dss/dispc.c b/drivers/video/omap2/dss/dispc.c
> index bbeb8dd7f108..1659aa912d2b 100644
> --- a/drivers/video/omap2/dss/dispc.c
> +++ b/drivers/video/omap2/dss/dispc.c
> @@ -100,8 +100,6 @@ static struct {
>   	struct platform_device *pdev;
>   	void __iomem    *base;
>
> -	int		ctx_loss_cnt;
> -
>   	int irq;
>
>   	unsigned long core_clk_rate;
> @@ -357,29 +355,20 @@ static void dispc_save_context(void)
>   	if (dss_has_feature(FEAT_CORE_CLK_DIV))
>   		SR(DIVISOR);
>
> -	dispc.ctx_loss_cnt = dss_get_ctx_loss_count();
>   	dispc.ctx_valid = true;
>
> -	DSSDBG("context saved, ctx_loss_count %d\n", dispc.ctx_loss_cnt);
> +	DSSDBG("context saved\n");
>   }
>
>   static void dispc_restore_context(void)
>   {
> -	int i, j, ctx;
> +	int i, j;
>
>   	DSSDBG("dispc_restore_context\n");
>
>   	if (!dispc.ctx_valid)
>   		return;
>
> -	ctx = dss_get_ctx_loss_count();
> -
> -	if (ctx >= 0 && ctx == dispc.ctx_loss_cnt)
> -		return;
> -
> -	DSSDBG("ctx_loss_count: saved %d, current %d\n",
> -			dispc.ctx_loss_cnt, ctx);
> -
>   	/*RR(IRQENABLE);*/
>   	/*RR(CONTROL);*/
>   	RR(CONFIG);
> @@ -3768,6 +3757,15 @@ static int dispc_runtime_suspend(struct device *dev)
>
>   static int dispc_runtime_resume(struct device *dev)
>   {
> +	/*
> +	 * The reset value for load mode is 0 (OMAP_DSS_LOAD_CLUT_AND_FRAME)
> +	 * but we always initialize it to 2 (OMAP_DSS_LOAD_FRAME_ONLY) in
> +	 * _omap_dispc_initial_config(). We can thus use it to detect if
> +	 * we have lost register context.
> +	 */
> +	if (REG_GET(DISPC_CONFIG, 2, 1) == OMAP_DSS_LOAD_FRAME_ONLY)
> +		return 0;
> +
>   	_omap_dispc_initial_config();
>
>   	dispc_restore_context();
>


^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2014-02-18 11:39 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-02-14  8:29 [PATCH 1/2] OMAPDSS: use DISPC register to detect context loss Tomi Valkeinen
2014-02-14  8:29 ` [PATCH 2/2] OMAPDSS: Remove unused get_context_loss_count support Tomi Valkeinen
2014-02-18 11:39 ` [PATCH 1/2] OMAPDSS: use DISPC register to detect context loss Archit Taneja

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).