Skip to content

Commit 8cd3737

Browse files
committed
Merge branch 'etnaviv/next' of https://git.pengutronix.de/git/lst/linux into drm-next
- a fix from Eric for synchronization with etnaviv exported dma-bufs - thermal throttle support for newer GPU cores - updated module clock gating to work around GPU errata - a fix to restore userspace buffer cache performance * 'etnaviv/next' of https://git.pengutronix.de/git/lst/linux: drm/etnaviv: restore ETNA_PREP_NOSYNC behaviour drm/etnaviv: implement cooling support for new GPU cores drm/etnaviv: update MLCG disables with info from newer Vivante driver drm/etnaviv: update common.xml.h drm/etnaviv: Expose our reservation object when exporting a dmabuf.
2 parents 6d61e70 + 46a269d commit 8cd3737

File tree

7 files changed

+136
-79
lines changed

7 files changed

+136
-79
lines changed

drivers/gpu/drm/etnaviv/common.xml.h

Lines changed: 89 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,38 @@ This file was generated by the rules-ng-ng headergen tool in this git repository
88
git clone git://0x04.net/rules-ng-ng
99
1010
The rules-ng-ng source files this header was generated from are:
11-
- state_hi.xml ( 24309 bytes, from 2015-12-12 09:02:53)
12-
- common.xml ( 18379 bytes, from 2015-12-12 09:02:53)
11+
- state.xml ( 19930 bytes, from 2017-03-09 15:43:43)
12+
- common.xml ( 23473 bytes, from 2017-03-09 15:43:43)
13+
- state_hi.xml ( 26403 bytes, from 2017-03-09 15:43:43)
14+
- copyright.xml ( 1597 bytes, from 2016-12-08 16:37:56)
15+
- state_2d.xml ( 51552 bytes, from 2016-12-08 16:37:56)
16+
- state_3d.xml ( 66957 bytes, from 2017-03-09 15:43:43)
17+
- state_vg.xml ( 5975 bytes, from 2016-12-08 16:37:56)
1318
14-
Copyright (C) 2015
19+
Copyright (C) 2012-2017 by the following authors:
20+
- Wladimir J. van der Laan <[email protected]>
21+
- Christian Gmeiner <[email protected]>
22+
- Lucas Stach <[email protected]>
23+
- Russell King <[email protected]>
24+
25+
Permission is hereby granted, free of charge, to any person obtaining a
26+
copy of this software and associated documentation files (the "Software"),
27+
to deal in the Software without restriction, including without limitation
28+
the rights to use, copy, modify, merge, publish, distribute, sub license,
29+
and/or sell copies of the Software, and to permit persons to whom the
30+
Software is furnished to do so, subject to the following conditions:
31+
32+
The above copyright notice and this permission notice (including the
33+
next paragraph) shall be included in all copies or substantial portions
34+
of the Software.
35+
36+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
37+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
38+
FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
39+
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
40+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
41+
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
42+
DEALINGS IN THE SOFTWARE.
1543
*/
1644

1745

