summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gv11b/fb_gv11b.c
diff options
context:
space:
mode:
authorSeema Khowala <seemaj@nvidia.com>2017-04-17 13:50:54 -0400
committermobile promotions <svcmobile_promotions@nvidia.com>2017-04-18 13:24:54 -0400
commit1d4b22ed88d2764b4708d27cbabcfbbdf9d04ba2 (patch)
tree033d8eff8a70bee0735f88143332ba51022d221d /drivers/gpu/nvgpu/gv11b/fb_gv11b.c
parent6dabea9882ee965041cf42c95e8b2bcff95fbfa0 (diff)
gpu: nvgpu: gv11b: set soc credits after fs_hub is out of reset
Without these credits, gpu mmu binds over nvlink to soc are hanging. Also add l2_enabled for mc_elpg_enable. Bug 1899460 Change-Id: I0b26410d5c8ec9b4c88b319ddd9442f2fd91b321 Signed-off-by: Seema Khowala <seemaj@nvidia.com> Reviewed-on: http://git-master/r/1463204 Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/gv11b/fb_gv11b.c')
-rw-r--r--drivers/gpu/nvgpu/gv11b/fb_gv11b.c57
1 files changed, 57 insertions, 0 deletions
diff --git a/drivers/gpu/nvgpu/gv11b/fb_gv11b.c b/drivers/gpu/nvgpu/gv11b/fb_gv11b.c
index 61b23711..98aad4e0 100644
--- a/drivers/gpu/nvgpu/gv11b/fb_gv11b.c
+++ b/drivers/gpu/nvgpu/gv11b/fb_gv11b.c
@@ -24,6 +24,61 @@
24 24
25#include <nvgpu/hw/gv11b/hw_gmmu_gv11b.h> 25#include <nvgpu/hw/gv11b/hw_gmmu_gv11b.h>
26#include <nvgpu/hw/gv11b/hw_fb_gv11b.h> 26#include <nvgpu/hw/gv11b/hw_fb_gv11b.h>
27#include <nvgpu/hw/gv11b/hw_mc_gv11b.h>
28#include <nvgpu/hw/gv11b/hw_fifo_gv11b.h>
29
30static void gv11b_init_nvlink_soc_credits(struct gk20a *g)
31{
32 void __iomem *soc1 = ioremap(0x02b10010, 4096);
33 void __iomem *soc2 = ioremap(0x02b20010, 4096);
34 void __iomem *soc3 = ioremap(0x02b30010, 4096);
35 void __iomem *soc4 = ioremap(0x02b40010, 4096);
36
37 gk20a_dbg_info("init nvlink soc credits");
38
39 writel_relaxed(0x14050000, soc1);
40 writel_relaxed(0x08020000, soc1 + 4);
41 writel_relaxed(0x14050000, soc2);
42 writel_relaxed(0x08020000, soc2 + 4);
43 writel_relaxed(0x14050000, soc3);
44 writel_relaxed(0x08020000, soc3 + 4);
45 writel_relaxed(0x14050000, soc4);
46 writel_relaxed(0x08020000, soc4 + 4);
47
48}
49
50static void gv11b_fb_reset(struct gk20a *g)
51{
52 u32 val;
53
54 gk20a_dbg_info("reset gv11b fb");
55
56 g->ops.mc.reset(g, mc_enable_pfb_enabled_f() |
57 mc_enable_l2_enabled_f() |
58 mc_enable_xbar_enabled_f() |
59 mc_enable_hub_enabled_f());
60
61 val = gk20a_readl(g, mc_elpg_enable_r());
62 val |= mc_elpg_enable_xbar_enabled_f() |
63 mc_elpg_enable_pfb_enabled_f() |
64 mc_elpg_enable_l2_enabled_f() |
65 mc_elpg_enable_hub_enabled_f();
66 gk20a_writel(g, mc_elpg_enable_r(), val);
67
68 /* fs hub should be out of reset by now */
69 gv11b_init_nvlink_soc_credits(g);
70
71 val = gk20a_readl(g, fifo_fb_iface_r());
72 gk20a_dbg_info("fifo_fb_iface val = 0x%x", val);
73 if (!(val & fifo_fb_iface_control_enable_f() &&
74 val & fifo_fb_iface_status_enabled_f())) {
75 gk20a_dbg_info("fifo_fb_iface set control enable");
76 gk20a_writel(g, fifo_fb_iface_r(),
77 fifo_fb_iface_control_enable_f());
78 val = gk20a_readl(g, fifo_fb_iface_r());
79 gk20a_dbg_info("fifo_fb_iface val = 0x%x", val);
80 }
81}
27 82
28static void gv11b_init_uncompressed_kind_map(void) 83static void gv11b_init_uncompressed_kind_map(void)
29{ 84{
@@ -94,6 +149,8 @@ void gv11b_init_fb(struct gpu_ops *gops)
94{ 149{
95 gp10b_init_fb(gops); 150 gp10b_init_fb(gops);
96 gops->fb.hub_isr = gv11b_fb_hub_isr; 151 gops->fb.hub_isr = gv11b_fb_hub_isr;
152 gops->fb.reset = gv11b_fb_reset;
153
97 gv11b_init_uncompressed_kind_map(); 154 gv11b_init_uncompressed_kind_map();
98 gv11b_init_kind_attr(); 155 gv11b_init_kind_attr();
99 156