From: Greg Kroah-Hartman Date: Thu, 9 May 2013 20:22:10 +0000 (-0700) Subject: 3.9-stable patches X-Git-Tag: v3.9.2~30 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=56ccb08df3dae5db525377d28be5ec78d1f70f48;p=thirdparty%2Fkernel%2Fstable-queue.git 3.9-stable patches 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 --- 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 index 00000000000..1564b692d5f --- /dev/null +++ b/queue-3.9/drm-radeon-add-new-richland-pci-ids.patch @@ -0,0 +1,50 @@ +From 62d1f92e06aef9665d71ca7e986b3047ecf0b3c7 Mon Sep 17 00:00:00 2001 +From: Alex Deucher +Date: Thu, 25 Apr 2013 14:06:05 -0400 +Subject: drm/radeon: add new richland pci ids + +From: Alex Deucher + +commit 62d1f92e06aef9665d71ca7e986b3047ecf0b3c7 upstream. + +Signed-off-by: Alex Deucher +Signed-off-by: Greg Kroah-Hartman + +--- + 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 index 00000000000..18e85c12f2f --- /dev/null +++ b/queue-3.9/drm-radeon-always-flush-the-vm.patch @@ -0,0 +1,39 @@ +From 466476dfdcafbb4286ffa232a3a792731b9dc852 Mon Sep 17 00:00:00 2001 +From: Jerome Glisse +Date: Tue, 16 Apr 2013 12:20:15 -0400 +Subject: drm/radeon: Always flush the VM + +From: Jerome Glisse + +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 +Reviewed-by: Christian König +Signed-off-by: Alex Deucher +Signed-off-by: Greg Kroah-Hartman + +--- + 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 index 00000000000..324dcfbdace --- /dev/null +++ b/queue-3.9/drm-radeon-cleanup-properly-if-mmio-mapping-fails.patch @@ -0,0 +1,38 @@ +From 0cd9cb76ae26a19df21abc6f94f5fff141e689c7 Mon Sep 17 00:00:00 2001 +From: Alex Deucher +Date: Fri, 12 Apr 2013 19:15:52 -0400 +Subject: drm/radeon: cleanup properly if mmio mapping fails + +From: Alex Deucher + +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 +Signed-off-by: Greg Kroah-Hartman + +--- + 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 index 00000000000..1286aca19f3 --- /dev/null +++ b/queue-3.9/drm-radeon-disable-the-crtcs-in-mc_stop-r5xx-r7xx-v2.patch @@ -0,0 +1,61 @@ +From e884fc640ccbdb6f94b9bdb57cfb8464b6688f4c Mon Sep 17 00:00:00 2001 +From: Alex Deucher +Date: Wed, 17 Apr 2013 09:35:39 -0400 +Subject: drm/radeon: disable the crtcs in mc_stop (r5xx-r7xx) (v2) + +From: Alex Deucher + +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 +Signed-off-by: Greg Kroah-Hartman + +--- + 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 index 00000000000..13fd5004151 --- /dev/null +++ b/queue-3.9/drm-radeon-evergreen-don-t-enable-hpd-interrupts-on-edp-lvds.patch @@ -0,0 +1,40 @@ +From 2e97be73e5f74a317232740ae82eb8f95326a660 Mon Sep 17 00:00:00 2001 +From: Alex Deucher +Date: Thu, 11 Apr 2013 12:45:34 -0400 +Subject: drm/radeon/evergreen+: don't enable HPD interrupts on eDP/LVDS + +From: Alex Deucher + +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 +Signed-off-by: Greg Kroah-Hartman + +--- + 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 index 00000000000..7eb7f0105f5 --- /dev/null +++ b/queue-3.9/drm-radeon-fix-endian-bugs-in-atom_allocate_fb_scratch.patch @@ -0,0 +1,33 @@ +From beb71fc61c2cad64e347f164991b8ef476529e64 Mon Sep 17 00:00:00 2001 +From: Alex Deucher +Date: Wed, 24 Apr 2013 14:39:31 -0400 +Subject: drm/radeon: fix endian bugs in atom_allocate_fb_scratch() + +From: Alex Deucher + +commit beb71fc61c2cad64e347f164991b8ef476529e64 upstream. + +Reviwed-by: Michel Dänzer +Signed-off-by: Alex Deucher +Signed-off-by: Greg Kroah-Hartman + +--- + 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 index 00000000000..08a8fa2c00b --- /dev/null +++ b/queue-3.9/drm-radeon-fix-handling-of-v6-power-tables.patch @@ -0,0 +1,62 @@ +From 441e76ca83ac604eaf0f046def96d8e3a27eea28 Mon Sep 17 00:00:00 2001 +From: Alex Deucher +Date: Wed, 1 May 2013 14:34:54 -0400 +Subject: drm/radeon: fix handling of v6 power tables + +From: Alex Deucher + +commit 441e76ca83ac604eaf0f046def96d8e3a27eea28 upstream. + +The code was mis-handling variable sized arrays. + +Reported-by: Sylvain BERTRAND +Signed-off-by: Alex Deucher +Signed-off-by: Greg Kroah-Hartman + +--- + 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 index 00000000000..c4f6455083d --- /dev/null +++ b/queue-3.9/drm-radeon-fix-hdmi-mode-enable-on-rs600-rs690-rs740.patch @@ -0,0 +1,39 @@ +From dcb852905772416e322536ced5cb3c796d176af5 Mon Sep 17 00:00:00 2001 +From: Alex Deucher +Date: Thu, 18 Apr 2013 09:36:42 -0400 +Subject: drm/radeon: fix hdmi mode enable on RS600/RS690/RS740 + +From: Alex Deucher + +commit dcb852905772416e322536ced5cb3c796d176af5 upstream. + +These chips were previously skipped since they are +pre-R600. + +Signed-off-by: Alex Deucher +Signed-off-by: Greg Kroah-Hartman + +--- + 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 index 00000000000..79dbdd58791 --- /dev/null +++ b/queue-3.9/drm-radeon-fix-possible-segfault-when-parsing-pm-tables.patch @@ -0,0 +1,62 @@ +From f8e6bfc2ce162855fa4f9822a45659f4b542c960 Mon Sep 17 00:00:00 2001 +From: Alex Deucher +Date: Thu, 25 Apr 2013 09:29:17 -0400 +Subject: drm/radeon: fix possible segfault when parsing pm tables + +From: Alex Deucher + +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 +Signed-off-by: Greg Kroah-Hartman + +--- + 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 index 00000000000..bfdc023c230 --- /dev/null +++ b/queue-3.9/drm-radeon-fix-typo-in-si_select_se_sh.patch @@ -0,0 +1,27 @@ +From 79b52d6a7085a3e430c6de450a5847fdbe04159b Mon Sep 17 00:00:00 2001 +From: Alex Deucher +Date: Thu, 18 Apr 2013 16:26:36 -0400 +Subject: drm/radeon: fix typo in si_select_se_sh() + +From: Alex Deucher + +commit 79b52d6a7085a3e430c6de450a5847fdbe04159b upstream. + +Signed-off-by: Alex Deucher +Signed-off-by: Greg Kroah-Hartman + +--- + 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 index 00000000000..11e7973450c --- /dev/null +++ b/queue-3.9/drm-tilcdc-fix-an-incorrect-condition.patch @@ -0,0 +1,33 @@ +From 9e48854c58ca9a0f39e716dcb18247bfc21e2022 Mon Sep 17 00:00:00 2001 +From: Sachin Kamat +Date: Sat, 2 Mar 2013 15:53:06 +0530 +Subject: drm/tilcdc: Fix an incorrect condition + +From: Sachin Kamat + +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 +Acked-by: Rob Clark +Signed-off-by: Dave Airlie +Signed-off-by: Jonghwan Choi +Signed-off-by: Greg Kroah-Hartman + +--- + 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; diff --git a/queue-3.9/series b/queue-3.9/series index 3799f8aef66..5af057a65b5 100644 --- a/queue-3.9/series +++ b/queue-3.9/series @@ -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