From: Greg Kroah-Hartman Date: Thu, 9 May 2013 20:21:57 +0000 (-0700) Subject: 3.0-stable patches X-Git-Tag: v3.9.2~33 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=81a2c77e6d83d605617070e820053695ebc29538;p=thirdparty%2Fkernel%2Fstable-queue.git 3.0-stable patches added patches: 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-possible-segfault-when-parsing-pm-tables.patch --- diff --git a/queue-3.0/drm-radeon-evergreen-don-t-enable-hpd-interrupts-on-edp-lvds.patch b/queue-3.0/drm-radeon-evergreen-don-t-enable-hpd-interrupts-on-edp-lvds.patch new file mode 100644 index 00000000000..50214b6072f --- /dev/null +++ b/queue-3.0/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 +@@ -330,6 +330,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.0/drm-radeon-fix-endian-bugs-in-atom_allocate_fb_scratch.patch b/queue-3.0/drm-radeon-fix-endian-bugs-in-atom_allocate_fb_scratch.patch new file mode 100644 index 00000000000..642a7378ec0 --- /dev/null +++ b/queue-3.0/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 +@@ -1384,10 +1384,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.0/drm-radeon-fix-possible-segfault-when-parsing-pm-tables.patch b/queue-3.0/drm-radeon-fix-possible-segfault-when-parsing-pm-tables.patch new file mode 100644 index 00000000000..7be780e0858 --- /dev/null +++ b/queue-3.0/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 +@@ -2031,6 +2031,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; +@@ -2401,6 +2403,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) +@@ -2485,6 +2489,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) +@@ -2561,7 +2567,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) { + /* add the default mode */ diff --git a/queue-3.0/series b/queue-3.0/series index 4bda36ef444..25f9f47d309 100644 --- a/queue-3.0/series +++ b/queue-3.0/series @@ -4,3 +4,6 @@ ipvs-ip_vs_sip_fill_param-bug-bad-check-of-return-value.patch drm-i915-add-no-lvds-quirk-for-fujitsu-esprimo-q900.patch drm-i915-fall-back-to-bit-banging-mode-for-dvo-transmitter-detection.patch drm-radeon-don-t-use-get_engine_clock-on-apus.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-possible-segfault-when-parsing-pm-tables.patch