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>
This commit is contained in:
Terje Bergstrom
2018-08-16 15:00:07 -07:00
committed by mobile promotions
parent a02e1c1f0b
commit 83efad7adb
14 changed files with 40 additions and 105 deletions

View File

@@ -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;
}

View File

@@ -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

View File

@@ -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;
}

View File

@@ -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

View File

@@ -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;