diff options
Diffstat (limited to 'drivers/gpu/drm/radeon/radeon_bios.c')
| -rw-r--r-- | drivers/gpu/drm/radeon/radeon_bios.c | 26 | 
1 files changed, 26 insertions, 0 deletions
diff --git a/drivers/gpu/drm/radeon/radeon_bios.c b/drivers/gpu/drm/radeon/radeon_bios.c index b8015913d38..fa3c56fba29 100644 --- a/drivers/gpu/drm/radeon/radeon_bios.c +++ b/drivers/gpu/drm/radeon/radeon_bios.c @@ -99,6 +99,29 @@ static bool radeon_read_bios(struct radeon_device *rdev)  	return true;  } +static bool radeon_read_platform_bios(struct radeon_device *rdev) +{ +	uint8_t __iomem *bios; +	size_t size; + +	rdev->bios = NULL; + +	bios = pci_platform_rom(rdev->pdev, &size); +	if (!bios) { +		return false; +	} + +	if (size == 0 || bios[0] != 0x55 || bios[1] != 0xaa) { +		return false; +	} +	rdev->bios = kmemdup(bios, size, GFP_KERNEL); +	if (rdev->bios == NULL) { +		return false; +	} + +	return true; +} +  #ifdef CONFIG_ACPI  /* ATRM is used to get the BIOS on the discrete cards in   * dual-gpu systems. @@ -620,6 +643,9 @@ bool radeon_get_bios(struct radeon_device *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;  |