Re: [PATCH] drm/amdgpu: correct the wrong cached state for GMC on PICASSO

2021-12-13 Thread Lazar, Lijo




On 12/14/2021 1:16 PM, Quan, Evan wrote:

[AMD Official Use Only]




-Original Message-
From: Lazar, Lijo 
Sent: Tuesday, December 14, 2021 2:13 PM
To: Quan, Evan ; amd-gfx@lists.freedesktop.org
Cc: Deucher, Alexander ; Limonciello, Mario

Subject: Re: [PATCH] drm/amdgpu: correct the wrong cached state for GMC
on PICASSO



On 12/14/2021 7:04 AM, Evan Quan wrote:

Pair the operations did in GMC ->hw_init and ->hw_fini. That can help
to maintain correct cached state for GMC and avoid unintention gate
operation dropping due to wrong cached state.

BUG: https://gitlab.freedesktop.org/drm/amd/-/issues/1828

Signed-off-by: Evan Quan 
Change-Id: I9976672a64464b86bb45eed0c25c9599d3bb4c06
---
   drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c| 8 
   drivers/gpu/drm/amd/amdgpu/mmhub_v1_0.c  | 8 
   drivers/gpu/drm/amd/pm/powerplay/amd_powerplay.c | 7 ++-
   3 files changed, 18 insertions(+), 5 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
b/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
index db2ec84f7237..c7492db3e189 100644
--- a/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
@@ -1809,6 +1809,14 @@ static int gmc_v9_0_hw_fini(void *handle)
return 0;
}

+   /*
+* Pair the operations did in gmc_v9_0_hw_init and thus maintain
+* a correct cached state for GMC. Otherwise, the "gate" again
+* operation on S3 resuming will fail due to wrong cached state.
+*/
+   if (adev->mmhub.funcs->update_power_gating)
+   adev->mmhub.funcs->update_power_gating(adev, false);
+
amdgpu_irq_put(adev, &adev->gmc.ecc_irq, 0);
amdgpu_irq_put(adev, &adev->gmc.vm_fault, 0);

diff --git a/drivers/gpu/drm/amd/amdgpu/mmhub_v1_0.c
b/drivers/gpu/drm/amd/amdgpu/mmhub_v1_0.c
index b3bede1dc41d..1da2ec692057 100644
--- a/drivers/gpu/drm/amd/amdgpu/mmhub_v1_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/mmhub_v1_0.c
@@ -301,10 +301,10 @@ static void

mmhub_v1_0_update_power_gating(struct amdgpu_device *adev,

if (amdgpu_sriov_vf(adev))
return;

-   if (enable && adev->pg_flags & AMD_PG_SUPPORT_MMHUB) {
-   amdgpu_dpm_set_powergating_by_smu(adev,

AMD_IP_BLOCK_TYPE_GMC, true);

-
-   }
+   if (adev->pg_flags & AMD_PG_SUPPORT_MMHUB)
+   amdgpu_dpm_set_powergating_by_smu(adev,
+ AMD_IP_BLOCK_TYPE_GMC,
+ enable);
   }

   static int mmhub_v1_0_gart_enable(struct amdgpu_device *adev) diff
