@@ -439,7 +439,7 @@ void a5xx_set_hwcg(struct msm_gpu *gpu, bool state)
439
439
const struct adreno_five_hwcg_regs * regs ;
440
440
unsigned int i , sz ;
441
441
442
- if (adreno_is_a508 (adreno_gpu )) {
442
+ if (adreno_is_a506 ( adreno_gpu ) || adreno_is_a508 (adreno_gpu )) {
443
443
regs = a50x_hwcg ;
444
444
sz = ARRAY_SIZE (a50x_hwcg );
445
445
} else if (adreno_is_a509 (adreno_gpu ) || adreno_is_a512 (adreno_gpu )) {
@@ -483,7 +483,7 @@ static int a5xx_me_init(struct msm_gpu *gpu)
483
483
OUT_RING (ring , 0x00000000 );
484
484
485
485
/* Specify workarounds for various microcode issues */
486
- if (adreno_is_a530 (adreno_gpu )) {
486
+ if (adreno_is_a506 ( adreno_gpu ) || adreno_is_a530 (adreno_gpu )) {
487
487
/* Workaround for token end syncs
488
488
* Force a WFI after every direct-render 3D mode draw and every
489
489
* 2D mode 3 draw
@@ -618,8 +618,16 @@ static int a5xx_ucode_init(struct msm_gpu *gpu)
618
618
619
619
static int a5xx_zap_shader_resume (struct msm_gpu * gpu )
620
620
{
621
+ struct adreno_gpu * adreno_gpu = to_adreno_gpu (gpu );
621
622
int ret ;
622
623
624
+ /*
625
+ * Adreno 506 have CPZ Retention feature and doesn't require
626
+ * to resume zap shader
627
+ */
628
+ if (adreno_is_a506 (adreno_gpu ))
629
+ return 0 ;
630
+
623
631
ret = qcom_scm_set_remote_state (SCM_GPU_ZAP_SHADER_RESUME , GPU_PAS_ID );
624
632
if (ret )
625
633
DRM_ERROR ("%s: zap-shader resume failed: %d\n" ,
@@ -731,9 +739,10 @@ static int a5xx_hw_init(struct msm_gpu *gpu)
731
739
0x00100000 + adreno_gpu -> gmem - 1 );
732
740
gpu_write (gpu , REG_A5XX_UCHE_GMEM_RANGE_MAX_HI , 0x00000000 );
733
741
734
- if (adreno_is_a508 (adreno_gpu ) || adreno_is_a510 (adreno_gpu )) {
742
+ if (adreno_is_a506 (adreno_gpu ) || adreno_is_a508 (adreno_gpu ) ||
743
+ adreno_is_a510 (adreno_gpu )) {
735
744
gpu_write (gpu , REG_A5XX_CP_MEQ_THRESHOLDS , 0x20 );
736
- if (adreno_is_a508 (adreno_gpu ))
745
+ if (adreno_is_a506 ( adreno_gpu ) || adreno_is_a508 (adreno_gpu ))
737
746
gpu_write (gpu , REG_A5XX_CP_MERCIU_SIZE , 0x400 );
738
747
else
739
748
gpu_write (gpu , REG_A5XX_CP_MERCIU_SIZE , 0x20 );
@@ -749,7 +758,7 @@ static int a5xx_hw_init(struct msm_gpu *gpu)
749
758
gpu_write (gpu , REG_A5XX_CP_ROQ_THRESHOLDS_1 , 0x40201B16 );
750
759
}
751
760
752
- if (adreno_is_a508 (adreno_gpu ))
761
+ if (adreno_is_a506 ( adreno_gpu ) || adreno_is_a508 (adreno_gpu ))
753
762
gpu_write (gpu , REG_A5XX_PC_DBG_ECO_CNTL ,
754
763
(0x100 << 11 | 0x100 << 22 ));
755
764
else if (adreno_is_a509 (adreno_gpu ) || adreno_is_a510 (adreno_gpu ) ||
@@ -767,8 +776,8 @@ static int a5xx_hw_init(struct msm_gpu *gpu)
767
776
* Disable the RB sampler datapath DP2 clock gating optimization
768
777
* for 1-SP GPUs, as it is enabled by default.
769
778
*/
770
- if (adreno_is_a508 (adreno_gpu ) || adreno_is_a509 (adreno_gpu ) ||
771
- adreno_is_a512 (adreno_gpu ))
779
+ if (adreno_is_a506 (adreno_gpu ) || adreno_is_a508 (adreno_gpu ) ||
780
+ adreno_is_a509 ( adreno_gpu ) || adreno_is_a512 (adreno_gpu ))
772
781
gpu_rmw (gpu , REG_A5XX_RB_DBG_ECO_CNTL , 0 , (1 << 9 ));
773
782
774
783
/* Disable UCHE global filter as SP can invalidate/flush independently */
@@ -849,9 +858,9 @@ static int a5xx_hw_init(struct msm_gpu *gpu)
849
858
/* UCHE */
850
859
gpu_write (gpu , REG_A5XX_CP_PROTECT (16 ), ADRENO_PROTECT_RW (0xE80 , 16 ));
851
860
852
- if (adreno_is_a508 ( adreno_gpu ) || adreno_is_a509 (adreno_gpu ) ||
853
- adreno_is_a510 (adreno_gpu ) || adreno_is_a512 (adreno_gpu ) ||
854
- adreno_is_a530 (adreno_gpu ))
861
+ if (adreno_is_a506 ( adreno_gou ) || adreno_is_a508 (adreno_gpu ) ||
862
+ adreno_is_a509 (adreno_gpu ) || adreno_is_a510 (adreno_gpu ) ||
863
+ adreno_is_a512 ( adreno_gpu ) || adreno_is_a530 (adreno_gpu ))
855
864
gpu_write (gpu , REG_A5XX_CP_PROTECT (17 ),
856
865
ADRENO_PROTECT_RW (0x10000 , 0x8000 ));
857
866
@@ -893,8 +902,7 @@ static int a5xx_hw_init(struct msm_gpu *gpu)
893
902
if (ret )
894
903
return ret ;
895
904
896
- if (!(adreno_is_a508 (adreno_gpu ) || adreno_is_a509 (adreno_gpu ) ||
897
- adreno_is_a510 (adreno_gpu ) || adreno_is_a512 (adreno_gpu )))
905
+ if (adreno_is_a530 (adreno_gpu ) || adreno_is_a540 (adreno_gpu ))
898
906
a5xx_gpmu_ucode_init (gpu );
899
907
900
908
ret = a5xx_ucode_init (gpu );
@@ -1344,7 +1352,7 @@ static int a5xx_pm_resume(struct msm_gpu *gpu)
1344
1352
if (ret )
1345
1353
return ret ;
1346
1354
1347
- /* Adreno 508, 509, 510, 512 needs manual RBBM sus/res control */
1355
+ /* Adreno 506, 508, 509, 510, 512 needs manual RBBM sus/res control */
1348
1356
if (!(adreno_is_a530 (adreno_gpu ) || adreno_is_a540 (adreno_gpu ))) {
1349
1357
/* Halt the sp_input_clk at HM level */
1350
1358
gpu_write (gpu , REG_A5XX_RBBM_CLOCK_CNTL , 0x00000055 );
@@ -1387,8 +1395,9 @@ static int a5xx_pm_suspend(struct msm_gpu *gpu)
1387
1395
u32 mask = 0xf ;
1388
1396
int i , ret ;
1389
1397
1390
- /* A508, A510 have 3 XIN ports in VBIF */
1391
- if (adreno_is_a508 (adreno_gpu ) || adreno_is_a510 (adreno_gpu ))
1398
+ /* A506, A508, A510 have 3 XIN ports in VBIF */
1399
+ if (adreno_is_a506 (adreno_gpu ) || adreno_is_a508 (adreno_gpu ) ||
1400
+ adreno_is_a510 (adreno_gpu ))
1392
1401
mask = 0x7 ;
1393
1402
1394
1403
/* Clear the VBIF pipe before shutting down */
0 commit comments