]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
Merge branch 'drm-radeon-sun-hainan' of git://people.freedesktop.org/~airlied/linux
authorLinus Torvalds <torvalds@linux-foundation.org>
Tue, 21 May 2013 15:50:57 +0000 (08:50 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Tue, 21 May 2013 15:50:57 +0000 (08:50 -0700)
Pull radeon sun/hainan support from  Dave Airlie:
 "Since I know its outside the merge window, but since this is new hw I
  thought I'd try and provoke the new hw exception, it just fills in the
  blanks in the driver for the new AMD sun and hainan chipsets."

* 'drm-radeon-sun-hainan' of git://people.freedesktop.org/~airlied/linux:
  drm/radeon: add Hainan pci ids
  drm/radeon: add golden register settings for Hainan (v2)
  drm/radeon: sun/hainan chips do not have UVD (v2)
  drm/radeon: track which asics have UVD
  drm/radeon: radeon-asic updates for Hainan
  drm/radeon: fill in ucode loading support for Hainan
  drm/radeon: don't touch DCE or VGA regs on Hainan (v3)
  drm/radeon: fill in GPU init for Hainan (v2)
  drm/radeon: add chip family for Hainan

1  2 
drivers/gpu/drm/radeon/radeon_bios.c

index fa3c56fba294fe1a433b2d7b6a3e1507e357d1ca,9448cbfd57634aef061128071b085dcaf27f64e5..061b227dae0c45f88f506bf497c75faa1195aca1
@@@ -99,29 -99,6 +99,29 @@@ static bool radeon_read_bios(struct rad
        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.
@@@ -244,24 -221,28 +244,28 @@@ static bool ni_read_disabled_bios(struc
  
        /* 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));
+       if (!ASIC_IS_NODCE(rdev)) {
+               /* 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);
+       if (!ASIC_IS_NODCE(rdev)) {
+               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;
  }
@@@ -643,9 -624,6 +647,9 @@@ bool radeon_get_bios(struct radeon_devi
        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;