mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-02 12:56:45 +07:00
amdgpu: detect if we are using atomfirmware or atombios for vbios (v2)
Supposedly atomfirmware rom header is 3.3 atombios is 1.1. v2: rebased on newer kernel Acked-by: Christian König <christian.koenig@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
1fadf42ed5
commit
0cdd500560
@ -1308,6 +1308,7 @@ struct amdgpu_device {
|
|||||||
bool have_disp_power_ref;
|
bool have_disp_power_ref;
|
||||||
|
|
||||||
/* BIOS */
|
/* BIOS */
|
||||||
|
bool is_atom_fw;
|
||||||
uint8_t *bios;
|
uint8_t *bios;
|
||||||
uint32_t bios_size;
|
uint32_t bios_size;
|
||||||
struct amdgpu_bo *stollen_vga_memory;
|
struct amdgpu_bo *stollen_vga_memory;
|
||||||
|
@ -86,6 +86,18 @@ static bool check_atom_bios(uint8_t *bios, size_t size)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool is_atom_fw(uint8_t *bios)
|
||||||
|
{
|
||||||
|
uint16_t bios_header_start = bios[0x48] | (bios[0x49] << 8);
|
||||||
|
uint8_t frev = bios[bios_header_start + 2];
|
||||||
|
uint8_t crev = bios[bios_header_start + 3];
|
||||||
|
|
||||||
|
if ((frev < 3) ||
|
||||||
|
((frev == 3) && (crev < 3)))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
/* If you boot an IGP board with a discrete card as the primary,
|
/* If you boot an IGP board with a discrete card as the primary,
|
||||||
* the IGP rom is not accessible via the rom bar as the IGP rom is
|
* the IGP rom is not accessible via the rom bar as the IGP rom is
|
||||||
@ -419,26 +431,30 @@ static inline bool amdgpu_acpi_vfct_bios(struct amdgpu_device *adev)
|
|||||||
bool amdgpu_get_bios(struct amdgpu_device *adev)
|
bool amdgpu_get_bios(struct amdgpu_device *adev)
|
||||||
{
|
{
|
||||||
if (amdgpu_atrm_get_bios(adev))
|
if (amdgpu_atrm_get_bios(adev))
|
||||||
return true;
|
goto success;
|
||||||
|
|
||||||
if (amdgpu_acpi_vfct_bios(adev))
|
if (amdgpu_acpi_vfct_bios(adev))
|
||||||
return true;
|
goto success;
|
||||||
|
|
||||||
if (igp_read_bios_from_vram(adev))
|
if (igp_read_bios_from_vram(adev))
|
||||||
return true;
|
goto success;
|
||||||
|
|
||||||
if (amdgpu_read_bios(adev))
|
if (amdgpu_read_bios(adev))
|
||||||
return true;
|
goto success;
|
||||||
|
|
||||||
if (amdgpu_read_bios_from_rom(adev))
|
if (amdgpu_read_bios_from_rom(adev))
|
||||||
return true;
|
goto success;
|
||||||
|
|
||||||
if (amdgpu_read_disabled_bios(adev))
|
if (amdgpu_read_disabled_bios(adev))
|
||||||
return true;
|
goto success;
|
||||||
|
|
||||||
if (amdgpu_read_platform_bios(adev))
|
if (amdgpu_read_platform_bios(adev))
|
||||||
return true;
|
goto success;
|
||||||
|
|
||||||
DRM_ERROR("Unable to locate a BIOS ROM\n");
|
DRM_ERROR("Unable to locate a BIOS ROM\n");
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
success:
|
||||||
|
adev->is_atom_fw = is_atom_fw(adev->bios);
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user