[PATCH v3 1/7] drm/sun4i: tcon: Add TRI finish interrupt for vblank

2018-03-06 Thread Maxime Ripard
From: Maxime Ripard 

The "CPU" (or Intel 8080) interface uses a different interrupt called
TRI_FINISH (most likely TRI being for trigger) to notify the end of frames,
and hence the VBLANK period.

And that interrupt to the possible VBLANK interrupts source.

Reviewed-by: Chen-Yu Tsai 
Signed-off-by: Maxime Ripard 
---
 drivers/gpu/drm/sun4i/sun4i_tcon.c |  9 ++---
 drivers/gpu/drm/sun4i/sun4i_tcon.h |  4 
 2 files changed, 10 insertions(+), 3 deletions(-)

diff --git a/drivers/gpu/drm/sun4i/sun4i_tcon.c 
b/drivers/gpu/drm/sun4i/sun4i_tcon.c
index b3960118deb9..7e5134bfb028 100644
--- a/drivers/gpu/drm/sun4i/sun4i_tcon.c
+++ b/drivers/gpu/drm/sun4i/sun4i_tcon.c
@@ -196,7 +196,8 @@ void sun4i_tcon_enable_vblank(struct sun4i_tcon *tcon, bool 
enable)
DRM_DEBUG_DRIVER("%sabling VBLANK interrupt\n", enable ? "En" : "Dis");
 
mask = SUN4I_TCON_GINT0_VBLANK_ENABLE(0) |
-  SUN4I_TCON_GINT0_VBLANK_ENABLE(1);
+   SUN4I_TCON_GINT0_VBLANK_ENABLE(1) |
+   SUN4I_TCON_GINT0_TCON0_TRI_FINISH_ENABLE;
 
if (enable)
val = mask;
@@ -548,7 +549,8 @@ static irqreturn_t sun4i_tcon_handler(int irq, void 
*private)
regmap_read(tcon->regs, SUN4I_TCON_GINT0_REG, );
 
