diff options
author | Deepak Nibade <dnibade@nvidia.com> | 2015-09-14 05:47:38 -0400 |
---|---|---|
committer | Terje Bergstrom <tbergstrom@nvidia.com> | 2015-09-28 12:07:46 -0400 |
commit | cb8c102131ec96767e01981dc9a9d26e30593a70 (patch) | |
tree | b8df06b9dfbed30d70d68aab895dc6f1cde310b8 | |
parent | 41f9e9747720f0658b84491fcf77010d71e1900d (diff) |
gpu: nvgpu: APIs to disable/enable all engines' activity
Add below APIs to disable/re-enable activity on all
engines
gk20a_fifo_disable_all_engine_activity()
gk20a_fifo_enable_all_engine_activity()
Bug 200133289
Change-Id: Ie01a260d587807a3c1712ee32fe870fbcb08f9cd
Signed-off-by: Deepak Nibade <dnibade@nvidia.com>
Reviewed-on: http://git-master/r/798747
Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com>
Tested-by: Terje Bergstrom <tbergstrom@nvidia.com>
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/fifo_gk20a.c | 49 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/fifo_gk20a.h | 3 |
2 files changed, 52 insertions, 0 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/fifo_gk20a.c b/drivers/gpu/nvgpu/gk20a/fifo_gk20a.c index 0bd75026..069ea82a 100644 --- a/drivers/gpu/nvgpu/gk20a/fifo_gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/fifo_gk20a.c | |||
@@ -1870,6 +1870,24 @@ int gk20a_fifo_enable_engine_activity(struct gk20a *g, | |||
1870 | return 0; | 1870 | return 0; |
1871 | } | 1871 | } |
1872 | 1872 | ||
1873 | int gk20a_fifo_enable_all_engine_activity(struct gk20a *g) | ||
1874 | { | ||
1875 | int i; | ||
1876 | int err = 0, ret = 0; | ||
1877 | |||
1878 | for (i = 0; i < g->fifo.max_engines; i++) { | ||
1879 | err = gk20a_fifo_enable_engine_activity(g, | ||
1880 | &g->fifo.engine_info[i]); | ||
1881 | if (err) { | ||
1882 | gk20a_err(dev_from_gk20a(g), | ||
1883 | "failed to enable engine %d activity\n", i); | ||
1884 | ret = err; | ||
1885 | } | ||
1886 | } | ||
1887 | |||
1888 | return ret; | ||
1889 | } | ||
1890 | |||
1873 | int gk20a_fifo_disable_engine_activity(struct gk20a *g, | 1891 | int gk20a_fifo_disable_engine_activity(struct gk20a *g, |
1874 | struct fifo_engine_info_gk20a *eng_info, | 1892 | struct fifo_engine_info_gk20a *eng_info, |
1875 | bool wait_for_idle) | 1893 | bool wait_for_idle) |
@@ -1944,6 +1962,37 @@ clean_up: | |||
1944 | return err; | 1962 | return err; |
1945 | } | 1963 | } |
1946 | 1964 | ||
1965 | int gk20a_fifo_disable_all_engine_activity(struct gk20a *g, | ||
1966 | bool wait_for_idle) | ||
1967 | { | ||
1968 | int i; | ||
1969 | int err = 0, ret = 0; | ||
1970 | |||
1971 | for (i = 0; i < g->fifo.max_engines; i++) { | ||
1972 | err = gk20a_fifo_disable_engine_activity(g, | ||
1973 | &g->fifo.engine_info[i], | ||
1974 | wait_for_idle); | ||
1975 | if (err) { | ||
1976 | gk20a_err(dev_from_gk20a(g), | ||
1977 | "failed to disable engine %d activity\n", i); | ||
1978 | ret = err; | ||
1979 | break; | ||
1980 | } | ||
1981 | } | ||
1982 | |||
1983 | if (err) { | ||
1984 | while (--i >= 0) { | ||
1985 | err = gk20a_fifo_enable_engine_activity(g, | ||
1986 | &g->fifo.engine_info[i]); | ||
1987 | if (err) | ||
1988 | gk20a_err(dev_from_gk20a(g), | ||
1989 | "failed to re-enable engine %d activity\n", i); | ||
1990 | } | ||
1991 | } | ||
1992 | |||
1993 | return ret; | ||
1994 | } | ||
1995 | |||
1947 | static void gk20a_fifo_runlist_reset_engines(struct gk20a *g, u32 runlist_id) | 1996 | static void gk20a_fifo_runlist_reset_engines(struct gk20a *g, u32 runlist_id) |
1948 | { | 1997 | { |
1949 | struct fifo_gk20a *f = &g->fifo; | 1998 | struct fifo_gk20a *f = &g->fifo; |
diff --git a/drivers/gpu/nvgpu/gk20a/fifo_gk20a.h b/drivers/gpu/nvgpu/gk20a/fifo_gk20a.h index 3eb193f6..929b5c82 100644 --- a/drivers/gpu/nvgpu/gk20a/fifo_gk20a.h +++ b/drivers/gpu/nvgpu/gk20a/fifo_gk20a.h | |||
@@ -149,9 +149,12 @@ int gk20a_fifo_preempt(struct gk20a *g, struct channel_gk20a *ch); | |||
149 | 149 | ||
150 | int gk20a_fifo_enable_engine_activity(struct gk20a *g, | 150 | int gk20a_fifo_enable_engine_activity(struct gk20a *g, |
151 | struct fifo_engine_info_gk20a *eng_info); | 151 | struct fifo_engine_info_gk20a *eng_info); |
152 | int gk20a_fifo_enable_all_engine_activity(struct gk20a *g); | ||
152 | int gk20a_fifo_disable_engine_activity(struct gk20a *g, | 153 | int gk20a_fifo_disable_engine_activity(struct gk20a *g, |
153 | struct fifo_engine_info_gk20a *eng_info, | 154 | struct fifo_engine_info_gk20a *eng_info, |
154 | bool wait_for_idle); | 155 | bool wait_for_idle); |
156 | int gk20a_fifo_disable_all_engine_activity(struct gk20a *g, | ||
157 | bool wait_for_idle); | ||
155 | u32 gk20a_fifo_engines_on_ch(struct gk20a *g, u32 hw_chid); | 158 | u32 gk20a_fifo_engines_on_ch(struct gk20a *g, u32 hw_chid); |
156 | 159 | ||
157 | int gk20a_fifo_update_runlist(struct gk20a *g, u32 engine_id, u32 hw_chid, | 160 | int gk20a_fifo_update_runlist(struct gk20a *g, u32 engine_id, u32 hw_chid, |