--git a/drivers/gpu/drm/amd/pm/powerplay/amd_powerplay.c
b/drivers/gpu/drm/amd/pm/powerplay/amd_powerplay.c
index 3656a77baea4..9953a77cb987 100644
--- a/drivers/gpu/drm/amd/pm/powerplay/amd_powerplay.c
+++ b/drivers/gpu/drm/amd/pm/powerplay/amd_powerplay.c
@@ -1167,7 +1167,12 @@ static int pp_set_powergating_by_smu(void

*handle,

pp_dpm_powergate_vce(handle, gate);
break;
case AMD_IP_BLOCK_TYPE_GMC:
-   pp_dpm_powergate_mmhub(handle);
+   /*
+* For now, this is only used on PICASSO.
+* And only "gate" operation is supported.
+*/
+   if (gate)
+   pp_dpm_powergate_mmhub(handle);


This is a generic entry point. Would rather keep PG enable or disable
supported in mmhub_v1_0 rather than than here. And this comment also
should be in mmhub_v1_0.

[Quan, Evan] pp_dpm_powergate_mmhub is not a generic interface. It's customized for 
PICASSO which accepts no parameter("bool gate") as other interfaces.
Thus some comments which explain why the interface is so special are proper I 
think.



amd_powerplay is the generic entry point and we should avoid ASIC 
specific things as much as possible. Ideally this should be handled in 
mmhub v1/smu10 hwmgr and not here.


Thanks,
Lijo


BR
Evan


Thanks,
Lijo


break;
case AMD_IP_BLOCK_TYPE_GFX:
ret = pp_dpm_powergate_gfx(handle, gate);



RE: [PATCH] drm/amdgpu: correct the wrong cached state for GMC on PICASSO

2021-12-13 Thread Quan, Evan
[AMD Official Use Only]



> -Original Message-
> From: Lazar, Lijo 
> Sent: Tuesday, December 14, 2021 2:13 PM
> To: Quan, Evan ; amd-gfx@lists.freedesktop.org
> Cc: Deucher, Alexander ; Limonciello, Mario
> 
> Subject: Re: [PATCH] drm/amdgpu: correct the wrong cached state for GMC
> on PICASSO
> 
> 
> 
> On 12/14/2021 7:04 AM, Evan Quan wrote:
> > Pair the operations did in GMC ->hw_init and ->hw_fini. That can help
> > to maintain correct cached state for GMC and avoid unintention gate
> > operation dropping due to wrong cached state.
> >
> > BUG: https://gitlab.freedesktop.org/drm/amd/-/issues/1828
> >
> > Signed-off-by: Evan Quan 
> > Change-Id: I9976672a64464b86bb45eed0c25c9599d3bb4c06
> > ---
> >   drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c| 8 
> >   drivers/gpu/drm/amd/amdgpu/mmhub_v1_0.c  | 8 
> >   drivers/gpu/drm/amd/pm/powerplay/amd_powerplay.c | 7 ++-
> >   3 files changed, 18 insertions(+), 5 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
> > b/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
> > index db2ec84f7237..c7492db3e189 100644
> > --- a/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
> > +++ b/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
> > @@ -1809,6 +1809,14 @@ static int gmc_v9_0_hw_fini(void *handle)
> > return 0;
> > }
> >
> > +   /*
> > +* Pair the operations did in gmc_v9_0_hw_init and thus maintain
> > +* a correct cached state for GMC. Otherwise, the "gate" again
> > +* operation on S3 resuming will fail due to wrong cached state.
> > +*/
> > +   if (adev->mmhub.funcs->update_power_gating)
> > +   adev->mmhub.funcs->update_power_gating(adev, false);
> > +
> > amdgpu_irq_put(adev, &adev->gmc.ecc_irq, 0);
> > amdgpu_irq_put(adev, &adev->gmc.vm_fault, 0);
> >
> > diff --git a/drivers/gpu/drm/amd/amdgpu/mmhub_v1_0.c
> > b/drivers/gpu/drm/amd/amdgpu/mmhub_v1_0.c
> > index b3bede1dc41d..1da2ec692057 100644
> > --- a/drivers/gpu/drm/amd/amdgpu/mmhub_v1_0.c
> > +++ b/drivers/gpu/drm/amd/amdgpu/mmhub_v1_0.c
> > @@ -301,10 +301,10 @@ static void
> mmhub_v1_0_update_power_gating(struct amdgpu_device *adev,
> > if (amdgpu_sriov_vf(adev))
> > return;
> >
> > -   if (enable && adev->pg_flags & AMD_PG_SUPPORT_MMHUB) {
> > -   amdgpu_dpm_set_powergating_by_smu(adev,
> AMD_IP_BLOCK_TYPE_GMC, true);
> > -
> > -   }
> > +   if (adev->pg_flags & AMD_PG_SUPPORT_MMHUB)
> > +   amdgpu_dpm_set_powergating_by_smu(adev,
> > + AMD_IP_BLOCK_TYPE_GMC,
> > + enable);
> >   }
> >
> >   static int mmhub_v1_0_gart_enable(struct amdgpu_device *adev) diff
> > --git a/drivers/gpu/drm/amd/pm/powerplay/amd_powerplay.c
> > b/drivers/gpu/drm/amd/pm/powerplay/amd_powerplay.c
> > index 3656a77baea4..9953a77cb987 100644
> > --- a/drivers/gpu/drm/amd/pm/powerplay/amd_powerplay.c
> > +++ b/drivers/gpu/drm/amd/pm/powerplay/amd_powerplay.c
> > @@ -1167,7 +1167,12 @@ static int pp_set_powergating_by_smu(void
> *handle,
> > pp_dpm_powergate_vce(handle, gate);
> > break;
> > case AMD_IP_BLOCK_TYPE_GMC:
> > -   pp_dpm_powergate_mmhub(handle);
> > +   /*
> > +* For now, this is only used on PICASSO.
> > +* And only "gate" operation is supported.
> > +*/
> > +   if (gate)
> > +   pp_dpm_powergate_mmhub(handle);
> 
> This is a generic entry point. Would rather keep PG enable or disable
> supported in mmhub_v1_0 rather than than here. And this comment also
> should be in mmhub_v1_0.
[Quan, Evan] pp_dpm_powergate_mmhub is not a generic interface. It's customized 
for PICASSO which accepts no parameter("bool gate") as other interfaces.
Thus some comments which explain why the interface is so special are proper I 
think.

BR
Evan
> 
> Thanks,
> Lijo
> 
> > break;
> > case AMD_IP_BLOCK_TYPE_GFX:
> > ret = pp_dpm_powergate_gfx(handle, gate);
> >


Re: [PATCH] drm/amdgpu: correct the wrong cached state for GMC on PICASSO

2021-12-13 Thread Lazar, Lijo




On 12/14/2021 7:04 AM, Evan Quan wrote:

Pair the operations did in GMC ->hw_init and ->hw_fini. That
can help to maintain correct cached state for GMC and avoid
unintention gate operation dropping due to wrong cached state.

BUG: https://gitlab.freedesktop.org/drm/amd/-/issues/1828

Signed-off-by: Evan Quan 
Change-Id: I9976672a64464b86bb45eed0c25c9599d3bb4c06
---
  drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c| 8 
  drivers/gpu/drm/amd/amdgpu/mmhub_v1_0.c  | 8 
  drivers/gpu/drm/amd/pm/powerplay/amd_powerplay.c | 7 ++-
  3 files changed, 18 insertions(+), 5 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c 
b/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
index db2ec84f7237..c7492db3e189 100644
--- a/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
@@ -1809,6 +1809,14 @@ static int gmc_v9_0_hw_fini(void *handle)
return 0;
}
  
