All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 0/6] drm/tilcdc Fixes and cleanups
@ 2016-06-15  8:39 Jyri Sarha
  2016-06-15  8:39 ` [PATCH v2 1/6] drm/tilcdc: Restore old dpms state in pm_resume() Jyri Sarha
                   ` (7 more replies)
  0 siblings, 8 replies; 12+ messages in thread
From: Jyri Sarha @ 2016-06-15  8:39 UTC (permalink / raw)
  To: dri-devel; +Cc: Jyri Sarha, tomi.valkeinen, laurent.pinchart, bcousson

Some fixes and cleanups that should get merged to tilcdc even if my
atomic changes are still a work in progress.

Jyri Sarha (6):
  drm/tilcdc: Restore old dpms state in pm_resume()
  drm/tilcdc: Write to LCDC_END_OF_INT_IND_REG at the end of IRQ
    function
  drm/tilcdc: Move waiting of LCDC_FRAME_DONE IRQ into stop()
  drm/tilcdc: Call drm_crtc_vblank_on() and *_off() in start() and
    stop()
  drm/tilcdc: Refer to panel.txt and tfp410.txt bindings in tilcdc.txt
  drm/tilcdc: Avoid error print by of_graph_get_next_endpoint()

 .../devicetree/bindings/display/tilcdc/tilcdc.txt  |  4 ++
 drivers/gpu/drm/tilcdc/tilcdc_crtc.c               | 66 ++++++++++++++--------
 drivers/gpu/drm/tilcdc/tilcdc_drv.c                |  3 +
 drivers/gpu/drm/tilcdc/tilcdc_drv.h                |  2 +
 drivers/gpu/drm/tilcdc/tilcdc_external.c           | 13 ++++-
 5 files changed, 62 insertions(+), 26 deletions(-)

-- 
1.9.1

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

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

* [PATCH v2 1/6] drm/tilcdc: Restore old dpms state in pm_resume()
  2016-06-15  8:39 [PATCH v2 0/6] drm/tilcdc Fixes and cleanups Jyri Sarha
@ 2016-06-15  8:39 ` Jyri Sarha
  2016-06-16  9:13   ` Tomi Valkeinen
  2016-06-15  8:39 ` [PATCH v2 2/6] drm/tilcdc: Write to LCDC_END_OF_INT_IND_REG at the end of IRQ function Jyri Sarha
                   ` (6 subsequent siblings)
  7 siblings, 1 reply; 12+ messages in thread
From: Jyri Sarha @ 2016-06-15  8:39 UTC (permalink / raw)
  To: dri-devel; +Cc: Jyri Sarha, tomi.valkeinen, laurent.pinchart, bcousson

Restore old dpms state in pm_resume(). The dpms is turned off in
pm_suspend() and it should be restored to its original state in
pm_resume().

Fixes commit 614b3cfeb8d2 ("drm/tilcdc: disable the lcd controller/dma
engine when suspend invoked")

Signed-off-by: Jyri Sarha <jsarha@ti.com>
---
 drivers/gpu/drm/tilcdc/tilcdc_crtc.c | 7 +++++++
 drivers/gpu/drm/tilcdc/tilcdc_drv.c  | 3 +++
 drivers/gpu/drm/tilcdc/tilcdc_drv.h  | 2 ++
 3 files changed, 12 insertions(+)

diff --git a/drivers/gpu/drm/tilcdc/tilcdc_crtc.c b/drivers/gpu/drm/tilcdc/tilcdc_crtc.c
index 79027b1..4d8f9a5 100644
--- a/drivers/gpu/drm/tilcdc/tilcdc_crtc.c
+++ b/drivers/gpu/drm/tilcdc/tilcdc_crtc.c
@@ -246,6 +246,13 @@ void tilcdc_crtc_dpms(struct drm_crtc *crtc, int mode)
 	}
 }
 
+int tilcdc_crtc_current_dpms_state(struct drm_crtc *crtc)
+{
+	struct tilcdc_crtc *tilcdc_crtc = to_tilcdc_crtc(crtc);
+
+	return tilcdc_crtc->dpms;
+}
+
 static bool tilcdc_crtc_mode_fixup(struct drm_crtc *crtc,
 		const struct drm_display_mode *mode,
 		struct drm_display_mode *adjusted_mode)
