]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
3.9-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 9 May 2013 20:22:10 +0000 (13:22 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 9 May 2013 20:22:10 +0000 (13:22 -0700)
added patches:
drm-radeon-add-new-richland-pci-ids.patch
drm-radeon-always-flush-the-vm.patch
drm-radeon-cleanup-properly-if-mmio-mapping-fails.patch
drm-radeon-disable-the-crtcs-in-mc_stop-r5xx-r7xx-v2.patch
drm-radeon-evergreen-don-t-enable-hpd-interrupts-on-edp-lvds.patch
drm-radeon-fix-endian-bugs-in-atom_allocate_fb_scratch.patch
drm-radeon-fix-handling-of-v6-power-tables.patch
drm-radeon-fix-hdmi-mode-enable-on-rs600-rs690-rs740.patch
drm-radeon-fix-possible-segfault-when-parsing-pm-tables.patch
drm-radeon-fix-typo-in-si_select_se_sh.patch
drm-tilcdc-fix-an-incorrect-condition.patch

12 files changed:
queue-3.9/drm-radeon-add-new-richland-pci-ids.patch [new file with mode: 0644]
queue-3.9/drm-radeon-always-flush-the-vm.patch [new file with mode: 0644]
queue-3.9/drm-radeon-cleanup-properly-if-mmio-mapping-fails.patch [new file with mode: 0644]
queue-3.9/drm-radeon-disable-the-crtcs-in-mc_stop-r5xx-r7xx-v2.patch [new file with mode: 0644]
queue-3.9/drm-radeon-evergreen-don-t-enable-hpd-interrupts-on-edp-lvds.patch [new file with mode: 0644]
queue-3.9/drm-radeon-fix-endian-bugs-in-atom_allocate_fb_scratch.patch [new file with mode: 0644]
queue-3.9/drm-radeon-fix-handling-of-v6-power-tables.patch [new file with mode: 0644]
queue-3.9/drm-radeon-fix-hdmi-mode-enable-on-rs600-rs690-rs740.patch [new file with mode: 0644]
queue-3.9/drm-radeon-fix-possible-segfault-when-parsing-pm-tables.patch [new file with mode: 0644]
queue-3.9/drm-radeon-fix-typo-in-si_select_se_sh.patch [new file with mode: 0644]
queue-3.9/drm-tilcdc-fix-an-incorrect-condition.patch [new file with mode: 0644]
queue-3.9/series

diff --git a/queue-3.9/drm-radeon-add-new-richland-pci-ids.patch b/queue-3.9/drm-radeon-add-new-richland-pci-ids.patch
new file mode 100644 (file)
index 0000000..1564b69
--- /dev/null
@@ -0,0 +1,50 @@
+From 62d1f92e06aef9665d71ca7e986b3047ecf0b3c7 Mon Sep 17 00:00:00 2001
+From: Alex Deucher <alexander.deucher@amd.com>
+Date: Thu, 25 Apr 2013 14:06:05 -0400
+Subject: drm/radeon: add new richland pci ids
+
+From: Alex Deucher <alexander.deucher@amd.com>
+
+commit 62d1f92e06aef9665d71ca7e986b3047ecf0b3c7 upstream.
+
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/gpu/drm/radeon/ni.c |    6 ++++--
+ include/drm/drm_pciids.h    |    2 ++
+ 2 files changed, 6 insertions(+), 2 deletions(-)
+
+--- a/drivers/gpu/drm/radeon/ni.c
++++ b/drivers/gpu/drm/radeon/ni.c
+@@ -473,7 +473,8 @@ static void cayman_gpu_init(struct radeo
+                   (rdev->pdev->device == 0x990F) ||
+                   (rdev->pdev->device == 0x9910) ||
+                   (rdev->pdev->device == 0x9917) ||
+-                  (rdev->pdev->device == 0x9999)) {
++                  (rdev->pdev->device == 0x9999) ||
++                  (rdev->pdev->device == 0x999C)) {
+                       rdev->config.cayman.max_simds_per_se = 6;
+                       rdev->config.cayman.max_backends_per_se = 2;
+               } else if ((rdev->pdev->device == 0x9903) ||
+@@ -482,7 +483,8 @@ static void cayman_gpu_init(struct radeo
+                          (rdev->pdev->device == 0x990D) ||
+                          (rdev->pdev->device == 0x990E) ||
+                          (rdev->pdev->device == 0x9913) ||
+-                         (rdev->pdev->device == 0x9918)) {
++                         (rdev->pdev->device == 0x9918) ||
++                         (rdev->pdev->device == 0x999D)) {
+                       rdev->config.cayman.max_simds_per_se = 4;
+                       rdev->config.cayman.max_backends_per_se = 2;
+               } else if ((rdev->pdev->device == 0x9919) ||
+--- a/include/drm/drm_pciids.h
++++ b/include/drm/drm_pciids.h
+@@ -606,6 +606,8 @@
+       {0x1002, 0x9999, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_ARUBA|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \
+       {0x1002, 0x999A, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_ARUBA|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \
+       {0x1002, 0x999B, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_ARUBA|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \
++      {0x1002, 0x999C, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_ARUBA|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \
++      {0x1002, 0x999D, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_ARUBA|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \
+       {0x1002, 0x99A0, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_ARUBA|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \
+       {0x1002, 0x99A2, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_ARUBA|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \
+       {0x1002, 0x99A4, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_ARUBA|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \
diff --git a/queue-3.9/drm-radeon-always-flush-the-vm.patch b/queue-3.9/drm-radeon-always-flush-the-vm.patch
new file mode 100644 (file)
index 0000000..18e85c1
--- /dev/null
@@ -0,0 +1,39 @@
+From 466476dfdcafbb4286ffa232a3a792731b9dc852 Mon Sep 17 00:00:00 2001
+From: Jerome Glisse <jglisse@redhat.com>
+Date: Tue, 16 Apr 2013 12:20:15 -0400
+Subject: drm/radeon: Always flush the VM
+
+From: Jerome Glisse <jglisse@redhat.com>
+
+commit 466476dfdcafbb4286ffa232a3a792731b9dc852 upstream.
+
+This is slightly cleaned up version of Jerome's patch.
+There seems to be an issue tracking the last flush of
+the VM which results in hangs in certain cases when
+VM is used.  For now just flush the VM for every IB.
+
+Fixes:
+https://bugs.freedesktop.org/show_bug.cgi?id=62959
+https://bugs.freedesktop.org/show_bug.cgi?id=62997
+
+Signed-off-by: Jerome Glisse <jglisse@redhat.com>
+Reviewed-by: Christian König <christian.koenig@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/gpu/drm/radeon/radeon_ring.c |    3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+--- a/drivers/gpu/drm/radeon/radeon_ring.c
++++ b/drivers/gpu/drm/radeon/radeon_ring.c
+@@ -180,7 +180,8 @@ int radeon_ib_schedule(struct radeon_dev
+               radeon_semaphore_free(rdev, &ib->semaphore, NULL);
+       }
+       /* if we can't remember our last VM flush then flush now! */
+-      if (ib->vm && !ib->vm->last_flush) {
++      /* XXX figure out why we have to flush for every IB */
++      if (ib->vm /*&& !ib->vm->last_flush*/) {
+               radeon_ring_vm_flush(rdev, ib->ring, ib->vm);
+       }
+       if (const_ib) {
diff --git a/queue-3.9/drm-radeon-cleanup-properly-if-mmio-mapping-fails.patch b/queue-3.9/drm-radeon-cleanup-properly-if-mmio-mapping-fails.patch
new file mode 100644 (file)
index 0000000..324dcfb
--- /dev/null
@@ -0,0 +1,38 @@
+From 0cd9cb76ae26a19df21abc6f94f5fff141e689c7 Mon Sep 17 00:00:00 2001
+From: Alex Deucher <alexander.deucher@amd.com>
+Date: Fri, 12 Apr 2013 19:15:52 -0400
+Subject: drm/radeon: cleanup properly if mmio mapping fails
+
+From: Alex Deucher <alexander.deucher@amd.com>
+
+commit 0cd9cb76ae26a19df21abc6f94f5fff141e689c7 upstream.
+
+If we fail to map the mmio BAR, skip driver tear down
+that requires mmio.
+
+Should fix:
+https://bugzilla.kernel.org/show_bug.cgi?id=56541
+
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/gpu/drm/radeon/radeon_kms.c |    4 ++++
+ 1 file changed, 4 insertions(+)
+
+--- a/drivers/gpu/drm/radeon/radeon_kms.c
++++ b/drivers/gpu/drm/radeon/radeon_kms.c
+@@ -50,9 +50,13 @@ int radeon_driver_unload_kms(struct drm_
+       if (rdev == NULL)
+               return 0;
++      if (rdev->rmmio == NULL)
++              goto done_free;
+       radeon_acpi_fini(rdev);
+       radeon_modeset_fini(rdev);
+       radeon_device_fini(rdev);
++
++done_free:
+       kfree(rdev);
+       dev->dev_private = NULL;
+       return 0;
diff --git a/queue-3.9/drm-radeon-disable-the-crtcs-in-mc_stop-r5xx-r7xx-v2.patch b/queue-3.9/drm-radeon-disable-the-crtcs-in-mc_stop-r5xx-r7xx-v2.patch
new file mode 100644 (file)
index 0000000..1286aca
--- /dev/null
@@ -0,0 +1,61 @@
+From e884fc640ccbdb6f94b9bdb57cfb8464b6688f4c Mon Sep 17 00:00:00 2001
+From: Alex Deucher <alexander.deucher@amd.com>
+Date: Wed, 17 Apr 2013 09:35:39 -0400
+Subject: drm/radeon: disable the crtcs in mc_stop (r5xx-r7xx) (v2)
+
+From: Alex Deucher <alexander.deucher@amd.com>
+
+commit e884fc640ccbdb6f94b9bdb57cfb8464b6688f4c upstream.
+
+Just disabling the mem requests should be enough, but
+that doesn't seem to work correctly on efi systems.
+
+v2: blank displays first, then disable.
+
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/gpu/drm/radeon/r500_reg.h |    1 +
+ drivers/gpu/drm/radeon/rv515.c    |   11 +++++++++++
+ 2 files changed, 12 insertions(+)
+
+--- a/drivers/gpu/drm/radeon/r500_reg.h
++++ b/drivers/gpu/drm/radeon/r500_reg.h
+@@ -360,6 +360,7 @@
+ #define AVIVO_D1MODE_MASTER_UPDATE_LOCK                         0x60e0
+ #define AVIVO_D1MODE_MASTER_UPDATE_MODE                         0x60e4
++#define AVIVO_D1CRTC_UPDATE_LOCK                                0x60e8
+ /* master controls */
+ #define AVIVO_DC_CRTC_MASTER_EN                                 0x60f8
+--- a/drivers/gpu/drm/radeon/rv515.c
++++ b/drivers/gpu/drm/radeon/rv515.c
+@@ -303,8 +303,10 @@ void rv515_mc_stop(struct radeon_device
+                       tmp = RREG32(AVIVO_D1CRTC_CONTROL + crtc_offsets[i]);
+                       if (!(tmp & AVIVO_CRTC_DISP_READ_REQUEST_DISABLE)) {
+                               radeon_wait_for_vblank(rdev, i);
++                              WREG32(AVIVO_D1CRTC_UPDATE_LOCK + crtc_offsets[i], 1);
+                               tmp |= AVIVO_CRTC_DISP_READ_REQUEST_DISABLE;
+                               WREG32(AVIVO_D1CRTC_CONTROL + crtc_offsets[i], tmp);
++                              WREG32(AVIVO_D1CRTC_UPDATE_LOCK + crtc_offsets[i], 0);
+                       }
+                       /* wait for the next frame */
+                       frame_count = radeon_get_vblank_counter(rdev, i);
+@@ -313,6 +315,15 @@ void rv515_mc_stop(struct radeon_device
+                                       break;
+                               udelay(1);
+                       }
++
++                      /* XXX this is a hack to avoid strange behavior with EFI on certain systems */
++                      WREG32(AVIVO_D1CRTC_UPDATE_LOCK + crtc_offsets[i], 1);
++                      tmp = RREG32(AVIVO_D1CRTC_CONTROL + crtc_offsets[i]);
++                      tmp &= ~AVIVO_CRTC_EN;
++                      WREG32(AVIVO_D1CRTC_CONTROL + crtc_offsets[i], tmp);
++                      WREG32(AVIVO_D1CRTC_UPDATE_LOCK + crtc_offsets[i], 0);
++                      save->crtc_enabled[i] = false;
++                      /* ***** */
+               } else {
+                       save->crtc_enabled[i] = false;
+               }
diff --git a/queue-3.9/drm-radeon-evergreen-don-t-enable-hpd-interrupts-on-edp-lvds.patch b/queue-3.9/drm-radeon-evergreen-don-t-enable-hpd-interrupts-on-edp-lvds.patch
new file mode 100644 (file)
index 0000000..13fd500
--- /dev/null
@@ -0,0 +1,40 @@
+From 2e97be73e5f74a317232740ae82eb8f95326a660 Mon Sep 17 00:00:00 2001
+From: Alex Deucher <alexander.deucher@amd.com>
+Date: Thu, 11 Apr 2013 12:45:34 -0400
+Subject: drm/radeon/evergreen+: don't enable HPD interrupts on eDP/LVDS
+
+From: Alex Deucher <alexander.deucher@amd.com>
+
+commit 2e97be73e5f74a317232740ae82eb8f95326a660 upstream.
+
+Avoids potential interrupt storms when the display is disabled.
+
+May fix:
+https://bugzilla.kernel.org/show_bug.cgi?id=56041
+
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/gpu/drm/radeon/evergreen.c |   10 ++++++++++
+ 1 file changed, 10 insertions(+)
+
+--- a/drivers/gpu/drm/radeon/evergreen.c
++++ b/drivers/gpu/drm/radeon/evergreen.c
+@@ -636,6 +636,16 @@ void evergreen_hpd_init(struct radeon_de
+       list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
+               struct radeon_connector *radeon_connector = to_radeon_connector(connector);
++
++              if (connector->connector_type == DRM_MODE_CONNECTOR_eDP ||
++                  connector->connector_type == DRM_MODE_CONNECTOR_LVDS) {
++                      /* don't try to enable hpd on eDP or LVDS avoid breaking the
++                       * aux dp channel on imac and help (but not completely fix)
++                       * https://bugzilla.redhat.com/show_bug.cgi?id=726143
++                       * also avoid interrupt storms during dpms.
++                       */
++                      continue;
++              }
+               switch (radeon_connector->hpd.hpd) {
+               case RADEON_HPD_1:
+                       WREG32(DC_HPD1_CONTROL, tmp);
diff --git a/queue-3.9/drm-radeon-fix-endian-bugs-in-atom_allocate_fb_scratch.patch b/queue-3.9/drm-radeon-fix-endian-bugs-in-atom_allocate_fb_scratch.patch
new file mode 100644 (file)
index 0000000..7eb7f01
--- /dev/null
@@ -0,0 +1,33 @@
+From beb71fc61c2cad64e347f164991b8ef476529e64 Mon Sep 17 00:00:00 2001
+From: Alex Deucher <alexander.deucher@amd.com>
+Date: Wed, 24 Apr 2013 14:39:31 -0400
+Subject: drm/radeon: fix endian bugs in atom_allocate_fb_scratch()
+
+From: Alex Deucher <alexander.deucher@amd.com>
+
+commit beb71fc61c2cad64e347f164991b8ef476529e64 upstream.
+
+Reviwed-by: Michel Dänzer <michel.daenzer@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/gpu/drm/radeon/atom.c |    6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+--- a/drivers/gpu/drm/radeon/atom.c
++++ b/drivers/gpu/drm/radeon/atom.c
+@@ -1394,10 +1394,10 @@ int atom_allocate_fb_scratch(struct atom
+               firmware_usage = (struct _ATOM_VRAM_USAGE_BY_FIRMWARE *)(ctx->bios + data_offset);
+               DRM_DEBUG("atom firmware requested %08x %dkb\n",
+-                        firmware_usage->asFirmwareVramReserveInfo[0].ulStartAddrUsedByFirmware,
+-                        firmware_usage->asFirmwareVramReserveInfo[0].usFirmwareUseInKb);
++                        le32_to_cpu(firmware_usage->asFirmwareVramReserveInfo[0].ulStartAddrUsedByFirmware),
++                        le16_to_cpu(firmware_usage->asFirmwareVramReserveInfo[0].usFirmwareUseInKb));
+-              usage_bytes = firmware_usage->asFirmwareVramReserveInfo[0].usFirmwareUseInKb * 1024;
++              usage_bytes = le16_to_cpu(firmware_usage->asFirmwareVramReserveInfo[0].usFirmwareUseInKb) * 1024;
+       }
+       ctx->scratch_size_bytes = 0;
+       if (usage_bytes == 0)
diff --git a/queue-3.9/drm-radeon-fix-handling-of-v6-power-tables.patch b/queue-3.9/drm-radeon-fix-handling-of-v6-power-tables.patch
new file mode 100644 (file)
index 0000000..08a8fa2
--- /dev/null
@@ -0,0 +1,62 @@
+From 441e76ca83ac604eaf0f046def96d8e3a27eea28 Mon Sep 17 00:00:00 2001
+From: Alex Deucher <alexander.deucher@amd.com>
+Date: Wed, 1 May 2013 14:34:54 -0400
+Subject: drm/radeon: fix handling of v6 power tables
+
+From: Alex Deucher <alexander.deucher@amd.com>
+
+commit 441e76ca83ac604eaf0f046def96d8e3a27eea28 upstream.
+
+The code was mis-handling variable sized arrays.
+
+Reported-by: Sylvain BERTRAND <sylware@legeek.net>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/gpu/drm/radeon/radeon_atombios.c |   11 +++++------
+ 1 file changed, 5 insertions(+), 6 deletions(-)
+
+--- a/drivers/gpu/drm/radeon/radeon_atombios.c
++++ b/drivers/gpu/drm/radeon/radeon_atombios.c
+@@ -2518,6 +2518,7 @@ static int radeon_atombios_parse_power_t
+       int index = GetIndexIntoMasterTable(DATA, PowerPlayInfo);
+         u16 data_offset;
+       u8 frev, crev;
++      u8 *power_state_offset;
+       if (!atom_parse_data_header(mode_info->atom_context, index, NULL,
+                                  &frev, &crev, &data_offset))
+@@ -2540,11 +2541,11 @@ static int radeon_atombios_parse_power_t
+                                      state_array->ucNumEntries, GFP_KERNEL);
+       if (!rdev->pm.power_state)
+               return state_index;
++      power_state_offset = (u8 *)state_array->states;
+       for (i = 0; i < state_array->ucNumEntries; i++) {
+               mode_index = 0;
+-              power_state = (union pplib_power_state *)&state_array->states[i];
+-              /* XXX this might be an inagua bug... */
+-              non_clock_array_index = i; /* power_state->v2.nonClockInfoIndex */
++              power_state = (union pplib_power_state *)power_state_offset;
++              non_clock_array_index = power_state->v2.nonClockInfoIndex;
+               non_clock_info = (struct _ATOM_PPLIB_NONCLOCK_INFO *)
+                       &non_clock_info_array->nonClockInfo[non_clock_array_index];
+               rdev->pm.power_state[i].clock_info = kzalloc(sizeof(struct radeon_pm_clock_info) *
+@@ -2556,9 +2557,6 @@ static int radeon_atombios_parse_power_t
+               if (power_state->v2.ucNumDPMLevels) {
+                       for (j = 0; j < power_state->v2.ucNumDPMLevels; j++) {
+                               clock_array_index = power_state->v2.clockInfoIndex[j];
+-                              /* XXX this might be an inagua bug... */
+-                              if (clock_array_index >= clock_info_array->ucNumEntries)
+-                                      continue;
+                               clock_info = (union pplib_clock_info *)
+                                       &clock_info_array->clockInfo[clock_array_index * clock_info_array->ucEntrySize];
+                               valid = radeon_atombios_parse_pplib_clock_info(rdev,
+@@ -2580,6 +2578,7 @@ static int radeon_atombios_parse_power_t
+                                                                  non_clock_info);
+                       state_index++;
+               }
++              power_state_offset += 2 + power_state->v2.ucNumDPMLevels;
+       }
+       /* if multiple clock modes, mark the lowest as no display */
+       for (i = 0; i < state_index; i++) {
diff --git a/queue-3.9/drm-radeon-fix-hdmi-mode-enable-on-rs600-rs690-rs740.patch b/queue-3.9/drm-radeon-fix-hdmi-mode-enable-on-rs600-rs690-rs740.patch
new file mode 100644 (file)
index 0000000..c4f6455
--- /dev/null
@@ -0,0 +1,39 @@
+From dcb852905772416e322536ced5cb3c796d176af5 Mon Sep 17 00:00:00 2001
+From: Alex Deucher <alexander.deucher@amd.com>
+Date: Thu, 18 Apr 2013 09:36:42 -0400
+Subject: drm/radeon: fix hdmi mode enable on RS600/RS690/RS740
+
+From: Alex Deucher <alexander.deucher@amd.com>
+
+commit dcb852905772416e322536ced5cb3c796d176af5 upstream.
+
+These chips were previously skipped since they are
+pre-R600.
+
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/gpu/drm/radeon/r600_hdmi.c |    4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- a/drivers/gpu/drm/radeon/r600_hdmi.c
++++ b/drivers/gpu/drm/radeon/r600_hdmi.c
+@@ -433,7 +433,7 @@ void r600_hdmi_enable(struct drm_encoder
+       offset = dig->afmt->offset;
+       /* Older chipsets require setting HDMI and routing manually */
+-      if (rdev->family >= CHIP_R600 && !ASIC_IS_DCE3(rdev)) {
++      if (ASIC_IS_DCE2(rdev) && !ASIC_IS_DCE3(rdev)) {
+               hdmi = HDMI0_ERROR_ACK | HDMI0_ENABLE;
+               switch (radeon_encoder->encoder_id) {
+               case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_TMDS1:
+@@ -501,7 +501,7 @@ void r600_hdmi_disable(struct drm_encode
+       radeon_irq_kms_disable_afmt(rdev, dig->afmt->id);
+       /* Older chipsets not handled by AtomBIOS */
+-      if (rdev->family >= CHIP_R600 && !ASIC_IS_DCE3(rdev)) {
++      if (ASIC_IS_DCE2(rdev) && !ASIC_IS_DCE3(rdev)) {
+               switch (radeon_encoder->encoder_id) {
+               case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_TMDS1:
+                       WREG32_P(AVIVO_TMDSA_CNTL, 0,
diff --git a/queue-3.9/drm-radeon-fix-possible-segfault-when-parsing-pm-tables.patch b/queue-3.9/drm-radeon-fix-possible-segfault-when-parsing-pm-tables.patch
new file mode 100644 (file)
index 0000000..79dbdd5
--- /dev/null
@@ -0,0 +1,62 @@
+From f8e6bfc2ce162855fa4f9822a45659f4b542c960 Mon Sep 17 00:00:00 2001
+From: Alex Deucher <alexander.deucher@amd.com>
+Date: Thu, 25 Apr 2013 09:29:17 -0400
+Subject: drm/radeon: fix possible segfault when parsing pm tables
+
+From: Alex Deucher <alexander.deucher@amd.com>
+
+commit f8e6bfc2ce162855fa4f9822a45659f4b542c960 upstream.
+
+If we have a empty power table, bail early and allocate
+the default power state.
+
+Should fix:
+https://bugs.freedesktop.org/show_bug.cgi?id=63865
+
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/gpu/drm/radeon/radeon_atombios.c |   10 +++++++++-
+ 1 file changed, 9 insertions(+), 1 deletion(-)
+
+--- a/drivers/gpu/drm/radeon/radeon_atombios.c
++++ b/drivers/gpu/drm/radeon/radeon_atombios.c
+@@ -2028,6 +2028,8 @@ static int radeon_atombios_parse_power_t
+       num_modes = power_info->info.ucNumOfPowerModeEntries;
+       if (num_modes > ATOM_MAX_NUMBEROF_POWER_BLOCK)
+               num_modes = ATOM_MAX_NUMBEROF_POWER_BLOCK;
++      if (num_modes == 0)
++              return state_index;
+       rdev->pm.power_state = kzalloc(sizeof(struct radeon_power_state) * num_modes, GFP_KERNEL);
+       if (!rdev->pm.power_state)
+               return state_index;
+@@ -2432,6 +2434,8 @@ static int radeon_atombios_parse_power_t
+       power_info = (union power_info *)(mode_info->atom_context->bios + data_offset);
+       radeon_atombios_add_pplib_thermal_controller(rdev, &power_info->pplib.sThermalController);
++      if (power_info->pplib.ucNumStates == 0)
++              return state_index;
+       rdev->pm.power_state = kzalloc(sizeof(struct radeon_power_state) *
+                                      power_info->pplib.ucNumStates, GFP_KERNEL);
+       if (!rdev->pm.power_state)
+@@ -2530,6 +2534,8 @@ static int radeon_atombios_parse_power_t
+       non_clock_info_array = (struct _NonClockInfoArray *)
+               (mode_info->atom_context->bios + data_offset +
+                le16_to_cpu(power_info->pplib.usNonClockInfoArrayOffset));
++      if (state_array->ucNumEntries == 0)
++              return state_index;
+       rdev->pm.power_state = kzalloc(sizeof(struct radeon_power_state) *
+                                      state_array->ucNumEntries, GFP_KERNEL);
+       if (!rdev->pm.power_state)
+@@ -2620,7 +2626,9 @@ void radeon_atombios_get_power_modes(str
+               default:
+                       break;
+               }
+-      } else {
++      }
++
++      if (state_index == 0) {
+               rdev->pm.power_state = kzalloc(sizeof(struct radeon_power_state), GFP_KERNEL);
+               if (rdev->pm.power_state) {
+                       rdev->pm.power_state[0].clock_info =
diff --git a/queue-3.9/drm-radeon-fix-typo-in-si_select_se_sh.patch b/queue-3.9/drm-radeon-fix-typo-in-si_select_se_sh.patch
new file mode 100644 (file)
index 0000000..bfdc023
--- /dev/null
@@ -0,0 +1,27 @@
+From 79b52d6a7085a3e430c6de450a5847fdbe04159b Mon Sep 17 00:00:00 2001
+From: Alex Deucher <alexander.deucher@amd.com>
+Date: Thu, 18 Apr 2013 16:26:36 -0400
+Subject: drm/radeon: fix typo in si_select_se_sh()
+
+From: Alex Deucher <alexander.deucher@amd.com>
+
+commit 79b52d6a7085a3e430c6de450a5847fdbe04159b upstream.
+
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/gpu/drm/radeon/si.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/gpu/drm/radeon/si.c
++++ b/drivers/gpu/drm/radeon/si.c
+@@ -1463,7 +1463,7 @@ static void si_select_se_sh(struct radeo
+       u32 data = INSTANCE_BROADCAST_WRITES;
+       if ((se_num == 0xffffffff) && (sh_num == 0xffffffff))
+-              data = SH_BROADCAST_WRITES | SE_BROADCAST_WRITES;
++              data |= SH_BROADCAST_WRITES | SE_BROADCAST_WRITES;
+       else if (se_num == 0xffffffff)
+               data |= SE_BROADCAST_WRITES | SH_INDEX(sh_num);
+       else if (sh_num == 0xffffffff)
diff --git a/queue-3.9/drm-tilcdc-fix-an-incorrect-condition.patch b/queue-3.9/drm-tilcdc-fix-an-incorrect-condition.patch
new file mode 100644 (file)
index 0000000..11e7973
--- /dev/null
@@ -0,0 +1,33 @@
+From 9e48854c58ca9a0f39e716dcb18247bfc21e2022 Mon Sep 17 00:00:00 2001
+From: Sachin Kamat <sachin.kamat@linaro.org>
+Date: Sat, 2 Mar 2013 15:53:06 +0530
+Subject: drm/tilcdc: Fix an incorrect condition
+
+From: Sachin Kamat <sachin.kamat@linaro.org>
+
+commit 9e48854c58ca9a0f39e716dcb18247bfc21e2022 upstream.
+
+Instead of checking if num_encoders is zero, it is being assigned 0.
+Convert the assignment to a check.
+
+Signed-off-by: Sachin Kamat <sachin.kamat@linaro.org>
+Acked-by: Rob Clark <robdclark@gmail.com>
+Signed-off-by: Dave Airlie <airlied@redhat.com>
+Signed-off-by: Jonghwan Choi <jhbird.choi@samsung.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/gpu/drm/tilcdc/tilcdc_drv.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/gpu/drm/tilcdc/tilcdc_drv.c
++++ b/drivers/gpu/drm/tilcdc/tilcdc_drv.c
+@@ -75,7 +75,7 @@ static int modeset_init(struct drm_devic
+               mod->funcs->modeset_init(mod, dev);
+       }
+-      if ((priv->num_encoders = 0) || (priv->num_connectors == 0)) {
++      if ((priv->num_encoders == 0) || (priv->num_connectors == 0)) {
+               /* oh nos! */
+               dev_err(dev->dev, "no encoders/connectors found\n");
+               return -ENXIO;
index 3799f8aef6686eb3a256ed24a135f32e8fef2a77..5af057a65b5786c62c18762f83f18d6ea55e427c 100644 (file)
@@ -52,3 +52,14 @@ drm-radeon-properly-lock-disp-in-mc_stop-resume-for-r5xx-r7xx.patch
 drm-radeon-update-wait_for_vblank-for-r1xx-r4xx.patch
 drm-radeon-disable-the-crtcs-in-mc_stop-evergreen-v2.patch
 drm-radeon-add-some-new-si-pci-ids.patch
+drm-radeon-evergreen-don-t-enable-hpd-interrupts-on-edp-lvds.patch
+drm-radeon-cleanup-properly-if-mmio-mapping-fails.patch
+drm-radeon-fix-hdmi-mode-enable-on-rs600-rs690-rs740.patch
+drm-radeon-fix-typo-in-si_select_se_sh.patch
+drm-radeon-always-flush-the-vm.patch
+drm-radeon-disable-the-crtcs-in-mc_stop-r5xx-r7xx-v2.patch
+drm-radeon-fix-endian-bugs-in-atom_allocate_fb_scratch.patch
+drm-radeon-fix-possible-segfault-when-parsing-pm-tables.patch
+drm-radeon-add-new-richland-pci-ids.patch
+drm-radeon-fix-handling-of-v6-power-tables.patch
+drm-tilcdc-fix-an-incorrect-condition.patch