From 8789cafcfb0d1e16ad0b2c61b047d275f2d684b4 Mon Sep 17 00:00:00 2001 From: Alex Waterman Date: Tue, 21 Aug 2018 10:35:06 -0700 Subject: gpu: nvgpu: Standardize HAS_SYNCPOINTs check Nvgpu uses many ways to check if sync points are enabled. The four ways used to be: platform->has_syncpoints g->has_syncpoints nvgpu_is_enabled(g, NVPGU_HAS_SYNCPOINTS) gk20a_platform_has_syncpoints() This patch standardizes all usage to now be nvgpu_has_syncpoints() which is based on gk20a_platform_has_syncpoints() - just renamed to be general to nvgpu. All usage of the other forms have now been consolidated. However, under the hood nvgpu_has_syncpoints() does check the is_enabled flag. This flag is now set where g->has_syncpoints used to be set based on the platform data. The basic dependency chain is this: nvgpu_has_syncpoints -> NVGPU_HAS_SYNCPOINTS -> platform->has_syncpoints However, note: there are several places where syncpoints can be disabled if some other driver initialization fails (for ex. host1x). Also note that nvgpu_has_syncpoints() also considers a disable variable set by debugfs. Bug 2327574 Change-Id: Ia2375a80f5f2e27285e6175568dd13e6bb25fd33 Signed-off-by: Alex Waterman Reviewed-on: https://git-master.nvidia.com/r/1803975 Reviewed-by: mobile promotions Tested-by: mobile promotions --- drivers/gpu/nvgpu/common/mm/vm.c | 4 ++-- drivers/gpu/nvgpu/common/sync/channel_sync.c | 14 ++++++++++++-- drivers/gpu/nvgpu/gk20a/gk20a.c | 6 +----- drivers/gpu/nvgpu/gv100/hal_gv100.c | 2 +- drivers/gpu/nvgpu/include/nvgpu/gk20a.h | 10 +--------- drivers/gpu/nvgpu/os/linux/driver_common.c | 3 ++- drivers/gpu/nvgpu/os/linux/ioctl_as.c | 2 +- drivers/gpu/nvgpu/os/linux/ioctl_channel.c | 2 +- drivers/gpu/nvgpu/os/linux/nvhost.c | 11 ++++++----- drivers/gpu/nvgpu/os/linux/pci.c | 2 +- drivers/gpu/nvgpu/os/linux/vgpu/vgpu_linux.c | 2 +- 11 files changed, 29 insertions(+), 29 deletions(-) (limited to 'drivers/gpu/nvgpu') diff --git a/drivers/gpu/nvgpu/common/mm/vm.c b/drivers/gpu/nvgpu/common/mm/vm.c index 1e6c4601..7f0b3d10 100644 --- a/drivers/gpu/nvgpu/common/mm/vm.c +++ b/drivers/gpu/nvgpu/common/mm/vm.c @@ -225,7 +225,7 @@ static int nvgpu_init_sema_pool(struct vm_gk20a *vm) /* * Don't waste the memory on semaphores if we don't need them. */ - if (nvgpu_is_enabled(g, NVGPU_HAS_SYNCPOINTS)) { + if (nvgpu_has_syncpoints(g)) { return 0; } @@ -609,7 +609,7 @@ static void __nvgpu_vm_remove(struct vm_gk20a *vm) * pool involves unmapping a GMMU mapping which means aquiring the * update_gmmu_lock. */ - if (!nvgpu_is_enabled(g, NVGPU_HAS_SYNCPOINTS)) { + if (!nvgpu_has_syncpoints(g)) { if (vm->sema_pool) { nvgpu_semaphore_pool_unmap(vm->sema_pool, vm); nvgpu_semaphore_pool_put(vm->sema_pool); diff --git a/drivers/gpu/nvgpu/common/sync/channel_sync.c b/drivers/gpu/nvgpu/common/sync/channel_sync.c index 116e5701..b40de834 100644 --- a/drivers/gpu/nvgpu/common/sync/channel_sync.c +++ b/drivers/gpu/nvgpu/common/sync/channel_sync.c @@ -658,7 +658,7 @@ struct nvgpu_channel_sync *nvgpu_channel_sync_create(struct channel_gk20a *c, bool user_managed) { #ifdef CONFIG_TEGRA_GK20A_NVHOST - if (gk20a_platform_has_syncpoints(c->g)) + if (nvgpu_has_syncpoints(c->g)) return channel_sync_syncpt_create(c, user_managed); #endif return channel_sync_semaphore_create(c, user_managed); @@ -666,5 +666,15 @@ struct nvgpu_channel_sync *nvgpu_channel_sync_create(struct channel_gk20a *c, bool nvgpu_channel_sync_needs_os_fence_framework(struct gk20a *g) { - return !gk20a_platform_has_syncpoints(g); + return !nvgpu_has_syncpoints(g); +} + +bool nvgpu_has_syncpoints(struct gk20a *g) +{ +#ifdef CONFIG_TEGRA_GK20A_NVHOST + return nvgpu_is_enabled(g, NVGPU_HAS_SYNCPOINTS) && + !g->disable_syncpoints; +#else + return false; +#endif } diff --git a/drivers/gpu/nvgpu/gk20a/gk20a.c b/drivers/gpu/nvgpu/gk20a/gk20a.c index 1cad8dcb..39318f66 100644 --- a/drivers/gpu/nvgpu/gk20a/gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/gk20a.c @@ -391,7 +391,7 @@ int gk20a_finalize_poweron(struct gk20a *g) } #if defined(CONFIG_TEGRA_GK20A_NVHOST) - if (gk20a_platform_has_syncpoints(g) && g->syncpt_unit_size) { + if (nvgpu_has_syncpoints(g) && g->syncpt_unit_size) { if (!nvgpu_mem_is_valid(&g->syncpt_mem)) { nr_pages = DIV_ROUND_UP(g->syncpt_unit_size, PAGE_SIZE); __nvgpu_mem_create_from_phys(g, &g->syncpt_mem, @@ -461,10 +461,6 @@ int gk20a_init_gpu_characteristics(struct gk20a *g) __nvgpu_set_enabled(g, NVGPU_SUPPORT_SPARSE_ALLOCS, true); } - if (gk20a_platform_has_syncpoints(g)) { - __nvgpu_set_enabled(g, NVGPU_HAS_SYNCPOINTS, true); - } - /* * Fast submits are supported as long as the user doesn't request * anything that depends on job tracking. (Here, fast means strictly no diff --git a/drivers/gpu/nvgpu/gv100/hal_gv100.c b/drivers/gpu/nvgpu/gv100/hal_gv100.c index 7cd466c3..da89d2b5 100644 --- a/drivers/gpu/nvgpu/gv100/hal_gv100.c +++ b/drivers/gpu/nvgpu/gv100/hal_gv100.c @@ -261,7 +261,7 @@ int gv100_init_gpu_characteristics(struct gk20a *g) __nvgpu_set_enabled(g, NVGPU_SUPPORT_TSG_SUBCONTEXTS, true); __nvgpu_set_enabled(g, NVGPU_SUPPORT_GET_TEMPERATURE, true); - if (g->has_syncpoints) { + if (nvgpu_has_syncpoints(g)) { __nvgpu_set_enabled(g, NVGPU_SUPPORT_SYNCPOINT_ADDRESS, true); __nvgpu_set_enabled(g, NVGPU_SUPPORT_USER_SYNCPOINT, true); } diff --git a/drivers/gpu/nvgpu/include/nvgpu/gk20a.h b/drivers/gpu/nvgpu/include/nvgpu/gk20a.h index 8d7ccfa8..8627fddd 100644 --- a/drivers/gpu/nvgpu/include/nvgpu/gk20a.h +++ b/drivers/gpu/nvgpu/include/nvgpu/gk20a.h @@ -1485,7 +1485,6 @@ struct gk20a { unsigned int aggressive_sync_destroy_thresh; bool aggressive_sync_destroy; - bool has_syncpoints; /* Debugfs knob for forcing syncpt support off in runtime. */ u32 disable_syncpoints; @@ -1758,13 +1757,6 @@ void nvgpu_wait_for_deferred_interrupts(struct gk20a *g); struct gk20a * __must_check gk20a_get(struct gk20a *g); void gk20a_put(struct gk20a *g); -static inline bool gk20a_platform_has_syncpoints(struct gk20a *g) -{ -#ifdef CONFIG_TEGRA_GK20A_NVHOST - return g->has_syncpoints && !g->disable_syncpoints; -#else - return false; -#endif -} +bool nvgpu_has_syncpoints(struct gk20a *g); #endif /* GK20A_H */ diff --git a/drivers/gpu/nvgpu/os/linux/driver_common.c b/drivers/gpu/nvgpu/os/linux/driver_common.c index 539f0559..cf7877e2 100644 --- a/drivers/gpu/nvgpu/os/linux/driver_common.c +++ b/drivers/gpu/nvgpu/os/linux/driver_common.c @@ -92,6 +92,8 @@ static void nvgpu_init_vars(struct gk20a *g) nvgpu_init_list_node(&g->boardobj_head); nvgpu_init_list_node(&g->boardobjgrp_head); + + __nvgpu_set_enabled(g, NVGPU_HAS_SYNCPOINTS, platform->has_syncpoints); } static void nvgpu_init_gr_vars(struct gk20a *g) @@ -165,7 +167,6 @@ static void nvgpu_init_pm_vars(struct gk20a *g) g->aggressive_sync_destroy = platform->aggressive_sync_destroy; g->aggressive_sync_destroy_thresh = platform->aggressive_sync_destroy_thresh; - g->has_syncpoints = platform->has_syncpoints; #ifdef CONFIG_NVGPU_SUPPORT_CDE g->has_cde = platform->has_cde; #endif diff --git a/drivers/gpu/nvgpu/os/linux/ioctl_as.c b/drivers/gpu/nvgpu/os/linux/ioctl_as.c index f63a2317..3fa8aa2c 100644 --- a/drivers/gpu/nvgpu/os/linux/ioctl_as.c +++ b/drivers/gpu/nvgpu/os/linux/ioctl_as.c @@ -281,7 +281,7 @@ static int nvgpu_as_ioctl_get_sync_ro_map( if (!g->ops.fifo.get_sync_ro_map) return -EINVAL; - if (!gk20a_platform_has_syncpoints(g)) + if (!nvgpu_has_syncpoints(g)) return -EINVAL; err = g->ops.fifo.get_sync_ro_map(vm, &base_gpuva, &sync_size); diff --git a/drivers/gpu/nvgpu/os/linux/ioctl_channel.c b/drivers/gpu/nvgpu/os/linux/ioctl_channel.c index dd69c590..45d49474 100644 --- a/drivers/gpu/nvgpu/os/linux/ioctl_channel.c +++ b/drivers/gpu/nvgpu/os/linux/ioctl_channel.c @@ -1014,7 +1014,7 @@ static int nvgpu_ioctl_channel_get_user_syncpoint(struct channel_gk20a *ch, return -EINVAL; } - if (!gk20a_platform_has_syncpoints(g)) { + if (!nvgpu_has_syncpoints(g)) { nvgpu_err(g, "syncpoints not supported"); return -EINVAL; } diff --git a/drivers/gpu/nvgpu/os/linux/nvhost.c b/drivers/gpu/nvgpu/os/linux/nvhost.c index ccb830cc..2becae54 100644 --- a/drivers/gpu/nvgpu/os/linux/nvhost.c +++ b/drivers/gpu/nvgpu/os/linux/nvhost.c @@ -21,6 +21,7 @@ #include #include +#include #include "nvhost_priv.h" @@ -45,9 +46,9 @@ int nvgpu_get_nvhost_dev(struct gk20a *g) } } else { - if (g->has_syncpoints) { + if (nvgpu_has_syncpoints(g)) { nvgpu_warn(g, "host1x reference not found. assuming no syncpoints support"); - g->has_syncpoints = false; + __nvgpu_set_enabled(g, NVGPU_HAS_SYNCPOINTS, false); } return 0; } @@ -263,13 +264,13 @@ int nvgpu_nvhost_syncpt_init(struct gk20a *g) { int err = 0; - if (!g->has_syncpoints) + if (!nvgpu_has_syncpoints(g)) return -ENOSYS; err = nvgpu_get_nvhost_dev(g); if (err) { nvgpu_err(g, "host1x device not available"); - g->has_syncpoints = false; + __nvgpu_set_enabled(g, NVGPU_HAS_SYNCPOINTS, false); return -ENOSYS; } @@ -279,7 +280,7 @@ int nvgpu_nvhost_syncpt_init(struct gk20a *g) &g->syncpt_unit_size); if (err) { nvgpu_err(g, "Failed to get syncpt interface"); - g->has_syncpoints = false; + __nvgpu_set_enabled(g, NVGPU_HAS_SYNCPOINTS, false); return -ENOSYS; } diff --git a/drivers/gpu/nvgpu/os/linux/pci.c b/drivers/gpu/nvgpu/os/linux/pci.c index 3b73b539..2e456abc 100644 --- a/drivers/gpu/nvgpu/os/linux/pci.c +++ b/drivers/gpu/nvgpu/os/linux/pci.c @@ -795,7 +795,7 @@ static int nvgpu_pci_probe(struct pci_dev *pdev, } /* Enable Semaphore SHIM on nvlink only for now. */ __nvgpu_set_enabled(g, NVGPU_SUPPORT_NVLINK, false); - g->has_syncpoints = false; + __nvgpu_set_enabled(g, NVGPU_HAS_SYNCPOINTS, false); } else { err = nvgpu_nvhost_syncpt_init(g); if (err) { diff --git a/drivers/gpu/nvgpu/os/linux/vgpu/vgpu_linux.c b/drivers/gpu/nvgpu/os/linux/vgpu/vgpu_linux.c index 9cb40fb4..e01178ed 100644 --- a/drivers/gpu/nvgpu/os/linux/vgpu/vgpu_linux.c +++ b/drivers/gpu/nvgpu/os/linux/vgpu/vgpu_linux.c @@ -80,7 +80,7 @@ static void vgpu_init_vars(struct gk20a *g, struct gk20a_platform *platform) g->aggressive_sync_destroy = platform->aggressive_sync_destroy; g->aggressive_sync_destroy_thresh = platform->aggressive_sync_destroy_thresh; - g->has_syncpoints = platform->has_syncpoints; + __nvgpu_set_enabled(g, NVGPU_HAS_SYNCPOINTS, platform->has_syncpoints); g->ptimer_src_freq = platform->ptimer_src_freq; __nvgpu_set_enabled(g, NVGPU_CAN_RAILGATE, platform->can_railgate_init); g->railgate_delay = platform->railgate_delay_init; -- cgit v1.2.2