mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-16 01:54:00 +00:00
drm/radeon/kms: add disabled vbios accessor for NI asics
Some systems disable the vbios on secondary cards or cards that have been posted. This code re-enabled the vbios so the driver can load it. Signed-off-by: Alex Deucher <alexdeucher@gmail.com> Signed-off-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:
parent
4fddba1fd9
commit
c901bcddd0
@ -131,6 +131,45 @@ static bool radeon_atrm_get_bios(struct radeon_device *rdev)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool ni_read_disabled_bios(struct radeon_device *rdev)
|
||||||
|
{
|
||||||
|
u32 bus_cntl;
|
||||||
|
u32 d1vga_control;
|
||||||
|
u32 d2vga_control;
|
||||||
|
u32 vga_render_control;
|
||||||
|
u32 rom_cntl;
|
||||||
|
bool r;
|
||||||
|
|
||||||
|
bus_cntl = RREG32(R600_BUS_CNTL);
|
||||||
|
d1vga_control = RREG32(AVIVO_D1VGA_CONTROL);
|
||||||
|
d2vga_control = RREG32(AVIVO_D2VGA_CONTROL);
|
||||||
|
vga_render_control = RREG32(AVIVO_VGA_RENDER_CONTROL);
|
||||||
|
rom_cntl = RREG32(R600_ROM_CNTL);
|
||||||
|
|
||||||
|
/* enable the rom */
|
||||||
|
WREG32(R600_BUS_CNTL, (bus_cntl & ~R600_BIOS_ROM_DIS));
|
||||||
|
/* Disable VGA mode */
|
||||||
|
WREG32(AVIVO_D1VGA_CONTROL,
|
||||||
|
(d1vga_control & ~(AVIVO_DVGA_CONTROL_MODE_ENABLE |
|
||||||
|
AVIVO_DVGA_CONTROL_TIMING_SELECT)));
|
||||||
|
WREG32(AVIVO_D2VGA_CONTROL,
|
||||||
|
(d2vga_control & ~(AVIVO_DVGA_CONTROL_MODE_ENABLE |
|
||||||
|
AVIVO_DVGA_CONTROL_TIMING_SELECT)));
|
||||||
|
WREG32(AVIVO_VGA_RENDER_CONTROL,
|
||||||
|
(vga_render_control & ~AVIVO_VGA_VSTATUS_CNTL_MASK));
|
||||||
|
WREG32(R600_ROM_CNTL, rom_cntl | R600_SCK_OVERWRITE);
|
||||||
|
|
||||||
|
r = radeon_read_bios(rdev);
|
||||||
|
|
||||||
|
/* restore regs */
|
||||||
|
WREG32(R600_BUS_CNTL, bus_cntl);
|
||||||
|
WREG32(AVIVO_D1VGA_CONTROL, d1vga_control);
|
||||||
|
WREG32(AVIVO_D2VGA_CONTROL, d2vga_control);
|
||||||
|
WREG32(AVIVO_VGA_RENDER_CONTROL, vga_render_control);
|
||||||
|
WREG32(R600_ROM_CNTL, rom_cntl);
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
static bool r700_read_disabled_bios(struct radeon_device *rdev)
|
static bool r700_read_disabled_bios(struct radeon_device *rdev)
|
||||||
{
|
{
|
||||||
uint32_t viph_control;
|
uint32_t viph_control;
|
||||||
@ -416,6 +455,8 @@ static bool radeon_read_disabled_bios(struct radeon_device *rdev)
|
|||||||
{
|
{
|
||||||
if (rdev->flags & RADEON_IS_IGP)
|
if (rdev->flags & RADEON_IS_IGP)
|
||||||
return igp_read_bios_from_vram(rdev);
|
return igp_read_bios_from_vram(rdev);
|
||||||
|
else if (rdev->family >= CHIP_BARTS)
|
||||||
|
return ni_read_disabled_bios(rdev);
|
||||||
else if (rdev->family >= CHIP_RV770)
|
else if (rdev->family >= CHIP_RV770)
|
||||||
return r700_read_disabled_bios(rdev);
|
return r700_read_disabled_bios(rdev);
|
||||||
else if (rdev->family >= CHIP_R600)
|
else if (rdev->family >= CHIP_R600)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user