summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gm20b/fb_gm20b.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/nvgpu/gm20b/fb_gm20b.c')
-rw-r--r--drivers/gpu/nvgpu/gm20b/fb_gm20b.c32
1 files changed, 32 insertions, 0 deletions
diff --git a/drivers/gpu/nvgpu/gm20b/fb_gm20b.c b/drivers/gpu/nvgpu/gm20b/fb_gm20b.c
index 31947ad0..8f124eec 100644
--- a/drivers/gpu/nvgpu/gm20b/fb_gm20b.c
+++ b/drivers/gpu/nvgpu/gm20b/fb_gm20b.c
@@ -24,6 +24,7 @@
24#include <nvgpu/hw/gm20b/hw_gr_gm20b.h> 24#include <nvgpu/hw/gm20b/hw_gr_gm20b.h>
25 25
26#define VPR_INFO_FETCH_WAIT (5) 26#define VPR_INFO_FETCH_WAIT (5)
27#define WPR_INFO_ADDR_ALIGNMENT 0x0000000c
27 28
28void fb_gm20b_init_fs_state(struct gk20a *g) 29void fb_gm20b_init_fs_state(struct gk20a *g)
29{ 30{
@@ -523,6 +524,37 @@ int gm20b_fb_vpr_info_fetch(struct gk20a *g)
523 return gm20b_fb_vpr_info_fetch_wait(g, VPR_INFO_FETCH_WAIT); 524 return gm20b_fb_vpr_info_fetch_wait(g, VPR_INFO_FETCH_WAIT);
524} 525}
525 526
527void gm20b_fb_read_wpr_info(struct gk20a *g, struct wpr_carveout_info *inf)
528{
529 u32 val = 0;
530 u64 wpr_start = 0;
531 u64 wpr_end = 0;
532
533 val = gk20a_readl(g, fb_mmu_wpr_info_r());
534 val &= ~0xF;
535 val |= fb_mmu_wpr_info_index_wpr1_addr_lo_v();
536 gk20a_writel(g, fb_mmu_wpr_info_r(), val);
537
538 val = gk20a_readl(g, fb_mmu_wpr_info_r()) >> 0x4;
539 wpr_start = hi32_lo32_to_u64(
540 (val >> (32 - WPR_INFO_ADDR_ALIGNMENT)),
541 (val << WPR_INFO_ADDR_ALIGNMENT));
542
543 val = gk20a_readl(g, fb_mmu_wpr_info_r());
544 val &= ~0xF;
545 val |= fb_mmu_wpr_info_index_wpr1_addr_hi_v();
546 gk20a_writel(g, fb_mmu_wpr_info_r(), val);
547
548 val = gk20a_readl(g, fb_mmu_wpr_info_r()) >> 0x4;
549 wpr_end = hi32_lo32_to_u64(
550 (val >> (32 - WPR_INFO_ADDR_ALIGNMENT)),
551 (val << WPR_INFO_ADDR_ALIGNMENT));
552
553 inf->wpr_base = wpr_start;
554 inf->nonwpr_base = 0;
555 inf->size = (wpr_end - wpr_start);
556}
557
526bool gm20b_fb_debug_mode_enabled(struct gk20a *g) 558bool gm20b_fb_debug_mode_enabled(struct gk20a *g)
527{ 559{
528 u32 debug_ctrl = gk20a_readl(g, gr_gpcs_pri_mmu_debug_ctrl_r()); 560 u32 debug_ctrl = gk20a_readl(g, gr_gpcs_pri_mmu_debug_ctrl_r());