@@ -162,129 +190,129 @@ Copyright (C) 2015
162190
#define chipMinorFeatures1_FC_FLUSH_STALL 0x80000000
163191
#define chipMinorFeatures2_LINE_LOOP 0x00000001
164192
#define chipMinorFeatures2_LOGIC_OP 0x00000002
165-
#define chipMinorFeatures2_UNK2 0x00000004
193+
#define chipMinorFeatures2_SEAMLESS_CUBE_MAP 0x00000004
166194
#define chipMinorFeatures2_SUPERTILED_TEXTURE 0x00000008
167-
#define chipMinorFeatures2_UNK4 0x00000010
195+
#define chipMinorFeatures2_LINEAR_PE 0x00000010
168196
#define chipMinorFeatures2_RECT_PRIMITIVE 0x00000020
169197
#define chipMinorFeatures2_COMPOSITION 0x00000040
170198
#define chipMinorFeatures2_CORRECT_AUTO_DISABLE_COUNT 0x00000080
171-
#define chipMinorFeatures2_UNK8 0x00000100
172-
#define chipMinorFeatures2_UNK9 0x00000200
173-
#define chipMinorFeatures2_UNK10 0x00000400
199+
#define chipMinorFeatures2_PE_SWIZZLE 0x00000100
200+
#define chipMinorFeatures2_END_EVENT 0x00000200
201+
#define chipMinorFeatures2_S1S8 0x00000400
174202
#define chipMinorFeatures2_HALTI1 0x00000800
175-
#define chipMinorFeatures2_UNK12 0x00001000
176-
#define chipMinorFeatures2_UNK13 0x00002000
177-
#define chipMinorFeatures2_UNK14 0x00004000
203+
#define chipMinorFeatures2_RGB888 0x00001000
204+
#define chipMinorFeatures2_TX__YUV_ASSEMBLER 0x00002000
205+
#define chipMinorFeatures2_DYNAMIC_FREQUENCY_SCALING 0x00004000
178206
#define chipMinorFeatures2_EXTRA_TEXTURE_STATE 0x00008000
179207
#define chipMinorFeatures2_FULL_DIRECTFB 0x00010000
180208
#define chipMinorFeatures2_2D_TILING 0x00020000
181209
#define chipMinorFeatures2_THREAD_WALKER_IN_PS 0x00040000
182210
#define chipMinorFeatures2_TILE_FILLER 0x00080000
183-
#define chipMinorFeatures2_UNK20 0x00100000
211+
#define chipMinorFeatures2_YUV_STANDARD 0x00100000
184212
#define chipMinorFeatures2_2D_MULTI_SOURCE_BLIT 0x00200000
185-
#define chipMinorFeatures2_UNK22 0x00400000
186-
#define chipMinorFeatures2_UNK23 0x00800000
187-
#define chipMinorFeatures2_UNK24 0x01000000
213+
#define chipMinorFeatures2_YUV_CONVERSION 0x00400000
214+
#define chipMinorFeatures2_FLUSH_FIXED_2D 0x00800000
215+
#define chipMinorFeatures2_INTERLEAVER 0x01000000
188216
#define chipMinorFeatures2_MIXED_STREAMS 0x02000000
189217
#define chipMinorFeatures2_2D_420_L2CACHE 0x04000000
190-
#define chipMinorFeatures2_UNK27 0x08000000
218+
#define chipMinorFeatures2_BUG_FIXES7 0x08000000
191219
#define chipMinorFeatures2_2D_NO_INDEX8_BRUSH 0x10000000
192220
#define chipMinorFeatures2_TEXTURE_TILED_READ 0x20000000
193-
#define chipMinorFeatures2_UNK30 0x40000000
194-
#define chipMinorFeatures2_UNK31 0x80000000
221+
#define chipMinorFeatures2_DECOMPRESS_Z16 0x40000000
222+
#define chipMinorFeatures2_BUG_FIXES8 0x80000000
195223
#define chipMinorFeatures3_ROTATION_STALL_FIX 0x00000001
196-
#define chipMinorFeatures3_UNK1 0x00000002
224+
#define chipMinorFeatures3_OCL_ONLY 0x00000002
197225
#define chipMinorFeatures3_2D_MULTI_SOURCE_BLT_EX 0x00000004
198-
#define chipMinorFeatures3_UNK3 0x00000008
199-
#define chipMinorFeatures3_UNK4 0x00000010
200-
#define chipMinorFeatures3_UNK5 0x00000020
201-
#define chipMinorFeatures3_UNK6 0x00000040
202-
#define chipMinorFeatures3_UNK7 0x00000080
226+
#define chipMinorFeatures3_INSTRUCTION_CACHE 0x00000008
227+
#define chipMinorFeatures3_GEOMETRY_SHADER 0x00000010
228+
#define chipMinorFeatures3_TEX_COMPRESSION_SUPERTILED 0x00000020
229+
#define chipMinorFeatures3_GENERICS 0x00000040
230+
#define chipMinorFeatures3_BUG_FIXES9 0x00000080
203231
#define chipMinorFeatures3_FAST_MSAA 0x00000100
204-
#define chipMinorFeatures3_UNK9 0x00000200
232+
#define chipMinorFeatures3_WCLIP 0x00000200
205233
#define chipMinorFeatures3_BUG_FIXES10 0x00000400
206-
#define chipMinorFeatures3_UNK11 0x00000800
234+
#define chipMinorFeatures3_UNIFIED_SAMPLERS 0x00000800
207235
#define chipMinorFeatures3_BUG_FIXES11 0x00001000
208-
#define chipMinorFeatures3_UNK13 0x00002000
209-
#define chipMinorFeatures3_UNK14 0x00004000
210-
#define chipMinorFeatures3_UNK15 0x00008000
211-
#define chipMinorFeatures3_UNK16 0x00010000
212-
#define chipMinorFeatures3_UNK17 0x00020000
236+
#define chipMinorFeatures3_PERFORMANCE_COUNTERS 0x00002000
237+
#define chipMinorFeatures3_HAS_FAST_TRANSCENDENTALS 0x00004000
238+
#define chipMinorFeatures3_BUG_FIXES12 0x00008000
239+
#define chipMinorFeatures3_BUG_FIXES13 0x00010000
240+
#define chipMinorFeatures3_DE_ENHANCEMENTS1 0x00020000
213241
#define chipMinorFeatures3_ACE 0x00040000
214-
#define chipMinorFeatures3_UNK19 0x00080000
215-
#define chipMinorFeatures3_UNK20 0x00100000
216-
#define chipMinorFeatures3_UNK21 0x00200000
242+
#define chipMinorFeatures3_TX_ENHANCEMENTS1 0x00080000
243+
#define chipMinorFeatures3_SH_ENHANCEMENTS1 0x00100000
244+
#define chipMinorFeatures3_SH_ENHANCEMENTS2 0x00200000
217245
#define chipMinorFeatures3_UNK22 0x00400000
218-
#define chipMinorFeatures3_UNK23 0x00800000
246+
#define chipMinorFeatures3_2D_FC_SOURCE 0x00800000
219247
#define chipMinorFeatures3_UNK24 0x01000000
220248
#define chipMinorFeatures3_UNK25 0x02000000
221249
#define chipMinorFeatures3_NEW_HZ 0x04000000
222250
#define chipMinorFeatures3_UNK27 0x08000000
223251
#define chipMinorFeatures3_UNK28 0x10000000
224-
#define chipMinorFeatures3_UNK29 0x20000000
252+
#define chipMinorFeatures3_SH_ENHANCEMENTS3 0x20000000
225253
#define chipMinorFeatures3_UNK30 0x40000000
226254
#define chipMinorFeatures3_UNK31 0x80000000
227255
#define chipMinorFeatures4_UNK0 0x00000001
228-
#define chipMinorFeatures4_UNK1 0x00000002
229-
#define chipMinorFeatures4_UNK2 0x00000004
256+
#define chipMinorFeatures4_PE_ENHANCEMENTS2 0x00000002
257+
#define chipMinorFeatures4_FRUSTUM_CLIP_FIX 0x00000004
230258
#define chipMinorFeatures4_UNK3 0x00000008
231259
#define chipMinorFeatures4_UNK4 0x00000010
232-
#define chipMinorFeatures4_UNK5 0x00000020
233-
#define chipMinorFeatures4_UNK6 0x00000040
260+
#define chipMinorFeatures4_2D_GAMMA 0x00000020
261+
#define chipMinorFeatures4_SINGLE_BUFFER 0x00000040
234262
#define chipMinorFeatures4_UNK7 0x00000080
235263
#define chipMinorFeatures4_UNK8 0x00000100
236264
#define chipMinorFeatures4_UNK9 0x00000200
237265
#define chipMinorFeatures4_UNK10 0x00000400
238-
#define chipMinorFeatures4_UNK11 0x00000800
239-
#define chipMinorFeatures4_UNK12 0x00001000
240-
#define chipMinorFeatures4_UNK13 0x00002000
266+
#define chipMinorFeatures4_TX_LERP_PRECISION_FIX 0x00000800
267+
#define chipMinorFeatures4_2D_COLOR_SPACE_CONVERSION 0x00001000
268+
#define chipMinorFeatures4_TEXTURE_ASTC 0x00002000
241269
#define chipMinorFeatures4_UNK14 0x00004000
242270
#define chipMinorFeatures4_UNK15 0x00008000
243271
#define chipMinorFeatures4_HALTI2 0x00010000
244272
#define chipMinorFeatures4_UNK17 0x00020000
245273
#define chipMinorFeatures4_SMALL_MSAA 0x00040000
246274
#define chipMinorFeatures4_UNK19 0x00080000
247-
#define chipMinorFeatures4_UNK20 0x00100000
248-
#define chipMinorFeatures4_UNK21 0x00200000
249-
#define chipMinorFeatures4_UNK22 0x00400000
250-
#define chipMinorFeatures4_UNK23 0x00800000
251-
#define chipMinorFeatures4_UNK24 0x01000000
252-
#define chipMinorFeatures4_UNK25 0x02000000
253-
#define chipMinorFeatures4_UNK26 0x04000000
254-
#define chipMinorFeatures4_UNK27 0x08000000
275+
#define chipMinorFeatures4_NEW_RA 0x00100000
276+
#define chipMinorFeatures4_2D_OPF_YUV_OUTPUT 0x00200000
277+
#define chipMinorFeatures4_2D_MULTI_SOURCE_BLT_EX2 0x00400000
278+
#define chipMinorFeatures4_NO_USER_CSC 0x00800000
279+
#define chipMinorFeatures4_ZFIXES 0x01000000
280+
#define chipMinorFeatures4_BUG_FIXES18 0x02000000
281+
#define chipMinorFeatures4_2D_COMPRESSION 0x04000000
282+
#define chipMinorFeatures4_PROBE 0x08000000
255283
#define chipMinorFeatures4_UNK28 0x10000000
256-
#define chipMinorFeatures4_UNK29 0x20000000
284+
#define chipMinorFeatures4_2D_SUPER_TILE_VERSION 0x20000000
257285
#define chipMinorFeatures4_UNK30 0x40000000
258286
#define chipMinorFeatures4_UNK31 0x80000000
259287
#define chipMinorFeatures5_UNK0 0x00000001
260288
#define chipMinorFeatures5_UNK1 0x00000002
261289
#define chipMinorFeatures5_UNK2 0x00000004
262290
#define chipMinorFeatures5_UNK3 0x00000008
263-
#define chipMinorFeatures5_UNK4 0x00000010
291+
#define chipMinorFeatures5_EEZ 0x00000010
264292
#define chipMinorFeatures5_UNK5 0x00000020
265293
#define chipMinorFeatures5_UNK6 0x00000040
266294
#define chipMinorFeatures5_UNK7 0x00000080
267295
#define chipMinorFeatures5_UNK8 0x00000100
268296
#define chipMinorFeatures5_HALTI3 0x00000200
269297
#define chipMinorFeatures5_UNK10 0x00000400
270-
#define chipMinorFeatures5_UNK11 0x00000800
298+
#define chipMinorFeatures5_2D_ONE_PASS_FILTER_TAP 0x00000800
271299
#define chipMinorFeatures5_UNK12 0x00001000
272-
#define chipMinorFeatures5_UNK13 0x00002000
273-
#define chipMinorFeatures5_UNK14 0x00004000
300+
#define chipMinorFeatures5_SEPARATE_SRC_DST 0x00002000
301+
#define chipMinorFeatures5_HALTI4 0x00004000
274302
#define chipMinorFeatures5_UNK15 0x00008000
275-
#define chipMinorFeatures5_UNK16 0x00010000
276-
#define chipMinorFeatures5_UNK17 0x00020000
303+
#define chipMinorFeatures5_ANDROID_ONLY 0x00010000
304+
#define chipMinorFeatures5_HAS_PRODUCTID 0x00020000
277305
#define chipMinorFeatures5_UNK18 0x00040000
278306
#define chipMinorFeatures5_UNK19 0x00080000
279-
#define chipMinorFeatures5_UNK20 0x00100000
307+
#define chipMinorFeatures5_PE_DITHER_FIX2 0x00100000
280308
#define chipMinorFeatures5_UNK21 0x00200000
281309
#define chipMinorFeatures5_UNK22 0x00400000
282310
#define chipMinorFeatures5_UNK23 0x00800000
283311
#define chipMinorFeatures5_UNK24 0x01000000
284312
#define chipMinorFeatures5_UNK25 0x02000000
285313
#define chipMinorFeatures5_UNK26 0x04000000
286-
#define chipMinorFeatures5_UNK27 0x08000000
287-
#define chipMinorFeatures5_UNK28 0x10000000
314+
#define chipMinorFeatures5_RS_DEPTHSTENCIL_NATIVE_SUPPORT 0x08000000
315+
#define chipMinorFeatures5_V2_MSAA_COMP_FIX 0x10000000
288316
#define chipMinorFeatures5_UNK29 0x20000000
289317
#define chipMinorFeatures5_UNK30 0x40000000
290318
#define chipMinorFeatures5_UNK31 0x80000000