+	/*

+* Pair the operations did in gmc_v9_0_hw_init and thus maintain
+* a correct cached state for GMC. Otherwise, the "gate" again
+* operation on S3 resuming will fail due to wrong cached state.
+*/
+   if (adev->mmhub.funcs->update_power_gating)
+   adev->mmhub.funcs->update_power_gating(adev, false);
+
amdgpu_irq_put(adev, &adev->gmc.ecc_irq, 0);
amdgpu_irq_put(adev, &adev->gmc.vm_fault, 0);
  
diff --git a/drivers/gpu/drm/amd/amdgpu/mmhub_v1_0.c b/drivers/gpu/drm/amd/amdgpu/mmhub_v1_0.c

index b3bede1dc41d..1da2ec692057 100644
--- a/drivers/gpu/drm/amd/amdgpu/mmhub_v1_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/mmhub_v1_0.c
@@ -301,10 +301,10 @@ static void mmhub_v1_0_update_power_gating(struct 
amdgpu_device *adev,
if (amdgpu_sriov_vf(adev))
return;
  
-	if (enable && adev->pg_flags & AMD_PG_SUPPORT_MMHUB) {

-   amdgpu_dpm_set_powergating_by_smu(adev, AMD_IP_BLOCK_TYPE_GMC, 
true);
-
-   }
+   if (adev->pg_flags & AMD_PG_SUPPORT_MMHUB)
+   amdgpu_dpm_set_powergating_by_smu(adev,
+ AMD_IP_BLOCK_TYPE_GMC,
+ enable);
  }
  
  static int mmhub_v1_0_gart_enable(struct amdgpu_device *adev)

