summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTerje Bergstrom <tbergstrom@nvidia.com>2018-08-16 18:00:07 -0400
committermobile promotions <svcmobile_promotions@nvidia.com>2018-09-10 18:23:08 -0400
commit83efad7adb44647d37d98a57cbb6df48e356917d (patch)
treeeebbe2f831484d2e6ea90d027f0dc16d69f42114
parenta02e1c1f0b012b743d4c1ba9c853057b4359107e (diff)
gpu: nvgpu: Move FB size query to FB
Vidmem size query was in mm_xxx.c. It involves reading a register from FB, so move the query to FB HAL. JIRA NVGPU-1063 Change-Id: I30dfd2c4fdcdd6c841f85aaab7431d52473759bd Signed-off-by: Terje Bergstrom <tbergstrom@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/1801425 Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com> Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
-rw-r--r--drivers/gpu/nvgpu/Makefile1
-rw-r--r--drivers/gpu/nvgpu/Makefile.sources1
-rw-r--r--drivers/gpu/nvgpu/common/fb/fb_gp106.c15
-rw-r--r--drivers/gpu/nvgpu/common/fb/fb_gp106.h2
-rw-r--r--drivers/gpu/nvgpu/common/fb/fb_gv100.c15
-rw-r--r--drivers/gpu/nvgpu/common/fb/fb_gv100.h2
-rw-r--r--drivers/gpu/nvgpu/common/mm/vidmem.c6
-rw-r--r--drivers/gpu/nvgpu/gk20a/gk20a.h2
-rw-r--r--drivers/gpu/nvgpu/gp106/hal_gp106.c3
-rw-r--r--drivers/gpu/nvgpu/gp106/mm_gp106.c47
-rw-r--r--drivers/gpu/nvgpu/gp106/mm_gp106.h32
-rw-r--r--drivers/gpu/nvgpu/gv100/hal_gv100.c2
-rw-r--r--drivers/gpu/nvgpu/gv100/mm_gv100.c16
-rw-r--r--drivers/gpu/nvgpu/gv100/mm_gv100.h1
14 files changed, 40 insertions, 105 deletions
diff --git a/drivers/gpu/nvgpu/Makefile b/drivers/gpu/nvgpu/Makefile
index 778d46fc..d7399c5d 100644
--- a/drivers/gpu/nvgpu/Makefile
+++ b/drivers/gpu/nvgpu/Makefile
@@ -295,7 +295,6 @@ nvgpu-y += \
295 gp10b/gp10b.o \ 295 gp10b/gp10b.o \
296 gp10b/ecc_gp10b.o \ 296 gp10b/ecc_gp10b.o \
297 gp106/hal_gp106.o \ 297 gp106/hal_gp106.o \
298 gp106/mm_gp106.o \
299 gp106/flcn_gp106.o \ 298 gp106/flcn_gp106.o \
300 gp106/pmu_gp106.o \ 299 gp106/pmu_gp106.o \
301 gp106/mclk_gp106.o \ 300 gp106/mclk_gp106.o \
diff --git a/drivers/gpu/nvgpu/Makefile.sources b/drivers/gpu/nvgpu/Makefile.sources
index b96ce719..ceec9116 100644
--- a/drivers/gpu/nvgpu/Makefile.sources
+++ b/drivers/gpu/nvgpu/Makefile.sources
@@ -191,7 +191,6 @@ srcs := os/posix/nvgpu.c \
191 gv11b/regops_gv11b.c \ 191 gv11b/regops_gv11b.c \
192 gv11b/ecc_gv11b.c \ 192 gv11b/ecc_gv11b.c \
193 gp106/hal_gp106.c \ 193 gp106/hal_gp106.c \
194 gp106/mm_gp106.c \
195 gp106/flcn_gp106.c \ 194 gp106/flcn_gp106.c \
196 gp106/pmu_gp106.c \ 195 gp106/pmu_gp106.c \
197 gp106/mclk_gp106.c \ 196 gp106/mclk_gp106.c \
diff --git a/drivers/gpu/nvgpu/common/fb/fb_gp106.c b/drivers/gpu/nvgpu/common/fb/fb_gp106.c
index c8a32cd2..6dacceb5 100644
--- a/drivers/gpu/nvgpu/common/fb/fb_gp106.c
+++ b/drivers/gpu/nvgpu/common/fb/fb_gp106.c
@@ -52,3 +52,18 @@ void gp106_fb_reset(struct gk20a *g)
52 val &= ~fb_mmu_priv_level_mask_write_violation_m(); 52 val &= ~fb_mmu_priv_level_mask_write_violation_m();
53 gk20a_writel(g, fb_mmu_priv_level_mask_r(), val); 53 gk20a_writel(g, fb_mmu_priv_level_mask_r(), val);
54} 54}
55
56size_t gp106_fb_get_vidmem_size(struct gk20a *g)
57{
58 u32 range = gk20a_readl(g, fb_mmu_local_memory_range_r());
59 u32 mag = fb_mmu_local_memory_range_lower_mag_v(range);
60 u32 scale = fb_mmu_local_memory_range_lower_scale_v(range);
61 u32 ecc = fb_mmu_local_memory_range_ecc_mode_v(range);
62 size_t bytes = ((size_t)mag << scale) * SZ_1M;
63
64 if (ecc) {
65 bytes = bytes / 16U * 15U;
66 }
67
68 return bytes;
69}
diff --git a/drivers/gpu/nvgpu/common/fb/fb_gp106.h b/drivers/gpu/nvgpu/common/fb/fb_gp106.h
index d5ee87f4..bb4ccd6b 100644
--- a/drivers/gpu/nvgpu/common/fb/fb_gp106.h
+++ b/drivers/gpu/nvgpu/common/fb/fb_gp106.h
@@ -25,4 +25,6 @@
25struct gpu_ops; 25struct gpu_ops;
26 26
27void gp106_fb_reset(struct gk20a *g); 27void gp106_fb_reset(struct gk20a *g);
28size_t gp106_fb_get_vidmem_size(struct gk20a *g);
29
28#endif 30#endif
diff --git a/drivers/gpu/nvgpu/common/fb/fb_gv100.c b/drivers/gpu/nvgpu/common/fb/fb_gv100.c
index 848d6efb..4cae5312 100644
--- a/drivers/gpu/nvgpu/common/fb/fb_gv100.c
+++ b/drivers/gpu/nvgpu/common/fb/fb_gv100.c
@@ -281,3 +281,18 @@ int gv100_fb_enable_nvlink(struct gk20a *g)
281 281
282 return 0; 282 return 0;
283} 283}
284
285size_t gv100_fb_get_vidmem_size(struct gk20a *g)
286{
287 u32 range = gk20a_readl(g, fb_mmu_local_memory_range_r());
288 u32 mag = fb_mmu_local_memory_range_lower_mag_v(range);
289 u32 scale = fb_mmu_local_memory_range_lower_scale_v(range);
290 u32 ecc = fb_mmu_local_memory_range_ecc_mode_v(range);
291 size_t bytes = ((size_t)mag << scale) * SZ_1M;
292
293 if (ecc) {
294 bytes = bytes / 16U * 15U;
295 }
296
297 return bytes;
298}
diff --git a/drivers/gpu/nvgpu/common/fb/fb_gv100.h b/drivers/gpu/nvgpu/common/fb/fb_gv100.h
index 195baccf..d47fded2 100644
--- a/drivers/gpu/nvgpu/common/fb/fb_gv100.h
+++ b/drivers/gpu/nvgpu/common/fb/fb_gv100.h
@@ -33,4 +33,6 @@ void gv100_fb_disable_hub_intr(struct gk20a *g);
33int gv100_fb_memory_unlock(struct gk20a *g); 33int gv100_fb_memory_unlock(struct gk20a *g);
34int gv100_fb_init_nvlink(struct gk20a *g); 34int gv100_fb_init_nvlink(struct gk20a *g);
35int gv100_fb_enable_nvlink(struct gk20a *g); 35int gv100_fb_enable_nvlink(struct gk20a *g);
36size_t gv100_fb_get_vidmem_size(struct gk20a *g);
37
36#endif 38#endif
diff --git a/drivers/gpu/nvgpu/common/mm/vidmem.c b/drivers/gpu/nvgpu/common/mm/vidmem.c
index 1ace2333..3f5e0fbb 100644
--- a/drivers/gpu/nvgpu/common/mm/vidmem.c
+++ b/drivers/gpu/nvgpu/common/mm/vidmem.c
@@ -41,7 +41,7 @@ void nvgpu_vidmem_destroy(struct gk20a *g)
41{ 41{
42 struct nvgpu_timeout timeout; 42 struct nvgpu_timeout timeout;
43 43
44 if (!g->ops.mm.get_vidmem_size) 44 if (!g->ops.fb.get_vidmem_size)
45 return; 45 return;
46 46
47 nvgpu_timeout_init(g, &timeout, 100, NVGPU_TIMER_RETRY_TIMER); 47 nvgpu_timeout_init(g, &timeout, 100, NVGPU_TIMER_RETRY_TIMER);
@@ -293,8 +293,8 @@ int nvgpu_vidmem_init(struct mm_gk20a *mm)
293 static struct nvgpu_alloc_carveout bootstrap_co = 293 static struct nvgpu_alloc_carveout bootstrap_co =
294 NVGPU_CARVEOUT("bootstrap-region", 0, 0); 294 NVGPU_CARVEOUT("bootstrap-region", 0, 0);
295 295
296 size = g->ops.mm.get_vidmem_size ? 296 size = g->ops.fb.get_vidmem_size ?
297 g->ops.mm.get_vidmem_size(g) : 0; 297 g->ops.fb.get_vidmem_size(g) : 0;
298 if (!size) 298 if (!size)
299 return 0; 299 return 0;
300 300
diff --git a/drivers/gpu/nvgpu/gk20a/gk20a.h b/drivers/gpu/nvgpu/gk20a/gk20a.h
index 89a05b3c..e9497ea7 100644
--- a/drivers/gpu/nvgpu/gk20a/gk20a.h
+++ b/drivers/gpu/nvgpu/gk20a/gk20a.h
@@ -584,6 +584,7 @@ struct gpu_ops {
584 void (*fault_buf_set_state_hw)(struct gk20a *g, 584 void (*fault_buf_set_state_hw)(struct gk20a *g,
585 u32 index, u32 state); 585 u32 index, u32 state);
586 void (*fault_buf_configure_hw)(struct gk20a *g, u32 index); 586 void (*fault_buf_configure_hw)(struct gk20a *g, u32 index);
587 size_t (*get_vidmem_size)(struct gk20a *g);
587 } fb; 588 } fb;
588 struct { 589 struct {
589 void (*slcg_bus_load_gating_prod)(struct gk20a *g, bool prod); 590 void (*slcg_bus_load_gating_prod)(struct gk20a *g, bool prod);
@@ -963,7 +964,6 @@ struct gpu_ops {
963 struct vm_gk20a *vm); 964 struct vm_gk20a *vm);
964 u64 (*gpu_phys_addr)(struct gk20a *g, 965 u64 (*gpu_phys_addr)(struct gk20a *g,
965 struct nvgpu_gmmu_attrs *attrs, u64 phys); 966 struct nvgpu_gmmu_attrs *attrs, u64 phys);
966 size_t (*get_vidmem_size)(struct gk20a *g);
967 int (*alloc_inst_block)(struct gk20a *g, 967 int (*alloc_inst_block)(struct gk20a *g,
968 struct nvgpu_mem *inst_block); 968 struct nvgpu_mem *inst_block);
969 void (*init_inst_block)(struct nvgpu_mem *inst_block, 969 void (*init_inst_block)(struct nvgpu_mem *inst_block,
diff --git a/drivers/gpu/nvgpu/gp106/hal_gp106.c b/drivers/gpu/nvgpu/gp106/hal_gp106.c
index da1a44a9..69a797a6 100644
--- a/drivers/gpu/nvgpu/gp106/hal_gp106.c
+++ b/drivers/gpu/nvgpu/gp106/hal_gp106.c
@@ -81,7 +81,6 @@
81#include "gp106/bios_gp106.h" 81#include "gp106/bios_gp106.h"
82#include "gp106/fifo_gp106.h" 82#include "gp106/fifo_gp106.h"
83#include "gp106/clk_gp106.h" 83#include "gp106/clk_gp106.h"
84#include "gp106/mm_gp106.h"
85#include "gp106/pmu_gp106.h" 84#include "gp106/pmu_gp106.h"
86#include "gp106/gr_ctx_gp106.h" 85#include "gp106/gr_ctx_gp106.h"
87#include "gp106/gr_gp106.h" 86#include "gp106/gr_gp106.h"
@@ -426,6 +425,7 @@ static const struct gpu_ops gp106_ops = {
426 .set_debug_mode = gm20b_fb_set_debug_mode, 425 .set_debug_mode = gm20b_fb_set_debug_mode,
427 .tlb_invalidate = gm20b_fb_tlb_invalidate, 426 .tlb_invalidate = gm20b_fb_tlb_invalidate,
428 .mem_unlock = NULL, 427 .mem_unlock = NULL,
428 .get_vidmem_size = gp106_fb_get_vidmem_size,
429 }, 429 },
430 .clock_gating = { 430 .clock_gating = {
431 .slcg_bus_load_gating_prod = 431 .slcg_bus_load_gating_prod =
@@ -598,7 +598,6 @@ static const struct gpu_ops gp106_ops = {
598 .mmu_fault_pending = gk20a_fifo_mmu_fault_pending, 598 .mmu_fault_pending = gk20a_fifo_mmu_fault_pending,
599 .init_bar2_vm = gp10b_init_bar2_vm, 599 .init_bar2_vm = gp10b_init_bar2_vm,
600 .remove_bar2_vm = gp10b_remove_bar2_vm, 600 .remove_bar2_vm = gp10b_remove_bar2_vm,
601 .get_vidmem_size = gp106_mm_get_vidmem_size,
602 .get_kind_invalid = gm20b_get_kind_invalid, 601 .get_kind_invalid = gm20b_get_kind_invalid,
603 .get_kind_pitch = gm20b_get_kind_pitch, 602 .get_kind_pitch = gm20b_get_kind_pitch,
604 }, 603 },
diff --git a/drivers/gpu/nvgpu/gp106/mm_gp106.c b/drivers/gpu/nvgpu/gp106/mm_gp106.c
deleted file mode 100644
index 7864880f..00000000
--- a/drivers/gpu/nvgpu/gp106/mm_gp106.c
+++ /dev/null
@@ -1,47 +0,0 @@
1/*
2 * GP106 memory management
3 *
4 * Copyright (c) 2016-2018, NVIDIA CORPORATION. All rights reserved.
5 *
6 * Permission is hereby granted, free of charge, to any person obtaining a
7 * copy of this software and associated documentation files (the "Software"),
8 * to deal in the Software without restriction, including without limitation
9 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
10 * and/or sell copies of the Software, and to permit persons to whom the
11 * Software is furnished to do so, subject to the following conditions:
12 *
13 * The above copyright notice and this permission notice shall be included in
14 * all copies or substantial portions of the Software.
15 *
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
19 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
22 * DEALINGS IN THE SOFTWARE.
23 */
24
25#include <nvgpu/sizes.h>
26#include <nvgpu/io.h>
27
28#include "gk20a/gk20a.h"
29#include "gp10b/mm_gp10b.h"
30#include "gp106/mm_gp106.h"
31
32#include <nvgpu/hw/gp106/hw_fb_gp106.h>
33
34size_t gp106_mm_get_vidmem_size(struct gk20a *g)
35{
36 u32 range = gk20a_readl(g, fb_mmu_local_memory_range_r());
37 u32 mag = fb_mmu_local_memory_range_lower_mag_v(range);
38 u32 scale = fb_mmu_local_memory_range_lower_scale_v(range);
39 u32 ecc = fb_mmu_local_memory_range_ecc_mode_v(range);
40 size_t bytes = ((size_t)mag << scale) * SZ_1M;
41
42 if (ecc) {
43 bytes = bytes / 16 * 15;
44 }
45
46 return bytes;
47}
diff --git a/drivers/gpu/nvgpu/gp106/mm_gp106.h b/drivers/gpu/nvgpu/gp106/mm_gp106.h
deleted file mode 100644
index e9eb2014..00000000
--- a/drivers/gpu/nvgpu/gp106/mm_gp106.h
+++ /dev/null
@@ -1,32 +0,0 @@
1/*
2 * GP106 memory management
3 *
4 * Copyright (c) 2016-2017, NVIDIA CORPORATION. All rights reserved.
5 *
6 * Permission is hereby granted, free of charge, to any person obtaining a
7 * copy of this software and associated documentation files (the "Software"),
8 * to deal in the Software without restriction, including without limitation
9 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
10 * and/or sell copies of the Software, and to permit persons to whom the
11 * Software is furnished to do so, subject to the following conditions:
12 *
13 * The above copyright notice and this permission notice shall be included in
14 * all copies or substantial portions of the Software.
15 *
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
19 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
22 * DEALINGS IN THE SOFTWARE.
23 */
24
25#ifndef MM_GP106_H
26#define MM_GP106_H
27
28struct gk20a;
29
30size_t gp106_mm_get_vidmem_size(struct gk20a *g);
31
32#endif
diff --git a/drivers/gpu/nvgpu/gv100/hal_gv100.c b/drivers/gpu/nvgpu/gv100/hal_gv100.c
index 589f6adf..4af237b0 100644
--- a/drivers/gpu/nvgpu/gv100/hal_gv100.c
+++ b/drivers/gpu/nvgpu/gv100/hal_gv100.c
@@ -510,6 +510,7 @@ static const struct gpu_ops gv100_ops = {
510 .is_fault_buf_enabled = gv11b_fb_is_fault_buf_enabled, 510 .is_fault_buf_enabled = gv11b_fb_is_fault_buf_enabled,
511 .fault_buf_set_state_hw = gv11b_fb_fault_buf_set_state_hw, 511 .fault_buf_set_state_hw = gv11b_fb_fault_buf_set_state_hw,
512 .fault_buf_configure_hw = gv11b_fb_fault_buf_configure_hw, 512 .fault_buf_configure_hw = gv11b_fb_fault_buf_configure_hw,
513 .get_vidmem_size = gv100_fb_get_vidmem_size,
513 }, 514 },
514 .clock_gating = { 515 .clock_gating = {
515 .slcg_bus_load_gating_prod = 516 .slcg_bus_load_gating_prod =
@@ -685,7 +686,6 @@ static const struct gpu_ops gv100_ops = {
685 .get_default_big_page_size = gp10b_mm_get_default_big_page_size, 686 .get_default_big_page_size = gp10b_mm_get_default_big_page_size,
686 .gpu_phys_addr = gv11b_gpu_phys_addr, 687 .gpu_phys_addr = gv11b_gpu_phys_addr,
687 .get_mmu_levels = gp10b_mm_get_mmu_levels, 688 .get_mmu_levels = gp10b_mm_get_mmu_levels,
688 .get_vidmem_size = gv100_mm_get_vidmem_size,
689 .init_pdb = gp10b_mm_init_pdb, 689 .init_pdb = gp10b_mm_init_pdb,
690 .init_mm_setup_hw = gv11b_init_mm_setup_hw, 690 .init_mm_setup_hw = gv11b_init_mm_setup_hw,
691 .is_bar1_supported = gv11b_mm_is_bar1_supported, 691 .is_bar1_supported = gv11b_mm_is_bar1_supported,
diff --git a/drivers/gpu/nvgpu/gv100/mm_gv100.c b/drivers/gpu/nvgpu/gv100/mm_gv100.c
index 38b876bf..77a0ac4d 100644
--- a/drivers/gpu/nvgpu/gv100/mm_gv100.c
+++ b/drivers/gpu/nvgpu/gv100/mm_gv100.c
@@ -28,22 +28,6 @@
28#include "gk20a/gk20a.h" 28#include "gk20a/gk20a.h"
29#include "gv100/mm_gv100.h" 29#include "gv100/mm_gv100.h"
30 30
31#include <nvgpu/hw/gv100/hw_fb_gv100.h>
32
33size_t gv100_mm_get_vidmem_size(struct gk20a *g)
34{
35 u32 range = gk20a_readl(g, fb_mmu_local_memory_range_r());
36 u32 mag = fb_mmu_local_memory_range_lower_mag_v(range);
37 u32 scale = fb_mmu_local_memory_range_lower_scale_v(range);
38 u32 ecc = fb_mmu_local_memory_range_ecc_mode_v(range);
39 size_t bytes = ((size_t)mag << scale) * SZ_1M;
40
41 if (ecc)
42 bytes = bytes / 16 * 15;
43
44 return bytes;
45}
46
47u32 gv100_mm_get_flush_retries(struct gk20a *g, enum nvgpu_flush_op op) 31u32 gv100_mm_get_flush_retries(struct gk20a *g, enum nvgpu_flush_op op)
48{ 32{
49 switch (op) { 33 switch (op) {
diff --git a/drivers/gpu/nvgpu/gv100/mm_gv100.h b/drivers/gpu/nvgpu/gv100/mm_gv100.h
index ea896503..535e868c 100644
--- a/drivers/gpu/nvgpu/gv100/mm_gv100.h
+++ b/drivers/gpu/nvgpu/gv100/mm_gv100.h
@@ -27,7 +27,6 @@
27 27
28struct gk20a; 28struct gk20a;
29 29
30size_t gv100_mm_get_vidmem_size(struct gk20a *g);
31u32 gv100_mm_get_flush_retries(struct gk20a *g, enum nvgpu_flush_op op); 30u32 gv100_mm_get_flush_retries(struct gk20a *g, enum nvgpu_flush_op op);
32 31
33#endif 32#endif