On 9/17/2024 1:32 AM, Alex Deucher wrote: > We need some different logic for dGPUs and the APU path > can be simplified because there are some methods which > are never used on APUs. This also fixes a regression > on some older APUs causing the the driver to fetch > the unpatched ROM image rather than the patched image. > > Fixes: 9c081c11c621 ("drm/amdgpu: Reorder to read EFI exported ROM first") > Signed-off-by: Alex Deucher <alexander.deucher@xxxxxxx> > --- > drivers/gpu/drm/amd/amdgpu/amdgpu_bios.c | 47 +++++++++++++++++++++++- > 1 file changed, 45 insertions(+), 2 deletions(-) > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_bios.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_bios.c > index 42e64bce661e..e8f62d718167 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_bios.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_bios.c > @@ -414,7 +414,36 @@ static inline bool amdgpu_acpi_vfct_bios(struct amdgpu_device *adev) > } > #endif > Now that they are separated couple of additional changes - > -bool amdgpu_get_bios(struct amdgpu_device *adev) > +static bool amdgpu_get_bios_apu(struct amdgpu_device *adev) > +{ > + if (amdgpu_acpi_vfct_bios(adev)) { > + dev_info(adev->dev, "Fetched VBIOS from VFCT\n"); > + goto success; > + } > + > + if (igp_read_bios_from_vram(adev)) { > + dev_info(adev->dev, "Fetched VBIOS from VRAM BAR\n"); > + goto success; > + } > + This may no longer be needed for dGPU path. > + if (amdgpu_read_bios(adev)) { > + dev_info(adev->dev, "Fetched VBIOS from ROM BAR\n"); > + goto success; > + } > + > + if (amdgpu_read_platform_bios(adev)) { > + dev_info(adev->dev, "Fetched VBIOS from platform\n"); > + goto success; > + } > + > + dev_err(adev->dev, "Unable to locate a BIOS ROM\n"); > + return false; > + > +success: > + return true; > +} > + > +static bool amdgpu_get_bios_dgpu(struct amdgpu_device *adev) > { > if (amdgpu_atrm_get_bios(adev)) { Better remove this check from this - /* ATRM is for the discrete card only */ if (adev->flags & AMD_IS_APU) return false; Thanks, Lijo > dev_info(adev->dev, "Fetched VBIOS from ATRM\n"); > @@ -455,10 +484,24 @@ bool amdgpu_get_bios(struct amdgpu_device *adev) > return false; > > success: > - adev->is_atom_fw = adev->asic_type >= CHIP_VEGA10; > return true; > } > > +bool amdgpu_get_bios(struct amdgpu_device *adev) > +{ > + bool found; > + > + if (adev->flags & AMD_IS_APU) > + found = amdgpu_get_bios_apu(adev); > + else > + found = amdgpu_get_bios_dgpu(adev); > + > + if (found) > + adev->is_atom_fw = adev->asic_type >= CHIP_VEGA10; > + > + return found; > +} > + > /* helper function for soc15 and onwards to read bios from rom */ > bool amdgpu_soc15_read_bios_from_rom(struct amdgpu_device *adev, > u8 *bios, u32 length_bytes)