diff --git a/drivers/gpu/drm/amd/pm/powerplay/amd_powerplay.c 
b/drivers/gpu/drm/amd/pm/powerplay/amd_powerplay.c
index 3656a77baea4..9953a77cb987 100644
--- a/drivers/gpu/drm/amd/pm/powerplay/amd_powerplay.c
+++ b/drivers/gpu/drm/amd/pm/powerplay/amd_powerplay.c
@@ -1167,7 +1167,12 @@ static int pp_set_powergating_by_smu(void *handle,
pp_dpm_powergate_vce(handle, gate);
break;
case AMD_IP_BLOCK_TYPE_GMC:
-   pp_dpm_powergate_mmhub(handle);
+   /*
+* For now, this is only used on PICASSO.
+* And only "gate" operation is supported.
+*/
+   if (gate)
+   pp_dpm_powergate_mmhub(handle);


This is a generic entry point. Would rather keep PG enable or disable 
supported in mmhub_v1_0 rather than than here. And this comment also 
should be in mmhub_v1_0.


Thanks,
Lijo


break;
case AMD_IP_BLOCK_TYPE_GFX:
ret = pp_dpm_powergate_gfx(handle, gate);



RE: [PATCH] drm/amdgpu: correct the wrong cached state for GMC on PICASSO

2021-12-13 Thread Quan, Evan
[Public]



> -Original Message-
> From: Limonciello, Mario 
> Sent: Tuesday, December 14, 2021 11:50 AM
> To: Chen, Guchun ; Quan, Evan
> ; amd-gfx@lists.freedesktop.org
> Cc: Deucher, Alexander ; Quan, Evan
> 
> Subject: RE: [PATCH] drm/amdgpu: correct the wrong cached state for GMC
> on PICASSO
> 
> [Public]
> 
> 
> 
> > -Original Message-
> > From: Chen, Guchun 
> > Sent: Monday, December 13, 2021 21:49
> > To: Quan, Evan ; amd-gfx@lists.freedesktop.org
> > Cc: Deucher, Alexander ; Quan, Evan
> > ; Limonciello, Mario 
> > Subject: RE: [PATCH] drm/amdgpu: correct the wrong cached state for
> > GMC on PICASSO
> >
> > [Public]
> >
> > Acked-by: Guchun Chen 
> >
> > Regards,
> > Guchun
> >
> > -Original Message-
> > From: amd-gfx  On Behalf Of
> > Evan Quan
> > Sent: Tuesday, December 14, 2021 9:34 AM
> > To: amd-gfx@lists.freedesktop.org
> > Cc: Deucher, Alexander ; Quan, Evan
> > ; Limonciello, Mario 
> > Subject: [PATCH] drm/amdgpu: correct the wrong cached state for GMC on
> > PICASSO
> >
> > Pair the operations did in GMC ->hw_init and ->hw_fini. That can help
> > to maintain correct cached state for GMC and avoid unintention gate
> > operation dropping due to wrong cached state.
> >
> > BUG:
> > https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgitl
> > ab.fr
> > eedesktop.org%2Fdrm%2Famd%2F-
> > %2Fissues%2F1828&data=04%7C01%7Cguchun.chen%40amd.com%7C
> 42b
> >
> 00d7e1c4e44c0762908d9bea1ef53%7C3dd8961fe4884e608e11a82d994e183d%
> >
> 7C0%7C0%7C637750424983319967%7CUnknown%7CTWFpbGZsb3d8eyJWIjoi
> M
> >
> C4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000
> &a
> >
> mp;sdata=VgBDAbcKN%2FqUz8iBQby9YP8PsG2y93VlnDVhXVaGNBo%3D&a
> mp;r
> > eserved=0
> >
> 
> The syntax here should be BugLink: 
> 
[Quan, Evan] Thanks! Will fix that on code submission.

BR
Evan
> Otherwise
> Reviewed-by: Mario Limonciello 
> 
> > Signed-off-by: Evan Quan 
> > Change-Id: I9976672a64464b86bb45eed0c25c9599d3bb4c06
> > ---
> >  drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c| 8 
> >  drivers/gpu/drm/amd/amdgpu/mmhub_v1_0.c  | 8 
> >  drivers/gpu/drm/amd/pm/powerplay/amd_powerplay.c | 7 ++-
> >  3 files changed, 18 insertions(+), 5 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
> > b/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
> > index db2ec84f7237..c7492db3e189 100644
> > --- a/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
> > +++ b/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
> > @@ -1809,6 +1809,14 @@ static int gmc_v9_0_hw_fini(void *handle)
> > return 0;
> > }
> >
> > +   /*
> > +* Pair the operations did in gmc_v9_0_hw_init and thus maintain
> > +* a correct cached state for GMC. Otherwise, the "gate" again
> > +* operation on S3 resuming will fail due to wrong cached state.
> > +*/
> > +   if (adev->mmhub.funcs->update_power_gating)
> > +   adev->mmhub.funcs->update_power_gating(adev, false);
> > +
> > amdgpu_irq_put(adev, &adev->gmc.ecc_irq, 0);
> > amdgpu_irq_put(adev, &adev->gmc.vm_fault, 0);
> >
> > diff --git a/drivers/gpu/drm/amd/amdgpu/mmhub_v1_0.c
> > b/drivers/gpu/drm/amd/amdgpu/mmhub_v1_0.c
> > index b3bede1dc41d..1da2ec692057 100644
> > --- a/drivers/gpu/drm/amd/amdgpu/mmhub_v1_0.c
> > +++ b/drivers/gpu/drm/amd/amdgpu/mmhub_v1_0.c
> > @@ -301,10 +301,10 @@ static void
> > mmhub_v1_0_update_power_gating(struct amdgpu_device *adev,
> > if (amdgpu_sriov_vf(adev))
> > return;
> >
> > -   if (enable && adev->pg_flags & AMD_PG_SUPPORT_MMHUB) {
> > -   amdgpu_dpm_set_powergating_by_smu(adev,
> > AMD_IP_BLOCK_TYPE_GMC, true);
> > -
> > -   }
> > +   if (adev->pg_flags & AMD_PG_SUPPORT_MMHUB)
> > +   amdgpu_dpm_set_powergating_by_smu(adev,
> > + AMD_IP_BLOCK_TYPE_GMC,
> > + enable);
> >  }
> >
> >  static int mmhub_v1_0_gart_enable(struct amdgpu_device *adev) diff
> > --git a/drivers/gpu/drm/amd/pm/powerplay/amd_powerplay.c
> > b/drivers/gpu/drm/amd/pm/powerplay/amd_powerplay.c
> > index 3656a77baea4..9953a77cb987 100644
> > --- a/drivers/gpu/drm/amd/pm/powerplay/amd_powerplay.c
> > +++ b/drivers/gpu/drm/amd/pm/powerplay/amd_powerplay.c
> > @@ -1167,7 +1167,12 @@ static int pp_set_powergating_by_smu(void
> > *handle,
> > pp_dpm_powergate_vce(handle, gate);
> > break;
> > case AMD_IP_BLOCK_TYPE_GMC:
> > -   pp_dpm_powergate_mmhub(handle);
> > +   /*
> > +* For now, this is only used on PICASSO.
> > +* And only "gate" operation is supported.
> > +*/
> > +   if (gate)
> > +   pp_dpm_powergate_mmhub(handle);
> > break;
> > case AMD_IP_BLOCK_TYPE_GFX:
> > ret = pp_dpm_powergate_gfx(handle, gate);
> > --
> > 2.29.0


RE: [PATCH] drm/amdgpu: correct the wrong cached state for GMC on PICASSO

2021-12-13 Thread Limonciello, Mario
[Public]



> -Original Message-
> From: Chen, Guchun 
> Sent: Monday, December 13, 2021 21:49
> To: Quan, Evan ; amd-gfx@lists.freedesktop.org
> Cc: Deucher, Alexander ; Quan, Evan
> ; Limonciello, Mario 
> Subject: RE: [PATCH] drm/amdgpu: correct the wrong cached state for GMC on
> PICASSO
> 
> [Public]
> 
> Acked-by: Guchun Chen 
> 
> Regards,
> Guchun
> 
> -Original Message-
> From: amd-gfx  On Behalf Of Evan
> Quan
> Sent: Tuesday, December 14, 2021 9:34 AM
> To: amd-gfx@lists.freedesktop.org
> Cc: Deucher, Alexander ; Quan, Evan
> ; Limonciello, Mario 
> Subject: [PATCH] drm/amdgpu: correct the wrong cached state for GMC on
> PICASSO
> 
> Pair the operations did in GMC ->hw_init and ->hw_fini. That can help to
> maintain correct cached state for GMC and avoid unintention gate operation
> dropping due to wrong cached state.
> 
> BUG:
> https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgitlab.fr
> eedesktop.org%2Fdrm%2Famd%2F-
> %2Fissues%2F1828&data=04%7C01%7Cguchun.chen%40amd.com%7C42b
> 00d7e1c4e44c0762908d9bea1ef53%7C3dd8961fe4884e608e11a82d994e183d%
> 7C0%7C0%7C637750424983319967%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiM
> C4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000&a
> mp;sdata=VgBDAbcKN%2FqUz8iBQby9YP8PsG2y93VlnDVhXVaGNBo%3D&r
> eserved=0
> 

The syntax here should be BugLink: 

Otherwise
Reviewed-by: Mario Limonciello 

> Signed-off-by: Evan Quan 
> Change-Id: I9976672a64464b86bb45eed0c25c9599d3bb4c06
> ---
>  drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c| 8 
>  drivers/gpu/drm/amd/amdgpu/mmhub_v1_0.c  | 8 
>  drivers/gpu/drm/amd/pm/powerplay/amd_powerplay.c | 7 ++-
>  3 files changed, 18 insertions(+), 5 deletions(-)
> 
> diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
> b/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
> index db2ec84f7237..c7492db3e189 100644
> --- a/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
> @@ -1809,6 +1809,14 @@ static int gmc_v9_0_hw_fini(void *handle)
>   return 0;
>   }
> 
> + /*
> +  * Pair the operations did in gmc_v9_0_hw_init and thus maintain
> +  * a correct cached state for GMC. Otherwise, the "gate" again
> +  * operation on S3 resuming will fail due to wrong cached state.
> +  */
> + if (adev->mmhub.funcs->update_power_gating)
> + adev->mmhub.funcs->update_power_gating(adev, false);
> +
>   amdgpu_irq_put(adev, &adev->gmc.ecc_irq, 0);
>   amdgpu_irq_put(adev, &adev->gmc.vm_fault, 0);
> 
> diff --git a/drivers/gpu/drm/amd/amdgpu/mmhub_v1_0.c
> b/drivers/gpu/drm/amd/amdgpu/mmhub_v1_0.c
> index b3bede1dc41d..1da2ec692057 100644
> --- a/drivers/gpu/drm/amd/amdgpu/mmhub_v1_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/mmhub_v1_0.c
> @@ -301,10 +301,10 @@ static void
> mmhub_v1_0_update_power_gating(struct amdgpu_device *adev,
>   if (amdgpu_sriov_vf(adev))
>   return;
> 
> - if (enable && adev->pg_flags & AMD_PG_SUPPORT_MMHUB) {
> - amdgpu_dpm_set_powergating_by_smu(adev,
> AMD_IP_BLOCK_TYPE_GMC, true);
> -
> - }
> + if (adev->pg_flags & AMD_PG_SUPPORT_MMHUB)
> + amdgpu_dpm_set_powergating_by_smu(adev,
> +   AMD_IP_BLOCK_TYPE_GMC,
> +   enable);
>  }
> 
>  static int mmhub_v1_0_gart_enable(struct amdgpu_device *adev) diff --git
> a/drivers/gpu/drm/amd/pm/powerplay/amd_powerplay.c
> b/drivers/gpu/drm/amd/pm/powerplay/amd_powerplay.c
> index 3656a77baea4..9953a77cb987 100644
> --- a/drivers/gpu/drm/amd/pm/powerplay/amd_powerplay.c
> +++ b/drivers/gpu/drm/amd/pm/powerplay/amd_powerplay.c
> @@ -1167,7 +1167,12 @@ static int pp_set_powergating_by_smu(void
> *handle,
>   pp_dpm_powergate_vce(handle, gate);
>   break;
>   case AMD_IP_BLOCK_TYPE_GMC:
> - pp_dpm_powergate_mmhub(handle);
> + /*
> +  * For now, this is only used on PICASSO.
> +  * And only "gate" operation is supported.
> +  */
> + if (gate)
> + pp_dpm_powergate_mmhub(handle);
>   break;
>   case AMD_IP_BLOCK_TYPE_GFX:
>   ret = pp_dpm_powergate_gfx(handle, gate);
> --
> 2.29.0


RE: [PATCH] drm/amdgpu: correct the wrong cached state for GMC on PICASSO

2021-12-13 Thread Chen, Guchun
[Public]

Acked-by: Guchun Chen 

Regards,
Guchun

-Original Message-
From: amd-gfx  On Behalf Of Evan Quan
Sent: Tuesday, December 14, 2021 9:34 AM
To: amd-gfx@lists.freedesktop.org
Cc: Deucher, Alexander ; Quan, Evan 
; Limonciello, Mario 
Subject: [PATCH] drm/amdgpu: correct the wrong cached state for GMC on PICASSO

Pair the operations did in GMC ->hw_init and ->hw_fini. That can help to 
maintain correct cached state for GMC and avoid unintention gate operation 
dropping due to wrong cached state.

BUG: 
https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgitlab.freedesktop.org%2Fdrm%2Famd%2F-%2Fissues%2F1828&data=04%7C01%7Cguchun.chen%40amd.com%7C42b00d7e1c4e44c0762908d9bea1ef53%7C3dd8961fe4884e608e11a82d994e183d%7C0%7C0%7C637750424983319967%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000&sdata=VgBDAbcKN%2FqUz8iBQby9YP8PsG2y93VlnDVhXVaGNBo%3D&reserved=0

Signed-off-by: Evan Quan 
Change-Id: I9976672a64464b86bb45eed0c25c9599d3bb4c06
---
 drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c| 8 
 drivers/gpu/drm/amd/amdgpu/mmhub_v1_0.c  | 8 
 drivers/gpu/drm/amd/pm/powerplay/amd_powerplay.c | 7 ++-
 3 files changed, 18 insertions(+), 5 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c 
b/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
index db2ec84f7237..c7492db3e189 100644
--- a/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
@@ -1809,6 +1809,14 @@ static int gmc_v9_0_hw_fini(void *handle)
return 0;
}
 
