On 2018-09-11 11:36 AM, Christian König wrote:
Am 11.09.2018 um 17:29 schrieb James Zhu:



On 2018-09-11 11:17 AM, Christian König wrote:
Am 11.09.2018 um 17:06 schrieb James Zhu:



On 2018-09-11 10:44 AM, Alex Deucher wrote:
On Mon, Sep 10, 2018 at 4:34 PM James Zhu<[email protected]>  wrote:
Signed-off-by: James Zhu<[email protected]>

When VCN PG state is unchanged, it is unnecessary to reset
power gate state again.
Don't you need to initialize and store the PG state somewhere?  You
are just using a local variable here.

Alex

Hi Alex,

I used */static/* for this local state variable(*cur_state*) with initialization state AMD_PG_STATE_GATE.

That won't work correctly. A "static" variable is global, but the power state is per device.

Regards,
Christian.

This "static" variable under local scope is mainly for VCN used only. It only tracks VCN's PG state.
(currently VCN only have one hardware instance)

Still an absolute no-go for kernel coding. VCN will soon be used for dGPUs as well.

Please fix and reiterate,
Christian.
I see, then I will put this current state track into struct amdgpu_vcn.

By the way, under multiple dPGU situation, I though per dPGU will create it's own driver instance.
this static variable won't be shared cross driver instance. Am I right?

Thanks!
James Zhu

Best Regards!
James Zhu
this variable's scope is only inside this function, but it's initialization is done
once at compile time and it's lifetime will last until the driver exit.

Since it is only used inside this function, I didn't put it into struct amdgpu_vcn.

Best Regards!
James Zhu
---
  drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c | 13 +++++++++++--
  1 file changed, 11 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c 
b/drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c
index 2664bb2..86d98d2 100644
--- a/drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c
@@ -1633,12 +1633,21 @@ static int vcn_v1_0_set_powergating_state(void *handle,
          * revisit this when there is a cleaner line between
          * the smc and the hw blocks
          */
+       int ret;
+       static enum amd_powergating_state cur_state = AMD_PG_STATE_GATE;
         struct amdgpu_device *adev = (struct amdgpu_device *)handle;

+       if (state == cur_state)
+               return 0;
+
         if (state == AMD_PG_STATE_GATE)
-               return vcn_v1_0_stop(adev);
+               ret = vcn_v1_0_stop(adev);
         else
-               return vcn_v1_0_start(adev);
+               ret = vcn_v1_0_start(adev);
+
+       if (!ret)
+               cur_state = state;
+       return ret;
  }

  static const struct amd_ip_funcs vcn_v1_0_ip_funcs = {
--
2.7.4

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



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




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


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

Reply via email to