diff --git a/drivers/gpu/drm/tilcdc/tilcdc_drv.c b/drivers/gpu/drm/tilcdc/tilcdc_drv.c
index 308e197..148b1ed 100644
--- a/drivers/gpu/drm/tilcdc/tilcdc_drv.c
+++ b/drivers/gpu/drm/tilcdc/tilcdc_drv.c
@@ -598,6 +598,7 @@ static int tilcdc_pm_suspend(struct device *dev)
 	}
 
 	/* Disable the LCDC controller, to avoid locking up the PRCM */
+	priv->saved_dpms_state = tilcdc_crtc_current_dpms_state(priv->crtc);
 	tilcdc_crtc_dpms(priv->crtc, DRM_MODE_DPMS_OFF);
 
 	/* Save register state: */
@@ -628,6 +629,8 @@ static int tilcdc_pm_resume(struct device *dev)
 					     priv->saved_register[n++]);
 	}
 
+	tilcdc_crtc_dpms(priv->crtc, priv->saved_dpms_state);
+
 	drm_kms_helper_poll_enable(ddev);
 
 	return 0;
diff --git a/drivers/gpu/drm/tilcdc/tilcdc_drv.h b/drivers/gpu/drm/tilcdc/tilcdc_drv.h
index c1de18b..3b52ce8 100644
--- a/drivers/gpu/drm/tilcdc/tilcdc_drv.h
+++ b/drivers/gpu/drm/tilcdc/tilcdc_drv.h
@@ -67,6 +67,7 @@ struct tilcdc_drm_private {
 
 	/* register contents saved across suspend/resume: */
 	u32 *saved_register;
+	int saved_dpms_state;
 	bool ctx_valid;
 
 #ifdef CONFIG_CPU_FREQ
@@ -172,5 +173,6 @@ void tilcdc_crtc_set_simulate_vesa_sync(struct drm_crtc *crtc,
 int tilcdc_crtc_mode_valid(struct drm_crtc *crtc, struct drm_display_mode *mode);
 int tilcdc_crtc_max_width(struct drm_crtc *crtc);
 void tilcdc_crtc_dpms(struct drm_crtc *crtc, int mode);
+int tilcdc_crtc_current_dpms_state(struct drm_crtc *crtc);
 
 #endif /* __TILCDC_DRV_H__ */
-- 
1.9.1

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

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

* [PATCH v2 2/6] drm/tilcdc: Write to LCDC_END_OF_INT_IND_REG at the end of IRQ function
  2016-06-15  8:39 [PATCH v2 0/6] drm/tilcdc Fixes and cleanups Jyri Sarha
  2016-06-15  8:39 ` [PATCH v2 1/6] drm/tilcdc: Restore old dpms state in pm_resume() Jyri Sarha
@ 2016-06-15  8:39 ` Jyri Sarha
  2016-06-16  9:19   ` Tomi Valkeinen
  2016-06-15  8:39 ` [PATCH v2 3/6] drm/tilcdc: Move waiting of LCDC_FRAME_DONE IRQ into stop() Jyri Sarha
                   ` (5 subsequent siblings)
  7 siblings, 1 reply; 12+ messages in thread
From: Jyri Sarha @ 2016-06-15  8:39 UTC (permalink / raw)
  To: dri-devel; +Cc: Jyri Sarha, tomi.valkeinen, laurent.pinchart, bcousson

Reorder the IRQ function so that the write to LCDC_END_OF_INT_IND_REG
is done last. The write to LCDC_END_OF_INT_IND_REG indicates to LCDC
that the interrupt service routine has completed (see section
13.3.6.1.6 in AM335x TRM). This is needed if LCDC's ipgvmodirq module
is configured for pulse interrupts.

Signed-off-by: Jyri Sarha <jsarha@ti.com>
---
 drivers/gpu/drm/tilcdc/tilcdc_crtc.c | 24 +++++++++++++++---------
 1 file changed, 15 insertions(+), 9 deletions(-)

diff --git a/drivers/gpu/drm/tilcdc/tilcdc_crtc.c b/drivers/gpu/drm/tilcdc/tilcdc_crtc.c
index 4d8f9a5..1343717 100644
--- a/drivers/gpu/drm/tilcdc/tilcdc_crtc.c
+++ b/drivers/gpu/drm/tilcdc/tilcdc_crtc.c
@@ -725,14 +725,19 @@ irqreturn_t tilcdc_crtc_irq(struct drm_crtc *crtc)
 			tilcdc_crtc->frame_intact = true;
 	}
 
-	if (priv->rev == 2) {
-		if (stat & LCDC_FRAME_DONE) {
-			tilcdc_crtc->frame_done = true;
-			wake_up(&tilcdc_crtc->frame_done_wq);
-		}
-		tilcdc_write(dev, LCDC_END_OF_INT_IND_REG, 0);
+	if (priv->rev == 1)
+		return IRQ_HANDLED;
+	/* The rest is for revision 2 only */
+
+	if (stat & LCDC_FRAME_DONE) {
+		tilcdc_crtc->frame_done = true;
+		wake_up(&tilcdc_crtc->frame_done_wq);
 	}
 
+	if (stat & LCDC_FIFO_UNDERFLOW)
+		dev_err_ratelimited(dev->dev, "%s(0x%08x): FIFO underfow",
+				    __func__, stat);
+
 	if (stat & LCDC_SYNC_LOST) {
 		dev_err_ratelimited(dev->dev, "%s(0x%08x): Sync lost",
 				    __func__, stat);
@@ -746,9 +751,10 @@ irqreturn_t tilcdc_crtc_irq(struct drm_crtc *crtc)
 		}
 	}
 
-	if (stat & LCDC_FIFO_UNDERFLOW)
-		dev_err_ratelimited(dev->dev, "%s(0x%08x): FIFO underfow",
-				    __func__, stat);
+	/* Indicate to LCDC that the interrupt service routine has
+	 * completed, see 13.3.6.1.6 in AM335x TRM.
+	 */
+	tilcdc_write(dev, LCDC_END_OF_INT_IND_REG, 0);
 
 	return IRQ_HANDLED;
 }
-- 
1.9.1

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

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

* [PATCH v2 3/6] drm/tilcdc: Move waiting of LCDC_FRAME_DONE IRQ into stop()
  2016-06-15  8:39 [PATCH v2 0/6] drm/tilcdc Fixes and cleanups Jyri Sarha
  2016-06-15  8:39 ` [PATCH v2 1/6] drm/tilcdc: Restore old dpms state in pm_resume() Jyri Sarha
  2016-06-15  8:39 ` [PATCH v2 2/6] drm/tilcdc: Write to LCDC_END_OF_INT_IND_REG at the end of IRQ function Jyri Sarha
@ 2016-06-15  8:39 ` Jyri Sarha
  2016-06-16  9:25   ` Tomi Valkeinen
  2016-06-15  8:39 ` [PATCH v2 4/6] drm/tilcdc: Call drm_crtc_vblank_on() and *_off() in start() and stop() Jyri Sarha
                   ` (4 subsequent siblings)
  7 siblings, 1 reply; 12+ messages in thread
From: Jyri Sarha @ 2016-06-15  8:39 UTC (permalink / raw)
  To: dri-devel; +Cc: Jyri Sarha, tomi.valkeinen, laurent.pinchart, bcousson

Move wait queue waiting of LCDC_FRAME_DONE IRQ from tilcdc_crtc_dpms()
into stop() function.

Signed-off-by: Jyri Sarha <jsarha@ti.com>
---
 drivers/gpu/drm/tilcdc/tilcdc_crtc.c | 31 ++++++++++++++++---------------
 1 file changed, 16 insertions(+), 15 deletions(-)

diff --git a/drivers/gpu/drm/tilcdc/tilcdc_crtc.c b/drivers/gpu/drm/tilcdc/tilcdc_crtc.c
index 1343717..cfa1a4e 100644
--- a/drivers/gpu/drm/tilcdc/tilcdc_crtc.c
+++ b/drivers/gpu/drm/tilcdc/tilcdc_crtc.c
@@ -113,9 +113,25 @@ static void start(struct drm_crtc *crtc)
 
 static void stop(struct drm_crtc *crtc)
 {
+	struct tilcdc_crtc *tilcdc_crtc = to_tilcdc_crtc(crtc);
 	struct drm_device *dev = crtc->dev;
+	struct tilcdc_drm_private *priv = dev->dev_private;
 
+	tilcdc_crtc->frame_done = false;
 	tilcdc_clear(dev, LCDC_RASTER_CTRL_REG, LCDC_RASTER_ENABLE);
+
+	/*
+	 * if necessary wait for framedone irq which will still come
+	 * before putting things to sleep..
+	 */
+	if (priv->rev == 2) {
+		int ret = wait_event_timeout(tilcdc_crtc->frame_done_wq,
+					     tilcdc_crtc->frame_done,
+					     msecs_to_jiffies(50));
+		if (ret == 0)
+			dev_err(dev->dev, "%s: timeout waiting for framedone\n",
+				__func__);
+	}
 }
 
 static void tilcdc_crtc_destroy(struct drm_crtc *crtc)
@@ -212,22 +228,7 @@ void tilcdc_crtc_dpms(struct drm_crtc *crtc, int mode)
 		pm_runtime_get_sync(dev->dev);
 		start(crtc);
 	} else {
-		tilcdc_crtc->frame_done = false;
 		stop(crtc);
-
-		/*
-		 * if necessary wait for framedone irq which will still come
-		 * before putting things to sleep..
-		 */
-		if (priv->rev == 2) {
-			int ret = wait_event_timeout(
-					tilcdc_crtc->frame_done_wq,
-					tilcdc_crtc->frame_done,
-					msecs_to_jiffies(50));
-			if (ret == 0)
-				dev_err(dev->dev, "timeout waiting for framedone\n");
-		}
-
 		pm_runtime_put_sync(dev->dev);
 
 		if (tilcdc_crtc->next_fb) {
-- 
1.9.1

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

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

* [PATCH v2 4/6] drm/tilcdc: Call drm_crtc_vblank_on() and *_off() in start() and stop()
  2016-06-15  8:39 [PATCH v2 0/6] drm/tilcdc Fixes and cleanups Jyri Sarha
                   ` (2 preceding siblings ...)
  2016-06-15  8:39 ` [PATCH v2 3/6] drm/tilcdc: Move waiting of LCDC_FRAME_DONE IRQ into stop() Jyri Sarha
@ 2016-06-15  8:39 ` Jyri Sarha
  2016-06-15  8:39 ` [PATCH v2 5/6] drm/tilcdc: Refer to panel.txt and tfp410.txt bindings in tilcdc.txt Jyri Sarha
                   ` (3 subsequent siblings)
  7 siblings, 0 replies; 12+ messages in thread
From: Jyri Sarha @ 2016-06-15  8:39 UTC (permalink / raw)
  To: dri-devel; +Cc: Jyri Sarha, tomi.valkeinen, laurent.pinchart, bcousson

Add drm_crtc_vblank_on() and *_off() calls to start() and stop()
functions, to make sure any vblank waits etc. gets properly cleaned
up.

Signed-off-by: Jyri Sarha <jsarha@ti.com>
---
 drivers/gpu/drm/tilcdc/tilcdc_crtc.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/drivers/gpu/drm/tilcdc/tilcdc_crtc.c b/drivers/gpu/drm/tilcdc/tilcdc_crtc.c
index cfa1a4e..bc9d495 100644
--- a/drivers/gpu/drm/tilcdc/tilcdc_crtc.c
+++ b/drivers/gpu/drm/tilcdc/tilcdc_crtc.c
@@ -109,6 +109,8 @@ static void start(struct drm_crtc *crtc)
 	tilcdc_clear(dev, LCDC_DMA_CTRL_REG, LCDC_DUAL_FRAME_BUFFER_ENABLE);
 	tilcdc_set(dev, LCDC_RASTER_CTRL_REG, LCDC_PALETTE_LOAD_MODE(DATA_ONLY));
 	tilcdc_set(dev, LCDC_RASTER_CTRL_REG, LCDC_RASTER_ENABLE);
+
+	drm_crtc_vblank_on(crtc);
 }
 
 static void stop(struct drm_crtc *crtc)
@@ -132,6 +134,8 @@ static void stop(struct drm_crtc *crtc)
 			dev_err(dev->dev, "%s: timeout waiting for framedone\n",
 				__func__);
 	}
