From 84e13ce30c7463e080e9584693c04fd5372930da Mon Sep 17 00:00:00 2001 From: Nitin Kumbhar Date: Wed, 17 Oct 2018 13:17:44 +0530 Subject: [PATCH] gpu: nvgpu: add shutdown callback for dgpu The nvlink needs to be de-initialized as part of system shutdown or reboot. Add the shutdown callback of pci driver and use it to trigger nvlink de-initialization. Bug 200422323 Change-Id: Iec8193d9665bc77ddbf3680ea130dfa4c1b3b0ad Signed-off-by: Nitin Kumbhar Reviewed-on: https://git-master.nvidia.com/r/1928821 Reviewed-by: Automatic_Commit_Validation_User Reviewed-by: Terje Bergstrom GVS: Gerrit_Virtual_Submit Reviewed-by: Vijayakumar Subbu Reviewed-by: mobile promotions Tested-by: mobile promotions --- drivers/gpu/nvgpu/os/linux/pci.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/drivers/gpu/nvgpu/os/linux/pci.c b/drivers/gpu/nvgpu/os/linux/pci.c index 66970f15e..f482a361f 100644 --- a/drivers/gpu/nvgpu/os/linux/pci.c +++ b/drivers/gpu/nvgpu/os/linux/pci.c @@ -874,11 +874,30 @@ static void nvgpu_pci_remove(struct pci_dev *pdev) gk20a_put(g); } +void nvgpu_pci_shutdown(struct pci_dev *pdev) +{ + struct gk20a *g = get_gk20a(&pdev->dev); + struct device *dev = dev_from_gk20a(g); + int err; + + nvgpu_info(g, "shutting down"); + + /* no support yet if DGPU is in VGPU mode */ + if (gk20a_gpu_is_virtual(dev)) + return; + + err = nvgpu_nvlink_deinit(g); + WARN(err, "gpu failed to remove nvlink"); + + nvgpu_info(g, "shut down complete"); +} + static struct pci_driver nvgpu_pci_driver = { .name = "nvgpu", .id_table = nvgpu_pci_table, .probe = nvgpu_pci_probe, .remove = nvgpu_pci_remove, + .shutdown = nvgpu_pci_shutdown, #ifdef CONFIG_PM .driver.pm = &nvgpu_pci_pm_ops, #endif