Commit fb1d6835 authored by Hawking Zhang's avatar Hawking Zhang Committed by Alex Deucher

drm/amdgpu: add nbio callback to query rom offset

Add nbio callback func used to query rom offset.
Used to query the rom offset for fetching the vbios.
Acked-by: default avatarChristian König <christian.koenig@amd.com>
Signed-off-by: default avatarHawking Zhang <Hawking.Zhang@amd.com>
Reviewed-by: default avatarLijo Lazar <lijo.lazar@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent f33ac92f
...@@ -471,6 +471,7 @@ bool amdgpu_soc15_read_bios_from_rom(struct amdgpu_device *adev, ...@@ -471,6 +471,7 @@ bool amdgpu_soc15_read_bios_from_rom(struct amdgpu_device *adev,
{ {
u32 *dw_ptr; u32 *dw_ptr;
u32 i, length_dw; u32 i, length_dw;
u32 rom_offset;
u32 rom_index_offset; u32 rom_index_offset;
u32 rom_data_offset; u32 rom_data_offset;
...@@ -494,8 +495,16 @@ bool amdgpu_soc15_read_bios_from_rom(struct amdgpu_device *adev, ...@@ -494,8 +495,16 @@ bool amdgpu_soc15_read_bios_from_rom(struct amdgpu_device *adev,
rom_data_offset = rom_data_offset =
adev->smuio.funcs->get_rom_data_offset(adev); adev->smuio.funcs->get_rom_data_offset(adev);
/* set rom index to 0 */ if (adev->nbio.funcs &&
WREG32(rom_index_offset, 0); 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 */ /* read out the rom data */
for (i = 0; i < length_dw; i++) for (i = 0; i < length_dw; i++)
dw_ptr[i] = RREG32(rom_data_offset); dw_ptr[i] = RREG32(rom_data_offset);
......
...@@ -93,6 +93,7 @@ struct amdgpu_nbio_funcs { ...@@ -93,6 +93,7 @@ struct amdgpu_nbio_funcs {
void (*apply_lc_spc_mode_wa)(struct amdgpu_device *adev); void (*apply_lc_spc_mode_wa)(struct amdgpu_device *adev);
void (*apply_l1_link_width_reconfig_wa)(struct amdgpu_device *adev); void (*apply_l1_link_width_reconfig_wa)(struct amdgpu_device *adev);
void (*clear_doorbell_interrupt)(struct amdgpu_device *adev); void (*clear_doorbell_interrupt)(struct amdgpu_device *adev);
u32 (*get_rom_offset)(struct amdgpu_device *adev);
}; };
struct amdgpu_nbio { struct amdgpu_nbio {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment