<!DOCTYPE html><html><head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  </head>
  <body>
    Am 17.10.24 um 14:55 schrieb Khatri, Sunil:<br>
    <blockquote type="cite" cite="mid:58fef7b7-79cc-48ae-c632-199c44ed1f0e@amd.com">
      
      <p>On 10/17/2024 5:50 PM, Christian König wrote: </p>
      <blockquote type="cite" cite="mid:1f534179-6ffe-446c-ba20-6b5ab4da8db3@gmail.com">Am
        17.10.24 um 12:06 schrieb Sunil Khatri: <br>
        <blockquote type="cite">Validate the function pointer for
          get_clockgating_state <br>
          before making a function call. <br>
        </blockquote>
        <br>
        Oh, I'm not sure if that is necessary or not. The NBIO, HDP and
        SMUIO functions are not IP specific. <br>
        <br>
      </blockquote>
      For many socs this check is added and only missing in the
      files/functions mentioned below. SOC where these functions are
      called are nv_common, soc15_common, soc21_common, soc24_common<br>
      eg: SOC15 already have these changes and its safe to add for other
      socs that i mentioned above.<br>
    </blockquote>
    <br>
    You mean that the checks are in almost all places, but here they are
    missing? Mhm, that's strange.<br>
    <br>
    Let me investigate that further,<br>
    Christian.<br>
    <br>
    <blockquote type="cite" cite="mid:58fef7b7-79cc-48ae-c632-199c44ed1f0e@amd.com">
      <div style="color: #cccccc;background-color: #1f1f1f;font-family: Consolas, 'Courier New', monospace;font-weight: normal;font-size: 14px;line-height: 19px;white-space: pre;"><div><span style="color: #dcdcaa;">soc15_common_get_clockgating_state

Regards
Sunil 
</span></div></div>
      <blockquote type="cite" cite="mid:1f534179-6ffe-446c-ba20-6b5ab4da8db3@gmail.com">Christian.
        <br>
        <br>
        <blockquote type="cite"> <br>
          Signed-off-by: Sunil Khatri <a class="moz-txt-link-rfc2396E" href="mailto:sunil.khatri@amd.com" moz-do-not-send="true"><sunil.khatri@amd.com></a>
          <br>
          --- <br>
            drivers/gpu/drm/amd/amdgpu/nv.c    | 9 ++++++--- <br>
            drivers/gpu/drm/amd/amdgpu/soc21.c | 6 ++++-- <br>
            drivers/gpu/drm/amd/amdgpu/soc24.c | 6 ++++-- <br>
            3 files changed, 14 insertions(+), 7 deletions(-) <br>
          <br>
          diff --git a/drivers/gpu/drm/amd/amdgpu/nv.c
          b/drivers/gpu/drm/amd/amdgpu/nv.c <br>
          index 6b72169be8f8..40c720b32c59 100644 <br>
          --- a/drivers/gpu/drm/amd/amdgpu/nv.c <br>
          +++ b/drivers/gpu/drm/amd/amdgpu/nv.c <br>
          @@ -1084,11 +1084,14 @@ static void
          nv_common_get_clockgating_state(void *handle, u64 *flags) <br>
                if (amdgpu_sriov_vf(adev)) <br>
                    *flags = 0; <br>
            -    adev->nbio.funcs->get_clockgating_state(adev,
          flags); <br>
          +    if (adev->nbio.funcs &&
          adev->nbio.funcs->get_clockgating_state) <br>
          +        adev->nbio.funcs->get_clockgating_state(adev,
          flags); <br>
            -    adev->hdp.funcs->get_clock_gating_state(adev,
          flags); <br>
          +    if (adev->hdp.funcs &&
          adev->hdp.funcs->get_clock_gating_state) <br>
          +        adev->hdp.funcs->get_clock_gating_state(adev,
          flags); <br>
            -    adev->smuio.funcs->get_clock_gating_state(adev,
          flags); <br>
          +    if (adev->smuio.funcs &&
          adev->smuio.funcs->get_clock_gating_state) <br>
          +        adev->smuio.funcs->get_clock_gating_state(adev,
          flags); <br>
            } <br>
              static const struct amd_ip_funcs nv_common_ip_funcs = { <br>
          diff --git a/drivers/gpu/drm/amd/amdgpu/soc21.c
          b/drivers/gpu/drm/amd/amdgpu/soc21.c <br>
          index 1c07ebdc0d1f..196286be35b4 100644 <br>
          --- a/drivers/gpu/drm/amd/amdgpu/soc21.c <br>
          +++ b/drivers/gpu/drm/amd/amdgpu/soc21.c <br>
          @@ -975,9 +975,11 @@ static void
          soc21_common_get_clockgating_state(void *handle, u64 *flags) <br>
            { <br>
                struct amdgpu_device *adev = (struct amdgpu_device
          *)handle; <br>
            -    adev->nbio.funcs->get_clockgating_state(adev,
          flags); <br>
          +    if (adev->nbio.funcs &&
          adev->nbio.funcs->get_clockgating_state) <br>
          +        adev->nbio.funcs->get_clockgating_state(adev,
          flags); <br>
            -    adev->hdp.funcs->get_clock_gating_state(adev,
          flags); <br>
          +    if (adev->hdp.funcs &&
          adev->hdp.funcs->get_clock_gating_state) <br>
          +        adev->hdp.funcs->get_clock_gating_state(adev,
          flags); <br>
            } <br>
              static const struct amd_ip_funcs soc21_common_ip_funcs = {
          <br>
          diff --git a/drivers/gpu/drm/amd/amdgpu/soc24.c
          b/drivers/gpu/drm/amd/amdgpu/soc24.c <br>
          index 3af10ef4b793..f4278a0fa8f7 100644 <br>
          --- a/drivers/gpu/drm/amd/amdgpu/soc24.c <br>
          +++ b/drivers/gpu/drm/amd/amdgpu/soc24.c <br>
          @@ -564,9 +564,11 @@ static void
          soc24_common_get_clockgating_state(void *handle, u64 *flags) <br>
            { <br>
                struct amdgpu_device *adev = (struct amdgpu_device
          *)handle; <br>
            -    adev->nbio.funcs->get_clockgating_state(adev,
          flags); <br>
          +    if (adev->nbio.funcs &&
          adev->nbio.funcs->get_clockgating_state) <br>
          +        adev->nbio.funcs->get_clockgating_state(adev,
          flags); <br>
            -    adev->hdp.funcs->get_clock_gating_state(adev,
          flags); <br>
          +    if (adev->hdp.funcs &&
          adev->hdp.funcs->get_clock_gating_state) <br>
          +        adev->hdp.funcs->get_clock_gating_state(adev,
          flags); <br>
                  return; <br>
            } <br>
        </blockquote>
        <br>
      </blockquote>
    </blockquote>
    <br>
  </body>
</html>