Re: [PATCH v2] drm/amdgpu: Indicate CU havest info to CP

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, Jun 6, 2024 at 8:22 AM Harish Kasiviswanathan
<Harish.Kasiviswanathan@xxxxxxx> wrote:
>
> To achieve full occupancy CP hardware needs to know if CUs in SE are
> symmetrically or asymmetrically harvested
>
> v2: Reset is_symmetric_cus for each loop
>
> Signed-off-by: Harish Kasiviswanathan <Harish.Kasiviswanathan@xxxxxxx>

Acked-by: Alex Deucher <alexander.deucher@xxxxxxx>

> ---
>  drivers/gpu/drm/amd/amdgpu/gfx_v9_4_3.c | 15 +++++++++++++--
>  1 file changed, 13 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v9_4_3.c b/drivers/gpu/drm/amd/amdgpu/gfx_v9_4_3.c
> index aecc2bcea145..d50dd6f4472a 100644
> --- a/drivers/gpu/drm/amd/amdgpu/gfx_v9_4_3.c
> +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v9_4_3.c
> @@ -4203,9 +4203,10 @@ static u32 gfx_v9_4_3_get_cu_active_bitmap(struct amdgpu_device *adev, int xcc_i
>  static int gfx_v9_4_3_get_cu_info(struct amdgpu_device *adev,
>                                  struct amdgpu_cu_info *cu_info)
>  {
> -       int i, j, k, counter, xcc_id, active_cu_number = 0;
> -       u32 mask, bitmap, ao_bitmap, ao_cu_mask = 0;
> +       int i, j, k, prev_counter, counter, xcc_id, active_cu_number = 0;
> +       u32 mask, bitmap, ao_bitmap, ao_cu_mask = 0, tmp;
>         unsigned disable_masks[4 * 4];
> +       bool is_symmetric_cus;
>
>         if (!adev || !cu_info)
>                 return -EINVAL;
> @@ -4223,6 +4224,7 @@ static int gfx_v9_4_3_get_cu_info(struct amdgpu_device *adev,
>
>         mutex_lock(&adev->grbm_idx_mutex);
>         for (xcc_id = 0; xcc_id < NUM_XCC(adev->gfx.xcc_mask); xcc_id++) {
> +               is_symmetric_cus = true;
>                 for (i = 0; i < adev->gfx.config.max_shader_engines; i++) {
>                         for (j = 0; j < adev->gfx.config.max_sh_per_se; j++) {
>                                 mask = 1;
> @@ -4250,6 +4252,15 @@ static int gfx_v9_4_3_get_cu_info(struct amdgpu_device *adev,
>                                         ao_cu_mask |= (ao_bitmap << (i * 16 + j * 8));
>                                 cu_info->ao_cu_bitmap[i][j] = ao_bitmap;
>                         }
> +                       if (i && is_symmetric_cus && prev_counter != counter)
> +                               is_symmetric_cus = false;
> +                       prev_counter = counter;
> +               }
> +               if (is_symmetric_cus) {
> +                       tmp = RREG32_SOC15(GC, GET_INST(GC, xcc_id), regCP_CPC_DEBUG);
> +                       tmp = REG_SET_FIELD(tmp, CP_CPC_DEBUG, CPC_HARVESTING_RELAUNCH_DISABLE, 1);
> +                       tmp = REG_SET_FIELD(tmp, CP_CPC_DEBUG, CPC_HARVESTING_DISPATCH_DISABLE, 1);
> +                       WREG32_SOC15(GC, GET_INST(GC, xcc_id), regCP_CPC_DEBUG, tmp);
>                 }
>                 gfx_v9_4_3_xcc_select_se_sh(adev, 0xffffffff, 0xffffffff, 0xffffffff,
>                                             xcc_id);
> --
> 2.34.1
>




[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux