aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/msm/adreno/a2xx_gpu.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/msm/adreno/a2xx_gpu.c')
-rw-r--r--drivers/gpu/drm/msm/adreno/a2xx_gpu.c50
1 files changed, 46 insertions, 4 deletions
diff --git a/drivers/gpu/drm/msm/adreno/a2xx_gpu.c b/drivers/gpu/drm/msm/adreno/a2xx_gpu.c
index 5eddcf14eeb9..1f83bc18d500 100644
--- a/drivers/gpu/drm/msm/adreno/a2xx_gpu.c
+++ b/drivers/gpu/drm/msm/adreno/a2xx_gpu.c
@@ -2,6 +2,8 @@
2/* Copyright (c) 2018 The Linux Foundation. All rights reserved. */ 2/* Copyright (c) 2018 The Linux Foundation. All rights reserved. */
3 3
4#include "a2xx_gpu.h" 4#include "a2xx_gpu.h"
5#include "msm_gem.h"
6#include "msm_mmu.h"
5 7
6extern bool hang_debug; 8extern bool hang_debug;
7 9
@@ -58,9 +60,12 @@ static bool a2xx_me_init(struct msm_gpu *gpu)
58static int a2xx_hw_init(struct msm_gpu *gpu) 60static int a2xx_hw_init(struct msm_gpu *gpu)
59{ 61{
60 struct adreno_gpu *adreno_gpu = to_adreno_gpu(gpu); 62 struct adreno_gpu *adreno_gpu = to_adreno_gpu(gpu);
63 dma_addr_t pt_base, tran_error;
61 uint32_t *ptr, len; 64 uint32_t *ptr, len;
62 int i, ret; 65 int i, ret;
63 66
67 msm_gpummu_params(gpu->aspace->mmu, &pt_base, &tran_error);
68
64 DBG("%s", gpu->name); 69 DBG("%s", gpu->name);
65 70
66 /* halt ME to avoid ucode upload issues on a20x */ 71 /* halt ME to avoid ucode upload issues on a20x */
@@ -80,9 +85,34 @@ static int a2xx_hw_init(struct msm_gpu *gpu)
80 /* note: kgsl uses 0x0000ffff for a20x */ 85 /* note: kgsl uses 0x0000ffff for a20x */
81 gpu_write(gpu, REG_A2XX_RBBM_CNTL, 0x00004442); 86 gpu_write(gpu, REG_A2XX_RBBM_CNTL, 0x00004442);
82 87
83 gpu_write(gpu, REG_A2XX_MH_MMU_CONFIG, 0); 88 /* MPU: physical range */
84 gpu_write(gpu, REG_A2XX_MH_MMU_MPU_BASE, 0); 89 gpu_write(gpu, REG_A2XX_MH_MMU_MPU_BASE, 0x00000000);
85 gpu_write(gpu, REG_A2XX_MH_MMU_MPU_END, 0xfffff000); 90 gpu_write(gpu, REG_A2XX_MH_MMU_MPU_END, 0xfffff000);
91
92 gpu_write(gpu, REG_A2XX_MH_MMU_CONFIG, A2XX_MH_MMU_CONFIG_MMU_ENABLE |
93 A2XX_MH_MMU_CONFIG_RB_W_CLNT_BEHAVIOR(BEH_TRAN_RNG) |
94 A2XX_MH_MMU_CONFIG_CP_W_CLNT_BEHAVIOR(BEH_TRAN_RNG) |
95 A2XX_MH_MMU_CONFIG_CP_R0_CLNT_BEHAVIOR(BEH_TRAN_RNG) |
96 A2XX_MH_MMU_CONFIG_CP_R1_CLNT_BEHAVIOR(BEH_TRAN_RNG) |
97 A2XX_MH_MMU_CONFIG_CP_R2_CLNT_BEHAVIOR(BEH_TRAN_RNG) |
98 A2XX_MH_MMU_CONFIG_CP_R3_CLNT_BEHAVIOR(BEH_TRAN_RNG) |
99 A2XX_MH_MMU_CONFIG_CP_R4_CLNT_BEHAVIOR(BEH_TRAN_RNG) |
100 A2XX_MH_MMU_CONFIG_VGT_R0_CLNT_BEHAVIOR(BEH_TRAN_RNG) |
101 A2XX_MH_MMU_CONFIG_VGT_R1_CLNT_BEHAVIOR(BEH_TRAN_RNG) |
102 A2XX_MH_MMU_CONFIG_TC_R_CLNT_BEHAVIOR(BEH_TRAN_RNG) |
103 A2XX_MH_MMU_CONFIG_PA_W_CLNT_BEHAVIOR(BEH_TRAN_RNG));
104
105 /* same as parameters in adreno_gpu */
106 gpu_write(gpu, REG_A2XX_MH_MMU_VA_RANGE, SZ_16M |
107 A2XX_MH_MMU_VA_RANGE_NUM_64KB_REGIONS(0xfff));
108
109 gpu_write(gpu, REG_A2XX_MH_MMU_PT_BASE, pt_base);
110 gpu_write(gpu, REG_A2XX_MH_MMU_TRAN_ERROR, tran_error);
111
112 gpu_write(gpu, REG_A2XX_MH_MMU_INVALIDATE,
113 A2XX_MH_MMU_INVALIDATE_INVALIDATE_ALL |
114 A2XX_MH_MMU_INVALIDATE_INVALIDATE_TC);
115
86 gpu_write(gpu, REG_A2XX_MH_ARBITER_CONFIG, 116 gpu_write(gpu, REG_A2XX_MH_ARBITER_CONFIG,
87 A2XX_MH_ARBITER_CONFIG_SAME_PAGE_LIMIT(16) | 117 A2XX_MH_ARBITER_CONFIG_SAME_PAGE_LIMIT(16) |
88 A2XX_MH_ARBITER_CONFIG_L1_ARB_ENABLE | 118 A2XX_MH_ARBITER_CONFIG_L1_ARB_ENABLE |
@@ -109,9 +139,21 @@ static int a2xx_hw_init(struct msm_gpu *gpu)
109 /* note: gsl doesn't set this */ 139 /* note: gsl doesn't set this */
110 gpu_write(gpu, REG_A2XX_RBBM_DEBUG, 0x00080000); 140 gpu_write(gpu, REG_A2XX_RBBM_DEBUG, 0x00080000);
111 141
112 gpu_write(gpu, REG_A2XX_RBBM_INT_CNTL, 0); 142 gpu_write(gpu, REG_A2XX_RBBM_INT_CNTL,
113 gpu_write(gpu, REG_AXXX_CP_INT_CNTL, 0x80000000); /* RB INT */ 143 A2XX_RBBM_INT_CNTL_RDERR_INT_MASK);
144 gpu_write(gpu, REG_AXXX_CP_INT_CNTL,
145 AXXX_CP_INT_CNTL_T0_PACKET_IN_IB_MASK |
146 AXXX_CP_INT_CNTL_OPCODE_ERROR_MASK |
147 AXXX_CP_INT_CNTL_PROTECTED_MODE_ERROR_MASK |
148 AXXX_CP_INT_CNTL_RESERVED_BIT_ERROR_MASK |
149 AXXX_CP_INT_CNTL_IB_ERROR_MASK |
150 AXXX_CP_INT_CNTL_IB1_INT_MASK |
151 AXXX_CP_INT_CNTL_RB_INT_MASK);
114 gpu_write(gpu, REG_A2XX_SQ_INT_CNTL, 0); 152 gpu_write(gpu, REG_A2XX_SQ_INT_CNTL, 0);
153 gpu_write(gpu, REG_A2XX_MH_INTERRUPT_MASK,
154 A2XX_MH_INTERRUPT_MASK_AXI_READ_ERROR |
155 A2XX_MH_INTERRUPT_MASK_AXI_WRITE_ERROR |
156 A2XX_MH_INTERRUPT_MASK_MMU_PAGE_FAULT);
115 157
116 for (i = 3; i <= 5; i++) 158 for (i = 3; i <= 5; i++)
117 if ((SZ_16K << i) == adreno_gpu->gmem) 159 if ((SZ_16K << i) == adreno_gpu->gmem)