aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i915/i915_irq.c
diff options
context:
space:
mode:
authorPaulo Zanoni <paulo.r.zanoni@intel.com>2014-04-01 14:37:11 -0400
committerDaniel Vetter <daniel.vetter@ffwll.ch>2014-04-01 17:06:10 -0400
commit5c50244253937479481ed87ff58863d7c3e91ee3 (patch)
tree9a4dd900d9409f82f7f5d47caf1c4c1e9c240c67 /drivers/gpu/drm/i915/i915_irq.c
parent0bda1cf739e657ebfdde41b723e8a3a21efed6a3 (diff)
drm/i915: use GEN8_IRQ_INIT on GEN5
And rename it to GEN5_IRQ_INIT. We have discussed doing equivalent changes on July 2013, and I even sent a patch series for this: "[PATCH 00/15] Unify interrupt register init/reset". Now that the BDW code was merged, I have one more argument in favor of these changes. Here's what really changes with the Gen 5 IRQ init code: - We now clear the IIR registers at preinstall (they are also cleared at postinstall, but we will change that later). - We have an additional POSTING_READ at the IMR register. v2: - Fix typo in commit message. - Add POSTING_READ calls to the macros (Ben, Daniel, Jani). Reviewed-by: Ben Widawsky <ben@bwidawsk.net> (v1) Signed-off-by: Paulo Zanoni <paulo.r.zanoni@intel.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Diffstat (limited to 'drivers/gpu/drm/i915/i915_irq.c')
-rw-r--r--drivers/gpu/drm/i915/i915_irq.c46
1 files changed, 19 insertions, 27 deletions
diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c
index af1d43c81348..bc7e2303cd4f 100644
--- a/drivers/gpu/drm/i915/i915_irq.c
+++ b/drivers/gpu/drm/i915/i915_irq.c
@@ -80,10 +80,25 @@ static const u32 hpd_status_i915[] = { /* i915 and valleyview are the same */
80 [HPD_PORT_D] = PORTD_HOTPLUG_INT_STATUS 80 [HPD_PORT_D] = PORTD_HOTPLUG_INT_STATUS
81}; 81};
82 82
83/* IIR can theoretically queue up two events. Be paranoid. */
84#define GEN8_IRQ_INIT_NDX(type, which) do { \
85 I915_WRITE(GEN8_##type##_IMR(which), 0xffffffff); \
86 POSTING_READ(GEN8_##type##_IMR(which)); \
87 I915_WRITE(GEN8_##type##_IER(which), 0); \
88 I915_WRITE(GEN8_##type##_IIR(which), 0xffffffff); \
89 POSTING_READ(GEN8_##type##_IIR(which)); \
90 I915_WRITE(GEN8_##type##_IIR(which), 0xffffffff); \
91 POSTING_READ(GEN8_##type##_IIR(which)); \
92} while (0)
93
83#define GEN5_IRQ_INIT(type) do { \ 94#define GEN5_IRQ_INIT(type) do { \
84 I915_WRITE(type##IMR, 0xffffffff); \ 95 I915_WRITE(type##IMR, 0xffffffff); \
96 POSTING_READ(type##IMR); \
85 I915_WRITE(type##IER, 0); \ 97 I915_WRITE(type##IER, 0); \
86 POSTING_READ(type##IER); \ 98 I915_WRITE(type##IIR, 0xffffffff); \
99 POSTING_READ(type##IIR); \
100 I915_WRITE(type##IIR, 0xffffffff); \
101 POSTING_READ(type##IIR); \
87} while (0) 102} while (0)
88 103
89/* For display hotplug interrupt */ 104/* For display hotplug interrupt */
@@ -2899,25 +2914,6 @@ static void gen8_irq_preinstall(struct drm_device *dev)
2899 I915_WRITE(GEN8_MASTER_IRQ, 0); 2914 I915_WRITE(GEN8_MASTER_IRQ, 0);
2900 POSTING_READ(GEN8_MASTER_IRQ); 2915 POSTING_READ(GEN8_MASTER_IRQ);
2901 2916
2902 /* IIR can theoretically queue up two events. Be paranoid */
2903#define GEN8_IRQ_INIT_NDX(type, which) do { \
2904 I915_WRITE(GEN8_##type##_IMR(which), 0xffffffff); \
2905 POSTING_READ(GEN8_##type##_IMR(which)); \
2906 I915_WRITE(GEN8_##type##_IER(which), 0); \
2907 I915_WRITE(GEN8_##type##_IIR(which), 0xffffffff); \
2908 POSTING_READ(GEN8_##type##_IIR(which)); \
2909 I915_WRITE(GEN8_##type##_IIR(which), 0xffffffff); \
2910 } while (0)
2911
2912#define GEN8_IRQ_INIT(type) do { \
2913 I915_WRITE(GEN8_##type##_IMR, 0xffffffff); \
2914 POSTING_READ(GEN8_##type##_IMR); \
2915 I915_WRITE(GEN8_##type##_IER, 0); \
2916 I915_WRITE(GEN8_##type##_IIR, 0xffffffff); \
2917 POSTING_READ(GEN8_##type##_IIR); \
2918 I915_WRITE(GEN8_##type##_IIR, 0xffffffff); \
2919 } while (0)
2920
2921 GEN8_IRQ_INIT_NDX(GT, 0); 2917 GEN8_IRQ_INIT_NDX(GT, 0);
2922 GEN8_IRQ_INIT_NDX(GT, 1); 2918 GEN8_IRQ_INIT_NDX(GT, 1);
2923 GEN8_IRQ_INIT_NDX(GT, 2); 2919 GEN8_IRQ_INIT_NDX(GT, 2);
@@ -2927,13 +2923,9 @@ static void gen8_irq_preinstall(struct drm_device *dev)
2927 GEN8_IRQ_INIT_NDX(DE_PIPE, pipe); 2923 GEN8_IRQ_INIT_NDX(DE_PIPE, pipe);
2928 } 2924 }
2929 2925
2930 GEN8_IRQ_INIT(DE_PORT); 2926 GEN5_IRQ_INIT(GEN8_DE_PORT_);
2931 GEN8_IRQ_INIT(DE_MISC); 2927 GEN5_IRQ_INIT(GEN8_DE_MISC_);
2932 GEN8_IRQ_INIT(PCU); 2928 GEN5_IRQ_INIT(GEN8_PCU_);
2933#undef GEN8_IRQ_INIT
2934#undef GEN8_IRQ_INIT_NDX
2935
2936 POSTING_READ(GEN8_PCU_IIR);
2937 2929
2938 ibx_irq_preinstall(dev); 2930 ibx_irq_preinstall(dev);
2939} 2931}