static bool amdgpu_read_disabled_bios(struct amdgpu_device *adev) { if (adev->flags & AMDGPU_IS_APU) return igp_read_bios_from_vram(adev); else return amdgpu_asic_read_disabled_bios(adev); }
bool amdgpu_get_bios(struct amdgpu_device *adev) { bool r; uint16_t tmp, bios_header_start; r = amdgpu_atrm_get_bios(adev); if (r == false) r = amdgpu_acpi_vfct_bios(adev); if (r == false) r = igp_read_bios_from_vram(adev); if (r == false) r = amdgpu_read_bios(adev); if (r == false) { r = amdgpu_read_bios_from_rom(adev); } if (r == false) { r = amdgpu_read_disabled_bios(adev); } if (r == false) { r = amdgpu_read_platform_bios(adev); } if (r == false || adev->bios == NULL) { DRM_ERROR("Unable to locate a BIOS ROM\n"); adev->bios = NULL; return false; } if (!AMD_IS_VALID_VBIOS(adev->bios)) { printk("BIOS signature incorrect %x %x\n", adev->bios[0], adev->bios[1]); goto free_bios; } tmp = RBIOS16(0x18); if (RBIOS8(tmp + 0x14) != 0x0) { DRM_INFO("Not an x86 BIOS ROM, not using.\n"); goto free_bios; } bios_header_start = RBIOS16(0x48); if (!bios_header_start) { goto free_bios; } tmp = bios_header_start + 4; if (!memcmp(adev->bios + tmp, "ATOM", 4) || !memcmp(adev->bios + tmp, "MOTA", 4)) { adev->is_atom_bios = true; } else { adev->is_atom_bios = false; } DRM_DEBUG("%sBIOS detected\n", adev->is_atom_bios ? "ATOM" : "COM"); return true; free_bios: kfree(adev->bios); adev->bios = NULL; return false; }
bool radeon_get_bios(struct radeon_device *rdev) { bool r; uint16_t tmp; r = radeon_atrm_get_bios(rdev); if (r == false) r = radeon_acpi_vfct_bios(rdev); if (r == false) r = igp_read_bios_from_vram(rdev); if (r == false) r = radeon_read_bios(rdev); if (r == false) { r = radeon_read_disabled_bios(rdev); } if (r == false) { r = radeon_read_platform_bios(rdev); } if (r == false || rdev->bios == NULL) { DRM_ERROR("Unable to locate a BIOS ROM\n"); rdev->bios = NULL; return false; } if (rdev->bios[0] != 0x55 || rdev->bios[1] != 0xaa) { printk("BIOS signature incorrect %x %x\n", rdev->bios[0], rdev->bios[1]); goto free_bios; } tmp = RBIOS16(0x18); if (RBIOS8(tmp + 0x14) != 0x0) { DRM_INFO("Not an x86 BIOS ROM, not using.\n"); goto free_bios; } rdev->bios_header_start = RBIOS16(0x48); if (!rdev->bios_header_start) { goto free_bios; } tmp = rdev->bios_header_start + 4; if (!memcmp(rdev->bios + tmp, "ATOM", 4) || !memcmp(rdev->bios + tmp, "MOTA", 4)) { rdev->is_atom_bios = true; } else { rdev->is_atom_bios = false; } DRM_DEBUG("%sBIOS detected\n", rdev->is_atom_bios ? "ATOM" : "COM"); return true; free_bios: kfree(rdev->bios); rdev->bios = NULL; return false; }
static bool radeon_read_disabled_bios(struct radeon_device *rdev) { if (rdev->flags & RADEON_IS_IGP) return igp_read_bios_from_vram(rdev); else if (rdev->family >= CHIP_RV770) return r700_read_disabled_bios(rdev); else if (rdev->family >= CHIP_R600) return r600_read_disabled_bios(rdev); else if (rdev->family >= CHIP_RS600) return avivo_read_disabled_bios(rdev); else return legacy_read_disabled_bios(rdev); }
bool radeon_get_bios(struct radeon_device *rdev) { bool r; uint16_t tmp; if (rdev->flags & RADEON_IS_IGP) { r = igp_read_bios_from_vram(rdev); if (r == false) r = radeon_read_bios(rdev); } else r = radeon_read_bios(rdev); if (r == false) { r = radeon_read_disabled_bios(rdev); } if (r == false || rdev->bios == NULL) { DRM_ERROR("Unable to locate a BIOS ROM\n"); rdev->bios = NULL; return false; } if (rdev->bios[0] != 0x55 || rdev->bios[1] != 0xaa) { goto free_bios; } rdev->bios_header_start = RBIOS16(0x48); if (!rdev->bios_header_start) { goto free_bios; } tmp = rdev->bios_header_start + 4; if (!memcmp(rdev->bios + tmp, "ATOM", 4) || !memcmp(rdev->bios + tmp, "MOTA", 4)) { rdev->is_atom_bios = true; } else { rdev->is_atom_bios = false; } DRM_DEBUG("%sBIOS detected\n", rdev->is_atom_bios ? "ATOM" : "COM"); return true; free_bios: kfree(rdev->bios); rdev->bios = NULL; return false; }