+
+	drm_crtc_vblank_off(crtc);
 }
 
 static void tilcdc_crtc_destroy(struct drm_crtc *crtc)
-- 
1.9.1

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

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

* [PATCH v2 5/6] drm/tilcdc: Refer to panel.txt and tfp410.txt bindings in tilcdc.txt
  2016-06-15  8:39 [PATCH v2 0/6] drm/tilcdc Fixes and cleanups Jyri Sarha
                   ` (3 preceding siblings ...)
  2016-06-15  8:39 ` [PATCH v2 4/6] drm/tilcdc: Call drm_crtc_vblank_on() and *_off() in start() and stop() Jyri Sarha
@ 2016-06-15  8:39 ` Jyri Sarha
  2016-06-15  8:39 ` [PATCH v2 6/6] drm/tilcdc: Avoid error print by of_graph_get_next_endpoint() Jyri Sarha
                   ` (2 subsequent siblings)
  7 siblings, 0 replies; 12+ messages in thread
From: Jyri Sarha @ 2016-06-15  8:39 UTC (permalink / raw)
  To: dri-devel; +Cc: Jyri Sarha, tomi.valkeinen, laurent.pinchart, bcousson

The legacy panel.txt and tfp410.txt bindings are still the only supported
way to connect lcd panel and tfp410 DVI encoder to tilcdc.

Signed-off-by: Jyri Sarha <jsarha@ti.com>
---
 Documentation/devicetree/bindings/display/tilcdc/tilcdc.txt | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/Documentation/devicetree/bindings/display/tilcdc/tilcdc.txt b/Documentation/devicetree/bindings/display/tilcdc/tilcdc.txt
index 2136ee8..6efa4c5 100644
--- a/Documentation/devicetree/bindings/display/tilcdc/tilcdc.txt
+++ b/Documentation/devicetree/bindings/display/tilcdc/tilcdc.txt
@@ -24,6 +24,10 @@ Optional nodes:
    binding follows Documentation/devicetree/bindings/graph.txt and
    suppors a single port with a single endpoint.
 
+ - See also Documentation/devicetree/bindings/display/tilcdc/panel.txt and
+   Documentation/devicetree/bindings/display/tilcdc/tfp410.txt for connecting
+   tfp410 DVI encoder or lcd panel to lcdc
+
 Example:
 
 	fb: fb@4830e000 {
-- 
1.9.1

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

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

* [PATCH v2 6/6] drm/tilcdc: Avoid error print by of_graph_get_next_endpoint()
  2016-06-15  8:39 [PATCH v2 0/6] drm/tilcdc Fixes and cleanups Jyri Sarha
                   ` (4 preceding siblings ...)
  2016-06-15  8:39 ` [PATCH v2 5/6] drm/tilcdc: Refer to panel.txt and tfp410.txt bindings in tilcdc.txt Jyri Sarha
@ 2016-06-15  8:39 ` Jyri Sarha
  2016-06-15 12:29 ` [PATCH v2 0/6] drm/tilcdc Fixes and cleanups Jyri Sarha
  2016-06-16  9:30 ` Tomi Valkeinen
  7 siblings, 0 replies; 12+ messages in thread
