All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/4] drm/amdgpu/gmc9: rework stolen vga memory handling
@ 2018-08-30 14:53 Alex Deucher
       [not found] ` <20180830145339.5162-1-alexander.deucher-5C7GfCeVMHo@public.gmane.org>
  0 siblings, 1 reply; 8+ messages in thread
From: Alex Deucher @ 2018-08-30 14:53 UTC (permalink / raw)
  To: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW; +Cc: Alex Deucher

No functional change, just rework it in order to adjust the
behavior on a per asic level.  The problem is that on vega10,
something corrupts the lower 8 MB of vram on the second
resume from S3.  This does not seem to affect Raven, other
gmc9 based asics need testing.

Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
---
 drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c | 48 +++++++++++++++++++++--------------
 1 file changed, 29 insertions(+), 19 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c b/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
index 04d50893a6f2..46cff7d8b375 100644
--- a/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
@@ -692,6 +692,28 @@ static int gmc_v9_0_ecc_available(struct amdgpu_device *adev)
 	return lost_sheep == 0;
 }
 
+static bool gmc_v9_0_keep_stolen_memory(struct amdgpu_device *adev)
+{
+
+	/*
+	 * TODO:
+	 * Currently there is a bug where some memory client outside
+	 * of the driver writes to first 8M of VRAM on S3 resume,
+	 * this overrides GART which by default gets placed in first 8M and
+	 * causes VM_FAULTS once GTT is accessed.
+	 * Keep the stolen memory reservation until the while this is not solved.
+	 * Also check code in gmc_v9_0_get_vbios_fb_size and gmc_v9_0_late_init
+	 */
+	switch (adev->asic_type) {
+	case CHIP_RAVEN:
+	case CHIP_VEGA10:
+	case CHIP_VEGA12:
+	case CHIP_VEGA20:
+	default:
+		return true;
+	}
+}
+
 static int gmc_v9_0_late_init(void *handle)
 {
 	struct amdgpu_device *adev = (struct amdgpu_device *)handle;
@@ -708,10 +730,8 @@ static int gmc_v9_0_late_init(void *handle)
 	unsigned i;
 	int r;
 
-	/*
-	 * TODO - Uncomment once GART corruption issue is fixed.
-	 */
-	/* amdgpu_bo_late_init(adev); */
+	if (!gmc_v9_0_keep_stolen_memory(adev))
+		amdgpu_bo_late_init(adev);
 
 	for(i = 0; i < adev->num_rings; ++i) {
 		struct amdgpu_ring *ring = adev->rings[i];
@@ -848,18 +868,16 @@ static int gmc_v9_0_gart_init(struct amdgpu_device *adev)
 
 static unsigned gmc_v9_0_get_vbios_fb_size(struct amdgpu_device *adev)
 {
-#if 0
 	u32 d1vga_control = RREG32_SOC15(DCE, 0, mmD1VGA_CONTROL);
-#endif
 	unsigned size;
 
 	/*
 	 * TODO Remove once GART corruption is resolved
 	 * Check related code in gmc_v9_0_sw_fini
 	 * */
-	size = 9 * 1024 * 1024;
+	if (gmc_v9_0_keep_stolen_memory(adev))
+		return 9 * 1024 * 1024;
 
-#if 0
 	if (REG_GET_FIELD(d1vga_control, D1VGA_CONTROL, D1VGA_MODE_ENABLE)) {
 		size = 9 * 1024 * 1024; /* reserve 8MB for vga emulator and 1 MB for FB */
 	} else {
@@ -876,6 +894,7 @@ static unsigned gmc_v9_0_get_vbios_fb_size(struct amdgpu_device *adev)
 			break;
 		case CHIP_VEGA10:
 		case CHIP_VEGA12:
+		case CHIP_VEGA20:
 		default:
 			viewport = RREG32_SOC15(DCE, 0, mmSCL0_VIEWPORT_SIZE);
 			size = (REG_GET_FIELD(viewport, SCL0_VIEWPORT_SIZE, VIEWPORT_HEIGHT) *
@@ -888,7 +907,6 @@ static unsigned gmc_v9_0_get_vbios_fb_size(struct amdgpu_device *adev)
 	if ((adev->gmc.real_vram_size - size) < (8 * 1024 * 1024))
 		return 0;
 
-#endif
 	return size;
 }
 
@@ -1000,16 +1018,8 @@ static int gmc_v9_0_sw_fini(void *handle)
 	amdgpu_gem_force_release(adev);
 	amdgpu_vm_manager_fini(adev);
 
-	/*
-	* TODO:
-	* Currently there is a bug where some memory client outside
-	* of the driver writes to first 8M of VRAM on S3 resume,
-	* this overrides GART which by default gets placed in first 8M and
-	* causes VM_FAULTS once GTT is accessed.
-	* Keep the stolen memory reservation until the while this is not solved.
-	* Also check code in gmc_v9_0_get_vbios_fb_size and gmc_v9_0_late_init
-	*/
-	amdgpu_bo_free_kernel(&adev->stolen_vga_memory, NULL, NULL);
+	if (gmc_v9_0_keep_stolen_memory(adev))
+		amdgpu_bo_free_kernel(&adev->stolen_vga_memory, NULL, NULL);
 
 	amdgpu_gart_table_vram_free(adev);
 	amdgpu_bo_fini(adev);
-- 
2.13.6

_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH 2/4] drm/amdgpu/gmc9: don't keep stolen memory on Raven
       [not found] ` <20180830145339.5162-1-alexander.deucher-5C7GfCeVMHo@public.gmane.org>
