diff options
Diffstat (limited to 'include/os')
| -rw-r--r-- | include/os/linux/debug.c | 4 | ||||
| -rw-r--r-- | include/os/linux/driver_common.c | 69 | ||||
| -rw-r--r-- | include/os/linux/ecc_linux.h | 49 | ||||
| -rw-r--r-- | include/os/linux/ioctl_clk_arb.c | 17 | ||||
| -rw-r--r-- | include/os/linux/ioctl_ctrl.c | 122 | ||||
| -rw-r--r-- | include/os/linux/ioctl_tsg.c | 26 | ||||
| -rw-r--r-- | include/os/linux/module.c | 22 | ||||
| -rw-r--r-- | include/os/linux/os_linux.h | 7 | ||||
| -rw-r--r-- | include/os/linux/platform_gv11b_tegra.c | 4 | ||||
| -rw-r--r-- | include/os/linux/scale.c | 29 | ||||
| -rw-r--r-- | include/os/linux/sdl.c | 341 | ||||
| -rw-r--r-- | include/os/linux/vm.c | 8 | ||||
| -rw-r--r-- | include/os/posix/nvgpu.c | 18 |
13 files changed, 618 insertions, 98 deletions
diff --git a/include/os/linux/debug.c b/include/os/linux/debug.c index 5f0703c..b8c4596 100644 --- a/include/os/linux/debug.c +++ b/include/os/linux/debug.c | |||
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * Copyright (C) 2017-2018 NVIDIA Corporation. All rights reserved. | 2 | * Copyright (C) 2017-2021 NVIDIA Corporation. All rights reserved. |
| 3 | * | 3 | * |
| 4 | * This software is licensed under the terms of the GNU General Public | 4 | * This software is licensed under the terms of the GNU General Public |
| 5 | * License version 2, as published by the Free Software Foundation, and | 5 | * License version 2, as published by the Free Software Foundation, and |
| @@ -224,7 +224,7 @@ static int railgate_residency_show(struct seq_file *s, void *data) | |||
| 224 | unsigned long total_rail_gate_time_ms; | 224 | unsigned long total_rail_gate_time_ms; |
| 225 | unsigned long total_rail_ungate_time_ms; | 225 | unsigned long total_rail_ungate_time_ms; |
| 226 | 226 | ||
| 227 | if (platform->is_railgated(dev_from_gk20a(g))) { | 227 | if (platform && platform->is_railgated && platform->is_railgated(dev_from_gk20a(g))) { |
| 228 | time_since_last_state_transition_ms = | 228 | time_since_last_state_transition_ms = |
| 229 | jiffies_to_msecs(jiffies - | 229 | jiffies_to_msecs(jiffies - |
| 230 | g->pstats.last_rail_gate_complete); | 230 | g->pstats.last_rail_gate_complete); |
diff --git a/include/os/linux/driver_common.c b/include/os/linux/driver_common.c index c76dabe..8f5872d 100644 --- a/include/os/linux/driver_common.c +++ b/include/os/linux/driver_common.c | |||
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * Copyright (c) 2016-2018, NVIDIA CORPORATION. All rights reserved. | 2 | * Copyright (c) 2016-2022, NVIDIA CORPORATION. All rights reserved. |
| 3 | * | 3 | * |
| 4 | * This program is free software; you can redistribute it and/or modify it | 4 | * This program is free software; you can redistribute it and/or modify it |
| 5 | * under the terms and conditions of the GNU General Public License, | 5 | * under the terms and conditions of the GNU General Public License, |
| @@ -18,6 +18,7 @@ | |||
| 18 | #include <linux/dma-mapping.h> | 18 | #include <linux/dma-mapping.h> |
| 19 | #include <linux/mm.h> | 19 | #include <linux/mm.h> |
| 20 | #include <linux/slab.h> | 20 | #include <linux/slab.h> |
| 21 | #include <linux/of_platform.h> | ||
| 21 | #include <uapi/linux/nvgpu.h> | 22 | #include <uapi/linux/nvgpu.h> |
| 22 | 23 | ||
| 23 | #include <nvgpu/defaults.h> | 24 | #include <nvgpu/defaults.h> |
| @@ -241,6 +242,8 @@ int nvgpu_probe(struct gk20a *g, | |||
| 241 | struct device *dev = dev_from_gk20a(g); | 242 | struct device *dev = dev_from_gk20a(g); |
| 242 | struct gk20a_platform *platform = dev_get_drvdata(dev); | 243 | struct gk20a_platform *platform = dev_get_drvdata(dev); |
| 243 | int err = 0; | 244 | int err = 0; |
| 245 | struct device_node *np = dev->of_node; | ||
| 246 | bool disable_l3_alloc = false; | ||
| 244 | 247 | ||
| 245 | nvgpu_init_vars(g); | 248 | nvgpu_init_vars(g); |
| 246 | nvgpu_init_gr_vars(g); | 249 | nvgpu_init_gr_vars(g); |
| @@ -265,6 +268,12 @@ int nvgpu_probe(struct gk20a *g, | |||
| 265 | return err; | 268 | return err; |
| 266 | } | 269 | } |
| 267 | 270 | ||
| 271 | disable_l3_alloc = of_property_read_bool(np, "disable_l3_alloc"); | ||
| 272 | if (disable_l3_alloc) { | ||
| 273 | nvgpu_log_info(g, "L3 alloc is disabled\n"); | ||
| 274 | __nvgpu_set_enabled(g, NVGPU_DISABLE_L3_SUPPORT, true); | ||
| 275 | } | ||
| 276 | |||
| 268 | nvgpu_init_mm_vars(g); | 277 | nvgpu_init_mm_vars(g); |
| 269 | 278 | ||
| 270 | /* platform probe can defer do user init only if probe succeeds */ | 279 | /* platform probe can defer do user init only if probe succeeds */ |
| @@ -312,30 +321,70 @@ static int cyclic_delta(int a, int b) | |||
| 312 | } | 321 | } |
| 313 | 322 | ||
| 314 | /** | 323 | /** |
| 315 | * nvgpu_wait_for_deferred_interrupts - Wait for interrupts to complete | 324 | * nvgpu_wait_for_stall_interrupts - Wait for the stalling interrupts to |
| 325 | * complete. | ||
| 316 | * | 326 | * |
| 317 | * @g - The GPU to wait on. | 327 | * @g - The GPU to wait on. |
| 328 | * @timeout - maximum time period to wait for. | ||
| 318 | * | 329 | * |
| 319 | * Waits until all interrupt handlers that have been scheduled to run have | 330 | * Waits until all stalling interrupt handlers that have been scheduled to run |
| 320 | * completed. | 331 | * have completed. |
| 321 | */ | 332 | */ |
| 322 | void nvgpu_wait_for_deferred_interrupts(struct gk20a *g) | 333 | int nvgpu_wait_for_stall_interrupts(struct gk20a *g, u32 timeout) |
| 323 | { | 334 | { |
| 324 | struct nvgpu_os_linux *l = nvgpu_os_linux_from_gk20a(g); | 335 | struct nvgpu_os_linux *l = nvgpu_os_linux_from_gk20a(g); |
| 325 | int stall_irq_threshold = atomic_read(&l->hw_irq_stall_count); | 336 | int stall_irq_threshold = atomic_read(&l->hw_irq_stall_count); |
| 326 | int nonstall_irq_threshold = atomic_read(&l->hw_irq_nonstall_count); | ||
| 327 | 337 | ||
| 328 | /* wait until all stalling irqs are handled */ | 338 | /* wait until all stalling irqs are handled */ |
| 329 | NVGPU_COND_WAIT(&l->sw_irq_stall_last_handled_wq, | 339 | return NVGPU_COND_WAIT(&l->sw_irq_stall_last_handled_wq, |
| 330 | cyclic_delta(stall_irq_threshold, | 340 | cyclic_delta(stall_irq_threshold, |
| 331 | atomic_read(&l->sw_irq_stall_last_handled)) | 341 | atomic_read(&l->sw_irq_stall_last_handled)) |
| 332 | <= 0, 0); | 342 | <= 0, timeout); |
| 343 | } | ||
| 344 | |||
| 345 | /** | ||
| 346 | * nvgpu_wait_for_nonstall_interrupts - Wait for the nonstalling interrupts to | ||
| 347 | * complete. | ||
| 348 | * | ||
| 349 | * @g - The GPU to wait on. | ||
| 350 | * @timeout - maximum time period to wait for. | ||
| 351 | * | ||
| 352 | * Waits until all non-stalling interrupt handlers that have been scheduled to | ||
| 353 | * run have completed. | ||
| 354 | */ | ||
| 355 | int nvgpu_wait_for_nonstall_interrupts(struct gk20a *g, u32 timeout) | ||
| 356 | { | ||
| 357 | struct nvgpu_os_linux *l = nvgpu_os_linux_from_gk20a(g); | ||
| 358 | int nonstall_irq_threshold = atomic_read(&l->hw_irq_nonstall_count); | ||
| 333 | 359 | ||
| 334 | /* wait until all non-stalling irqs are handled */ | 360 | /* wait until all non-stalling irqs are handled */ |
| 335 | NVGPU_COND_WAIT(&l->sw_irq_nonstall_last_handled_wq, | 361 | return NVGPU_COND_WAIT(&l->sw_irq_nonstall_last_handled_wq, |
| 336 | cyclic_delta(nonstall_irq_threshold, | 362 | cyclic_delta(nonstall_irq_threshold, |
| 337 | atomic_read(&l->sw_irq_nonstall_last_handled)) | 363 | atomic_read(&l->sw_irq_nonstall_last_handled)) |
| 338 | <= 0, 0); | 364 | <= 0, timeout); |
| 365 | } | ||
| 366 | |||
| 367 | /** | ||
| 368 | * nvgpu_wait_for_deferred_interrupts - Wait for interrupts to complete | ||
| 369 | * | ||
| 370 | * @g - The GPU to wait on. | ||
| 371 | * | ||
| 372 | * Waits until all interrupt handlers that have been scheduled to run have | ||
| 373 | * completed. | ||
| 374 | */ | ||
| 375 | void nvgpu_wait_for_deferred_interrupts(struct gk20a *g) | ||
| 376 | { | ||
| 377 | int ret; | ||
| 378 | |||
| 379 | ret = nvgpu_wait_for_stall_interrupts(g, 0U); | ||
| 380 | if (ret != 0) { | ||
| 381 | nvgpu_err(g, "wait for stall interrupts failed %d", ret); | ||
| 382 | } | ||
| 383 | |||
| 384 | ret = nvgpu_wait_for_nonstall_interrupts(g, 0U); | ||
| 385 | if (ret != 0) { | ||
| 386 | nvgpu_err(g, "wait for nonstall interrupts failed %d", ret); | ||
| 387 | } | ||
| 339 | } | 388 | } |
| 340 | 389 | ||
| 341 | static void nvgpu_free_gk20a(struct gk20a *g) | 390 | static void nvgpu_free_gk20a(struct gk20a *g) |
diff --git a/include/os/linux/ecc_linux.h b/include/os/linux/ecc_linux.h new file mode 100644 index 0000000..7e0f650 --- /dev/null +++ b/include/os/linux/ecc_linux.h | |||
| @@ -0,0 +1,49 @@ | |||
| 1 | /* | ||
| 2 | * | ||
| 3 | * Copyright (c) 2021, NVIDIA CORPORATION. All rights reserved. | ||
| 4 | * | ||
| 5 | * Permission is hereby granted, free of charge, to any person obtaining a | ||
| 6 | * copy of this software and associated documentation files (the "Software"), | ||
| 7 | * to deal in the Software without restriction, including without limitation | ||
| 8 | * the rights to use, copy, modify, merge, publish, distribute, sublicense, | ||
| 9 | * and/or sell copies of the Software, and to permit persons to whom the | ||
| 10 | * Software is furnished to do so, subject to the following conditions: | ||
| 11 | * | ||
| 12 | * The above copyright notice and this permission notice shall be included in | ||
| 13 | * all copies or substantial portions of the Software. | ||
| 14 | * | ||
| 15 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
| 16 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
| 17 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL | ||
| 18 | * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||
| 19 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING | ||
| 20 | * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER | ||
| 21 | * DEALINGS IN THE SOFTWARE. | ||
| 22 | */ | ||
| 23 | |||
| 24 | #ifndef NVGPU_OS_ECC_LINUX_H | ||
| 25 | #define NVGPU_OS_ECC_LINUX_H | ||
| 26 | |||
| 27 | #ifdef CONFIG_NVGPU_SUPPORT_LINUX_ECC_ERROR_REPORTING | ||
| 28 | |||
| 29 | #include <linux/tegra_l1ss_kernel_interface.h> | ||
| 30 | #include <linux/tegra_l1ss_ioctl.h> | ||
| 31 | #include <linux/tegra_nv_guard_service_id.h> | ||
| 32 | #include <linux/tegra_nv_guard_group_id.h> | ||
| 33 | |||
| 34 | #include <nvgpu/nvgpu_err.h> | ||
| 35 | |||
| 36 | struct nvgpu_ecc_reporting_linux { | ||
| 37 | struct nvgpu_ecc_reporting common; | ||
| 38 | client_param_t priv; | ||
