diff --git a/arch/nvgpu-common.yaml b/arch/nvgpu-common.yaml index 366a8747f..932a71008 100644 --- a/arch/nvgpu-common.yaml +++ b/arch/nvgpu-common.yaml @@ -247,6 +247,9 @@ sim: include/nvgpu/hw_sim_pci.h, include/nvgpu/sim.h ] +timers: + sources: [ common/timers_common.c ] + utils: safe: yes owner: Alex W diff --git a/drivers/gpu/nvgpu/Makefile b/drivers/gpu/nvgpu/Makefile index 7f40768e3..67cfa089e 100644 --- a/drivers/gpu/nvgpu/Makefile +++ b/drivers/gpu/nvgpu/Makefile @@ -232,6 +232,7 @@ nvgpu-y += \ common/utils/rbtree.o \ common/utils/string.o \ common/utils/worker.o \ + common/timers_common.o \ common/swdebug/profile.o \ common/ptimer/ptimer.o \ common/perf/perfbuf.o \ diff --git a/drivers/gpu/nvgpu/Makefile.sources b/drivers/gpu/nvgpu/Makefile.sources index f991ae0e0..e7f93ba05 100644 --- a/drivers/gpu/nvgpu/Makefile.sources +++ b/drivers/gpu/nvgpu/Makefile.sources @@ -97,6 +97,7 @@ srcs += common/device.c \ common/utils/rbtree.c \ common/utils/string.c \ common/utils/worker.c \ + common/timers_common.c \ common/swdebug/profile.c \ common/init/nvgpu_init.c \ common/mm/allocators/nvgpu_allocator.c \ diff --git a/drivers/gpu/nvgpu/common/timers_common.c b/drivers/gpu/nvgpu/common/timers_common.c new file mode 100644 index 000000000..8af4701c2 --- /dev/null +++ b/drivers/gpu/nvgpu/common/timers_common.c @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2022, NVIDIA CORPORATION. All rights reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +#include + +void nvgpu_timeout_init_cpu_timer(struct gk20a *g, struct nvgpu_timeout *timeout, + u32 duration_ms) +{ + int err = nvgpu_timeout_init_flags(g, timeout, duration_ms, + NVGPU_TIMER_CPU_TIMER); + + nvgpu_assert(err == 0); +} + +void nvgpu_timeout_init_cpu_timer_sw(struct gk20a *g, struct nvgpu_timeout *timeout, + u32 duration_ms) +{ + int err = nvgpu_timeout_init_flags(g, timeout, duration_ms, + NVGPU_TIMER_CPU_TIMER | + NVGPU_TIMER_NO_PRE_SI); + + nvgpu_assert(err == 0); +} + +void nvgpu_timeout_init_retry(struct gk20a *g, struct nvgpu_timeout *timeout, + u32 duration_count) +{ + int err = nvgpu_timeout_init_flags(g, timeout, duration_count, + NVGPU_TIMER_RETRY_TIMER); + + nvgpu_assert(err == 0); +} + diff --git a/drivers/gpu/nvgpu/include/nvgpu/timers.h b/drivers/gpu/nvgpu/include/nvgpu/timers.h index 0459c97be..04643648f 100644 --- a/drivers/gpu/nvgpu/include/nvgpu/timers.h +++ b/drivers/gpu/nvgpu/include/nvgpu/timers.h @@ -24,6 +24,7 @@ #define NVGPU_TIMERS_H #include +#include #include #ifndef __KERNEL__ diff --git a/drivers/gpu/nvgpu/os/linux/timers.c b/drivers/gpu/nvgpu/os/linux/timers.c index 7b9a8dae6..257013a50 100644 --- a/drivers/gpu/nvgpu/os/linux/timers.c +++ b/drivers/gpu/nvgpu/os/linux/timers.c @@ -36,34 +36,6 @@ static int nvgpu_timeout_is_pre_silicon(struct nvgpu_timeout *timeout) return !nvgpu_platform_is_silicon(timeout->g); } -void nvgpu_timeout_init_cpu_timer(struct gk20a *g, struct nvgpu_timeout *timeout, - u32 duration_ms) -{ - int err = nvgpu_timeout_init_flags(g, timeout, duration_ms, - NVGPU_TIMER_CPU_TIMER); - - nvgpu_assert(err == 0); -} - -void nvgpu_timeout_init_cpu_timer_sw(struct gk20a *g, struct nvgpu_timeout *timeout, - u32 duration_ms) -{ - int err = nvgpu_timeout_init_flags(g, timeout, duration_ms, - NVGPU_TIMER_CPU_TIMER | - NVGPU_TIMER_NO_PRE_SI); - - nvgpu_assert(err == 0); -} - -void nvgpu_timeout_init_retry(struct gk20a *g, struct nvgpu_timeout *timeout, - u32 duration_count) -{ - int err = nvgpu_timeout_init_flags(g, timeout, duration_count, - NVGPU_TIMER_RETRY_TIMER); - - nvgpu_assert(err == 0); -} - /** * nvgpu_timeout_init - Init timer. * diff --git a/drivers/gpu/nvgpu/os/posix/timers.c b/drivers/gpu/nvgpu/os/posix/timers.c index 08af2bfc8..b1d6114e8 100644 --- a/drivers/gpu/nvgpu/os/posix/timers.c +++ b/drivers/gpu/nvgpu/os/posix/timers.c @@ -123,34 +123,6 @@ static bool time_after(s64 a, s64 b) return (nvgpu_safe_sub_s64(a, b) > 0); } -void nvgpu_timeout_init_cpu_timer(struct gk20a *g, struct nvgpu_timeout *timeout, - u32 duration_ms) -{ - int err = nvgpu_timeout_init_flags(g, timeout, duration_ms, - NVGPU_TIMER_CPU_TIMER); - - nvgpu_assert(err == 0); -} - -void nvgpu_timeout_init_cpu_timer_sw(struct gk20a *g, struct nvgpu_timeout *timeout, - u32 duration_ms) -{ - int err = nvgpu_timeout_init_flags(g, timeout, duration_ms, - NVGPU_TIMER_CPU_TIMER | - NVGPU_TIMER_NO_PRE_SI); - - nvgpu_assert(err == 0); -} - -void nvgpu_timeout_init_retry(struct gk20a *g, struct nvgpu_timeout *timeout, - u32 duration_count) -{ - int err = nvgpu_timeout_init_flags(g, timeout, duration_count, - NVGPU_TIMER_RETRY_TIMER); - - nvgpu_assert(err == 0); -} - int nvgpu_timeout_init_flags(struct gk20a *g, struct nvgpu_timeout *timeout, u32 duration, unsigned long flags) {