diff options
Diffstat (limited to 'drivers/gpu/nvgpu/common/nvlink.c')
-rw-r--r-- | drivers/gpu/nvgpu/common/nvlink.c | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/drivers/gpu/nvgpu/common/nvlink.c b/drivers/gpu/nvgpu/common/nvlink.c index 25c1b10b..1a6ee853 100644 --- a/drivers/gpu/nvgpu/common/nvlink.c +++ b/drivers/gpu/nvgpu/common/nvlink.c | |||
@@ -503,3 +503,33 @@ free_ndev: | |||
503 | return -ENODEV; | 503 | return -ENODEV; |
504 | #endif | 504 | #endif |
505 | } | 505 | } |
506 | |||
507 | int nvgpu_nvlink_remove(struct gk20a *g) | ||
508 | { | ||
509 | #ifdef CONFIG_TEGRA_NVLINK | ||
510 | struct nvlink_device *ndev; | ||
511 | int err; | ||
512 | |||
513 | ndev = g->nvlink.priv; | ||
514 | |||
515 | __nvgpu_set_enabled(g, NVGPU_SUPPORT_NVLINK, false); | ||
516 | |||
517 | err = nvlink_unregister_link(&ndev->link); | ||
518 | if (err) { | ||
519 | nvgpu_err(g, "failed on nvlink link unregistration"); | ||
520 | return err; | ||
521 | } | ||
522 | |||
523 | err = nvlink_unregister_device(ndev); | ||
524 | if (err) { | ||
525 | nvgpu_err(g, "failed on nvlink device unregistration"); | ||
526 | return err; | ||
527 | } | ||
528 | |||
529 | nvgpu_kfree(g, ndev); | ||
530 | |||
531 | return 0; | ||
532 | #else | ||
533 | return -ENODEV; | ||
534 | #endif | ||
535 | } | ||