From 83efad7adb44647d37d98a57cbb6df48e356917d Mon Sep 17 00:00:00 2001 From: Terje Bergstrom Date: Thu, 16 Aug 2018 15:00:07 -0700 Subject: 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 Reviewed-on: https://git-master.nvidia.com/r/1801425 Reviewed-by: mobile promotions Tested-by: mobile promotions --- drivers/gpu/nvgpu/Makefile | 1 - drivers/gpu/nvgpu/Makefile.sources | 1 - drivers/gpu/nvgpu/common/fb/fb_gp106.c | 15 +++++++++++ drivers/gpu/nvgpu/common/fb/fb_gp106.h | 2 ++ drivers/gpu/nvgpu/common/fb/fb_gv100.c | 15 +++++++++++ drivers/gpu/nvgpu/common/fb/fb_gv100.h | 2 ++ drivers/gpu/nvgpu/common/mm/vidmem.c | 6 ++--- drivers/gpu/nvgpu/gk20a/gk20a.h | 2 +- drivers/gpu/nvgpu/gp106/hal_gp106.c | 3 +-- drivers/gpu/nvgpu/gp106/mm_gp106.c | 47 ---------------------------------- drivers/gpu/nvgpu/gp106/mm_gp106.h | 32 ----------------------- drivers/gpu/nvgpu/gv100/hal_gv100.c | 2 +- drivers/gpu/nvgpu/gv100/mm_gv100.c | 16 ------------ drivers/gpu/nvgpu/gv100/mm_gv100.h | 1 - 14 files changed, 40 insertions(+), 105 deletions(-) delete mode 100644 drivers/gpu/nvgpu/gp106/mm_gp106.c delete mode 100644 drivers/gpu/nvgpu/gp106/mm_gp106.h 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 += \ gp10b/gp10b.o \ gp10b/ecc_gp10b.o \ gp106/hal_gp106.o \ - gp106/mm_gp106.o \ gp106/flcn_gp106.o \ gp106/pmu_gp106.o \ 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 \ gv11b/regops_gv11b.c \ gv11b/ecc_gv11b.c \ gp106/hal_gp106.c \ - gp106/mm_gp106.c \ gp106/flcn_gp106.c \ gp106/pmu_gp106.c \ 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) val &= ~fb_mmu_priv_level_mask_write_violation_m(); gk20a_writel(g, fb_mmu_priv_level_mask_r(), val); } + +size_t gp106_fb_get_vidmem_size(struct gk20a *g) +{ + u32 range = gk20a_readl(g, fb_mmu_local_memory_range_r()); + u32 mag = fb_mmu_local_memory_range_lower_mag_v(range); + u32 scale = fb_mmu_local_memory_range_lower_scale_v(range); + u32 ecc = fb_mmu_local_memory_range_ecc_mode_v(range); + size_t bytes = ((size_t)mag << scale) * SZ_1M; + + if (ecc) { + bytes = bytes / 16U * 15U; + } + + return bytes; +} 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 @@ struct gpu_ops; void gp106_fb_reset(struct gk20a *g); +size_t gp106_fb_get_vidmem_size(struct gk20a *g); + #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) return 0; } + +size_t gv100_fb_get_vidmem_size(struct gk20a *g) +{ + u32 range = gk20a_readl(g, fb_mmu_local_memory_range_r()); + u32 mag = fb_mmu_local_memory_range_lower_mag_v(range); + u32 scale = fb_mmu_local_memory_range_lower_scale_v(range); + u32 ecc = fb_mmu_local_memory_range_ecc_mode_v(range); + size_t bytes = ((size_t)mag << scale) * SZ_1M; + + if (ecc) { + bytes = bytes / 16U * 15U; + } + + return bytes; +} 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); int gv100_fb_memory_unlock(struct gk20a *g); int gv100_fb_init_nvlink(struct gk20a *g); int gv100_fb_enable_nvlink(struct gk20a *g); +size_t gv100_fb_get_vidmem_size(struct gk20a *g); + #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) { struct nvgpu_timeout timeout; - if (!g->ops.mm.get_vidmem_size) + if (!g->ops.fb.get_vidmem_size) return; nvgpu_timeout_init(g, &timeout, 100, NVGPU_TIMER_RETRY_TIMER); @@ -293,8 +293,8 @@ int nvgpu_vidmem_init(struct mm_gk20a *mm) static struct nvgpu_alloc_carveout bootstrap_co = NVGPU_CARVEOUT("bootstrap-region", 0, 0); - size = g->ops.mm.get_vidmem_size ? - g->ops.mm.get_vidmem_size(g) : 0; + size = g->ops.fb.get_vidmem_size ? + g->ops.fb.get_vidmem_size(g) : 0; if (!size) return 0; 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 { void (*fault_buf_set_state_hw)(struct gk20a *g, u32 index, u32 state); void (*fault_buf_configure_hw)(struct gk20a *g, u32 index); + size_t (*get_vidmem_size)(struct gk20a *g); } fb; struct { void (*slcg_bus_load_gating_prod)(struct gk20a *g, bool prod); @@ -963,7 +964,6 @@ struct gpu_ops { struct vm_gk20a *vm); u64 (*gpu_phys_addr)(struct gk20a *g, struct nvgpu_gmmu_attrs *attrs, u64 phys); - size_t (*get_vidmem_size)(struct gk20a *g); int (*alloc_inst_block)(struct gk20a *g, struct nvgpu_mem *inst_block); 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 @@ #include "gp106/bios_gp106.h" #include "gp106/fifo_gp106.h" #include "gp106/clk_gp106.h" -#include "gp106/mm_gp106.h" #include "gp106/pmu_gp106.h" #include "gp106/gr_ctx_gp106.h" #include "gp106/gr_gp106.h" @@ -426,6 +425,7 @@ static const struct gpu_ops gp106_ops = { .set_debug_mode = gm20b_fb_set_debug_mode, .tlb_invalidate = gm20b_fb_tlb_invalidate, .mem_unlock = NULL, + .get_vidmem_size = gp106_fb_get_vidmem_size, }, .clock_gating = { .slcg_bus_load_gating_prod = @@ -598,7 +598,6 @@ static const struct gpu_ops gp106_ops = { .mmu_fault_pending = gk20a_fifo_mmu_fault_pending, .init_bar2_vm = gp10b_init_bar2_vm, .remove_bar2_vm = gp10b_remove_bar2_vm, - .get_vidmem_size = gp106_mm_get_vidmem_size, .get_kind_invalid = gm20b_get_kind_invalid, .get_kind_pitch = gm20b_get_kind_pitch, }, 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 @@ -/* - * GP106 memory management - * - * Copyright (c) 2016-2018, NVIDIA CORPORATION. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -#include -#include - -#include "gk20a/gk20a.h" -#include "gp10b/mm_gp10b.h" -#include "gp106/mm_gp106.h" - -#include - -size_t gp106_mm_get_vidmem_size(struct gk20a *g) -{ - u32 range = gk20a_readl(g, fb_mmu_local_memory_range_r()); - u32 mag = fb_mmu_local_memory_range_lower_mag_v(range); - u32 scale = fb_mmu_local_memory_range_lower_scale_v(range); - u32 ecc = fb_mmu_local_memory_range_ecc_mode_v(range); - size_t bytes = ((size_t)mag << scale) * SZ_1M; - - if (ecc) { - bytes = bytes / 16 * 15; - } - - return bytes; -} 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 @@ -/* - * GP106 memory management - * - * Copyright (c) 2016-2017, NVIDIA CORPORATION. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -#ifndef MM_GP106_H -#define MM_GP106_H - -struct gk20a; - -size_t gp106_mm_get_vidmem_size(struct gk20a *g); - -#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 = { .is_fault_buf_enabled = gv11b_fb_is_fault_buf_enabled, .fault_buf_set_state_hw = gv11b_fb_fault_buf_set_state_hw, .fault_buf_configure_hw = gv11b_fb_fault_buf_configure_hw, + .get_vidmem_size = gv100_fb_get_vidmem_size, }, .clock_gating = { .slcg_bus_load_gating_prod = @@ -685,7 +686,6 @@ static const struct gpu_ops gv100_ops = { .get_default_big_page_size = gp10b_mm_get_default_big_page_size, .gpu_phys_addr = gv11b_gpu_phys_addr, .get_mmu_levels = gp10b_mm_get_mmu_levels, - .get_vidmem_size = gv100_mm_get_vidmem_size, .init_pdb = gp10b_mm_init_pdb, .init_mm_setup_hw = gv11b_init_mm_setup_hw, .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 @@ #include "gk20a/gk20a.h" #include "gv100/mm_gv100.h" -#include - -size_t gv100_mm_get_vidmem_size(struct gk20a *g) -{ - u32 range = gk20a_readl(g, fb_mmu_local_memory_range_r()); - u32 mag = fb_mmu_local_memory_range_lower_mag_v(range); - u32 scale = fb_mmu_local_memory_range_lower_scale_v(range); - u32 ecc = fb_mmu_local_memory_range_ecc_mode_v(range); - size_t bytes = ((size_t)mag << scale) * SZ_1M; - - if (ecc) - bytes = bytes / 16 * 15; - - return bytes; -} - u32 gv100_mm_get_flush_retries(struct gk20a *g, enum nvgpu_flush_op op) { 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 @@ struct gk20a; -size_t gv100_mm_get_vidmem_size(struct gk20a *g); u32 gv100_mm_get_flush_retries(struct gk20a *g, enum nvgpu_flush_op op); #endif -- cgit v1.2.2