summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gp106/flcn_gp106.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/nvgpu/gp106/flcn_gp106.c')
-rw-r--r--drivers/gpu/nvgpu/gp106/flcn_gp106.c20
1 files changed, 14 insertions, 6 deletions
diff --git a/drivers/gpu/nvgpu/gp106/flcn_gp106.c b/drivers/gpu/nvgpu/gp106/flcn_gp106.c
index 5959086d..168d94d3 100644
--- a/drivers/gpu/nvgpu/gp106/flcn_gp106.c
+++ b/drivers/gpu/nvgpu/gp106/flcn_gp106.c
@@ -53,9 +53,10 @@ static void gp106_falcon_ops(struct nvgpu_falcon *flcn)
53 gp106_falcon_engine_dependency_ops(flcn); 53 gp106_falcon_engine_dependency_ops(flcn);
54} 54}
55 55
56void gp106_falcon_hal_sw_init(struct nvgpu_falcon *flcn) 56int gp106_falcon_hal_sw_init(struct nvgpu_falcon *flcn)
57{ 57{
58 struct gk20a *g = flcn->g; 58 struct gk20a *g = flcn->g;
59 int err = 0;
59 60
60 switch (flcn->flcn_id) { 61 switch (flcn->flcn_id) {
61 case FALCON_ID_PMU: 62 case FALCON_ID_PMU:
@@ -72,28 +73,35 @@ void gp106_falcon_hal_sw_init(struct nvgpu_falcon *flcn)
72 flcn->flcn_base = FALCON_FECS_BASE; 73 flcn->flcn_base = FALCON_FECS_BASE;
73 flcn->is_falcon_supported = true; 74 flcn->is_falcon_supported = true;
74 flcn->is_interrupt_enabled = false; 75 flcn->is_interrupt_enabled = false;
75 break; 76 break;
76 case FALCON_ID_GPCCS: 77 case FALCON_ID_GPCCS:
77 flcn->flcn_base = FALCON_GPCCS_BASE; 78 flcn->flcn_base = FALCON_GPCCS_BASE;
78 flcn->is_falcon_supported = true; 79 flcn->is_falcon_supported = true;
79 flcn->is_interrupt_enabled = false; 80 flcn->is_interrupt_enabled = false;
80 break; 81 break;
81 case FALCON_ID_NVDEC: 82 case FALCON_ID_NVDEC:
82 flcn->flcn_base = FALCON_NVDEC_BASE; 83 flcn->flcn_base = FALCON_NVDEC_BASE;
83 flcn->is_falcon_supported = true; 84 flcn->is_falcon_supported = true;
84 flcn->is_interrupt_enabled = true; 85 flcn->is_interrupt_enabled = true;
85 break; 86 break;
86 default: 87 default:
87 flcn->is_falcon_supported = false; 88 flcn->is_falcon_supported = false;
88 nvgpu_err(g, "Invalid flcn request"); 89 nvgpu_err(g, "Invalid flcn request");
90 err = -ENODEV;
89 break; 91 break;
90 } 92 }
91 93
92 if (flcn->is_falcon_supported) { 94 if (flcn->is_falcon_supported) {
93 nvgpu_mutex_init(&flcn->copy_lock); 95 err = nvgpu_mutex_init(&flcn->copy_lock);
94 gp106_falcon_ops(flcn); 96 if (err != 0) {
97 nvgpu_err(g, "Error in copy_lock mutex initialization");
98 } else {
99 gp106_falcon_ops(flcn);
100 }
95 } else { 101 } else {
96 nvgpu_info(g, "falcon 0x%x not supported on %s", 102 nvgpu_info(g, "falcon 0x%x not supported on %s",
97 flcn->flcn_id, g->name); 103 flcn->flcn_id, g->name);
98 } 104 }
105
106 return err;
99} 107}