6
6
#include <linux/kernel.h>
7
7
8
8
#include "intel_de.h"
9
+ #include "intel_dmc.h"
9
10
#include "intel_dmc_regs.h"
10
11
#include "intel_dmc_wl.h"
11
12
@@ -105,10 +106,23 @@ static bool intel_dmc_wl_check_range(u32 address)
105
106
return wl_needed ;
106
107
}
107
108
109
+ static bool __intel_dmc_wl_supported (struct drm_i915_private * i915 )
110
+ {
111
+ if (DISPLAY_VER (i915 ) < 20 ||
112
+ !intel_dmc_has_payload (i915 ))
113
+ return false;
114
+
115
+ return true;
116
+ }
117
+
108
118
void intel_dmc_wl_init (struct drm_i915_private * i915 )
109
119
{
110
120
struct intel_dmc_wl * wl = & i915 -> display .wl ;
111
121
122
+ /* don't call __intel_dmc_wl_supported(), DMC is not loaded yet */
123
+ if (DISPLAY_VER (i915 ) < 20 )
124
+ return ;
125
+
112
126
INIT_DELAYED_WORK (& wl -> work , intel_dmc_wl_work );
113
127
spin_lock_init (& wl -> lock );
114
128
refcount_set (& wl -> refcount , 0 );
@@ -119,6 +133,9 @@ void intel_dmc_wl_enable(struct drm_i915_private *i915)
119
133
struct intel_dmc_wl * wl = & i915 -> display .wl ;
120
134
unsigned long flags ;
121
135
136
+ if (!__intel_dmc_wl_supported (i915 ))
137
+ return ;
138
+
122
139
spin_lock_irqsave (& wl -> lock , flags );
123
140
124
141
if (wl -> enabled )
@@ -143,6 +160,9 @@ void intel_dmc_wl_disable(struct drm_i915_private *i915)
143
160
struct intel_dmc_wl * wl = & i915 -> display .wl ;
144
161
unsigned long flags ;
145
162
163
+ if (!__intel_dmc_wl_supported (i915 ))
164
+ return ;
165
+
146
166
flush_delayed_work (& wl -> work );
147
167
148
168
spin_lock_irqsave (& wl -> lock , flags );
@@ -166,6 +186,9 @@ void intel_dmc_wl_get(struct drm_i915_private *i915, i915_reg_t reg)
166
186
struct intel_dmc_wl * wl = & i915 -> display .wl ;
167
187
unsigned long flags ;
168
188
189
+ if (!__intel_dmc_wl_supported (i915 ))
190
+ return ;
191
+
169
192
if (!intel_dmc_wl_check_range (reg .reg ))
170
193
return ;
171
194
@@ -211,6 +234,9 @@ void intel_dmc_wl_put(struct drm_i915_private *i915, i915_reg_t reg)
211
234
struct intel_dmc_wl * wl = & i915 -> display .wl ;
212
235
unsigned long flags ;
213
236
237
+ if (!__intel_dmc_wl_supported (i915 ))
238
+ return ;
239
+
214
240
if (!intel_dmc_wl_check_range (reg .reg ))
215
241
return ;
216
242
0 commit comments