summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMahantesh Kumbar <mkumbar@nvidia.com>2018-08-22 07:14:59 -0400
committermobile promotions <svcmobile_promotions@nvidia.com>2018-09-25 00:17:29 -0400
commitf93565c51fb465aebc34dc52fd704ba038c917f7 (patch)
treed809b8da6418674502ed228074361fb6b9bbc8db
parentbf99dfdaf2dd974723dfce23d815b2f5ee83673d (diff)
gpu: nvgpu: add GSP falcon support
- Defined FALCON_ID_GSPLITE for GSP falcon. - Created variable gsp_flcn of struct nvgpu_falcon for GSP falcon & registered to falcon module to access falcon functions. - Created HAL file gsp_gv100.c/h for GSP. - Modified Makefile & Makefile.sources files to include gsp_gv100 HAL file. - Enabled GSP falcon support for GV100 by registering to common falcon module. - Defined function gv100_gsp_reset() & assigned to falcon reset as GSP engine reset. - Updated falcon HAL init code not to return error if requested falcon is not supported, instead log the info and return non-error. JIRA NVGPU-1160 Change-Id: Ice032cf443ae87254375265628b3c022f41544cd Signed-off-by: Mahantesh Kumbar <mkumbar@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/1804551 Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com> Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
-rw-r--r--drivers/gpu/nvgpu/Makefile1
-rw-r--r--drivers/gpu/nvgpu/Makefile.sources3
-rw-r--r--drivers/gpu/nvgpu/common/falcon/falcon.c4
-rw-r--r--drivers/gpu/nvgpu/gk20a/flcn_gk20a.c2
-rw-r--r--drivers/gpu/nvgpu/gk20a/gk20a.c5
-rw-r--r--drivers/gpu/nvgpu/gp106/flcn_gp106.c2
-rw-r--r--drivers/gpu/nvgpu/gv100/flcn_gv100.c47
-rw-r--r--drivers/gpu/nvgpu/gv100/gsp_gv100.c41
-rw-r--r--drivers/gpu/nvgpu/gv100/gsp_gv100.h28
-rw-r--r--drivers/gpu/nvgpu/include/nvgpu/falcon.h1
-rw-r--r--drivers/gpu/nvgpu/include/nvgpu/gk20a.h1
11 files changed, 125 insertions, 10 deletions
diff --git a/drivers/gpu/nvgpu/Makefile b/drivers/gpu/nvgpu/Makefile
index 4e08cd51..65bef3d3 100644
--- a/drivers/gpu/nvgpu/Makefile
+++ b/drivers/gpu/nvgpu/Makefile
@@ -334,6 +334,7 @@ nvgpu-y += \
334 gv100/hal_gv100.o \ 334 gv100/hal_gv100.o \
335 gv100/pmu_gv100.o \ 335 gv100/pmu_gv100.o \
336 gv100/perf_gv100.o \ 336 gv100/perf_gv100.o \
337 gv100/gsp_gv100.o \
337 pstate/pstate.o \ 338 pstate/pstate.o \
338 clk/clk_vin.o \ 339 clk/clk_vin.o \
339 clk/clk_fll.o \ 340 clk/clk_fll.o \
diff --git a/drivers/gpu/nvgpu/Makefile.sources b/drivers/gpu/nvgpu/Makefile.sources
index 4283a01c..aec49c03 100644
--- a/drivers/gpu/nvgpu/Makefile.sources
+++ b/drivers/gpu/nvgpu/Makefile.sources
@@ -216,4 +216,5 @@ srcs := os/posix/nvgpu.c \
216 gv100/nvlink_gv100.c \ 216 gv100/nvlink_gv100.c \
217 gv100/hal_gv100.c \ 217 gv100/hal_gv100.c \
218 gv100/pmu_gv100.c \ 218 gv100/pmu_gv100.c \
219 gv100/perf_gv100.c 219 gv100/perf_gv100.c \
220 gv100/gsp_gv100.c
diff --git a/drivers/gpu/nvgpu/common/falcon/falcon.c b/drivers/gpu/nvgpu/common/falcon/falcon.c
index 6e5a477d..4535734f 100644
--- a/drivers/gpu/nvgpu/common/falcon/falcon.c
+++ b/drivers/gpu/nvgpu/common/falcon/falcon.c
@@ -430,6 +430,10 @@ int nvgpu_flcn_sw_init(struct gk20a *g, u32 flcn_id)
430 flcn = &g->minion_flcn; 430 flcn = &g->minion_flcn;
431 flcn->flcn_id = flcn_id; 431 flcn->flcn_id = flcn_id;
432 break; 432 break;
433 case FALCON_ID_GSPLITE:
434 flcn = &g->gsp_flcn;
435 flcn->flcn_id = flcn_id;
436 break;
433 default: 437 default:
434 nvgpu_err(g, "Invalid/Unsupported falcon ID %x", flcn_id); 438 nvgpu_err(g, "Invalid/Unsupported falcon ID %x", flcn_id);
435 err = -ENODEV; 439 err = -ENODEV;
diff --git a/drivers/gpu/nvgpu/gk20a/flcn_gk20a.c b/drivers/gpu/nvgpu/gk20a/flcn_gk20a.c
index 5fa4dd53..fdcaef9b 100644
--- a/drivers/gpu/nvgpu/gk20a/flcn_gk20a.c
+++ b/drivers/gpu/nvgpu/gk20a/flcn_gk20a.c
@@ -740,8 +740,6 @@ int gk20a_falcon_hal_sw_init(struct nvgpu_falcon *flcn)
740 break; 740 break;
741 default: 741 default:
742 flcn->is_falcon_supported = false; 742 flcn->is_falcon_supported = false;
743 nvgpu_err(g, "Invalid flcn request");
744 err = -ENODEV;
745 break; 743 break;
746 } 744 }
747 745
diff --git a/drivers/gpu/nvgpu/gk20a/gk20a.c b/drivers/gpu/nvgpu/gk20a/gk20a.c
index 2dfe9e58..9958d24f 100644
--- a/drivers/gpu/nvgpu/gk20a/gk20a.c
+++ b/drivers/gpu/nvgpu/gk20a/gk20a.c
@@ -164,6 +164,11 @@ int gk20a_finalize_poweron(struct gk20a *g)
164 nvgpu_err(g, "failed to sw init FALCON_ID_NVDEC"); 164 nvgpu_err(g, "failed to sw init FALCON_ID_NVDEC");
165 goto done; 165 goto done;
166 } 166 }
167 err = nvgpu_flcn_sw_init(g, FALCON_ID_GSPLITE);
168 if (err != 0) {
169 nvgpu_err(g, "failed to sw init FALCON_ID_GSPLITE");
170 goto done;
171 }
167 172
168 if (g->ops.acr.acr_sw_init != NULL && 173 if (g->ops.acr.acr_sw_init != NULL &&
169 nvgpu_is_enabled(g, NVGPU_SEC_PRIVSECURITY)) { 174 nvgpu_is_enabled(g, NVGPU_SEC_PRIVSECURITY)) {
diff --git a/drivers/gpu/nvgpu/gp106/flcn_gp106.c b/drivers/gpu/nvgpu/gp106/flcn_gp106.c
index 168d94d3..8f649c26 100644
--- a/drivers/gpu/nvgpu/gp106/flcn_gp106.c
+++ b/drivers/gpu/nvgpu/gp106/flcn_gp106.c
@@ -86,8 +86,6 @@ int gp106_falcon_hal_sw_init(struct nvgpu_falcon *flcn)
86 break; 86 break;
87 default: 87 default:
88 flcn->is_falcon_supported = false; 88 flcn->is_falcon_supported = false;
89 nvgpu_err(g, "Invalid flcn request");
90 err = -ENODEV;
91 break; 89 break;
92 } 90 }
93 91
diff --git a/drivers/gpu/nvgpu/gv100/flcn_gv100.c b/drivers/gpu/nvgpu/gv100/flcn_gv100.c
index 5167e3f0..900d9204 100644
--- a/drivers/gpu/nvgpu/gv100/flcn_gv100.c
+++ b/drivers/gpu/nvgpu/gv100/flcn_gv100.c
@@ -26,29 +26,66 @@
26#include "gk20a/flcn_gk20a.h" 26#include "gk20a/flcn_gk20a.h"
27#include "gp106/flcn_gp106.h" 27#include "gp106/flcn_gp106.h"
28#include "gv100/flcn_gv100.h" 28#include "gv100/flcn_gv100.h"
29#include "gv100/gsp_gv100.h"
29 30
30#include <nvgpu/hw/gv100/hw_falcon_gv100.h> 31#include <nvgpu/hw/gv100/hw_falcon_gv100.h>
32#include <nvgpu/hw/gv100/hw_pgsp_gv100.h>
33
34static void gv100_falcon_engine_dependency_ops(struct nvgpu_falcon *flcn)
35{
36 struct nvgpu_falcon_engine_dependency_ops *flcn_eng_dep_ops =
37 &flcn->flcn_engine_dep_ops;
38
39 switch (flcn->flcn_id) {
40 case FALCON_ID_GSPLITE:
41 flcn_eng_dep_ops->reset_eng = gv100_gsp_reset;
42 break;
43 default:
44 flcn_eng_dep_ops->reset_eng = NULL;
45 break;
46 }
47}
48
49static void gv100_falcon_ops(struct nvgpu_falcon *flcn)
50{
51 gk20a_falcon_ops(flcn);
52 gv100_falcon_engine_dependency_ops(flcn);
53}
31 54
32int gv100_falcon_hal_sw_init(struct nvgpu_falcon *flcn) 55int gv100_falcon_hal_sw_init(struct nvgpu_falcon *flcn)
33{ 56{
34 struct gk20a *g = flcn->g; 57 struct gk20a *g = flcn->g;
35 int err = 0; 58 int err = 0;
36 59
37 if (flcn->flcn_id == FALCON_ID_MINION) { 60 switch (flcn->flcn_id) {
61 case FALCON_ID_MINION:
38 flcn->flcn_base = g->nvlink.minion_base; 62 flcn->flcn_base = g->nvlink.minion_base;
39 flcn->is_falcon_supported = true; 63 flcn->is_falcon_supported = true;
40 flcn->is_interrupt_enabled = true; 64 flcn->is_interrupt_enabled = true;
65 break;
66 case FALCON_ID_GSPLITE:
67 flcn->flcn_base = pgsp_falcon_irqsset_r();
68 flcn->is_falcon_supported = true;
69 flcn->is_interrupt_enabled = false;
70 break;
71 default:
72 flcn->is_falcon_supported = false;
73 break;
74 }
41 75
76 if (flcn->is_falcon_supported) {
42 err = nvgpu_mutex_init(&flcn->copy_lock); 77 err = nvgpu_mutex_init(&flcn->copy_lock);
43 if (err != 0) { 78 if (err != 0) {
44 nvgpu_err(g, "Error in flcn.copy_lock mutex initialization"); 79 nvgpu_err(g, "Error in flcn.copy_lock mutex initialization");
45 return err; 80 } else {
81 gv100_falcon_ops(flcn);
46 } 82 }
47
48 gk20a_falcon_ops(flcn);
49 } else { 83 } else {
50 /* 84 /*
51 * Fall back 85 * Forward call to previous chips HAL
86 * to fetch info for requested
87 * falcon as no changes between
88 * current & previous chips.
52 */ 89 */
53 err = gp106_falcon_hal_sw_init(flcn); 90 err = gp106_falcon_hal_sw_init(flcn);
54 } 91 }
diff --git a/drivers/gpu/nvgpu/gv100/gsp_gv100.c b/drivers/gpu/nvgpu/gv100/gsp_gv100.c
new file mode 100644
index 00000000..6ea7ab71
--- /dev/null
+++ b/drivers/gpu/nvgpu/gv100/gsp_gv100.c
@@ -0,0 +1,41 @@
1/*
2 * Copyright (c) 2018, NVIDIA CORPORATION. All rights reserved.
3 *
4 * Permission is hereby granted, free of charge, to any person obtaining a
5 * copy of this software and associated documentation files (the "Software"),
6 * to deal in the Software without restriction, including without limitation
7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8 * and/or sell copies of the Software, and to permit persons to whom the
9 * Software is furnished to do so, subject to the following conditions:
10 *
11 * The above copyright notice and this permission notice shall be included in
12 * all copies or substantial portions of the Software.
13 *
14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
17 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
19 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
20 * DEALINGS IN THE SOFTWARE.
21 */
22
23#include <nvgpu/falcon.h>
24#include <nvgpu/io.h>
25#include <nvgpu/timers.h>
26
27#include "gk20a/gk20a.h"
28#include "gv100/gsp_gv100.h"
29
30#include <nvgpu/hw/gv100/hw_pgsp_gv100.h>
31
32int gv100_gsp_reset(struct gk20a *g)
33{
34 gk20a_writel(g, pgsp_falcon_engine_r(),
35 pgsp_falcon_engine_reset_true_f());
36 nvgpu_udelay(10);
37 gk20a_writel(g, pgsp_falcon_engine_r(),
38 pgsp_falcon_engine_reset_false_f());
39
40 return 0;
41}
diff --git a/drivers/gpu/nvgpu/gv100/gsp_gv100.h b/drivers/gpu/nvgpu/gv100/gsp_gv100.h
new file mode 100644
index 00000000..a4363d73
--- /dev/null
+++ b/drivers/gpu/nvgpu/gv100/gsp_gv100.h
@@ -0,0 +1,28 @@
1/*
2 * Copyright (c) 2018, NVIDIA CORPORATION. All rights reserved.
3 *
4 * Permission is hereby granted, free of charge, to any person obtaining a
5 * copy of this software and associated documentation files (the "Software"),
6 * to deal in the Software without restriction, including without limitation
7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8 * and/or sell copies of the Software, and to permit persons to whom the
9 * Software is furnished to do so, subject to the following conditions:
10 *
11 * The above copyright notice and this permission notice shall be included in
12 * all copies or substantial portions of the Software.
13 *
14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
17 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
19 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
20 * DEALINGS IN THE SOFTWARE.
21 */
22
23#ifndef GSP_GV100_H
24#define GSP_GV100_H
25
26int gv100_gsp_reset(struct gk20a *g);
27
28#endif /*GSP_GV100_H */
diff --git a/drivers/gpu/nvgpu/include/nvgpu/falcon.h b/drivers/gpu/nvgpu/include/nvgpu/falcon.h
index 55dca035..4541f228 100644
--- a/drivers/gpu/nvgpu/include/nvgpu/falcon.h
+++ b/drivers/gpu/nvgpu/include/nvgpu/falcon.h
@@ -30,6 +30,7 @@
30 * Falcon Id Defines 30 * Falcon Id Defines
31 */ 31 */
32#define FALCON_ID_PMU (0U) 32#define FALCON_ID_PMU (0U)
33#define FALCON_ID_GSPLITE (1U)
33#define FALCON_ID_FECS (2U) 34#define FALCON_ID_FECS (2U)
34#define FALCON_ID_GPCCS (3U) 35#define FALCON_ID_GPCCS (3U)
35#define FALCON_ID_NVDEC (4U) 36#define FALCON_ID_NVDEC (4U)
diff --git a/drivers/gpu/nvgpu/include/nvgpu/gk20a.h b/drivers/gpu/nvgpu/include/nvgpu/gk20a.h
index ad77f802..43bc58f7 100644
--- a/drivers/gpu/nvgpu/include/nvgpu/gk20a.h
+++ b/drivers/gpu/nvgpu/include/nvgpu/gk20a.h
@@ -1428,6 +1428,7 @@ struct gk20a {
1428 struct nvgpu_falcon gpccs_flcn; 1428 struct nvgpu_falcon gpccs_flcn;
1429 struct nvgpu_falcon nvdec_flcn; 1429 struct nvgpu_falcon nvdec_flcn;
1430 struct nvgpu_falcon minion_flcn; 1430 struct nvgpu_falcon minion_flcn;
1431 struct nvgpu_falcon gsp_flcn;
1431 struct clk_gk20a clk; 1432 struct clk_gk20a clk;
1432 struct fifo_gk20a fifo; 1433 struct fifo_gk20a fifo;
1433 struct nvgpu_nvlink_dev nvlink; 1434 struct nvgpu_nvlink_dev nvlink;