From: Alex Deucher <[email protected]>

The vbios uses memory from the start of vram for the pre-OS
framebuffer. Reserve this at driver load time to prevent
the driver from using it for other things which may cause
atrifacts on screen before the console has kicked in.

v2:
Add common helper function to decide on amount of stolen VRAM.

Signed-off-by: Alex Deucher <[email protected]>
Signed-off-by: Andrey Grodzovsky <[email protected]>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.h | 9 +++++++++
 drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c   | 2 +-
 drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c   | 2 +-
 drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c   | 2 +-
 drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c   | 2 +-
 5 files changed, 13 insertions(+), 4 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.h 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.h
index 893c249..c5a3dd2 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.h
@@ -109,4 +109,13 @@ struct amdgpu_gmc {
        const struct amdgpu_gmc_funcs   *gmc_funcs;
 };
 
+static inline uint64_t gmc_stolen_mem_size(struct amdgpu_gmc *gmc)
+{
+       /* Some systems might have very little VRAM */
+       if(gmc->real_vram_size <= 64 * 1024 * 1024)
+               return  256 * 1024;
+       else
+               return 32 * 1024 * 1024;
+}
+
 #endif
diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c 
b/drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c
index 5617cf6..378ef65 100644
--- a/drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c
@@ -851,7 +851,7 @@ static int gmc_v6_0_sw_init(void *handle)
 
        adev->gmc.mc_mask = 0xffffffffffULL;
 
-       adev->gmc.stolen_size = 256 * 1024;
+       adev->gmc.stolen_size = gmc_stolen_mem_size(&adev->gmc);
 
        adev->need_dma32 = false;
        dma_bits = adev->need_dma32 ? 32 : 40;
diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c 
b/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c
index 80054f3..2cb1b13 100644
--- a/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c
@@ -998,7 +998,7 @@ static int gmc_v7_0_sw_init(void *handle)
         */
        adev->gmc.mc_mask = 0xffffffffffULL; /* 40 bit MC */
 
-       adev->gmc.stolen_size = 256 * 1024;
+       adev->gmc.stolen_size = gmc_stolen_mem_size(&adev->gmc);
 
        /* set DMA mask + need_dma32 flags.
         * PCIE - can handle 40-bits.
diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c 
b/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c
index d71d4cb..979f73e 100644
--- a/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c
@@ -1096,7 +1096,7 @@ static int gmc_v8_0_sw_init(void *handle)
         */
        adev->gmc.mc_mask = 0xffffffffffULL; /* 40 bit MC */
 
-       adev->gmc.stolen_size = 256 * 1024;
+       adev->gmc.stolen_size = gmc_stolen_mem_size(&adev->gmc);
 
        /* set DMA mask + need_dma32 flags.
         * PCIE - can handle 40-bits.
diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c 
b/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
index 070946e..f7c2d61 100644
--- a/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
@@ -848,7 +848,7 @@ static int gmc_v9_0_sw_init(void *handle)
         * It needs to reserve 8M stolen memory for vega10
         * TODO: Figure out how to avoid that...
         */
-       adev->gmc.stolen_size = 8 * 1024 * 1024;
+       adev->gmc.stolen_size = gmc_stolen_mem_size(&adev->gmc);
 
        /* set DMA mask + need_dma32 flags.
         * PCIE - can handle 44-bits.
-- 
2.7.4

_______________________________________________
amd-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

Reply via email to