if (!(status & (SUN4I_TCON_GINT0_VBLANK_INT(0) |
-   SUN4I_TCON_GINT0_VBLANK_INT(1
+   SUN4I_TCON_GINT0_VBLANK_INT(1) |
+   SUN4I_TCON_GINT0_TCON0_TRI_FINISH_INT)))
return IRQ_NONE;
 
drm_crtc_handle_vblank(>crtc);
@@ -557,7 +559,8 @@ static irqreturn_t sun4i_tcon_handler(int irq, void 
*private)
/* Acknowledge the interrupt */
regmap_update_bits(tcon->regs, SUN4I_TCON_GINT0_REG,
   SUN4I_TCON_GINT0_VBLANK_INT(0) |
-  SUN4I_TCON_GINT0_VBLANK_INT(1),
+  SUN4I_TCON_GINT0_VBLANK_INT(1) |
+  SUN4I_TCON_GINT0_TCON0_TRI_FINISH_INT,
   0);
 
return IRQ_HANDLED;
diff --git a/drivers/gpu/drm/sun4i/sun4i_tcon.h 
b/drivers/gpu/drm/sun4i/sun4i_tcon.h
index b761c7b823c5..067183076807 100644
--- a/drivers/gpu/drm/sun4i/sun4i_tcon.h
+++ b/drivers/gpu/drm/sun4i/sun4i_tcon.h
@@ -28,7 +28,11 @@
 
 #define SUN4I_TCON_GINT0_REG   0x4
 #define SUN4I_TCON_GINT0_VBLANK_ENABLE(pipe)   BIT(31 - (pipe))
+#define SUN4I_TCON_GINT0_TCON0_TRI_FINISH_ENABLE   BIT(27)
+#define SUN4I_TCON_GINT0_TCON0_TRI_COUNTER_ENABLE  BIT(26)
 #define SUN4I_TCON_GINT0_VBLANK_INT(pipe)  BIT(15 - (pipe))
+#define SUN4I_TCON_GINT0_TCON0_TRI_FINISH_INT  BIT(11)
+#define SUN4I_TCON_GINT0_TCON0_TRI_COUNTER_INT BIT(10)
 
 #define SUN4I_TCON_GINT1_REG   0x8
 #define SUN4I_TCON_FRM_CTL_REG 0x10
-- 
git-series 0.9.1


[PATCH v3 1/7] drm/sun4i: tcon: Add TRI finish interrupt for vblank

2018-03-06 Thread Maxime Ripard
From: Maxime Ripard 

The "CPU" (or Intel 8080) interface uses a different interrupt called
TRI_FINISH (most likely TRI being for trigger) to notify the end of frames,
and hence the VBLANK period.

And that interrupt to the possible VBLANK interrupts source.

Reviewed-by: Chen-Yu Tsai 
Signed-off-by: Maxime Ripard 
---
 drivers/gpu/drm/sun4i/sun4i_tcon.c |  9 ++---
 drivers/gpu/drm/sun4i/sun4i_tcon.h |  4 
 2 files changed, 10 insertions(+), 3 deletions(-)

diff --git a/drivers/gpu/drm/sun4i/sun4i_tcon.c 
b/drivers/gpu/drm/sun4i/sun4i_tcon.c
index b3960118deb9..7e5134bfb028 100644
--- a/drivers/gpu/drm/sun4i/sun4i_tcon.c
+++ b/drivers/gpu/drm/sun4i/sun4i_tcon.c
@@ -196,7 +196,8 @@ void sun4i_tcon_enable_vblank(struct sun4i_tcon *tcon, bool 
enable)
DRM_DEBUG_DRIVER("%sabling VBLANK interrupt\n", enable ? "En" : "Dis");
 
mask = SUN4I_TCON_GINT0_VBLANK_ENABLE(0) |
-  SUN4I_TCON_GINT0_VBLANK_ENABLE(1);
+   SUN4I_TCON_GINT0_VBLANK_ENABLE(1) |
+   SUN4I_TCON_GINT0_TCON0_TRI_FINISH_ENABLE;
 
if (enable)
val = mask;
@@ -548,7 +549,8 @@ static irqreturn_t sun4i_tcon_handler(int irq, void 
*private)
regmap_read(tcon->regs, SUN4I_TCON_GINT0_REG, );
 
if (!(status & (SUN4I_TCON_GINT0_VBLANK_INT(0) |
-   SUN4I_TCON_GINT0_VBLANK_INT(1
+   SUN4I_TCON_GINT0_VBLANK_INT(1) |
+   SUN4I_TCON_GINT0_TCON0_TRI_FINISH_INT)))
return IRQ_NONE;
 
drm_crtc_handle_vblank(>crtc);
@@ -557,7 +559,8 @@ static irqreturn_t sun4i_tcon_handler(int irq, void 
*private)
/* Acknowledge the interrupt */
regmap_update_bits(tcon->regs, SUN4I_TCON_GINT0_REG,
   SUN4I_TCON_GINT0_VBLANK_INT(0) |
-  SUN4I_TCON_GINT0_VBLANK_INT(1),
+  SUN4I_TCON_GINT0_VBLANK_INT(1) |
+  SUN4I_TCON_GINT0_TCON0_TRI_FINISH_INT,
   0);
 
return IRQ_HANDLED;
diff --git a/drivers/gpu/drm/sun4i/sun4i_tcon.h 
b/drivers/gpu/drm/sun4i/sun4i_tcon.h
index b761c7b823c5..067183076807 100644
--- a/drivers/gpu/drm/sun4i/sun4i_tcon.h
+++ b/drivers/gpu/drm/sun4i/sun4i_tcon.h
@@ -28,7 +28,11 @@
 
 #define SUN4I_TCON_GINT0_REG   0x4
 #define SUN4I_TCON_GINT0_VBLANK_ENABLE(pipe)   BIT(31 - (pipe))
+#define SUN4I_TCON_GINT0_TCON0_TRI_FINISH_ENABLE   BIT(27)
+#define SUN4I_TCON_GINT0_TCON0_TRI_COUNTER_ENABLE  BIT(26)
 #define SUN4I_TCON_GINT0_VBLANK_INT(pipe)  BIT(15 - (pipe))
+#define SUN4I_TCON_GINT0_TCON0_TRI_FINISH_INT  BIT(11)
+#define SUN4I_TCON_GINT0_TCON0_TRI_COUNTER_INT BIT(10)
 
 #define SUN4I_TCON_GINT1_REG   0x8
 #define SUN4I_TCON_FRM_CTL_REG 0x10
-- 
git-series 0.9.1