Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

drm/msm/a690: Fix reg values for a690

KGSL doesn't support a690 so all reg values were the same as
on a660. Now we know the values and they are different from the
windows driver.

This fixes hangs on D3D12 games and some CTS tests.

Signed-off-by: Danylo Piliaiev <dpiliaiev@igalia.com>
Signed-off-by: Rob Clark <robdclark@chromium.org>
Patchwork: https://patchwork.freedesktop.org/patch/568931/

authored by

Danylo Piliaiev and committed by
Rob Clark
07e6de73 cf1aaa7d

+13 -10
+13 -10
drivers/gpu/drm/msm/adreno/a6xx_gpu.c
··· 1312 1312 1313 1313 if (adreno_is_a650(adreno_gpu) || 1314 1314 adreno_is_a660(adreno_gpu) || 1315 + adreno_is_a690(adreno_gpu) || 1315 1316 adreno_is_a730(adreno_gpu) || 1316 1317 adreno_is_a740_family(adreno_gpu)) { 1317 1318 /* TODO: get ddr type from bootloader and use 2 for LPDDR4 */ 1318 1319 hbb_lo = 3; 1319 - amsbc = 1; 1320 - rgb565_predicator = 1; 1321 - uavflagprd_inv = 2; 1322 - } 1323 - 1324 - if (adreno_is_a690(adreno_gpu)) { 1325 - hbb_lo = 2; 1326 1320 amsbc = 1; 1327 1321 rgb565_predicator = 1; 1328 1322 uavflagprd_inv = 2; ··· 1735 1741 /* Setting the primFifo thresholds default values, 1736 1742 * and vccCacheSkipDis=1 bit (0x200) for A640 and newer 1737 1743 */ 1738 - if (adreno_is_a650(adreno_gpu) || adreno_is_a660(adreno_gpu) || adreno_is_a690(adreno_gpu)) 1744 + if (adreno_is_a690(adreno_gpu)) 1745 + gpu_write(gpu, REG_A6XX_PC_DBG_ECO_CNTL, 0x00800200); 1746 + else if (adreno_is_a650(adreno_gpu) || adreno_is_a660(adreno_gpu)) 1739 1747 gpu_write(gpu, REG_A6XX_PC_DBG_ECO_CNTL, 0x00300200); 1740 1748 else if (adreno_is_a640_family(adreno_gpu) || adreno_is_7c3(adreno_gpu)) 1741 1749 gpu_write(gpu, REG_A6XX_PC_DBG_ECO_CNTL, 0x00200200); ··· 1771 1775 if (adreno_is_a730(adreno_gpu) || 1772 1776 adreno_is_a740_family(adreno_gpu)) 1773 1777 gpu_write(gpu, REG_A6XX_RBBM_INTERFACE_HANG_INT_CNTL, (1 << 30) | 0xcfffff); 1778 + else if (adreno_is_a690(adreno_gpu)) 1779 + gpu_write(gpu, REG_A6XX_RBBM_INTERFACE_HANG_INT_CNTL, (1 << 30) | 0x4fffff); 1774 1780 else if (adreno_is_a619(adreno_gpu)) 1775 1781 gpu_write(gpu, REG_A6XX_RBBM_INTERFACE_HANG_INT_CNTL, (1 << 30) | 0x3fffff); 1776 1782 else if (adreno_is_a610(adreno_gpu)) ··· 1806 1808 a6xx_set_cp_protect(gpu); 1807 1809 1808 1810 if (adreno_is_a660_family(adreno_gpu)) { 1809 - gpu_write(gpu, REG_A6XX_CP_CHICKEN_DBG, 0x1); 1811 + if (adreno_is_a690(adreno_gpu)) 1812 + gpu_write(gpu, REG_A6XX_CP_CHICKEN_DBG, 0x00028801); 1813 + else 1814 + gpu_write(gpu, REG_A6XX_CP_CHICKEN_DBG, 0x1); 1810 1815 gpu_write(gpu, REG_A6XX_RBBM_GBIF_CLIENT_QOS_CNTL, 0x0); 1811 1816 } 1812 1817 1818 + if (adreno_is_a690(adreno_gpu)) 1819 + gpu_write(gpu, REG_A6XX_UCHE_CMDQ_CONFIG, 0x90); 1813 1820 /* Set dualQ + disable afull for A660 GPU */ 1814 - if (adreno_is_a660(adreno_gpu)) 1821 + else if (adreno_is_a660(adreno_gpu)) 1815 1822 gpu_write(gpu, REG_A6XX_UCHE_CMDQ_CONFIG, 0x66906); 1816 1823 else if (adreno_is_a7xx(adreno_gpu)) 1817 1824 gpu_write(gpu, REG_A6XX_UCHE_CMDQ_CONFIG,