drivers/gpu/drm/etnaviv/etnaviv_drv.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -495,6 +495,7 @@ static struct drm_driver etnaviv_drm_driver = {
495495
.prime_fd_to_handle = drm_gem_prime_fd_to_handle,
496496
.gem_prime_export = drm_gem_prime_export,
497497
.gem_prime_import = drm_gem_prime_import,
498+
.gem_prime_res_obj = etnaviv_gem_prime_res_obj,
498499
.gem_prime_pin = etnaviv_gem_prime_pin,
499500
.gem_prime_unpin = etnaviv_gem_prime_unpin,
500501
.gem_prime_get_sg_table = etnaviv_gem_prime_get_sg_table,

drivers/gpu/drm/etnaviv/etnaviv_drv.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ void *etnaviv_gem_prime_vmap(struct drm_gem_object *obj);
8080
void etnaviv_gem_prime_vunmap(struct drm_gem_object *obj, void *vaddr);
8181
int etnaviv_gem_prime_mmap(struct drm_gem_object *obj,
8282
struct vm_area_struct *vma);
83+
struct reservation_object *etnaviv_gem_prime_res_obj(struct drm_gem_object *obj);
8384
struct drm_gem_object *etnaviv_gem_prime_import_sg_table(struct drm_device *dev,
8485
struct dma_buf_attachment *attach, struct sg_table *sg);
8586
int etnaviv_gem_prime_pin(struct drm_gem_object *obj);

drivers/gpu/drm/etnaviv/etnaviv_gem.c

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -411,16 +411,20 @@ int etnaviv_gem_cpu_prep(struct drm_gem_object *obj, u32 op,
411411
struct etnaviv_gem_object *etnaviv_obj = to_etnaviv_bo(obj);
412412
struct drm_device *dev = obj->dev;
413413
bool write = !!(op & ETNA_PREP_WRITE);
414-
unsigned long remain =
415-
op & ETNA_PREP_NOSYNC ? 0 : etnaviv_timeout_to_jiffies(timeout);
416-
long lret;
417-
418-
lret = reservation_object_wait_timeout_rcu(etnaviv_obj->resv,
419-
write, true, remain);
420-
if (lret < 0)
421-
return lret;
422-
else if (lret == 0)
423-
return remain == 0 ? -EBUSY : -ETIMEDOUT;
414+
int ret;
415+
416+
if (op & ETNA_PREP_NOSYNC) {
417+
if (!reservation_object_test_signaled_rcu(etnaviv_obj->resv,
418+
write))
419+
return -EBUSY;
420+
} else {
421+
unsigned long remain = etnaviv_timeout_to_jiffies(timeout);
422+
423+
ret = reservation_object_wait_timeout_rcu(etnaviv_obj->resv,
424+
write, true, remain);
425+
if (ret <= 0)
426+
return ret == 0 ? -ETIMEDOUT : ret;
427+
}
424428

425429
if (etnaviv_obj->flags & ETNA_BO_CACHED) {
426430
if (!etnaviv_obj->sgt) {

drivers/gpu/drm/etnaviv/etnaviv_gem_prime.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,3 +150,10 @@ struct drm_gem_object *etnaviv_gem_prime_import_sg_table(struct drm_device *dev,
150150

151151
return ERR_PTR(ret);
152152
}
153+
154+
struct reservation_object *etnaviv_gem_prime_res_obj(struct drm_gem_object *obj)
155+
{
156+
struct etnaviv_gem_object *etnaviv_obj = to_etnaviv_bo(obj);
157+
158+
return etnaviv_obj->resv;
159+
}

drivers/gpu/drm/etnaviv/etnaviv_gpu.c

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -412,13 +412,19 @@ static void etnaviv_gpu_load_clock(struct etnaviv_gpu *gpu, u32 clock)
412412

413413
static void etnaviv_gpu_update_clock(struct etnaviv_gpu *gpu)
414414
{
415-
unsigned int fscale = 1 << (6 - gpu->freq_scale);
416-
u32 clock;
417-
418-
clock = VIVS_HI_CLOCK_CONTROL_DISABLE_DEBUG_REGISTERS |
419-
VIVS_HI_CLOCK_CONTROL_FSCALE_VAL(fscale);
415+
if (gpu->identity.minor_features2 &
416+
chipMinorFeatures2_DYNAMIC_FREQUENCY_SCALING) {
417+
clk_set_rate(gpu->clk_core,
418+
gpu->base_rate_core >> gpu->freq_scale);
419+
clk_set_rate(gpu->clk_shader,
420+
gpu->base_rate_shader >> gpu->freq_scale);
421+
} else {
422+
unsigned int fscale = 1 << (6 - gpu->freq_scale);
423+
u32 clock = VIVS_HI_CLOCK_CONTROL_DISABLE_DEBUG_REGISTERS |
424+
VIVS_HI_CLOCK_CONTROL_FSCALE_VAL(fscale);
420425

421-
etnaviv_gpu_load_clock(gpu, clock);
426+
etnaviv_gpu_load_clock(gpu, clock);
427+
}
422428
}
423429

424430
static int etnaviv_hw_reset(struct etnaviv_gpu *gpu)
@@ -523,9 +529,10 @@ static void etnaviv_gpu_enable_mlcg(struct etnaviv_gpu *gpu)
523529

524530
pmc = gpu_read(gpu, VIVS_PM_MODULE_CONTROLS);
525531

526-
/* Disable PA clock gating for GC400+ except for GC420 */
532+
/* Disable PA clock gating for GC400+ without bugfix except for GC420 */
527533
if (gpu->identity.model >= chipModel_GC400 &&
528-
gpu->identity.model != chipModel_GC420)
534+
gpu->identity.model != chipModel_GC420 &&
535+
!(gpu->identity.minor_features3 & chipMinorFeatures3_BUG_FIXES12))
529536
pmc |= VIVS_PM_MODULE_CONTROLS_DISABLE_MODULE_CLOCK_GATING_PA;
530537

531538
/*
@@ -541,6 +548,11 @@ static void etnaviv_gpu_enable_mlcg(struct etnaviv_gpu *gpu)
541548
if (gpu->identity.revision < 0x5422)
542549
pmc |= BIT(15); /* Unknown bit */
543550

551+
/* Disable TX clock gating on affected core revisions. */
552+
if (etnaviv_is_model_rev(gpu, GC4000, 0x5222) ||
553+
etnaviv_is_model_rev(gpu, GC2000, 0x5108))
554+
pmc |= VIVS_PM_MODULE_CONTROLS_DISABLE_MODULE_CLOCK_GATING_TX;
555+
544556
pmc |= VIVS_PM_MODULE_CONTROLS_DISABLE_MODULE_CLOCK_GATING_RA_HZ;
545557
pmc |= VIVS_PM_MODULE_CONTROLS_DISABLE_MODULE_CLOCK_GATING_RA_EZ;
546558

@@ -1736,11 +1748,13 @@ static int etnaviv_gpu_platform_probe(struct platform_device *pdev)
17361748
DBG("clk_core: %p", gpu->clk_core);
17371749
if (IS_ERR(gpu->clk_core))
17381750
gpu->clk_core = NULL;
1751+
gpu->base_rate_core = clk_get_rate(gpu->clk_core);
17391752

17401753
gpu->clk_shader = devm_clk_get(&pdev->dev, "shader");
17411754
DBG("clk_shader: %p", gpu->clk_shader);
17421755
if (IS_ERR(gpu->clk_shader))
17431756
gpu->clk_shader = NULL;
1757+
gpu->base_rate_shader = clk_get_rate(gpu->clk_shader);
17441758

17451759
/* TODO: figure out max mapped size */
17461760
dev_set_drvdata(dev, gpu);

drivers/gpu/drm/etnaviv/etnaviv_gpu.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,8 @@ struct etnaviv_gpu {
152152
u32 hangcheck_dma_addr;
153153
struct work_struct recover_work;
154154
unsigned int freq_scale;
155+
unsigned long base_rate_core;
156+
unsigned long base_rate_shader;
155157
};
156158

157159
static inline void gpu_write(struct etnaviv_gpu *gpu, u32 reg, u32 data)

0 commit comments

Comments
 (0)