[Patch] The resolution of Display Port for intel cards is limited

Bug #899598 reported by Albert Astals Cid
10
This bug affects 1 person
Affects Status Importance Assigned to Milestone
linux (Ubuntu)
Fix Released
Medium
Herton R. Krzesinski
Oneiric
Invalid
Medium
Unassigned
Precise
Fix Released
Medium
Herton R. Krzesinski

Bug Description

SRU Justification

Impact
Unable to achieve some resolutions through display port because of
driver miscalculation, or sub-optimal number of links x data rate
chosen.

Fix
upstream commit cd9dde44f47501394b9f0715b6a36a92aa74c0d0

Testcase
Try attach something to display port using a resolution which should be
supported by the hardware but isn't by the driver, or enable relevant
debug and watch dmesg for sub-optimal links x data rate chosen (eg.:
http://permalink.gmane.org/gmane.comp.freedesktop.xorg.drivers.intel/6397)

==========================================================================

Speaking with the intel driver developers they told me there was a mistake on how the needed bandwidth was calculated resulting in higher resolutions not being accepted because the driver though DisplayPort did not have enough bandwidth for it.

Commit cd9dde44f47501394b9f0715b6a36a92aa74c0d0 from the linux kernel should be backported to fix it (I have build a local package and i can verify it fixes the problem)

http://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=commit;h=cd9dde44f47501394b9f0715b6a36a92aa74c0d0

ProblemType: Bug
DistroRelease: Ubuntu 11.10
Package: linux-image (not installed)
ProcVersionSignature: Ubuntu 3.0.0-13.22-generic 3.0.6
Uname: Linux 3.0.0-13-generic x86_64
AlsaVersion: Advanced Linux Sound Architecture Driver Version 1.0.24.
ApportVersion: 1.23-0ubuntu4
Architecture: amd64
ArecordDevices:
 **** List of CAPTURE Hardware Devices ****
 card 0: PCH [HDA Intel PCH], device 0: ALC665 Analog [ALC665 Analog]
   Subdevices: 1/1
   Subdevice #0: subdevice #0
AudioDevicesInUse:
 USER PID ACCESS COMMAND
 /dev/snd/controlC0: tsdgeos 1974 F.... pulseaudio
CRDA: Error: [Errno 2] El fitxer o directori no existeix
Card0.Amixer.info:
 Card hw:0 'PCH'/'HDA Intel PCH at 0xf1c00000 irq 52'
   Mixer name : 'Intel CougarPoint HDMI'
   Components : 'HDA:10ec0665,102804b6,00100003 HDA:80862805,80860101,00100000'
   Controls : 27
   Simple ctrls : 13
Date: Sat Dec 3 15:11:01 2011
HibernationDevice: RESUME=UUID=07110fa9-417f-4300-b034-16a190a16dce
InstallationMedia: Kubuntu 11.10 "Oneiric Ocelot" - Release amd64 (20111012)
MachineType: Dell Inc. Dell System XPS L502X
ProcKernelCmdLine: BOOT_IMAGE=/boot/vmlinuz-3.0.0-13-generic root=UUID=5a15ae34-5eea-4f4e-8b2a-3bfb20eb9f35 ro crashkernel=384M-2G:64M,2G-:128M quiet splash vt.handoff=7
RelatedPackageVersions:
 linux-restricted-modules-3.0.0-13-generic N/A
 linux-backports-modules-3.0.0-13-generic N/A
 linux-firmware 1.60
SourcePackage: linux
StagingDrivers: mei
UpgradeStatus: No upgrade log present (probably fresh install)
dmi.bios.date: 10/20/2011
dmi.bios.vendor: Dell Inc.
dmi.bios.version: A07
dmi.board.name: 0YR8NN
dmi.board.vendor: Dell Inc.
dmi.board.version: A00
dmi.chassis.type: 8
dmi.chassis.vendor: Dell Inc.
dmi.chassis.version: 0.1
dmi.modalias: dmi:bvnDellInc.:bvrA07:bd10/20/2011:svnDellInc.:pnDellSystemXPSL502X:pvr:rvnDellInc.:rn0YR8NN:rvrA00:cvnDellInc.:ct8:cvr0.1:
dmi.product.name: Dell System XPS L502X
dmi.sys.vendor: Dell Inc.

Revision history for this message
Albert Astals Cid (aacid) wrote :
summary: - The resolution of Display Port for intel cards is limited
+ [Patch] The resolution of Display Port for intel cards is limited
Brad Figg (brad-figg)
Changed in linux (Ubuntu):
status: New → Confirmed
Changed in linux (Ubuntu):
importance: Undecided → Medium
status: Confirmed → Triaged
Revision history for this message
Herton R. Krzesinski (herton) wrote :

@Albert: please check the patch, is the backport the same you have done for a 3.0.0 kernel? Also does the SRU description matches your issue, what hardware/resolution are you using and is giving problems?

If everything is ok I'll submit this to the kernel-team mailing list for inclusion.

Changed in linux (Ubuntu):
assignee: nobody → Herton R. Krzesinski (herton)
description: updated
Changed in linux (Ubuntu Oneiric):
importance: Undecided → Medium
assignee: nobody → Herton R. Krzesinski (herton)
Changed in linux (Ubuntu):
status: Triaged → Fix Released
Changed in linux (Ubuntu Oneiric):
status: New → In Progress
status: In Progress → Incomplete
Revision history for this message
Albert Astals Cid (aacid) wrote :

To be honest i went a much cruder way that is just

static int
intel_dp_link_required(struct intel_dp *intel_dp, int pixel_clock)
{
    struct drm_crtc *crtc = intel_dp->base.base.crtc;
    struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
    int bpp = 24;

    return (pixel_clock * bpp + 9) / 10;
}

Your patch seems to be better in the sense that it correctly calculates bpp but compared to what is in upstream it checks for
if (is_edp(intel_dp))
that upstream does not anymore. I have no knowldge of the code at all so can't comment if it is correct or not. You might want to drop by #intel-gfx in freenode and talk to them, they were quite responsive when i appeared there with my issue

I'm using a Dell XPS15 outputting at 1920x1080 (without the patch resolution is limited at something like 1200xsomething)

Revision history for this message
Herton R. Krzesinski (herton) wrote :

The if condition is different, because the code changed upstream to calculate bpp better for all pipes on >= ironlake.

But my backport was wrong, as pixel_clock * 3 == (pixel_clock * 24) / 8, so it wouldn't work for external monitors I expect, only for embedded display port configurations. Which means wouldn't work on your case, in the backport should have accounted for the else condition as well.

I'm attaching an updated patch, and will send to the list for inclusion in the ubuntu oneiric kernel.

Revision history for this message
Herton R. Krzesinski (herton) wrote :
Tim Gardner (timg-tpi)
Changed in linux (Ubuntu Oneiric):
status: Incomplete → Fix Committed
Revision history for this message
Herton R. Krzesinski (herton) wrote :

This bug is awaiting verification that the kernel for Oneiric in -proposed solves the problem (3.0.0-15.24). Please test the kernel and update this bug with the results. If the problem is solved, change the tag 'verification-needed-oneiric' to 'verification-done-oneiric'.

If verification is not done by one week from today, this fix will be dropped from the source code, and this bug will be closed.

See https://wiki.ubuntu.com/Testing/EnableProposed for documentation how to enable and use -proposed. Thank you!

tags: added: verification-needed-oneiric
Revision history for this message
Albert Astals Cid (aacid) wrote :

Verfied

tags: added: verification-done-oneiric
removed: verification-needed-oneiric
Revision history for this message
Launchpad Janitor (janitor) wrote :
Download full text (13.9 KiB)

This bug was fixed in the package linux - 3.0.0-15.25

---------------
linux (3.0.0-15.25) oneiric-proposed; urgency=low

  [Brad Figg]

  * Release Tracking Bug
    - LP: #910894

  [ Upstream Kernel Changes ]

  * Revert "clockevents: Set noop handler in clockevents_exchange_device()"
    - LP: #904569

linux (3.0.0-15.24) oneiric-proposed; urgency=low

  [Herton R. Krzesinski]

  * Release Tracking Bug
    - LP: #903188

  [ Alex Bligh ]

  * (config) Change Xen paravirt drivers to be built-in
    - LP: #886521

  [ Chase Douglas ]

  * Revert "SAUCE: HID: hid-ntrig: add support for 1b96:0006 model"
    - LP: #724831
  * Revert "SAUCE: hid: ntrig: Remove unused device ids"
    - LP: #724831

  [ Seth Forshee ]

  * SAUCE: dell-wmi: Demote unknown WMI event message to pr_debug
    - LP: #581312

  [ Upstream Kernel Changes ]

  * Revert "leds: save the delay values after a successful call to
    blink_set()"
    - LP: #893741
  * xfs: Fix possible memory corruption in xfs_readlink, CVE-2011-4077
    - LP: #887298
    - CVE-2011-4077
  * drm/i915: fix IVB cursor support
    - LP: #893222
  * drm/i915: always set FDI composite sync bit
    - LP: #893222
  * jbd/jbd2: validate sb->s_first in journal_get_superblock()
    - LP: #893148
    - CVE-2011-4132
  * ALSA: hda - Don't add elements of other codecs to vmaster slave
    - LP: #893741
  * virtio-pci: fix use after free
    - LP: #893741
  * ASoC: Don't use wm8994->control_data in wm8994_readable_register()
    - LP: #893741
  * sh: Fix cached/uncaced address calculation in 29bit mode
    - LP: #893741
  * drm/i915: Fix object refcount leak on mmappable size limit error path.
    - LP: #893741
  * drm/nouveau: initialize chan->fence.lock before use
    - LP: #893741
  * drm/radeon/kms: make an aux failure debug only
    - LP: #893741
  * ALSA: usb-audio - Check the dB-range validity in the later read, too
    - LP: #893741
  * ALSA: usb-audio - Fix the missing volume quirks at delayed init
    - LP: #893741
  * KEYS: Fix a NULL pointer deref in the user-defined key type
    - LP: #893741
  * hfs: add sanity check for file name length
    - LP: #893741
  * drm/radeon: add some missing FireMV pci ids
    - LP: #893741
  * sfi: table irq 0xFF means 'no interrupt'
    - LP: #893741
  * x86, mrst: use a temporary variable for SFI irq
    - LP: #893741
  * b43: refuse to load unsupported firmware
    - LP: #893741
  * md/raid5: abort any pending parity operations when array fails.
    - LP: #893741
  * mfd: Fix twl4030 dependencies for audio codec
    - LP: #893741
  * xen:pvhvm: enable PVHVM VCPU placement when using more than 32 CPUs.
    - LP: #893741
  * xen-gntalloc: integer overflow in gntalloc_ioctl_alloc()
    - LP: #893741
  * xen-gntalloc: signedness bug in add_grefs()
    - LP: #893741
  * powerpc/ps3: Fix lost SMP IPIs
    - LP: #893741
  * powerpc: Copy down exception vectors after feature fixups
    - LP: #893741
  * backing-dev: ensure wakeup_timer is deleted
    - LP: #893741
  * block: Always check length of all iov entries in blk_rq_map_user_iov()
    - LP: #893741
  * Linux 3.0.10
    - LP: #893741
  * drm/i915: add multi-threaded forcewake support
    - LP: #891270
  * (pre-sta...

Changed in linux (Ubuntu Oneiric):
status: Fix Committed → Fix Released
Revision history for this message
Herton R. Krzesinski (herton) wrote :

Unfortunately the backport for Oneiric had to be reverted, it caused an regression (bug 919350). Reopening the Oneiric task, fix was reverted in linux 3.0.0-16.28

Changed in linux (Ubuntu Oneiric):
status: Fix Released → Confirmed
assignee: Herton R. Krzesinski (herton) → nobody
dino99 (9d9)
Changed in linux (Ubuntu Oneiric):
status: Confirmed → Invalid
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Duplicates of this bug

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.