+   /*
+* Pair the operations did in gmc_v9_0_hw_init and thus maintain
+* a correct cached state for GMC. Otherwise, the "gate" again
+* operation on S3 resuming will fail due to wrong cached state.
+*/
+   if (adev->mmhub.funcs->update_power_gating)
+   adev->mmhub.funcs->update_power_gating(adev, false);
+
amdgpu_irq_put(adev, &adev->gmc.ecc_irq, 0);
amdgpu_irq_put(adev, &adev->gmc.vm_fault, 0);
 
diff --git a/drivers/gpu/drm/amd/amdgpu/mmhub_v1_0.c 
b/drivers/gpu/drm/amd/amdgpu/mmhub_v1_0.c
index b3bede1dc41d..1da2ec692057 100644
--- a/drivers/gpu/drm/amd/amdgpu/mmhub_v1_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/mmhub_v1_0.c
@@ -301,10 +301,10 @@ static void mmhub_v1_0_update_power_gating(struct 
amdgpu_device *adev,
if (amdgpu_sriov_vf(adev))
return;
 
-   if (enable && adev->pg_flags & AMD_PG_SUPPORT_MMHUB) {
-   amdgpu_dpm_set_powergating_by_smu(adev, AMD_IP_BLOCK_TYPE_GMC, 
true);
-
-   }
+   if (adev->pg_flags & AMD_PG_SUPPORT_MMHUB)
+   amdgpu_dpm_set_powergating_by_smu(adev,
+ AMD_IP_BLOCK_TYPE_GMC,
+ enable);
 }
 
 static int mmhub_v1_0_gart_enable(struct amdgpu_device *adev) diff --git 