From: Jyri Sarha @ 2016-06-15  8:39 UTC (permalink / raw)
  To: dri-devel; +Cc: Jyri Sarha, tomi.valkeinen, laurent.pinchart, bcousson

Avoid error print by of_graph_get_next_endpoint() if there is no ports
present.

Signed-off-by: Jyri Sarha <jsarha@ti.com>
---
 drivers/gpu/drm/tilcdc/tilcdc_external.c | 13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/tilcdc/tilcdc_external.c b/drivers/gpu/drm/tilcdc/tilcdc_external.c
index 03acb4f..ad3db4d 100644
--- a/drivers/gpu/drm/tilcdc/tilcdc_external.c
+++ b/drivers/gpu/drm/tilcdc/tilcdc_external.c
@@ -138,12 +138,21 @@ static int dev_match_of(struct device *dev, void *data)
 int tilcdc_get_external_components(struct device *dev,
 				   struct component_match **match)
 {
+	struct device_node *node;
 	struct device_node *ep = NULL;
 	int count = 0;
 
-	while ((ep = of_graph_get_next_endpoint(dev->of_node, ep))) {
-		struct device_node *node;
+	/* Avoid error print by of_graph_get_next_endpoint() if there
+	 * is no ports present.
+	 */
+	node = of_get_child_by_name(dev->of_node, "ports");
+	if (!node)
+		node = of_get_child_by_name(dev->of_node, "port");
+	if (!node)
+		return 0;
+	of_node_put(node);
 
+	while ((ep = of_graph_get_next_endpoint(dev->of_node, ep))) {
 		node = of_graph_get_remote_port_parent(ep);
 		if (!node && !of_device_is_available(node)) {
 			of_node_put(node);
-- 
1.9.1

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

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

* Re: [PATCH v2 0/6] drm/tilcdc Fixes and cleanups
  2016-06-15  8:39 [PATCH v2 0/6] drm/tilcdc Fixes and cleanups Jyri Sarha
                   ` (5 preceding siblings ...)
  2016-06-15  8:39 ` [PATCH v2 6/6] drm/tilcdc: Avoid error print by of_graph_get_next_endpoint() Jyri Sarha
@ 2016-06-15 12:29 ` Jyri Sarha
  2016-06-16  9:30 ` Tomi Valkeinen
  7 siblings, 0 replies; 12+ messages in thread
From: Jyri Sarha @ 2016-06-15 12:29 UTC (permalink / raw)
  To: dri-devel; +Cc: tomi.valkeinen, laurent.pinchart, bcousson

On 06/15/16 11:39, Jyri Sarha wrote:
> Some fixes and cleanups that should get merged to tilcdc even if my
> atomic changes are still a work in progress.
> 

I forgot to add changelog. So here it is:

Changes since first version:
- "drm/tilcdc: Restore old dpms state in pm_resume()"
  - Fix typos from description and subject
- Add "drm/tilcdc: Call drm_crtc_vblank_on() and *_off() in start() and
stop()"

BR,
Jyri

> Jyri Sarha (6):
>   drm/tilcdc: Restore old dpms state in pm_resume()
>   drm/tilcdc: Write to LCDC_END_OF_INT_IND_REG at the end of IRQ
>     function
>   drm/tilcdc: Move waiting of LCDC_FRAME_DONE IRQ into stop()
>   drm/tilcdc: Call drm_crtc_vblank_on() and *_off() in start() and
>     stop()
>   drm/tilcdc: Refer to panel.txt and tfp410.txt bindings in tilcdc.txt
>   drm/tilcdc: Avoid error print by of_graph_get_next_endpoint()
> 
>  .../devicetree/bindings/display/tilcdc/tilcdc.txt  |  4 ++
>  drivers/gpu/drm/tilcdc/tilcdc_crtc.c               | 66 ++++++++++++++--------
>  drivers/gpu/drm/tilcdc/tilcdc_drv.c                |  3 +
>  drivers/gpu/drm/tilcdc/tilcdc_drv.h                |  2 +
>  drivers/gpu/drm/tilcdc/tilcdc_external.c           | 13 ++++-
>  5 files changed, 62 insertions(+), 26 deletions(-)
> 

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

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

* Re: [PATCH v2 1/6] drm/tilcdc: Restore old dpms state in pm_resume()
  2016-06-15  8:39 ` [PATCH v2 1/6] drm/tilcdc: Restore old dpms state in pm_resume() Jyri Sarha
@ 2016-06-16  9:13   ` Tomi Valkeinen
  0 siblings, 0 replies; 12+ messages in thread
From: Tomi Valkeinen @ 2016-06-16  9:13 UTC (permalink / raw)
  To: Jyri Sarha, dri-devel; +Cc: bcousson, laurent.pinchart


[-- Attachment #1.1.1: Type: text/plain, Size: 514 bytes --]

On 15/06/16 11:39, Jyri Sarha wrote:
> Restore old dpms state in pm_resume(). The dpms is turned off in
> pm_suspend() and it should be restored to its original state in
> pm_resume().
> 
> Fixes commit 614b3cfeb8d2 ("drm/tilcdc: disable the lcd controller/dma
> engine when suspend invoked")

This still doesn't explain the issue (at least clearly). If you send a
fix for some problem, it's good to have a clear explanation of what's
the problem (from user's perspective, what does he see).

 Tomi


[-- Attachment #1.2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 819 bytes --]

[-- Attachment #2: Type: text/plain, Size: 160 bytes --]

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

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

* Re: [PATCH v2 2/6] drm/tilcdc: Write to LCDC_END_OF_INT_IND_REG at the end of IRQ function
  2016-06-15  8:39 ` [PATCH v2 2/6] drm/tilcdc: Write to LCDC_END_OF_INT_IND_REG at the end of IRQ function Jyri Sarha
@ 2016-06-16  9:19   ` Tomi Valkeinen
  0 siblings, 0 replies; 12+ messages in thread
From: Tomi Valkeinen @ 2016-06-16  9:19 UTC (permalink / raw)
  To: Jyri Sarha, dri-devel; +Cc: bcousson, laurent.pinchart


[-- Attachment #1.1.1: Type: text/plain, Size: 1745 bytes --]



On 15/06/16 11:39, Jyri Sarha wrote:
> Reorder the IRQ function so that the write to LCDC_END_OF_INT_IND_REG
> is done last. The write to LCDC_END_OF_INT_IND_REG indicates to LCDC
> that the interrupt service routine has completed (see section
> 13.3.6.1.6 in AM335x TRM). This is needed if LCDC's ipgvmodirq module
> is configured for pulse interrupts.
> 
> Signed-off-by: Jyri Sarha <jsarha@ti.com>
> ---
>  drivers/gpu/drm/tilcdc/tilcdc_crtc.c | 24 +++++++++++++++---------
>  1 file changed, 15 insertions(+), 9 deletions(-)
> 
> diff --git a/drivers/gpu/drm/tilcdc/tilcdc_crtc.c b/drivers/gpu/drm/tilcdc/tilcdc_crtc.c
> index 4d8f9a5..1343717 100644
> --- a/drivers/gpu/drm/tilcdc/tilcdc_crtc.c
> +++ b/drivers/gpu/drm/tilcdc/tilcdc_crtc.c
> @@ -725,14 +725,19 @@ irqreturn_t tilcdc_crtc_irq(struct drm_crtc *crtc)
>  			tilcdc_crtc->frame_intact = true;
>  	}
>  
> -	if (priv->rev == 2) {
> -		if (stat & LCDC_FRAME_DONE) {
> -			tilcdc_crtc->frame_done = true;
> -			wake_up(&tilcdc_crtc->frame_done_wq);
> -		}
> -		tilcdc_write(dev, LCDC_END_OF_INT_IND_REG, 0);
> +	if (priv->rev == 1)
> +		return IRQ_HANDLED;
> +	/* The rest is for revision 2 only */
> +
> +	if (stat & LCDC_FRAME_DONE) {
> +		tilcdc_crtc->frame_done = true;
> +		wake_up(&tilcdc_crtc->frame_done_wq);
>  	}
>  
> +	if (stat & LCDC_FIFO_UNDERFLOW)
> +		dev_err_ratelimited(dev->dev, "%s(0x%08x): FIFO underfow",
> +				    __func__, stat);

We do have underflow irq for rev1 too, don't we?

Why not just move the "if (priv->rev == 2) {" block to the end? Or maybe
extract the write to the LCDC_END_OF_INT_IND_REG from the current block,
and move only that to the end. Much less re-ordering needed for that.

 Tomi


[-- Attachment #1.2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 819 bytes --]

[-- Attachment #2: Type: text/plain, Size: 160 bytes --]

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

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

* Re: [PATCH v2 3/6] drm/tilcdc: Move waiting of LCDC_FRAME_DONE IRQ into stop()
  2016-06-15  8:39 ` [PATCH v2 3/6] drm/tilcdc: Move waiting of LCDC_FRAME_DONE IRQ into stop() Jyri Sarha
@ 2016-06-16  9:25   ` Tomi Valkeinen
  0 siblings, 0 replies; 12+ messages in thread
From: Tomi Valkeinen @ 2016-06-16  9:25 UTC (permalink / raw)
  To: Jyri Sarha, dri-devel; +Cc: bcousson, laurent.pinchart


[-- Attachment #1.1.1: Type: text/plain, Size: 1705 bytes --]

On 15/06/16 11:39, Jyri Sarha wrote:
> Move wait queue waiting of LCDC_FRAME_DONE IRQ from tilcdc_crtc_dpms()
> into stop() function.

You could mention the reason for this, which is just a cleanup here (I
presume).

> Signed-off-by: Jyri Sarha <jsarha@ti.com>
> ---
>  drivers/gpu/drm/tilcdc/tilcdc_crtc.c | 31 ++++++++++++++++---------------
>  1 file changed, 16 insertions(+), 15 deletions(-)
> 
> diff --git a/drivers/gpu/drm/tilcdc/tilcdc_crtc.c b/drivers/gpu/drm/tilcdc/tilcdc_crtc.c
> index 1343717..cfa1a4e 100644
> --- a/drivers/gpu/drm/tilcdc/tilcdc_crtc.c
> +++ b/drivers/gpu/drm/tilcdc/tilcdc_crtc.c
> @@ -113,9 +113,25 @@ static void start(struct drm_crtc *crtc)
>  
>  static void stop(struct drm_crtc *crtc)
>  {
> +	struct tilcdc_crtc *tilcdc_crtc = to_tilcdc_crtc(crtc);
>  	struct drm_device *dev = crtc->dev;
> +	struct tilcdc_drm_private *priv = dev->dev_private;
>  
> +	tilcdc_crtc->frame_done = false;
>  	tilcdc_clear(dev, LCDC_RASTER_CTRL_REG, LCDC_RASTER_ENABLE);
> +
> +	/*
> +	 * if necessary wait for framedone irq which will still come
> +	 * before putting things to sleep..
> +	 */
> +	if (priv->rev == 2) {
> +		int ret = wait_event_timeout(tilcdc_crtc->frame_done_wq,
> +					     tilcdc_crtc->frame_done,
> +					     msecs_to_jiffies(50));

Not part of this patch, but I think the timeout could be increased quite
a bit. It's never supposed to happen. And while video timings with 50ms
frames are not common, I don't see that as impossible either.

Of course, optimally the timeout would be calculated from the video
timings, which shouldn't be too difficult either...

Anyway, as I said, not part of this patch.

 Tomi


[-- Attachment #1.2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 819 bytes --]

[-- Attachment #2: Type: text/plain, Size: 160 bytes --]

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

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

* Re: [PATCH v2 0/6] drm/tilcdc Fixes and cleanups
  2016-06-15  8:39 [PATCH v2 0/6] drm/tilcdc Fixes and cleanups Jyri Sarha
                   ` (6 preceding siblings ...)
  2016-06-15 12:29 ` [PATCH v2 0/6] drm/tilcdc Fixes and cleanups Jyri Sarha
@ 2016-06-16  9:30 ` Tomi Valkeinen
  7 siblings, 0 replies; 12+ messages in thread
From: Tomi Valkeinen @ 2016-06-16  9:30 UTC (permalink / raw)
  To: Jyri Sarha, dri-devel; +Cc: bcousson, laurent.pinchart


[-- Attachment #1.1.1: Type: text/plain, Size: 1128 bytes --]

On 15/06/16 11:39, Jyri Sarha wrote:
> Some fixes and cleanups that should get merged to tilcdc even if my
> atomic changes are still a work in progress.
> 
> Jyri Sarha (6):
>   drm/tilcdc: Restore old dpms state in pm_resume()
>   drm/tilcdc: Write to LCDC_END_OF_INT_IND_REG at the end of IRQ
>     function
>   drm/tilcdc: Move waiting of LCDC_FRAME_DONE IRQ into stop()
>   drm/tilcdc: Call drm_crtc_vblank_on() and *_off() in start() and
>     stop()
>   drm/tilcdc: Refer to panel.txt and tfp410.txt bindings in tilcdc.txt
>   drm/tilcdc: Avoid error print by of_graph_get_next_endpoint()
> 
>  .../devicetree/bindings/display/tilcdc/tilcdc.txt  |  4 ++
>  drivers/gpu/drm/tilcdc/tilcdc_crtc.c               | 66 ++++++++++++++--------
>  drivers/gpu/drm/tilcdc/tilcdc_drv.c                |  3 +
>  drivers/gpu/drm/tilcdc/tilcdc_drv.h                |  2 +
>  drivers/gpu/drm/tilcdc/tilcdc_external.c           | 13 ++++-
>  5 files changed, 62 insertions(+), 26 deletions(-)
> 

Beside the minor comments I had, looks fine to me.

Reviewed-by: Tomi Valkeinen <tomi.valkeinen@ti.com>

 Tomi


[-- Attachment #1.2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 819 bytes --]

[-- Attachment #2: Type: text/plain, Size: 160 bytes --]

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

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

end of thread, other threads:[~2016-06-16  9:30 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-06-15  8:39 [PATCH v2 0/6] drm/tilcdc Fixes and cleanups Jyri Sarha
2016-06-15  8:39 ` [PATCH v2 1/6] drm/tilcdc: Restore old dpms state in pm_resume() Jyri Sarha
2016-06-16  9:13   ` Tomi Valkeinen
2016-06-15  8:39 ` [PATCH v2 2/6] drm/tilcdc: Write to LCDC_END_OF_INT_IND_REG at the end of IRQ function Jyri Sarha
2016-06-16  9:19   ` Tomi Valkeinen
2016-06-15  8:39 ` [PATCH v2 3/6] drm/tilcdc: Move waiting of LCDC_FRAME_DONE IRQ into stop() Jyri Sarha
2016-06-16  9:25   ` Tomi Valkeinen
2016-06-15  8:39 ` [PATCH v2 4/6] drm/tilcdc: Call drm_crtc_vblank_on() and *_off() in start() and stop() Jyri Sarha
2016-06-15  8:39 ` [PATCH v2 5/6] drm/tilcdc: Refer to panel.txt and tfp410.txt bindings in tilcdc.txt Jyri Sarha
2016-06-15  8:39 ` [PATCH v2 6/6] drm/tilcdc: Avoid error print by of_graph_get_next_endpoint() Jyri Sarha
2016-06-15 12:29 ` [PATCH v2 0/6] drm/tilcdc Fixes and cleanups Jyri Sarha
2016-06-16  9:30 ` Tomi Valkeinen

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.