Merge tag 'amd-drm-next-6.3-2023-01-13' of https://gitlab.freedesktop.org/agd5f/linux...
[linux-block.git] / drivers / gpu / drm / amd / amdgpu / amdgpu_device.c
index 79ae7a2bce288b37b58597774d83566d74e89d7a..4f38c55e767e1bf313c228fa409c1ce923a55f26 100644 (file)
@@ -36,6 +36,7 @@
 #include <generated/utsrelease.h>
 #include <linux/pci-p2pdma.h>
 
+#include <drm/drm_aperture.h>
 #include <drm/drm_atomic_helper.h>
 #include <drm/drm_fb_helper.h>
 #include <drm/drm_probe_helper.h>
@@ -90,6 +91,8 @@ MODULE_FIRMWARE("amdgpu/navi12_gpu_info.bin");
 #define AMDGPU_MAX_RETRY_LIMIT         2
 #define AMDGPU_RETRY_SRIOV_RESET(r) ((r) == -EBUSY || (r) == -ETIMEDOUT || (r) == -EINVAL)
 
+static const struct drm_driver amdgpu_kms_driver;
+
 const char *amdgpu_asic_name[] = {
        "TAHITI",
        "PITCAIRN",
@@ -1982,17 +1985,10 @@ static int amdgpu_device_parse_gpu_info_fw(struct amdgpu_device *adev)
        }
 
        snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_gpu_info.bin", chip_name);
-       err = request_firmware(&adev->firmware.gpu_info_fw, fw_name, adev->dev);
-       if (err) {
-               dev_err(adev->dev,
-                       "Failed to load gpu_info firmware \"%s\"\n",
-                       fw_name);
-               goto out;
-       }
-       err = amdgpu_ucode_validate(adev->firmware.gpu_info_fw);
+       err = amdgpu_ucode_request(adev, &adev->firmware.gpu_info_fw, fw_name);
        if (err) {
                dev_err(adev->dev,
-                       "Failed to validate gpu_info firmware \"%s\"\n",
+                       "Failed to get gpu_info firmware \"%s\"\n",
                        fw_name);
                goto out;
        }
@@ -3688,6 +3684,11 @@ int amdgpu_device_init(struct amdgpu_device *adev,
        if (r)
                return r;
 
+       /* Get rid of things like offb */
+       r = drm_aperture_remove_conflicting_pci_framebuffers(adev->pdev, &amdgpu_kms_driver);
+       if (r)
+               return r;
+
        /* Enable TMZ based on IP_VERSION */
        amdgpu_gmc_tmz_set(adev);
 
@@ -4023,8 +4024,7 @@ void amdgpu_device_fini_sw(struct amdgpu_device *adev)
 
        amdgpu_fence_driver_sw_fini(adev);
        amdgpu_device_ip_fini(adev);
-       release_firmware(adev->firmware.gpu_info_fw);
-       adev->firmware.gpu_info_fw = NULL;
+       amdgpu_ucode_release(&adev->firmware.gpu_info_fw);
        adev->accel_working = false;
        dma_fence_put(rcu_dereference_protected(adev->gang_submit, true));