@ 2018-08-30 14:53   ` Alex Deucher
       [not found]     ` <20180830145339.5162-2-alexander.deucher-5C7GfCeVMHo@public.gmane.org>
  2018-08-30 14:53   ` [PATCH 3/4] drm/amdgpu/gmc9: don't keep stolen memory on vega12 Alex Deucher
                     ` (3 subsequent siblings)
  4 siblings, 1 reply; 8+ messages in thread
From: Alex Deucher @ 2018-08-30 14:53 UTC (permalink / raw)
  To: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW; +Cc: Alex Deucher

Raven does not appear to be affected by the same issue
as vega10.  Enable the full stolen memory handling on
Raven.  Reserve the appropriate size at init time to avoid
display artifacts and then free it at the end of init once
the new FB is up and running.

Bug: https://bugs.freedesktop.org/show_bug.cgi?id=106639
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
---
 drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c b/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
index 46cff7d8b375..938d03593713 100644
--- a/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
@@ -706,6 +706,7 @@ static bool gmc_v9_0_keep_stolen_memory(struct amdgpu_device *adev)
 	 */
 	switch (adev->asic_type) {
 	case CHIP_RAVEN:
+		return false;
 	case CHIP_VEGA10:
 	case CHIP_VEGA12:
 	case CHIP_VEGA20:
-- 
2.13.6

_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH 3/4] drm/amdgpu/gmc9: don't keep stolen memory on vega12
       [not found] ` <20180830145339.5162-1-alexander.deucher-5C7GfCeVMHo@public.gmane.org>
  2018-08-30 14:53   ` [PATCH 2/4] drm/amdgpu/gmc9: don't keep stolen memory on Raven Alex Deucher