a/drivers/gpu/drm/amd/pm/powerplay/amd_powerplay.c 
b/drivers/gpu/drm/amd/pm/powerplay/amd_powerplay.c
index 3656a77baea4..9953a77cb987 100644
--- a/drivers/gpu/drm/amd/pm/powerplay/amd_powerplay.c
+++ b/drivers/gpu/drm/amd/pm/powerplay/amd_powerplay.c
@@ -1167,7 +1167,12 @@ static int pp_set_powergating_by_smu(void *handle,
pp_dpm_powergate_vce(handle, gate);
break;
case AMD_IP_BLOCK_TYPE_GMC:
-   pp_dpm_powergate_mmhub(handle);
+   /*
+* For now, this is only used on PICASSO.
+* And only "gate" operation is supported.
+*/
+   if (gate)
+   pp_dpm_powergate_mmhub(handle);
break;
case AMD_IP_BLOCK_TYPE_GFX:
ret = pp_dpm_powergate_gfx(handle, gate);
--
2.29.0


[PATCH] drm/amdgpu: correct the wrong cached state for GMC on PICASSO

2021-12-13 Thread Evan Quan
Pair the operations did in GMC ->hw_init and ->hw_fini. That
can help to maintain correct cached state for GMC and avoid
unintention gate operation dropping due to wrong cached state.

BUG: https://gitlab.freedesktop.org/drm/amd/-/issues/1828

Signed-off-by: Evan Quan 
Change-Id: I9976672a64464b86bb45eed0c25c9599d3bb4c06
---
 drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c| 8 
 drivers/gpu/drm/amd/amdgpu/mmhub_v1_0.c  | 8 
 drivers/gpu/drm/amd/pm/powerplay/amd_powerplay.c | 7 ++-
 3 files changed, 18 insertions(+), 5 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c 
b/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
index db2ec84f7237..c7492db3e189 100644
--- a/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
@@ -1809,6 +1809,14 @@ static int gmc_v9_0_hw_fini(void *handle)
return 0;
}
 
