@@ -837,6 +837,65 @@ const struct adreno_reglist a690_hwcg[] = {
837
837
{}
838
838
};
839
839
840
+ const struct adreno_reglist a702_hwcg [] = {
841
+ { REG_A6XX_RBBM_CLOCK_CNTL_SP0 , 0x22222222 },
842
+ { REG_A6XX_RBBM_CLOCK_CNTL2_SP0 , 0x02222220 },
843
+ { REG_A6XX_RBBM_CLOCK_DELAY_SP0 , 0x00000081 },
844
+ { REG_A6XX_RBBM_CLOCK_HYST_SP0 , 0x0000f3cf },
845
+ { REG_A6XX_RBBM_CLOCK_CNTL_TP0 , 0x22222222 },
846
+ { REG_A6XX_RBBM_CLOCK_CNTL2_TP0 , 0x22222222 },
847
+ { REG_A6XX_RBBM_CLOCK_CNTL3_TP0 , 0x22222222 },
848
+ { REG_A6XX_RBBM_CLOCK_CNTL4_TP0 , 0x00022222 },
849
+ { REG_A6XX_RBBM_CLOCK_DELAY_TP0 , 0x11111111 },
850
+ { REG_A6XX_RBBM_CLOCK_DELAY2_TP0 , 0x11111111 },
851
+ { REG_A6XX_RBBM_CLOCK_DELAY3_TP0 , 0x11111111 },
852
+ { REG_A6XX_RBBM_CLOCK_DELAY4_TP0 , 0x00011111 },
853
+ { REG_A6XX_RBBM_CLOCK_HYST_TP0 , 0x77777777 },
854
+ { REG_A6XX_RBBM_CLOCK_HYST2_TP0 , 0x77777777 },
855
+ { REG_A6XX_RBBM_CLOCK_HYST3_TP0 , 0x77777777 },
856
+ { REG_A6XX_RBBM_CLOCK_HYST4_TP0 , 0x00077777 },
857
+ { REG_A6XX_RBBM_CLOCK_CNTL_RB0 , 0x22222222 },
858
+ { REG_A6XX_RBBM_CLOCK_CNTL2_RB0 , 0x01202222 },
859
+ { REG_A6XX_RBBM_CLOCK_CNTL_CCU0 , 0x00002220 },
860
+ { REG_A6XX_RBBM_CLOCK_HYST_RB_CCU0 , 0x00040f00 },
861
+ { REG_A6XX_RBBM_CLOCK_CNTL_RAC , 0x05522022 },
862
+ { REG_A6XX_RBBM_CLOCK_CNTL2_RAC , 0x00005555 },
863
+ { REG_A6XX_RBBM_CLOCK_DELAY_RAC , 0x00000011 },
864
+ { REG_A6XX_RBBM_CLOCK_HYST_RAC , 0x00445044 },
865
+ { REG_A6XX_RBBM_CLOCK_CNTL_TSE_RAS_RBBM , 0x04222222 },
866
+ { REG_A6XX_RBBM_CLOCK_MODE_VFD , 0x00002222 },
867
+ { REG_A6XX_RBBM_CLOCK_MODE_GPC , 0x02222222 },
868
+ { REG_A6XX_RBBM_CLOCK_DELAY_HLSQ_2 , 0x00000002 },
869
+ { REG_A6XX_RBBM_CLOCK_MODE_HLSQ , 0x00002222 },
870
+ { REG_A6XX_RBBM_CLOCK_DELAY_TSE_RAS_RBBM , 0x00004000 },
871
+ { REG_A6XX_RBBM_CLOCK_DELAY_VFD , 0x00002222 },
872
+ { REG_A6XX_RBBM_CLOCK_DELAY_GPC , 0x00000200 },
873
+ { REG_A6XX_RBBM_CLOCK_DELAY_HLSQ , 0x00000000 },
874
+ { REG_A6XX_RBBM_CLOCK_HYST_TSE_RAS_RBBM , 0x00000000 },
875
+ { REG_A6XX_RBBM_CLOCK_HYST_VFD , 0x00000000 },
876
+ { REG_A6XX_RBBM_CLOCK_HYST_GPC , 0x04104004 },
877
+ { REG_A6XX_RBBM_CLOCK_HYST_HLSQ , 0x00000000 },
878
+ { REG_A6XX_RBBM_CLOCK_CNTL_UCHE , 0x22222222 },
879
+ { REG_A6XX_RBBM_CLOCK_HYST_UCHE , 0x00000004 },
880
+ { REG_A6XX_RBBM_CLOCK_DELAY_UCHE , 0x00000002 },
881
+ { REG_A6XX_RBBM_ISDB_CNT , 0x00000182 },
882
+ { REG_A6XX_RBBM_RAC_THRESHOLD_CNT , 0x00000000 },
883
+ { REG_A6XX_RBBM_SP_HYST_CNT , 0x00000000 },
884
+ { REG_A6XX_RBBM_CLOCK_CNTL_GMU_GX , 0x00000222 },
885
+ { REG_A6XX_RBBM_CLOCK_DELAY_GMU_GX , 0x00000111 },
886
+ { REG_A6XX_RBBM_CLOCK_HYST_GMU_GX , 0x00000555 },
887
+ { REG_A6XX_RBBM_CLOCK_CNTL_FCHE , 0x00000222 },
888
+ { REG_A6XX_RBBM_CLOCK_DELAY_FCHE , 0x00000000 },
889
+ { REG_A6XX_RBBM_CLOCK_HYST_FCHE , 0x00000000 },
890
+ { REG_A6XX_RBBM_CLOCK_CNTL_GLC , 0x00222222 },
891
+ { REG_A6XX_RBBM_CLOCK_DELAY_GLC , 0x00000000 },
892
+ { REG_A6XX_RBBM_CLOCK_HYST_GLC , 0x00000000 },
893
+ { REG_A6XX_RBBM_CLOCK_CNTL_MHUB , 0x00000002 },
894
+ { REG_A6XX_RBBM_CLOCK_DELAY_MHUB , 0x00000000 },
895
+ { REG_A6XX_RBBM_CLOCK_HYST_MHUB , 0x00000000 },
896
+ {}
897
+ };
898
+
840
899
const struct adreno_reglist a730_hwcg [] = {
841
900
{ REG_A6XX_RBBM_CLOCK_CNTL_SP0 , 0x02222222 },
842
901
{ REG_A6XX_RBBM_CLOCK_CNTL2_SP0 , 0x02022222 },
@@ -968,6 +1027,8 @@ static void a6xx_set_hwcg(struct msm_gpu *gpu, bool state)
968
1027
clock_cntl_on = 0x8aa8aa02 ;
969
1028
else if (adreno_is_a610 (adreno_gpu ))
970
1029
clock_cntl_on = 0xaaa8aa82 ;
1030
+ else if (adreno_is_a702 (adreno_gpu ))
1031
+ clock_cntl_on = 0xaaaaaa82 ;
971
1032
else
972
1033
clock_cntl_on = 0x8aa8aa82 ;
973
1034
@@ -1008,14 +1069,14 @@ static void a6xx_set_hwcg(struct msm_gpu *gpu, bool state)
1008
1069
return ;
1009
1070
1010
1071
/* Disable SP clock before programming HWCG registers */
1011
- if (!adreno_is_a610 (adreno_gpu ) && !adreno_is_a7xx (adreno_gpu ))
1072
+ if (!adreno_is_a610_family (adreno_gpu ) && !adreno_is_a7xx (adreno_gpu ))
1012
1073
gmu_rmw (gmu , REG_A6XX_GPU_GMU_GX_SPTPRAC_CLOCK_CONTROL , 1 , 0 );
1013
1074
1014
1075
for (i = 0 ; (reg = & adreno_gpu -> info -> hwcg [i ], reg -> offset ); i ++ )
1015
1076
gpu_write (gpu , reg -> offset , state ? reg -> value : 0 );
1016
1077
1017
1078
/* Enable SP clock */
1018
- if (!adreno_is_a610 (adreno_gpu ) && !adreno_is_a7xx (adreno_gpu ))
1079
+ if (!adreno_is_a610_family (adreno_gpu ) && !adreno_is_a7xx (adreno_gpu ))
1019
1080
gmu_rmw (gmu , REG_A6XX_GPU_GMU_GX_SPTPRAC_CLOCK_CONTROL , 0 , 1 );
1020
1081
1021
1082
gpu_write (gpu , REG_A6XX_RBBM_CLOCK_CNTL , state ? clock_cntl_on : 0 );
@@ -1243,7 +1304,7 @@ static void a6xx_set_cp_protect(struct msm_gpu *gpu)
1243
1304
const u32 * regs = a6xx_protect ;
1244
1305
unsigned i , count , count_max ;
1245
1306
1246
- if (adreno_is_a650 (adreno_gpu )) {
1307
+ if (adreno_is_a650 (adreno_gpu ) || adreno_is_a702 ( adreno_gpu ) ) {
1247
1308
regs = a650_protect ;
1248
1309
count = ARRAY_SIZE (a650_protect );
1249
1310
count_max = 48 ;
@@ -1340,6 +1401,12 @@ static void a6xx_calc_ubwc_config(struct adreno_gpu *gpu)
1340
1401
gpu -> ubwc_config .rgb565_predicator = 1 ;
1341
1402
gpu -> ubwc_config .uavflagprd_inv = 2 ;
1342
1403
}
1404
+
1405
+ if (adreno_is_a702 (gpu )) {
1406
+ gpu -> ubwc_config .highest_bank_bit = 14 ;
1407
+ gpu -> ubwc_config .min_acc_len = 1 ;
1408
+ gpu -> ubwc_config .ubwc_mode = 2 ;
1409
+ }
1343
1410
}
1344
1411
1345
1412
static void a6xx_set_ubwc_config (struct msm_gpu * gpu )
@@ -1473,7 +1540,7 @@ static bool a6xx_ucode_check_version(struct a6xx_gpu *a6xx_gpu,
1473
1540
return false;
1474
1541
1475
1542
/* A7xx is safe! */
1476
- if (adreno_is_a7xx (adreno_gpu ))
1543
+ if (adreno_is_a7xx (adreno_gpu ) || adreno_is_a702 ( adreno_gpu ) )
1477
1544
return true;
1478
1545
1479
1546
/*
@@ -1691,7 +1758,7 @@ static int hw_init(struct msm_gpu *gpu)
1691
1758
a6xx_set_hwcg (gpu , true);
1692
1759
1693
1760
/* VBIF/GBIF start*/
1694
- if (adreno_is_a610 (adreno_gpu ) ||
1761
+ if (adreno_is_a610_family (adreno_gpu ) ||
1695
1762
adreno_is_a640_family (adreno_gpu ) ||
1696
1763
adreno_is_a650_family (adreno_gpu ) ||
1697
1764
adreno_is_a7xx (adreno_gpu )) {
@@ -1725,6 +1792,7 @@ static int hw_init(struct msm_gpu *gpu)
1725
1792
}
1726
1793
1727
1794
if (!(adreno_is_a650_family (adreno_gpu ) ||
1795
+ adreno_is_a702 (adreno_gpu ) ||
1728
1796
adreno_is_a730 (adreno_gpu ))) {
1729
1797
gmem_range_min = adreno_is_a740_family (adreno_gpu ) ? SZ_16M : SZ_1M ;
1730
1798
@@ -1745,7 +1813,7 @@ static int hw_init(struct msm_gpu *gpu)
1745
1813
if (adreno_is_a640_family (adreno_gpu ) || adreno_is_a650_family (adreno_gpu )) {
1746
1814
gpu_write (gpu , REG_A6XX_CP_ROQ_THRESHOLDS_2 , 0x02000140 );
1747
1815
gpu_write (gpu , REG_A6XX_CP_ROQ_THRESHOLDS_1 , 0x8040362c );
1748
- } else if (adreno_is_a610 (adreno_gpu )) {
1816
+ } else if (adreno_is_a610_family (adreno_gpu )) {
1749
1817
gpu_write (gpu , REG_A6XX_CP_ROQ_THRESHOLDS_2 , 0x00800060 );
1750
1818
gpu_write (gpu , REG_A6XX_CP_ROQ_THRESHOLDS_1 , 0x40201b16 );
1751
1819
} else if (!adreno_is_a7xx (adreno_gpu )) {
@@ -1760,13 +1828,18 @@ static int hw_init(struct msm_gpu *gpu)
1760
1828
if (adreno_is_a610 (adreno_gpu )) {
1761
1829
gpu_write (gpu , REG_A6XX_CP_MEM_POOL_SIZE , 48 );
1762
1830
gpu_write (gpu , REG_A6XX_CP_MEM_POOL_DBG_ADDR , 47 );
1831
+ } else if (adreno_is_a702 (adreno_gpu )) {
1832
+ gpu_write (gpu , REG_A6XX_CP_MEM_POOL_SIZE , 64 );
1833
+ gpu_write (gpu , REG_A6XX_CP_MEM_POOL_DBG_ADDR , 63 );
1763
1834
} else if (!adreno_is_a7xx (adreno_gpu ))
1764
1835
gpu_write (gpu , REG_A6XX_CP_MEM_POOL_SIZE , 128 );
1765
1836
1766
1837
/* Setting the primFifo thresholds default values,
1767
1838
* and vccCacheSkipDis=1 bit (0x200) for A640 and newer
1768
1839
*/
1769
- if (adreno_is_a690 (adreno_gpu ))
1840
+ if (adreno_is_a702 (adreno_gpu ))
1841
+ gpu_write (gpu , REG_A6XX_PC_DBG_ECO_CNTL , 0x0000c000 );
1842
+ else if (adreno_is_a690 (adreno_gpu ))
1770
1843
gpu_write (gpu , REG_A6XX_PC_DBG_ECO_CNTL , 0x00800200 );
1771
1844
else if (adreno_is_a650 (adreno_gpu ) || adreno_is_a660 (adreno_gpu ))
1772
1845
gpu_write (gpu , REG_A6XX_PC_DBG_ECO_CNTL , 0x00300200 );
@@ -1806,7 +1879,7 @@ static int hw_init(struct msm_gpu *gpu)
1806
1879
gpu_write (gpu , REG_A6XX_RBBM_INTERFACE_HANG_INT_CNTL , (1 << 30 ) | 0x4fffff );
1807
1880
else if (adreno_is_a619 (adreno_gpu ))
1808
1881
gpu_write (gpu , REG_A6XX_RBBM_INTERFACE_HANG_INT_CNTL , (1 << 30 ) | 0x3fffff );
1809
- else if (adreno_is_a610 (adreno_gpu ))
1882
+ else if (adreno_is_a610 (adreno_gpu ) || adreno_is_a702 ( adreno_gpu ) )
1810
1883
gpu_write (gpu , REG_A6XX_RBBM_INTERFACE_HANG_INT_CNTL , (1 << 30 ) | 0x3ffff );
1811
1884
else
1812
1885
gpu_write (gpu , REG_A6XX_RBBM_INTERFACE_HANG_INT_CNTL , (1 << 30 ) | 0x1fffff );
@@ -1842,6 +1915,9 @@ static int hw_init(struct msm_gpu *gpu)
1842
1915
else
1843
1916
gpu_write (gpu , REG_A6XX_CP_CHICKEN_DBG , 0x1 );
1844
1917
gpu_write (gpu , REG_A6XX_RBBM_GBIF_CLIENT_QOS_CNTL , 0x0 );
1918
+ } else if (adreno_is_a702 (adreno_gpu )) {
1919
+ /* Something to do with the HLSQ cluster */
1920
+ gpu_write (gpu , REG_A6XX_CP_CHICKEN_DBG , BIT (24 ));
1845
1921
}
1846
1922
1847
1923
if (adreno_is_a690 (adreno_gpu ))
0 commit comments