2 * SPDX-License-Identifier: MIT
4 * Copyright © 2019 Intel Corporation
7 #include "intel_pm.h" /* intel_gpu_freq() */
8 #include "selftest_llc.h"
11 static int gen6_verify_ring_freq(struct intel_llc
*llc
)
13 struct drm_i915_private
*i915
= llc_to_gt(llc
)->i915
;
14 struct ia_constants consts
;
15 intel_wakeref_t wakeref
;
16 unsigned int gpu_freq
;
19 wakeref
= intel_runtime_pm_get(llc_to_gt(llc
)->uncore
->rpm
);
21 if (!get_ia_constants(llc
, &consts
))
24 for (gpu_freq
= consts
.min_gpu_freq
;
25 gpu_freq
<= consts
.max_gpu_freq
;
27 struct intel_rps
*rps
= &llc_to_gt(llc
)->rps
;
29 unsigned int ia_freq
, ring_freq
, found
;
32 calc_ia_freq(llc
, gpu_freq
, &consts
, &ia_freq
, &ring_freq
);
35 if (sandybridge_pcode_read(i915
,
36 GEN6_PCODE_READ_MIN_FREQ_TABLE
,
38 pr_err("Failed to read freq table[%d], range [%d, %d]\n",
39 gpu_freq
, consts
.min_gpu_freq
, consts
.max_gpu_freq
);
44 found
= (val
>> 0) & 0xff;
45 if (found
!= ia_freq
) {
46 pr_err("Min freq table(%d/[%d, %d]):%dMHz did not match expected CPU freq, found %d, expected %d\n",
47 gpu_freq
, consts
.min_gpu_freq
, consts
.max_gpu_freq
,
48 intel_gpu_freq(rps
, gpu_freq
* (INTEL_GEN(i915
) >= 9 ? GEN9_FREQ_SCALER
: 1)),
54 found
= (val
>> 8) & 0xff;
55 if (found
!= ring_freq
) {
56 pr_err("Min freq table(%d/[%d, %d]):%dMHz did not match expected ring freq, found %d, expected %d\n",
57 gpu_freq
, consts
.min_gpu_freq
, consts
.max_gpu_freq
,
58 intel_gpu_freq(rps
, gpu_freq
* (INTEL_GEN(i915
) >= 9 ? GEN9_FREQ_SCALER
: 1)),
66 intel_runtime_pm_put(llc_to_gt(llc
)->uncore
->rpm
, wakeref
);
70 int st_llc_verify(struct intel_llc
*llc
)
72 return gen6_verify_ring_freq(llc
);