+   /*
+* Pair the operations did in gmc_v9_0_hw_init and thus maintain
+* a correct cached state for GMC. Otherwise, the "gate" again
+* operation on S3 resuming will fail due to wrong cached state.
+*/
+   if (adev->mmhub.funcs->update_power_gating)
+   adev->mmhub.funcs->update_power_gating(adev, false);
+
amdgpu_irq_put(adev, &adev->gmc.ecc_irq, 0);
amdgpu_irq_put(adev, &adev->gmc.vm_fault, 0);
 
diff --git a/drivers/gpu/drm/amd/amdgpu/mmhub_v1_0.c 
b/drivers/gpu/drm/amd/amdgpu/mmhub_v1_0.c
index b3bede1dc41d..1da2ec692057 100644
--- a/drivers/gpu/drm/amd/amdgpu/mmhub_v1_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/mmhub_v1_0.c
@@ -301,10 +301,10 @@ static void mmhub_v1_0_update_power_gating(struct 
amdgpu_device *adev,
if (amdgpu_sriov_vf(adev))
return;
 
-   if (enable && adev->pg_flags & AMD_PG_SUPPORT_MMHUB) {
-   amdgpu_dpm_set_powergating_by_smu(adev, AMD_IP_BLOCK_TYPE_GMC, 
true);
-
-   }
+   if (adev->pg_flags & AMD_PG_SUPPORT_MMHUB)
+   amdgpu_dpm_set_powergating_by_smu(adev,
+ AMD_IP_BLOCK_TYPE_GMC,
+ enable);
 }
 
 static int mmhub_v1_0_gart_enable(struct amdgpu_device *adev)
diff --git a/drivers/gpu/drm/amd/pm/powerplay/amd_powerplay.c 
b/drivers/gpu/drm/amd/pm/powerplay/amd_powerplay.c
index 3656a77baea4..9953a77cb987 100644
--- a/drivers/gpu/drm/amd/pm/powerplay/amd_powerplay.c
+++ b/drivers/gpu/drm/amd/pm/powerplay/amd_powerplay.c
@@ -1167,7 +1167,12 @@ static int pp_set_powergating_by_smu(void *handle,
pp_dpm_powergate_vce(handle, gate);
break;
case AMD_IP_BLOCK_TYPE_GMC:
-   pp_dpm_powergate_mmhub(handle);
+   /*
+* For now, this is only used on PICASSO.
+* And only "gate" operation is supported.
+*/
+   if (gate)
+   pp_dpm_powergate_mmhub(handle);
break;
case AMD_IP_BLOCK_TYPE_GFX:
ret = pp_dpm_powergate_gfx(handle, gate);
-- 
2.29.0