@@ -140,6 +140,30 @@ static void _dpu_core_perf_calc_crtc(const struct dpu_core_perf *core_perf,
140
140
perf -> max_per_pipe_ib , perf -> bw_ctl );
141
141
}
142
142
143
+ static void dpu_core_perf_aggregate (struct drm_device * ddev ,
144
+ enum dpu_crtc_client_type curr_client_type ,
145
+ struct dpu_core_perf_params * perf )
146
+ {
147
+ struct dpu_crtc_state * dpu_cstate ;
148
+ struct drm_crtc * tmp_crtc ;
149
+
150
+ drm_for_each_crtc (tmp_crtc , ddev ) {
151
+ if (tmp_crtc -> enabled &&
152
+ curr_client_type == dpu_crtc_get_client_type (tmp_crtc )) {
153
+ dpu_cstate = to_dpu_crtc_state (tmp_crtc -> state );
154
+
155
+ perf -> max_per_pipe_ib = max (perf -> max_per_pipe_ib ,
156
+ dpu_cstate -> new_perf .max_per_pipe_ib );
157
+
158
+ perf -> bw_ctl += dpu_cstate -> new_perf .bw_ctl ;
159
+
160
+ DRM_DEBUG_ATOMIC ("crtc=%d bw=%llu\n" ,
161
+ tmp_crtc -> base .id ,
162
+ dpu_cstate -> new_perf .bw_ctl );
163
+ }
164
+ }
165
+ }
166
+
143
167
/**
144
168
* dpu_core_perf_crtc_check - validate performance of the given crtc state
145
169
* @crtc: Pointer to crtc
@@ -150,11 +174,9 @@ int dpu_core_perf_crtc_check(struct drm_crtc *crtc,
150
174
struct drm_crtc_state * state )
151
175
{
152
176
u32 bw , threshold ;
153
- u64 bw_sum_of_intfs = 0 ;
154
- enum dpu_crtc_client_type curr_client_type ;
155
177
struct dpu_crtc_state * dpu_cstate ;
156
- struct drm_crtc * tmp_crtc ;
157
178
struct dpu_kms * kms ;
179
+ struct dpu_core_perf_params perf ;
158
180
159
181
if (!crtc || !state ) {
160
182
DPU_ERROR ("invalid crtc\n" );
@@ -172,68 +194,28 @@ int dpu_core_perf_crtc_check(struct drm_crtc *crtc,
172
194
/* obtain new values */
173
195
_dpu_core_perf_calc_crtc (& kms -> perf , crtc , state , & dpu_cstate -> new_perf );
174
196
175
- bw_sum_of_intfs = dpu_cstate -> new_perf .bw_ctl ;
176
- curr_client_type = dpu_crtc_get_client_type (crtc );
177
-
178
- drm_for_each_crtc (tmp_crtc , crtc -> dev ) {
179
- if (tmp_crtc -> enabled &&
180
- dpu_crtc_get_client_type (tmp_crtc ) == curr_client_type &&
181
- tmp_crtc != crtc ) {
182
- struct dpu_crtc_state * tmp_cstate =
183
- to_dpu_crtc_state (tmp_crtc -> state );
184
-
185
- DRM_DEBUG_ATOMIC ("crtc:%d bw:%llu ctrl:%d\n" ,
186
- tmp_crtc -> base .id , tmp_cstate -> new_perf .bw_ctl ,
187
- tmp_cstate -> bw_control );
188
-
189
- bw_sum_of_intfs += tmp_cstate -> new_perf .bw_ctl ;
190
- }
197
+ dpu_core_perf_aggregate (crtc -> dev , dpu_crtc_get_client_type (crtc ), & perf );
191
198
192
- /* convert bandwidth to kb */
193
- bw = DIV_ROUND_UP_ULL (bw_sum_of_intfs , 1000 );
194
- DRM_DEBUG_ATOMIC ("calculated bandwidth=%uk\n" , bw );
199
+ /* convert bandwidth to kb */
200
+ bw = DIV_ROUND_UP_ULL (perf . bw_ctl , 1000 );
201
+ DRM_DEBUG_ATOMIC ("calculated bandwidth=%uk\n" , bw );
195
202
196
- threshold = kms -> perf .perf_cfg -> max_bw_high ;
203
+ threshold = kms -> perf .perf_cfg -> max_bw_high ;
197
204
198
- DRM_DEBUG_ATOMIC ("final threshold bw limit = %d\n" , threshold );
205
+ DRM_DEBUG_ATOMIC ("final threshold bw limit = %d\n" , threshold );
199
206
200
- if (!threshold ) {
201
- DPU_ERROR ("no bandwidth limits specified\n" );
202
- return - E2BIG ;
203
- } else if (bw > threshold ) {
204
- DPU_ERROR ("exceeds bandwidth: %ukb > %ukb\n" , bw ,
205
- threshold );
206
- return - E2BIG ;
207
- }
207
+ if (!threshold ) {
208
+ DPU_ERROR ("no bandwidth limits specified\n" );
209
+ return - E2BIG ;
210
+ } else if (bw > threshold ) {
211
+ DPU_ERROR ("exceeds bandwidth: %ukb > %ukb\n" , bw ,
212
+ threshold );
213
+ return - E2BIG ;
208
214
}
209
215
210
216
return 0 ;
211
217
}
212
218
213
- static void dpu_core_perf_aggregate (struct drm_device * ddev ,
214
- enum dpu_crtc_client_type curr_client_type ,
215
- struct dpu_core_perf_params * perf )
216
- {
217
- struct dpu_crtc_state * dpu_cstate ;
218
- struct drm_crtc * tmp_crtc ;
219
-
220
- drm_for_each_crtc (tmp_crtc , ddev ) {
221
- if (tmp_crtc -> enabled &&
222
- curr_client_type == dpu_crtc_get_client_type (tmp_crtc )) {
223
- dpu_cstate = to_dpu_crtc_state (tmp_crtc -> state );
224
-
225
- perf -> max_per_pipe_ib = max (perf -> max_per_pipe_ib ,
226
- dpu_cstate -> new_perf .max_per_pipe_ib );
227
-
228
- perf -> bw_ctl += dpu_cstate -> new_perf .bw_ctl ;
229
-
230
- DRM_DEBUG_ATOMIC ("crtc=%d bw=%llu\n" ,
231
- tmp_crtc -> base .id ,
232
- dpu_cstate -> new_perf .bw_ctl );
233
- }
234
- }
235
- }
236
-
237
219
static int _dpu_core_perf_crtc_update_bus (struct dpu_kms * kms ,
238
220
struct drm_crtc * crtc )
239
221
{
0 commit comments