drm/amd/display: Don't pass invalid fw_bss_data pointer into DMUB srv
authorNicholas Kazlauskas <nicholas.kazlauskas@amd.com>
Thu, 30 Apr 2020 16:24:05 +0000 (12:24 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Thu, 28 May 2020 18:00:48 +0000 (14:00 -0400)
[Why]
If bss_data_size is 0 then we shouldn't be passing down fw_bss_data into
the DMUB service since the region isn't really "valid."

[How]
Pass NULL instead if the size is 0.

Signed-off-by: Nicholas Kazlauskas <nicholas.kazlauskas@amd.com>
Reviewed-by: Zhan Liu <Zhan.Liu@amd.com>
Acked-by: Rodrigo Siqueira <Rodrigo.Siqueira@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c

index d53c60b..2b975a1 100644 (file)
@@ -1228,10 +1228,10 @@ static int dm_dmub_sw_init(struct amdgpu_device *adev)
                                        PSP_HEADER_BYTES - PSP_FOOTER_BYTES;
        region_params.bss_data_size = le32_to_cpu(hdr->bss_data_bytes);
        region_params.vbios_size = adev->bios_size;
-       region_params.fw_bss_data =
+       region_params.fw_bss_data = region_params.bss_data_size ?
                adev->dm.dmub_fw->data +
                le32_to_cpu(hdr->header.ucode_array_offset_bytes) +
-               le32_to_cpu(hdr->inst_const_bytes);
+               le32_to_cpu(hdr->inst_const_bytes) : NULL;
        region_params.fw_inst_const =
                adev->dm.dmub_fw->data +
                le32_to_cpu(hdr->header.ucode_array_offset_bytes) +