diff options
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3469-drm-amdgpu-revise-retry-init-to-fully-cleanup-driver.patch')
-rw-r--r-- | meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3469-drm-amdgpu-revise-retry-init-to-fully-cleanup-driver.patch | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3469-drm-amdgpu-revise-retry-init-to-fully-cleanup-driver.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3469-drm-amdgpu-revise-retry-init-to-fully-cleanup-driver.patch new file mode 100644 index 00000000..ebf9978f --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3469-drm-amdgpu-revise-retry-init-to-fully-cleanup-driver.patch @@ -0,0 +1,77 @@ +From b3e69f1c0a577723197065d06da494ef4aa2b2a2 Mon Sep 17 00:00:00 2001 +From: Pixel Ding <Pixel.Ding@amd.com> +Date: Wed, 8 Nov 2017 11:03:14 +0800 +Subject: [PATCH 3469/4131] drm/amdgpu: revise retry init to fully cleanup + driver +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Retry at drm_dev_register instead of amdgpu_device_init. + +Reviewed-by: Christian König <christian.koenig@amd.com> +Signed-off-by: Pixel Ding <Pixel.Ding@amd.com> +Signed-off-by: Alex Deucher <alexander.deucher@amd.com> +Signed-off-by: Kalyan Alle <kalyan.alle@amd.com> +--- + drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 3 +++ + drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c | 15 ++------------- + 2 files changed, 5 insertions(+), 13 deletions(-) + +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c +index 8051a1b..1b15828 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c +@@ -1985,6 +1985,9 @@ int amdgpu_device_init(struct amdgpu_device *adev, + amdgpu_virt_mmio_blocked(adev) && + !amdgpu_virt_wait_reset(adev)) { + dev_err(adev->dev, "VF exclusive mode timeout\n"); ++ /* Don't send request since VF is inactive. */ ++ adev->virt.caps &= ~AMDGPU_SRIOV_CAPS_RUNTIME; ++ adev->virt.ops = NULL; + r = -EAGAIN; + goto failed; + } +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c +index 6d5062e..511a22f 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c +@@ -84,7 +84,7 @@ void amdgpu_driver_unload_kms(struct drm_device *dev) + int amdgpu_driver_load_kms(struct drm_device *dev, unsigned long flags) + { + struct amdgpu_device *adev; +- int r, acpi_status, retry = 0; ++ int r, acpi_status; + + #ifdef CONFIG_DRM_AMDGPU_SI + if (!amdgpu_si_support) { +@@ -117,7 +117,6 @@ int amdgpu_driver_load_kms(struct drm_device *dev, unsigned long flags) + } + } + #endif +-retry_init: + + adev = kzalloc(sizeof(struct amdgpu_device), GFP_KERNEL); + if (adev == NULL) { +@@ -140,17 +139,7 @@ int amdgpu_driver_load_kms(struct drm_device *dev, unsigned long flags) + * VRAM allocation + */ + r = amdgpu_device_init(adev, dev, dev->pdev, flags); +- if (r == -EAGAIN && ++retry <= 3) { +- adev->virt.caps &= ~AMDGPU_SRIOV_CAPS_RUNTIME; +- adev->virt.ops = NULL; +- amdgpu_device_fini(adev); +- kfree(adev); +- dev->dev_private = NULL; +- /* Don't request EX mode too frequently which is attacking */ +- msleep(5000); +- dev_err(&dev->pdev->dev, "retry init %d\n", retry); +- goto retry_init; +- } else if (r) { ++ if (r) { + dev_err(&dev->pdev->dev, "Fatal error during GPU init\n"); + goto out; + } +-- +2.7.4 + |