Merge tag 'amd-drm-next-5.14-2021-06-02' of https://gitlab.freedesktop.org/agd5f...
[linux-2.6-microblaze.git] / drivers / gpu / drm / amd / amdgpu / amdgpu_drv.c
index f576426..809aa76 100644 (file)
@@ -1314,14 +1314,16 @@ amdgpu_pci_remove(struct pci_dev *pdev)
 {
        struct drm_device *dev = pci_get_drvdata(pdev);
 
-#ifdef MODULE
-       if (THIS_MODULE->state != MODULE_STATE_GOING)
-#endif
-               DRM_ERROR("Hotplug removal is not supported\n");
        drm_dev_unplug(dev);
        amdgpu_driver_unload_kms(dev);
+
+       /*
+        * Flush any in flight DMA operations from device.
+        * Clear the Bus Master Enable bit and then wait on the PCIe Device
+        * StatusTransactions Pending bit.
+        */
        pci_disable_device(pdev);
-       pci_set_drvdata(pdev, NULL);
+       pci_wait_for_pending_transaction(pdev);
 }
 
 static void
@@ -1556,6 +1558,10 @@ static int amdgpu_pmops_runtime_resume(struct device *dev)
        if (!adev->runpm)
                return -EINVAL;
 
+       /* Avoids registers access if device is physically gone */
+       if (!pci_device_is_present(adev->pdev))
+               adev->no_hw_access = true;
+
        if (amdgpu_device_supports_px(drm_dev)) {
                drm_dev->switch_power_state = DRM_SWITCH_POWER_CHANGING;
 
@@ -1690,7 +1696,7 @@ static const struct file_operations amdgpu_driver_kms_fops = {
        .flush = amdgpu_flush,
        .release = drm_release,
        .unlocked_ioctl = amdgpu_drm_ioctl,
-       .mmap = amdgpu_mmap,
+       .mmap = drm_gem_mmap,
        .poll = drm_poll,
        .read = drm_read,
 #ifdef CONFIG_COMPAT
@@ -1752,11 +1758,12 @@ static const struct drm_driver amdgpu_kms_driver = {
        .dumb_create = amdgpu_mode_dumb_create,
        .dumb_map_offset = amdgpu_mode_dumb_mmap,
        .fops = &amdgpu_driver_kms_fops,
+       .release = &amdgpu_driver_release_kms,
 
        .prime_handle_to_fd = drm_gem_prime_handle_to_fd,
        .prime_fd_to_handle = drm_gem_prime_fd_to_handle,
        .gem_prime_import = amdgpu_gem_prime_import,
-       .gem_prime_mmap = amdgpu_gem_prime_mmap,
+       .gem_prime_mmap = drm_gem_prime_mmap,
 
        .name = DRIVER_NAME,
        .desc = DRIVER_DESC,
@@ -1773,6 +1780,18 @@ static struct pci_error_handlers amdgpu_pci_err_handler = {
        .resume         = amdgpu_pci_resume,
 };
 
+extern const struct attribute_group amdgpu_vram_mgr_attr_group;
+extern const struct attribute_group amdgpu_gtt_mgr_attr_group;
+extern const struct attribute_group amdgpu_vbios_version_attr_group;
+
+static const struct attribute_group *amdgpu_sysfs_groups[] = {
+       &amdgpu_vram_mgr_attr_group,
+       &amdgpu_gtt_mgr_attr_group,
+       &amdgpu_vbios_version_attr_group,
+       NULL,
+};
+
+
 static struct pci_driver amdgpu_kms_pci_driver = {
        .name = DRIVER_NAME,
        .id_table = pciidlist,
@@ -1781,6 +1800,7 @@ static struct pci_driver amdgpu_kms_pci_driver = {
        .shutdown = amdgpu_pci_shutdown,
        .driver.pm = &amdgpu_pm_ops,
        .err_handler = &amdgpu_pci_err_handler,
+       .dev_groups = amdgpu_sysfs_groups,
 };
 
 static int __init amdgpu_init(void)