[PATCH v2] drm/amdgpu: fix ip count query for xcp partitions
Sundararaju, Sathishkumar
sasundar at amd.com
Tue Oct 3 16:43:50 UTC 2023
Hi Alex,
My apology, I was under the impression that RB is a must. I understand
now that ACK is good, checked with Leo after your response. Thank you.
Regards,
Sathish
On 10/3/2023 10:01 PM, Alex Deucher wrote:
> On Tue, Oct 3, 2023 at 12:22 PM Sundararaju, Sathishkumar
> <sasundar at amd.com> 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 at amd.com>
>
>> 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 at amd.com> 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 at amd.com>
>>> Acked-by: Alex Deucher<alexander.deucher at amd.com>
>>>
>>>> ---
>>>> 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
>>>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/amd-gfx/attachments/20231003/c00a6c3e/attachment-0001.htm>
More information about the amd-gfx
mailing list