summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gk20a/mm_gk20a.c
diff options
context:
space:
mode:
authorJussi Rasanen <jrasanen@nvidia.com>2015-09-29 06:23:49 -0400
committerTerje Bergstrom <tbergstrom@nvidia.com>2015-10-06 16:30:23 -0400
commitf4b6d4d176e9c83b226d8564595b6b9168cef793 (patch)
treea3092d437b3c1da5c17fb12c5bedef4d20451469 /drivers/gpu/nvgpu/gk20a/mm_gk20a.c
parentc94c2035d67cbfd6262a7c08e00be0aac04d33ed (diff)
gpu: nvgpu: fix ctag computation overflow with 8GB
Bug 1689976 Change-Id: I97ad14c9698030b630d3396199a2a5296c661392 Signed-off-by: Jussi Rasanen <jrasanen@nvidia.com> Reviewed-on: http://git-master/r/806590 (cherry picked from commit c90cd5ee674d6357db3be2243950ff0d81ef15ef) Reviewed-on: http://git-master/r/808249 Reviewed-by: Automatic_Commit_Validation_User GVS: Gerrit_Virtual_Submit Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com> Tested-by: Terje Bergstrom <tbergstrom@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/gk20a/mm_gk20a.c')
-rw-r--r--drivers/gpu/nvgpu/gk20a/mm_gk20a.c14
1 files changed, 7 insertions, 7 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/mm_gk20a.c b/drivers/gpu/nvgpu/gk20a/mm_gk20a.c
index b0c864d4..334f251c 100644
--- a/drivers/gpu/nvgpu/gk20a/mm_gk20a.c
+++ b/drivers/gpu/nvgpu/gk20a/mm_gk20a.c
@@ -2144,7 +2144,7 @@ static int update_gmmu_pde_locked(struct vm_gk20a *vm,
2144 struct scatterlist **sgl, 2144 struct scatterlist **sgl,
2145 u64 *offset, 2145 u64 *offset,
2146 u64 *iova, 2146 u64 *iova,
2147 u32 kind_v, u32 *ctag, 2147 u32 kind_v, u64 *ctag,
2148 bool cacheable, bool unammped_pte, 2148 bool cacheable, bool unammped_pte,
2149 int rw_flag, bool sparse, bool priv) 2149 int rw_flag, bool sparse, bool priv)
2150{ 2150{
@@ -2194,12 +2194,12 @@ static int update_gmmu_pte_locked(struct vm_gk20a *vm,
2194 struct scatterlist **sgl, 2194 struct scatterlist **sgl,
2195 u64 *offset, 2195 u64 *offset,
2196 u64 *iova, 2196 u64 *iova,
2197 u32 kind_v, u32 *ctag, 2197 u32 kind_v, u64 *ctag,
2198 bool cacheable, bool unmapped_pte, 2198 bool cacheable, bool unmapped_pte,
2199 int rw_flag, bool sparse, bool priv) 2199 int rw_flag, bool sparse, bool priv)
2200{ 2200{
2201 struct gk20a *g = gk20a_from_vm(vm); 2201 struct gk20a *g = gk20a_from_vm(vm);
2202 u32 ctag_granularity = g->ops.fb.compression_page_size(g); 2202 u64 ctag_granularity = g->ops.fb.compression_page_size(g);
2203 u32 page_size = vm->gmmu_page_sizes[gmmu_pgsz_idx]; 2203 u32 page_size = vm->gmmu_page_sizes[gmmu_pgsz_idx];
2204 u32 pte_w[2] = {0, 0}; /* invalid pte */ 2204 u32 pte_w[2] = {0, 0}; /* invalid pte */
2205 2205
@@ -2218,7 +2218,7 @@ static int update_gmmu_pte_locked(struct vm_gk20a *vm,
2218 2218
2219 pte_w[1] = gmmu_pte_aperture_video_memory_f() | 2219 pte_w[1] = gmmu_pte_aperture_video_memory_f() |
2220 gmmu_pte_kind_f(kind_v) | 2220 gmmu_pte_kind_f(kind_v) |
2221 gmmu_pte_comptagline_f(*ctag / ctag_granularity); 2221 gmmu_pte_comptagline_f((u32)(*ctag / ctag_granularity));
2222 2222
2223 if (rw_flag == gk20a_mem_flag_read_only) { 2223 if (rw_flag == gk20a_mem_flag_read_only) {
2224 pte_w[0] |= gmmu_pte_read_only_true_f(); 2224 pte_w[0] |= gmmu_pte_read_only_true_f();
@@ -2244,7 +2244,7 @@ static int update_gmmu_pte_locked(struct vm_gk20a *vm,
2244 gk20a_dbg(gpu_dbg_pte, 2244 gk20a_dbg(gpu_dbg_pte,
2245 "pte=%d iova=0x%llx kind=%d ctag=%d vol=%d [0x%08x, 0x%08x]", 2245 "pte=%d iova=0x%llx kind=%d ctag=%d vol=%d [0x%08x, 0x%08x]",
2246 i, *iova, 2246 i, *iova,
2247 kind_v, *ctag / ctag_granularity, !cacheable, 2247 kind_v, (u32)(*ctag / ctag_granularity), !cacheable,
2248 pte_w[1], pte_w[0]); 2248 pte_w[1], pte_w[0]);
2249 2249
2250 if (*ctag) 2250 if (*ctag)
@@ -2287,7 +2287,7 @@ static int update_gmmu_level_locked(struct vm_gk20a *vm,
2287 u64 *offset, 2287 u64 *offset,
2288 u64 *iova, 2288 u64 *iova,
2289 u64 gpu_va, u64 gpu_end, 2289 u64 gpu_va, u64 gpu_end,
2290 u8 kind_v, u32 *ctag, 2290 u8 kind_v, u64 *ctag,
2291 bool cacheable, bool unmapped_pte, 2291 bool cacheable, bool unmapped_pte,
2292 int rw_flag, 2292 int rw_flag,
2293 bool sparse, 2293 bool sparse,
@@ -2390,7 +2390,7 @@ static int update_gmmu_ptes_locked(struct vm_gk20a *vm,
2390{ 2390{
2391 struct gk20a *g = gk20a_from_vm(vm); 2391 struct gk20a *g = gk20a_from_vm(vm);
2392 int ctag_granularity = g->ops.fb.compression_page_size(g); 2392 int ctag_granularity = g->ops.fb.compression_page_size(g);
2393 u32 ctag = ctag_offset * ctag_granularity; 2393 u64 ctag = (u64)ctag_offset * (u64)ctag_granularity;
2394 u64 iova = 0; 2394 u64 iova = 0;
2395 u64 space_to_skip = buffer_offset; 2395 u64 space_to_skip = buffer_offset;
2396 u32 page_size = vm->gmmu_page_sizes[pgsz_idx]; 2396 u32 page_size = vm->gmmu_page_sizes[pgsz_idx];