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
1 changed files with 41 additions and 0 deletions
|
@ -131,6 +131,45 @@ static bool radeon_atrm_get_bios(struct radeon_device *rdev)
|
|||
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)
|
||||
{
|
||||
uint32_t viph_control;
|
||||
|
@ -416,6 +455,8 @@ 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_BARTS)
|
||||
return ni_read_disabled_bios(rdev);
|
||||
else if (rdev->family >= CHIP_RV770)
|
||||
return r700_read_disabled_bios(rdev);
|
||||
else if (rdev->family >= CHIP_R600)
|
||||
|
|
Loading…
Reference in a new issue