@ 2018-08-30 14:53   ` Alex Deucher
  2018-08-30 14:53   ` [PATCH 4/4] drm/amdgpu/gmc9: don't keep stolen memory on vega20 Alex Deucher
                     ` (2 subsequent siblings)
  4 siblings, 0 replies; 8+ messages in thread
From: Alex Deucher @ 2018-08-30 14:53 UTC (permalink / raw)
  To: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW; +Cc: Alex Deucher

vega12 does not appear to be affected by the same issue
as vega10.  Enable the full stolen memory handling on
vega12.  Reserve the appropriate size at init time to avoid
display artifacts and then free it at the end of init once
the new FB is up and running.

Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
---

Can someone test this on Vega12?  I don't have one.

 drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c b/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
index 938d03593713..3180113f49ae 100644
--- a/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
@@ -707,8 +707,9 @@ static bool gmc_v9_0_keep_stolen_memory(struct amdgpu_device *adev)
 	switch (adev->asic_type) {
 	case CHIP_RAVEN:
 		return false;
-	case CHIP_VEGA10:
 	case CHIP_VEGA12:
+		return false;
+	case CHIP_VEGA10:
 	case CHIP_VEGA20:
 	default:
 		return true;
-- 
2.13.6

_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH 4/4] drm/amdgpu/gmc9: don't keep stolen memory on vega20
       [not found] ` <20180830145339.5162-1-alexander.deucher-5C7GfCeVMHo@public.gmane.org>
  2018-08-30 14:53   ` [PATCH 2/4] drm/amdgpu/gmc9: don't keep stolen memory on Raven Alex Deucher
  2018-08-30 14:53   ` [PATCH 3/4] drm/amdgpu/gmc9: don't keep stolen memory on vega12 Alex Deucher
@ 2018-08-30 14:53   ` Alex Deucher
  2018-08-31  2:03   ` [PATCH 1/4] drm/amdgpu/gmc9: rework stolen vga memory handling Zhang, Jerry (Junwei)
  2018-08-31  8:20   ` Christian König
  4 siblings, 0 replies; 8+ messages in thread
From: Alex Deucher @ 2018-08-30 14:53 UTC (permalink / raw)
  To: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW; +Cc: Alex Deucher

Vega20 does not appear to be affected by the same issue
as vega10.  Enable the full stolen memory handling on
vega20.  Reserve the appropriate size at init time to avoid
display artifacts and then free it at the end of init once
the new FB is up and running.

Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
---

Can someone test this on Vega20?  I don't have one.

 drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c | 7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c b/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
index 3180113f49ae..f467638eb49d 100644
--- a/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
@@ -705,14 +705,13 @@ static bool gmc_v9_0_keep_stolen_memory(struct amdgpu_device *adev)
 	 * Also check code in gmc_v9_0_get_vbios_fb_size and gmc_v9_0_late_init
 	 */
 	switch (adev->asic_type) {
+	case CHIP_VEGA10:
+		return true;
 	case CHIP_RAVEN:
-		return false;
 	case CHIP_VEGA12:
-		return false;
-	case CHIP_VEGA10:
 	case CHIP_VEGA20:
 	default:
-		return true;
+		return false;
 	}
 }
 
-- 
2.13.6

_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH 1/4] drm/amdgpu/gmc9: rework stolen vga memory handling
       [not found] ` <20180830145339.5162-1-alexander.deucher-5C7GfCeVMHo@public.gmane.org>
                     ` (2 preceding siblings ...)
  2018-08-30 14:53   ` [PATCH 4/4] drm/amdgpu/gmc9: don't keep stolen memory on vega20 Alex Deucher
@ 2018-08-31  2:03   ` Zhang, Jerry (Junwei)
  2018-08-31  8:20   ` Christian König
  4 siblings, 0 replies; 8+ messages in thread
From: Zhang, Jerry (Junwei) @ 2018-08-31  2:03 UTC (permalink / raw)
  To: Alex Deucher, amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW; +Cc: Alex Deucher

On 08/30/2018 10:53 PM, Alex Deucher wrote:
> No functional change, just rework it in order to adjust the
> behavior on a per asic level.  The problem is that on vega10,
> something corrupts the lower 8 MB of vram on the second
> resume from S3.  This does not seem to affect Raven, other
> gmc9 based asics need testing.
>
> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>

Reviewed-by: Junwei Zhang <Jerry.Zhang@amd.com>

