diff --git a/drivers/gpu/nvgpu/Makefile b/drivers/gpu/nvgpu/Makefile index 6b327bcea..823a997eb 100644 --- a/drivers/gpu/nvgpu/Makefile +++ b/drivers/gpu/nvgpu/Makefile @@ -69,7 +69,8 @@ nvgpu-y += \ os/linux/os_sched.o \ os/linux/nvlink.o \ os/linux/dt.o \ - os/linux/ecc_sysfs.o + os/linux/ecc_sysfs.o \ + os/linux/ltc.o nvgpu-$(CONFIG_GK20A_VIDMEM) += \ os/linux/dmabuf_vidmem.o diff --git a/drivers/gpu/nvgpu/common/fb/fb_gv11b.c b/drivers/gpu/nvgpu/common/fb/fb_gv11b.c index 664b2dd12..6973e04d0 100644 --- a/drivers/gpu/nvgpu/common/fb/fb_gv11b.c +++ b/drivers/gpu/nvgpu/common/fb/fb_gv11b.c @@ -102,6 +102,8 @@ void gv11b_fb_init_cbc(struct gk20a *g, struct gr_gk20a *gr) else compbit_store_iova = nvgpu_mem_get_addr(g, &gr->compbit_store.mem); + /* must be aligned to 64 KB */ + compbit_store_iova = roundup(compbit_store_iova, (u64)SZ_64K); compbit_base_post_divide64 = compbit_store_iova >> fb_mmu_cbc_base_address_alignment_shift_v(); diff --git a/drivers/gpu/nvgpu/common/ltc.c b/drivers/gpu/nvgpu/common/ltc.c index dec4a80c4..1beb19746 100644 --- a/drivers/gpu/nvgpu/common/ltc.c +++ b/drivers/gpu/nvgpu/common/ltc.c @@ -52,20 +52,3 @@ void nvgpu_ltc_sync_enabled(struct gk20a *g) } nvgpu_spinlock_release(&g->ltc_enabled_lock); } - -int nvgpu_ltc_alloc_cbc(struct gk20a *g, size_t compbit_backing_size) -{ - struct gr_gk20a *gr = &g->gr; - unsigned long flags = 0; - - if (nvgpu_mem_is_valid(&gr->compbit_store.mem)) - return 0; - - if (!nvgpu_iommuable(g)) - flags = NVGPU_DMA_FORCE_CONTIGUOUS; - - return nvgpu_dma_alloc_flags_sys(g, - flags, - compbit_backing_size, - &gr->compbit_store.mem); -} diff --git a/drivers/gpu/nvgpu/common/posix/stubs.c b/drivers/gpu/nvgpu/common/posix/stubs.c index 0fa80bffe..1e50930ab 100644 --- a/drivers/gpu/nvgpu/common/posix/stubs.c +++ b/drivers/gpu/nvgpu/common/posix/stubs.c @@ -26,6 +26,7 @@ */ #include +#include #include "gk20a/dbg_gpu_gk20a.h" @@ -41,3 +42,8 @@ int nvgpu_ecc_sysfs_init(struct gk20a *g) void nvgpu_ecc_sysfs_remove(struct gk20a *g) { } + +int nvgpu_ltc_alloc_cbc(struct gk20a *g, size_t compbit_backing_size) +{ + return 0; +} diff --git a/drivers/gpu/nvgpu/os/linux/ltc.c b/drivers/gpu/nvgpu/os/linux/ltc.c new file mode 100644 index 000000000..1a58bc4e2 --- /dev/null +++ b/drivers/gpu/nvgpu/os/linux/ltc.c @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2018, 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 +#include +#include + +#include "gk20a/gk20a.h" +#include "gk20a/gr_gk20a.h" + +int nvgpu_ltc_alloc_cbc(struct gk20a *g, size_t compbit_backing_size) +{ + struct gr_gk20a *gr = &g->gr; + unsigned long flags = 0; + + if (nvgpu_mem_is_valid(&gr->compbit_store.mem)) + return 0; + + if (!nvgpu_iommuable(g)) + flags = NVGPU_DMA_FORCE_CONTIGUOUS; + + return nvgpu_dma_alloc_flags_sys(g, + flags, + compbit_backing_size, + &gr->compbit_store.mem); +}