hc
2024-01-03 2f7c68cb55ecb7331f2381deb497c27155f32faf
kernel/drivers/gpu/drm/i915/display/intel_bw.c
....@@ -20,75 +20,8 @@
2020 struct intel_qgv_info {
2121 struct intel_qgv_point points[I915_NUM_QGV_POINTS];
2222 u8 num_points;
23
- u8 num_channels;
2423 u8 t_bl;
25
- enum intel_dram_type dram_type;
2624 };
27
-
28
-static int icl_pcode_read_mem_global_info(struct drm_i915_private *dev_priv,
29
- struct intel_qgv_info *qi)
30
-{
31
- u32 val = 0;
32
- int ret;
33
-
34
- ret = sandybridge_pcode_read(dev_priv,
35
- ICL_PCODE_MEM_SUBSYSYSTEM_INFO |
36
- ICL_PCODE_MEM_SS_READ_GLOBAL_INFO,
37
- &val, NULL);
38
- if (ret)
39
- return ret;
40
-
41
- if (IS_GEN(dev_priv, 12)) {
42
- switch (val & 0xf) {
43
- case 0:
44
- qi->dram_type = INTEL_DRAM_DDR4;
45
- break;
46
- case 3:
47
- qi->dram_type = INTEL_DRAM_LPDDR4;
48
- break;
49
- case 4:
50
- qi->dram_type = INTEL_DRAM_DDR3;
51
- break;
52
- case 5:
53
- qi->dram_type = INTEL_DRAM_LPDDR3;
54
- break;
55
- default:
56
- MISSING_CASE(val & 0xf);
57
- break;
58
- }
59
- } else if (IS_GEN(dev_priv, 11)) {
60
- switch (val & 0xf) {
61
- case 0:
62
- qi->dram_type = INTEL_DRAM_DDR4;
63
- break;
64
- case 1:
65
- qi->dram_type = INTEL_DRAM_DDR3;
66
- break;
67
- case 2:
68
- qi->dram_type = INTEL_DRAM_LPDDR3;
69
- break;
70
- case 3:
71
- qi->dram_type = INTEL_DRAM_LPDDR4;
72
- break;
73
- default:
74
- MISSING_CASE(val & 0xf);
75
- break;
76
- }
77
- } else {
78
- MISSING_CASE(INTEL_GEN(dev_priv));
79
- qi->dram_type = INTEL_DRAM_LPDDR3; /* Conservative default */
80
- }
81
-
82
- qi->num_channels = (val & 0xf0) >> 4;
83
- qi->num_points = (val & 0xf00) >> 8;
84
-
85
- if (IS_GEN(dev_priv, 12))
86
- qi->t_bl = qi->dram_type == INTEL_DRAM_DDR4 ? 4 : 16;
87
- else if (IS_GEN(dev_priv, 11))
88
- qi->t_bl = qi->dram_type == INTEL_DRAM_DDR4 ? 4 : 8;
89
-
90
- return 0;
91
-}
9225
9326 static int icl_pcode_read_qgv_point_info(struct drm_i915_private *dev_priv,
9427 struct intel_qgv_point *sp,
....@@ -139,11 +72,15 @@
13972 static int icl_get_qgv_points(struct drm_i915_private *dev_priv,
14073 struct intel_qgv_info *qi)
14174 {
75
+ const struct dram_info *dram_info = &dev_priv->dram_info;
14276 int i, ret;
14377
144
- ret = icl_pcode_read_mem_global_info(dev_priv, qi);
145
- if (ret)
146
- return ret;
78
+ qi->num_points = dram_info->num_qgv_points;
79
+
80
+ if (IS_GEN(dev_priv, 12))
81
+ qi->t_bl = dev_priv->dram_info.type == INTEL_DRAM_DDR4 ? 4 : 16;
82
+ else if (IS_GEN(dev_priv, 11))
83
+ qi->t_bl = dev_priv->dram_info.type == INTEL_DRAM_DDR4 ? 4 : 8;
14784
14885 if (drm_WARN_ON(&dev_priv->drm,
14986 qi->num_points > ARRAY_SIZE(qi->points)))
....@@ -209,7 +146,7 @@
209146 {
210147 struct intel_qgv_info qi = {};
211148 bool is_y_tile = true; /* assume y tile may be used */
212
- int num_channels;
149
+ int num_channels = dev_priv->dram_info.num_channels;
213150 int deinterleave;
214151 int ipqdepth, ipqdepthpch;
215152 int dclk_max;
....@@ -222,7 +159,6 @@
222159 "Failed to get memory subsystem information, ignoring bandwidth limits");
223160 return ret;
224161 }
225
- num_channels = qi.num_channels;
226162
227163 deinterleave = DIV_ROUND_UP(num_channels, is_y_tile ? 4 : 2);
228164 dclk_max = icl_sagv_max_dclk(&qi);