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
  */
 
        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
        iounmap(bios);
 
        if (!check_atom_bios(adev, size)) {
-               kfree(adev->bios);
+               amdgpu_bios_release(adev);
                return false;
        }
 
        pci_unmap_rom(adev->pdev, bios);
 
        if (!check_atom_bios(adev, size)) {
-               kfree(adev->bios);
+               amdgpu_bios_release(adev);
                return false;
        }
 
        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;
        }
 
 
        return true;
 free_bios:
-       kfree(adev->bios);
+       amdgpu_bios_release(adev);
+
        return false;
 }
 
        }
 
        if (!check_atom_bios(adev, size)) {
-               kfree(adev->bios);
+               amdgpu_bios_release(adev);
                return false;
        }
        adev->bios_size = size;
                                             GFP_KERNEL);
 
                        if (!check_atom_bios(adev, vhdr->ImageLength)) {
-                               kfree(adev->bios);
+                               amdgpu_bios_release(adev);
                                return false;
                        }
                        adev->bios_size = vhdr->ImageLength;