The adev->ip_blocks array is not indexed by AMD_IP_BLOCK_TYPE_xxx,
instead we should call amdgpu_device_ip_get_ip_block() to get the
corresponding IP block oject.

Signed-off-by: Jiang Liu <[email protected]>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c
index 0b1e280ee228..25c06c6c8a2a 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c
@@ -3830,10 +3830,12 @@ static ssize_t psp_usbc_pd_fw_sysfs_read(struct device 
*dev,
 {
        struct drm_device *ddev = dev_get_drvdata(dev);
        struct amdgpu_device *adev = drm_to_adev(ddev);
+       struct amdgpu_ip_block *ip_block;
        uint32_t fw_ver;
        int ret;
 
-       if (!adev->ip_blocks[AMD_IP_BLOCK_TYPE_PSP].status.late_initialized) {
+       ip_block = amdgpu_device_ip_get_ip_block(adev, AMD_IP_BLOCK_TYPE_PSP);
+       if (ip_block == NULL || !ip_block->status.late_initialized) {
                dev_info(adev->dev, "PSP block is not ready yet\n.");
                return -EBUSY;
        }
@@ -3862,8 +3864,10 @@ static ssize_t psp_usbc_pd_fw_sysfs_write(struct device 
*dev,
        struct amdgpu_bo *fw_buf_bo = NULL;
        uint64_t fw_pri_mc_addr;
        void *fw_pri_cpu_addr;
+       struct amdgpu_ip_block *ip_block;
 
-       if (!adev->ip_blocks[AMD_IP_BLOCK_TYPE_PSP].status.late_initialized) {
+       ip_block = amdgpu_device_ip_get_ip_block(adev, AMD_IP_BLOCK_TYPE_PSP);
+       if (ip_block == NULL || !ip_block->status.late_initialized) {
                dev_err(adev->dev, "PSP block is not ready yet.");
                return -EBUSY;
        }
-- 
2.43.5

Reply via email to