mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-03 22:57:21 -04:00
drm/amdgpu: Add wrapper for freeing vbios memory
Use bios_release wrapper to release memory allocated for vbios image and reset the variables. v2: Use the same wrapper for clean up in sw_fini (Alex Deucher) Signed-off-by: Lijo Lazar <lijo.lazar@amd.com> Reviewed-by: Alex Deucher <alexander.deucher@amd.com> Reviewed-by: Hawking Zhang <Hawking.Zhang@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
@@ -415,6 +415,7 @@ bool amdgpu_get_bios(struct amdgpu_device *adev);
|
||||
bool amdgpu_read_bios(struct amdgpu_device *adev);
|
||||
bool amdgpu_soc15_read_bios_from_rom(struct amdgpu_device *adev,
|
||||
u8 *bios, u32 length_bytes);
|
||||
void amdgpu_bios_release(struct amdgpu_device *adev);
|
||||
/*
|
||||
* Clocks
|
||||
*/
|
||||
|
||||
@@ -84,6 +84,13 @@ static bool check_atom_bios(struct amdgpu_device *adev, size_t size)
|
||||
return false;
|
||||
}
|
||||
|
||||
void amdgpu_bios_release(struct amdgpu_device *adev)
|
||||
{
|
||||
kfree(adev->bios);
|
||||
adev->bios = NULL;
|
||||
adev->bios_size = 0;
|
||||
}
|
||||
|
||||
/* 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
|
||||
* part of the system bios. On boot, the system bios puts a
|
||||
@@ -121,7 +128,7 @@ static bool amdgpu_read_bios_from_vram(struct amdgpu_device *adev)
|
||||
iounmap(bios);
|
||||
|
||||
if (!check_atom_bios(adev, size)) {
|
||||
kfree(adev->bios);
|
||||
amdgpu_bios_release(adev);
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -149,7 +156,7 @@ bool amdgpu_read_bios(struct amdgpu_device *adev)
|
||||
pci_unmap_rom(adev->pdev, bios);
|
||||
|
||||
if (!check_atom_bios(adev, size)) {
|
||||
kfree(adev->bios);
|
||||
amdgpu_bios_release(adev);
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -189,7 +196,7 @@ static bool amdgpu_read_bios_from_rom(struct amdgpu_device *adev)
|
||||
amdgpu_asic_read_bios_from_rom(adev, adev->bios, len);
|
||||
|
||||
if (!check_atom_bios(adev, len)) {
|
||||
kfree(adev->bios);
|
||||
amdgpu_bios_release(adev);
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -225,7 +232,8 @@ static bool amdgpu_read_platform_bios(struct amdgpu_device *adev)
|
||||
|
||||
return true;
|
||||
free_bios:
|
||||
kfree(adev->bios);
|
||||
amdgpu_bios_release(adev);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -327,7 +335,7 @@ static bool amdgpu_atrm_get_bios(struct amdgpu_device *adev)
|
||||
}
|
||||
|
||||
if (!check_atom_bios(adev, size)) {
|
||||
kfree(adev->bios);
|
||||
amdgpu_bios_release(adev);
|
||||
return false;
|
||||
}
|
||||
adev->bios_size = size;
|
||||
@@ -392,7 +400,7 @@ static bool amdgpu_acpi_vfct_bios(struct amdgpu_device *adev)
|
||||
GFP_KERNEL);
|
||||
|
||||
if (!check_atom_bios(adev, vhdr->ImageLength)) {
|
||||
kfree(adev->bios);
|
||||
amdgpu_bios_release(adev);
|
||||
return false;
|
||||
}
|
||||
adev->bios_size = vhdr->ImageLength;
|
||||
|
||||
@@ -4739,8 +4739,7 @@ void amdgpu_device_fini_sw(struct amdgpu_device *adev)
|
||||
if (amdgpu_emu_mode != 1)
|
||||
amdgpu_atombios_fini(adev);
|
||||
|
||||
kfree(adev->bios);
|
||||
adev->bios = NULL;
|
||||
amdgpu_bios_release(adev);
|
||||
|
||||
kfree(adev->fru_info);
|
||||
adev->fru_info = NULL;
|
||||
|
||||
Reference in New Issue
Block a user