On Tue, Oct 3, 2023 at 12:22 PM Sundararaju, Sathishkumar <sasundar@xxxxxxx> wrote: > > Hi , > > Kind request to help review the change. Thank you. I acked this change back when you sent it out, but if it didn't come through for some reason: Acked-by: Alex Deucher <alexander.deucher@xxxxxxx> > > Regards, > > Sathish > > On 9/21/2023 8:17 PM, Alex Deucher wrote: > > On Thu, Sep 21, 2023 at 9:07 AM Sathishkumar S > > <sathishkumar.sundararaju@xxxxxxx> wrote: > >> fix wrong ip count INFO on spatial partitions. update the query > >> to return the instance count corresponding to the partition id. > >> > >> v2: > >> initialize variables only when required to be (Christian) > >> move variable declarations to the beginning of function (Christian) > >> > >> Signed-off-by: Sathishkumar S <sathishkumar.sundararaju@xxxxxxx> > > Acked-by: Alex Deucher <alexander.deucher@xxxxxxx> > > > >> --- > >> drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c | 44 ++++++++++++++++++++----- > >> 1 file changed, 36 insertions(+), 8 deletions(-) > >> > >> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c > >> index 081bd28e2443..d4ccbe7c78d6 100644 > >> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c > >> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c > >> @@ -595,11 +595,16 @@ int amdgpu_info_ioctl(struct drm_device *dev, void *data, struct drm_file *filp) > >> struct drm_amdgpu_info *info = data; > >> struct amdgpu_mode_info *minfo = &adev->mode_info; > >> void __user *out = (void __user *)(uintptr_t)info->return_pointer; > >> + struct amdgpu_fpriv *fpriv; > >> + struct amdgpu_ip_block *ip_block; > >> + enum amd_ip_block_type type; > >> + struct amdgpu_xcp *xcp; > >> + uint32_t count, inst_mask; > >> uint32_t size = info->return_size; > >> struct drm_crtc *crtc; > >> uint32_t ui32 = 0; > >> uint64_t ui64 = 0; > >> - int i, found; > >> + int i, found, ret; > >> int ui32_size = sizeof(ui32); > >> > >> if (!info->return_size || !info->return_pointer) > >> @@ -627,7 +632,6 @@ int amdgpu_info_ioctl(struct drm_device *dev, void *data, struct drm_file *filp) > >> return copy_to_user(out, &ui32, min(size, 4u)) ? -EFAULT : 0; > >> case AMDGPU_INFO_HW_IP_INFO: { > >> struct drm_amdgpu_info_hw_ip ip = {}; > >> - int ret; > >> > >> ret = amdgpu_hw_ip_info(adev, info, &ip); > >> if (ret) > >> @@ -637,15 +641,41 @@ int amdgpu_info_ioctl(struct drm_device *dev, void *data, struct drm_file *filp) > >> return ret ? -EFAULT : 0; > >> } > >> case AMDGPU_INFO_HW_IP_COUNT: { > >> - enum amd_ip_block_type type; > >> - struct amdgpu_ip_block *ip_block = NULL; > >> - uint32_t count = 0; > >> - > >> + fpriv = (struct amdgpu_fpriv *) filp->driver_priv; > >> type = amdgpu_ip_get_block_type(adev, info->query_hw_ip.type); > >> ip_block = amdgpu_device_ip_get_ip_block(adev, type); > >> + > >> if (!ip_block || !ip_block->status.valid) > >> return -EINVAL; > >> > >> + if (adev->xcp_mgr && adev->xcp_mgr->num_xcps > 0 && > >> + fpriv->xcp_id >= 0 && fpriv->xcp_id < adev->xcp_mgr->num_xcps) { > >> + xcp = &adev->xcp_mgr->xcp[fpriv->xcp_id]; > >> + switch (type) { > >> + case AMD_IP_BLOCK_TYPE_GFX: > >> + ret = amdgpu_xcp_get_inst_details(xcp, AMDGPU_XCP_GFX, &inst_mask); > >> + count = hweight32(inst_mask); > >> + break; > >> + case AMD_IP_BLOCK_TYPE_SDMA: > >> + ret = amdgpu_xcp_get_inst_details(xcp, AMDGPU_XCP_SDMA, &inst_mask); > >> + count = hweight32(inst_mask); > >> + break; > >> + case AMD_IP_BLOCK_TYPE_JPEG: > >> + ret = amdgpu_xcp_get_inst_details(xcp, AMDGPU_XCP_VCN, &inst_mask); > >> + count = hweight32(inst_mask) * adev->jpeg.num_jpeg_rings; > >> + break; > >> + case AMD_IP_BLOCK_TYPE_VCN: > >> + ret = amdgpu_xcp_get_inst_details(xcp, AMDGPU_XCP_VCN, &inst_mask); > >> + count = hweight32(inst_mask); > >> + break; > >> + default: > >> + return -EINVAL; > >> + } > >> + if (ret) > >> + return ret; > >> + return copy_to_user(out, &count, min(size, 4u)) ? -EFAULT : 0; > >> + } > >> + > >> switch (type) { > >> case AMD_IP_BLOCK_TYPE_GFX: > >> case AMD_IP_BLOCK_TYPE_VCE: > >> @@ -678,7 +708,6 @@ int amdgpu_info_ioctl(struct drm_device *dev, void *data, struct drm_file *filp) > >> return copy_to_user(out, &ui64, min(size, 8u)) ? -EFAULT : 0; > >> case AMDGPU_INFO_FW_VERSION: { > >> struct drm_amdgpu_info_firmware fw_info; > >> - int ret; > >> > >> /* We only support one instance of each IP block right now. */ > >> if (info->query_fw.ip_instance != 0) > >> @@ -823,7 +852,6 @@ int amdgpu_info_ioctl(struct drm_device *dev, void *data, struct drm_file *filp) > >> struct drm_amdgpu_info_device *dev_info; > >> uint64_t vm_size; > >> uint32_t pcie_gen_mask; > >> - int ret; > >> > >> dev_info = kzalloc(sizeof(*dev_info), GFP_KERNEL); > >> if (!dev_info) > >> -- > >> 2.25.1 > >>