> ---
>   drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c | 48 +++++++++++++++++++++--------------
>   1 file changed, 29 insertions(+), 19 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c b/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
> index 04d50893a6f2..46cff7d8b375 100644
> --- a/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
> @@ -692,6 +692,28 @@ static int gmc_v9_0_ecc_available(struct amdgpu_device *adev)
>   	return lost_sheep == 0;
>   }
>
> +static bool gmc_v9_0_keep_stolen_memory(struct amdgpu_device *adev)
> +{
> +
> +	/*
> +	 * TODO:
> +	 * Currently there is a bug where some memory client outside
> +	 * of the driver writes to first 8M of VRAM on S3 resume,
> +	 * this overrides GART which by default gets placed in first 8M and
> +	 * causes VM_FAULTS once GTT is accessed.
> +	 * Keep the stolen memory reservation until the while this is not solved.
> +	 * Also check code in gmc_v9_0_get_vbios_fb_size and gmc_v9_0_late_init
> +	 */
> +	switch (adev->asic_type) {
> +	case CHIP_RAVEN:
> +	case CHIP_VEGA10:
> +	case CHIP_VEGA12:
> +	case CHIP_VEGA20:
> +	default:
> +		return true;
> +	}
> +}
> +
>   static int gmc_v9_0_late_init(void *handle)
>   {
>   	struct amdgpu_device *adev = (struct amdgpu_device *)handle;
> @@ -708,10 +730,8 @@ static int gmc_v9_0_late_init(void *handle)
>   	unsigned i;
>   	int r;
>
> -	/*
> -	 * TODO - Uncomment once GART corruption issue is fixed.
> -	 */
> -	/* amdgpu_bo_late_init(adev); */
> +	if (!gmc_v9_0_keep_stolen_memory(adev))
> +		amdgpu_bo_late_init(adev);
>
>   	for(i = 0; i < adev->num_rings; ++i) {
>   		struct amdgpu_ring *ring = adev->rings[i];
> @@ -848,18 +868,16 @@ static int gmc_v9_0_gart_init(struct amdgpu_device *adev)
>
>   static unsigned gmc_v9_0_get_vbios_fb_size(struct amdgpu_device *adev)
>   {
> -#if 0
>   	u32 d1vga_control = RREG32_SOC15(DCE, 0, mmD1VGA_CONTROL);
> -#endif
>   	unsigned size;
>
>   	/*
>   	 * TODO Remove once GART corruption is resolved
>   	 * Check related code in gmc_v9_0_sw_fini
>   	 * */
> -	size = 9 * 1024 * 1024;
> +	if (gmc_v9_0_keep_stolen_memory(adev))
> +		return 9 * 1024 * 1024;
>
> -#if 0
>   	if (REG_GET_FIELD(d1vga_control, D1VGA_CONTROL, D1VGA_MODE_ENABLE)) {
>   		size = 9 * 1024 * 1024; /* reserve 8MB for vga emulator and 1 MB for FB */
>   	} else {
> @@ -876,6 +894,7 @@ static unsigned gmc_v9_0_get_vbios_fb_size(struct amdgpu_device *adev)
>   			break;
>   		case CHIP_VEGA10:
>   		case CHIP_VEGA12:
> +		case CHIP_VEGA20:
>   		default:
>   			viewport = RREG32_SOC15(DCE, 0, mmSCL0_VIEWPORT_SIZE);
>   			size = (REG_GET_FIELD(viewport, SCL0_VIEWPORT_SIZE, VIEWPORT_HEIGHT) *
> @@ -888,7 +907,6 @@ static unsigned gmc_v9_0_get_vbios_fb_size(struct amdgpu_device *adev)
>   	if ((adev->gmc.real_vram_size - size) < (8 * 1024 * 1024))
>   		return 0;
>
> -#endif
>   	return size;
>   }
>
> @@ -1000,16 +1018,8 @@ static int gmc_v9_0_sw_fini(void *handle)
>   	amdgpu_gem_force_release(adev);
>   	amdgpu_vm_manager_fini(adev);
>
> -	/*
> -	* TODO:
> -	* Currently there is a bug where some memory client outside
> -	* of the driver writes to first 8M of VRAM on S3 resume,
> -	* this overrides GART which by default gets placed in first 8M and
> -	* causes VM_FAULTS once GTT is accessed.
> -	* Keep the stolen memory reservation until the while this is not solved.
> -	* Also check code in gmc_v9_0_get_vbios_fb_size and gmc_v9_0_late_init
> -	*/
> -	amdgpu_bo_free_kernel(&adev->stolen_vga_memory, NULL, NULL);
> +	if (gmc_v9_0_keep_stolen_memory(adev))
> +		amdgpu_bo_free_kernel(&adev->stolen_vga_memory, NULL, NULL);
>
>   	amdgpu_gart_table_vram_free(adev);
>   	amdgpu_bo_fini(adev);
>
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 2/4] drm/amdgpu/gmc9: don't keep stolen memory on Raven
       [not found]     ` <20180830145339.5162-2-alexander.deucher-5C7GfCeVMHo@public.gmane.org>
@ 2018-08-31  2:03       ` Zhang, Jerry (Junwei)
  0 siblings, 0 replies; 8+ messages in thread
From: Zhang, Jerry (Junwei) @ 2018-08-31  2:03 UTC (permalink / raw)
  To: Alex Deucher, amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW; +Cc: Alex Deucher

On 08/30/2018 10:53 PM, Alex Deucher wrote:
> Raven does not appear to be affected by the same issue
> as vega10.  Enable the full stolen memory handling on
> Raven.  Reserve the appropriate size at init time to avoid
> display artifacts and then free it at the end of init once
> the new FB is up and running.
>
> Bug: https://bugs.freedesktop.org/show_bug.cgi?id=106639
> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Reviewed-by: Junwei Zhang <Jerry.Zhang@amd.com>

> ---
>   drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c | 1 +
>   1 file changed, 1 insertion(+)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c b/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
> index 46cff7d8b375..938d03593713 100644
> --- a/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
> @@ -706,6 +706,7 @@ static bool gmc_v9_0_keep_stolen_memory(struct amdgpu_device *adev)
>   	 */
>   	switch (adev->asic_type) {
>   	case CHIP_RAVEN:
> +		return false;
>   	case CHIP_VEGA10:
>   	case CHIP_VEGA12:
>   	case CHIP_VEGA20:
>
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 1/4] drm/amdgpu/gmc9: rework stolen vga memory handling
       [not found] ` <20180830145339.5162-1-alexander.deucher-5C7GfCeVMHo@public.gmane.org>
                     ` (3 preceding siblings ...)
  2018-08-31  2:03   ` [PATCH 1/4] drm/amdgpu/gmc9: rework stolen vga memory handling Zhang, Jerry (Junwei)
@ 2018-08-31  8:20   ` Christian König
       [not found]     ` <9e88efe2-029e-1b98-2362-8ff5cc400ad1-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
  4 siblings, 1 reply; 8+ messages in thread
From: Christian König @ 2018-08-31  8:20 UTC (permalink / raw)
  To: Alex Deucher, amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW; +Cc: Alex Deucher

Am 30.08.2018 um 16:53 schrieb Alex Deucher:
> No functional change, just rework it in order to adjust the
> behavior on a per asic level.  The problem is that on vega10,
> something corrupts the lower 8 MB of vram on the second
> resume from S3.

Is that tested with engineering samples or production level hardware? 
Maybe it is just a leftover from BIOS bringup?

> This does not seem to affect Raven, other
> gmc9 based asics need testing.
>
> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>

Acked-by: Christian König <christian.koenig@amd.com> for the series.

> ---
>   drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c | 48 +++++++++++++++++++++--------------
>   1 file changed, 29 insertions(+), 19 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c b/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
> index 04d50893a6f2..46cff7d8b375 100644
> --- a/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
> @@ -692,6 +692,28 @@ static int gmc_v9_0_ecc_available(struct amdgpu_device *adev)
>   	return lost_sheep == 0;
>   }
>   
> +static bool gmc_v9_0_keep_stolen_memory(struct amdgpu_device *adev)
> +{
> +
> +	/*
> +	 * TODO:
> +	 * Currently there is a bug where some memory client outside
> +	 * of the driver writes to first 8M of VRAM on S3 resume,
> +	 * this overrides GART which by default gets placed in first 8M and
> +	 * causes VM_FAULTS once GTT is accessed.
> +	 * Keep the stolen memory reservation until the while this is not solved.
> +	 * Also check code in gmc_v9_0_get_vbios_fb_size and gmc_v9_0_late_init
> +	 */
> +	switch (adev->asic_type) {
> +	case CHIP_RAVEN:
> +	case CHIP_VEGA10:
> +	case CHIP_VEGA12:
> +	case CHIP_VEGA20:
> +	default:
> +		return true;
> +	}
> +}
> +
>   static int gmc_v9_0_late_init(void *handle)
>   {
>   	struct amdgpu_device *adev = (struct amdgpu_device *)handle;
> @@ -708,10 +730,8 @@ static int gmc_v9_0_late_init(void *handle)
>   	unsigned i;
>   	int r;
>   
> -	/*
> -	 * TODO - Uncomment once GART corruption issue is fixed.
> -	 */
> -	/* amdgpu_bo_late_init(adev); */
> +	if (!gmc_v9_0_keep_stolen_memory(adev))
> +		amdgpu_bo_late_init(adev);
>   
>   	for(i = 0; i < adev->num_rings; ++i) {
>   		struct amdgpu_ring *ring = adev->rings[i];
> @@ -848,18 +868,16 @@ static int gmc_v9_0_gart_init(struct amdgpu_device *adev)
>   
>   static unsigned gmc_v9_0_get_vbios_fb_size(struct amdgpu_device *adev)
>   {
> -#if 0
>   	u32 d1vga_control = RREG32_SOC15(DCE, 0, mmD1VGA_CONTROL);
> -#endif
>   	unsigned size;
>   
>   	/*
>   	 * TODO Remove once GART corruption is resolved
>   	 * Check related code in gmc_v9_0_sw_fini
>   	 * */
> -	size = 9 * 1024 * 1024;
> +	if (gmc_v9_0_keep_stolen_memory(adev))
> +		return 9 * 1024 * 1024;
>   
> -#if 0
>   	if (REG_GET_FIELD(d1vga_control, D1VGA_CONTROL, D1VGA_MODE_ENABLE)) {
>   		size = 9 * 1024 * 1024; /* reserve 8MB for vga emulator and 1 MB for FB */
>   	} else {
> @@ -876,6 +894,7 @@ static unsigned gmc_v9_0_get_vbios_fb_size(struct amdgpu_device *adev)
>   			break;
>   		case CHIP_VEGA10:
>   		case CHIP_VEGA12:
> +		case CHIP_VEGA20:
>   		default:
>   			viewport = RREG32_SOC15(DCE, 0, mmSCL0_VIEWPORT_SIZE);
>   			size = (REG_GET_FIELD(viewport, SCL0_VIEWPORT_SIZE, VIEWPORT_HEIGHT) *
> @@ -888,7 +907,6 @@ static unsigned gmc_v9_0_get_vbios_fb_size(struct amdgpu_device *adev)
>   	if ((adev->gmc.real_vram_size - size) < (8 * 1024 * 1024))
>   		return 0;
>   
> -#endif
>   	return size;
>   }
>   
> @@ -1000,16 +1018,8 @@ static int gmc_v9_0_sw_fini(void *handle)
>   	amdgpu_gem_force_release(adev);
>   	amdgpu_vm_manager_fini(adev);
>   
> -	/*
> -	* TODO:
> -	* Currently there is a bug where some memory client outside
> -	* of the driver writes to first 8M of VRAM on S3 resume,
> -	* this overrides GART which by default gets placed in first 8M and
> -	* causes VM_FAULTS once GTT is accessed.
> -	* Keep the stolen memory reservation until the while this is not solved.
> -	* Also check code in gmc_v9_0_get_vbios_fb_size and gmc_v9_0_late_init
> -	*/
> -	amdgpu_bo_free_kernel(&adev->stolen_vga_memory, NULL, NULL);
> +	if (gmc_v9_0_keep_stolen_memory(adev))
> +		amdgpu_bo_free_kernel(&adev->stolen_vga_memory, NULL, NULL);
>   
>   	amdgpu_gart_table_vram_free(adev);
>   	amdgpu_bo_fini(adev);

_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 1/4] drm/amdgpu/gmc9: rework stolen vga memory handling
       [not found]     ` <9e88efe2-029e-1b98-2362-8ff5cc400ad1-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
@ 2018-09-02 14:56       ` Alex Deucher
  0 siblings, 0 replies; 8+ messages in thread
From: Alex Deucher @ 2018-09-02 14:56 UTC (permalink / raw)
  To: Christian Koenig; +Cc: Deucher, Alexander, amd-gfx list

On Fri, Aug 31, 2018 at 4:20 AM Christian König
<ckoenig.leichtzumerken@gmail.com> wrote:
>
> Am 30.08.2018 um 16:53 schrieb Alex Deucher:
> > No functional change, just rework it in order to adjust the
> > behavior on a per asic level.  The problem is that on vega10,
> > something corrupts the lower 8 MB of vram on the second
> > resume from S3.
>
> Is that tested with engineering samples or production level hardware?
> Maybe it is just a leftover from BIOS bringup?

It happens reliably across a bunch of internal boards.  Not sure if
anyone has tried with OEM boards.

Alex

>
> > This does not seem to affect Raven, other
> > gmc9 based asics need testing.
> >
> > Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
>
> Acked-by: Christian König <christian.koenig@amd.com> for the series.
>
> > ---
> >   drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c | 48 +++++++++++++++++++++--------------
> >   1 file changed, 29 insertions(+), 19 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c b/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
> > index 04d50893a6f2..46cff7d8b375 100644
> > --- a/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
> > +++ b/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
> > @@ -692,6 +692,28 @@ static int gmc_v9_0_ecc_available(struct amdgpu_device *adev)
> >       return lost_sheep == 0;
> >   }
> >
> > +static bool gmc_v9_0_keep_stolen_memory(struct amdgpu_device *adev)
> > +{
> > +
> > +     /*
> > +      * TODO:
> > +      * Currently there is a bug where some memory client outside
> > +      * of the driver writes to first 8M of VRAM on S3 resume,
> > +      * this overrides GART which by default gets placed in first 8M and
> > +      * causes VM_FAULTS once GTT is accessed.
> > +      * Keep the stolen memory reservation until the while this is not solved.
> > +      * Also check code in gmc_v9_0_get_vbios_fb_size and gmc_v9_0_late_init
> > +      */
> > +     switch (adev->asic_type) {
> > +     case CHIP_RAVEN:
> > +     case CHIP_VEGA10:
> > +     case CHIP_VEGA12:
> > +     case CHIP_VEGA20:
> > +     default:
> > +             return true;
> > +     }
> > +}
> > +
> >   static int gmc_v9_0_late_init(void *handle)
> >   {
> >       struct amdgpu_device *adev = (struct amdgpu_device *)handle;
> > @@ -708,10 +730,8 @@ static int gmc_v9_0_late_init(void *handle)
> >       unsigned i;
> >       int r;
> >
> > -     /*
> > -      * TODO - Uncomment once GART corruption issue is fixed.
> > -      */
> > -     /* amdgpu_bo_late_init(adev); */
> > +     if (!gmc_v9_0_keep_stolen_memory(adev))
> > +             amdgpu_bo_late_init(adev);
> >
> >       for(i = 0; i < adev->num_rings; ++i) {
> >               struct amdgpu_ring *ring = adev->rings[i];
> > @@ -848,18 +868,16 @@ static int gmc_v9_0_gart_init(struct amdgpu_device *adev)
> >
> >   static unsigned gmc_v9_0_get_vbios_fb_size(struct amdgpu_device *adev)
> >   {
> > -#if 0
> >       u32 d1vga_control = RREG32_SOC15(DCE, 0, mmD1VGA_CONTROL);
> > -#endif
> >       unsigned size;
> >
> >       /*
> >        * TODO Remove once GART corruption is resolved
> >        * Check related code in gmc_v9_0_sw_fini
> >        * */
> > -     size = 9 * 1024 * 1024;
> > +     if (gmc_v9_0_keep_stolen_memory(adev))
> > +             return 9 * 1024 * 1024;
> >
> > -#if 0
> >       if (REG_GET_FIELD(d1vga_control, D1VGA_CONTROL, D1VGA_MODE_ENABLE)) {
> >               size = 9 * 1024 * 1024; /* reserve 8MB for vga emulator and 1 MB for FB */
> >       } else {
> > @@ -876,6 +894,7 @@ static unsigned gmc_v9_0_get_vbios_fb_size(struct amdgpu_device *adev)
> >                       break;
> >               case CHIP_VEGA10:
> >               case CHIP_VEGA12:
> > +             case CHIP_VEGA20:
> >               default:
> >                       viewport = RREG32_SOC15(DCE, 0, mmSCL0_VIEWPORT_SIZE);
> >                       size = (REG_GET_FIELD(viewport, SCL0_VIEWPORT_SIZE, VIEWPORT_HEIGHT) *
> > @@ -888,7 +907,6 @@ static unsigned gmc_v9_0_get_vbios_fb_size(struct amdgpu_device *adev)
> >       if ((adev->gmc.real_vram_size - size) < (8 * 1024 * 1024))
> >               return 0;
> >
> > -#endif
> >       return size;
> >   }
> >
> > @@ -1000,16 +1018,8 @@ static int gmc_v9_0_sw_fini(void *handle)
> >       amdgpu_gem_force_release(adev);
> >       amdgpu_vm_manager_fini(adev);
> >
> > -     /*
> > -     * TODO:
> > -     * Currently there is a bug where some memory client outside
> > -     * of the driver writes to first 8M of VRAM on S3 resume,
> > -     * this overrides GART which by default gets placed in first 8M and
> > -     * causes VM_FAULTS once GTT is accessed.
> > -     * Keep the stolen memory reservation until the while this is not solved.
> > -     * Also check code in gmc_v9_0_get_vbios_fb_size and gmc_v9_0_late_init
> > -     */
> > -     amdgpu_bo_free_kernel(&adev->stolen_vga_memory, NULL, NULL);
> > +     if (gmc_v9_0_keep_stolen_memory(adev))
> > +             amdgpu_bo_free_kernel(&adev->stolen_vga_memory, NULL, NULL);
> >
> >       amdgpu_gart_table_vram_free(adev);
> >       amdgpu_bo_fini(adev);
>
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2018-09-02 14:56 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-08-30 14:53 [PATCH 1/4] drm/amdgpu/gmc9: rework stolen vga memory handling Alex Deucher
     [not found] ` <20180830145339.5162-1-alexander.deucher-5C7GfCeVMHo@public.gmane.org>
2018-08-30 14:53   ` [PATCH 2/4] drm/amdgpu/gmc9: don't keep stolen memory on Raven Alex Deucher
     [not found]     ` <20180830145339.5162-2-alexander.deucher-5C7GfCeVMHo@public.gmane.org>
2018-08-31  2:03       ` Zhang, Jerry (Junwei)
2018-08-30 14:53   ` [PATCH 3/4] drm/amdgpu/gmc9: don't keep stolen memory on vega12 Alex Deucher
2018-08-30 14:53   ` [PATCH 4/4] drm/amdgpu/gmc9: don't keep stolen memory on vega20 Alex Deucher
2018-08-31  2:03   ` [PATCH 1/4] drm/amdgpu/gmc9: rework stolen vga memory handling Zhang, Jerry (Junwei)
2018-08-31  8:20   ` Christian König
     [not found]     ` <9e88efe2-029e-1b98-2362-8ff5cc400ad1-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2018-09-02 14:56       ` Alex Deucher

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.