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 /drivers/gpu/nvgpu/gk20a/fifo_gk20a.c | |
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>
Diffstat (limited to 'drivers/gpu/nvgpu/gk20a/fifo_gk20a.c')
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/fifo_gk20a.c | 49 |
1 files changed, 49 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; |