drm/amdgpu: add nbio callback to query rom offset
authorHawking Zhang <Hawking.Zhang@amd.com>
Sat, 8 Jan 2022 09:18:37 +0000 (17:18 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Thu, 28 Apr 2022 21:48:32 +0000 (17:48 -0400)
Add nbio callback func used to query rom offset.
Used to query the rom offset for fetching the vbios.

Acked-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Hawking Zhang <Hawking.Zhang@amd.com>
Reviewed-by: Lijo Lazar <lijo.lazar@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/amdgpu_bios.c
drivers/gpu/drm/amd/amdgpu/amdgpu_nbio.h

index 0eddca7..e363f56 100644 (file)
@@ -471,6 +471,7 @@ bool amdgpu_soc15_read_bios_from_rom(struct amdgpu_device *adev,
 {
        u32 *dw_ptr;
        u32 i, length_dw;
+       u32 rom_offset;
        u32 rom_index_offset;
        u32 rom_data_offset;
 
@@ -494,8 +495,16 @@ bool amdgpu_soc15_read_bios_from_rom(struct amdgpu_device *adev,
        rom_data_offset =
                adev->smuio.funcs->get_rom_data_offset(adev);
 
-       /* set rom index to 0 */
-       WREG32(rom_index_offset, 0);
+       if (adev->nbio.funcs &&
+           adev->nbio.funcs->get_rom_offset) {
+               rom_offset = adev->nbio.funcs->get_rom_offset(adev);
+               rom_offset = rom_offset << 17;
+       } else {
+               rom_offset = 0;
+       }
+
+       /* set rom index to rom_offset */
+       WREG32(rom_index_offset, rom_offset);
        /* read out the rom data */
        for (i = 0; i < length_dw; i++)
                dw_ptr[i] = RREG32(rom_data_offset);
index 0343908..ccd9fe9 100644 (file)
@@ -93,6 +93,7 @@ struct amdgpu_nbio_funcs {
        void (*apply_lc_spc_mode_wa)(struct amdgpu_device *adev);
        void (*apply_l1_link_width_reconfig_wa)(struct amdgpu_device *adev);
        void (*clear_doorbell_interrupt)(struct amdgpu_device *adev);
+       u32 (*get_rom_offset)(struct amdgpu_device *adev);
 };
 
 struct amdgpu_nbio {