+++ /dev/null
-From 74e920410b79e1694a692f5daa73617a0e8b8fe5 Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Thu, 27 Jul 2023 10:22:20 -0500
-Subject: drm/amd: Disable S/G for APUs when 64GB or more host memory
-
-From: Mario Limonciello <mario.limonciello@amd.com>
-
-[ Upstream commit 70e64c4d522b732e31c6475a3be2349de337d321 ]
-
-Users report a white flickering screen on multiple systems that
-is tied to having 64GB or more memory. When S/G is enabled pages
-will get pinned to both VRAM carve out and system RAM leading to
-this.
-
-Until it can be fixed properly, disable S/G when 64GB of memory or
-more is detected. This will force pages to be pinned into VRAM.
-This should fix white screen flickers but if VRAM pressure is
-encountered may lead to black screens. It's a trade-off for now.
-
-Fixes: 81d0bcf99009 ("drm/amdgpu: make display pinning more flexible (v2)")
-Cc: Hamza Mahfooz <Hamza.Mahfooz@amd.com>
-Cc: Roman Li <roman.li@amd.com>
-Cc: <stable@vger.kernel.org> # 6.1.y: bf0207e172703 ("drm/amdgpu: add S/G display parameter")
-Cc: <stable@vger.kernel.org> # 6.4.y
-Link: https://gitlab.freedesktop.org/drm/amd/-/issues/2735
-Link: https://gitlab.freedesktop.org/drm/amd/-/issues/2354
-Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
-Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
-Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- drivers/gpu/drm/amd/amdgpu/amdgpu.h | 1 +
- drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 26 +++++++++++++++++++
- .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 5 ++--
- 3 files changed, 29 insertions(+), 3 deletions(-)
-
-diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
-index a3b86b86dc477..6dc950c1b6893 100644
---- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
-+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
-@@ -1296,6 +1296,7 @@ int amdgpu_device_gpu_recover(struct amdgpu_device *adev,
- void amdgpu_device_pci_config_reset(struct amdgpu_device *adev);
- int amdgpu_device_pci_reset(struct amdgpu_device *adev);
- bool amdgpu_device_need_post(struct amdgpu_device *adev);
-+bool amdgpu_sg_display_supported(struct amdgpu_device *adev);
- bool amdgpu_device_pcie_dynamic_switching_supported(void);
- bool amdgpu_device_should_use_aspm(struct amdgpu_device *adev);
- bool amdgpu_device_aspm_support_quirk(void);
-diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
-index 2168dc92c6704..6e5e4603a51a1 100644
---- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
-+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
-@@ -1461,6 +1461,32 @@ bool amdgpu_device_need_post(struct amdgpu_device *adev)
- return true;
- }
-
-+/*
-+ * On APUs with >= 64GB white flickering has been observed w/ SG enabled.
-+ * Disable S/G on such systems until we have a proper fix.
-+ * https://gitlab.freedesktop.org/drm/amd/-/issues/2354
-+ * https://gitlab.freedesktop.org/drm/amd/-/issues/2735
-+ */
-+bool amdgpu_sg_display_supported(struct amdgpu_device *adev)
-+{
-+ switch (amdgpu_sg_display) {
-+ case -1:
-+ break;
-+ case 0:
-+ return false;
-+ case 1:
-+ return true;
-+ default:
-+ return false;
-+ }
-+ if ((totalram_pages() << (PAGE_SHIFT - 10)) +
-+ (adev->gmc.real_vram_size / 1024) >= 64000000) {
-+ DRM_WARN("Disabling S/G due to >=64GB RAM\n");
-+ return false;
-+ }
-+ return true;
-+}
-+
- /*
- * Intel hosts such as Raptor Lake and Sapphire Rapids don't support dynamic
- * speed switching. Until we have confirmation from Intel that a specific host
-diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
-index e0d556cf919f7..8d09f262c14a3 100644
---- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
-+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
-@@ -1642,9 +1642,8 @@ static int amdgpu_dm_init(struct amdgpu_device *adev)
- }
- break;
- }
-- if (init_data.flags.gpu_vm_support &&
-- (amdgpu_sg_display == 0))
-- init_data.flags.gpu_vm_support = false;
-+ if (init_data.flags.gpu_vm_support)
-+ init_data.flags.gpu_vm_support = amdgpu_sg_display_supported(adev);
-
- if (init_data.flags.gpu_vm_support)
- adev->mode_info.gpu_vm_support = true;
---
-2.40.1
-