HDMI/DP audio can't work on the laptop of Dell Latitude 5495

Bug #1782689 reported by Hui Wang on 2018-07-20
8
This bug affects 1 person
Affects Status Importance Assigned to Milestone
HWE Next
Undecided
Unassigned
linux (Ubuntu)
Critical
Hui Wang
Bionic
Undecided
Unassigned
linux-oem (Ubuntu)
Undecided
Unassigned
Bionic
Undecided
Unassigned

Bug Description

In the v2:
the patchset is also sent to OEM-B since the OEM project is waiting for the patchset.

The v1 introduced a building error, my investigation is shown as below:
The declaration of "enum vga_switcheroo_client_id (*get_client_id)(struct pci_dev *pdev);"and the implementation of "static int nouveau_dsm_get_client_id(struct pci_dev *pdev)"
exist in the kernel (bionic, artful) for a long time, but "-Werror=incompatible-pointer-types" didn't report it as an error, after applied these 2 patches, it is reported as an error,
that is because the patch touches the definition of "enum vga_switcheroo_client_id", before applying these 2 patches, the vga_switcheroo_client_id includes a negative numer:VGA_SWITCHEROO_UNKNOWN_ID = -1, but after applying the patches, there is no negative number anymore in the "enum vga_swicheroo_client_id".

I guess if the definition of enum includes negative number, the c compiler treat it as int type, that is why artful and bionic did not expose building error before.

To fix the building error, I cherry-picked 4 more patches [3/6-6/6], and the purpose of those 4 patches is straightforward.

In the v1:
This bug comes from the OEM project, and the engineer Jim Qu from AMD took almost 2 weeks to investigate this problem, then he worte two patches to fix this problem and now the patches are merged to sound repository.

According to Jim Qu's investigation, the root cause of this problem is:
1. there is two GPU on the system. iGPU has a audio codec for HDMI output, and dGPU is without audio codec it is only for offload rendering.
2. under runtime pm, when dGPU suspend, amdgpu will also call vgaswitchroo driver to power off audio which vgaswitchroo client is VGA_SWITCHEROO_DIS.
3. In current HDA audio driver, the iGPU's audio will register to vgaswitchroo as VGA_SWITCHEROO_DIS, therefore, the audio will be selected and powered off by runtime pm.

[Impact]
On the Dell Latitude 5495, If we plug a monitor with audio capability to the HDMI/DP ports, we can't find HDMI/DP audio sinks as expected, then we can't play any sound through HDMI/DP audio.

[Fix]
With these 6 patches, the driver will not always set vgaswicheroo clients of HDA audio as VGA_SWITCHEROO_DIS, it will set it to _DIS or _IGD with the help of callback function of DRM drivers. So on this machine, the vgaswicheroo client will be set _IGD, then it will not be powered off when discrete gpu is powered off.

[Test Case]
We tested plug/unplug detection and playback through HDMI/DP audio, everything works well.

[Regression Potential]
Very low, without these 6 patches, the vgaswitchroo client of audio will be set to _DIS unconditionally, it did not expose any problem because in the past, all the HDMI/DP audio codecs are in the discreate GPU. But on Latitude 5495, the HDMI/DP audio codec is in the integrated GPU, so we need to change the driver to let DRM driver decide if it is _DIS or _IGD, it will not introduce regression for
old mahcines on old machines, the client will be set to _DIS as before.

And we have tested these two patches on some old machines with two gpus like A+A, I+A and I+N, all of them worked well as before.

Hui Wang (hui.wang) on 2018-07-20
tags: added: originate-from-1775331 somerville
Changed in linux (Ubuntu):
importance: Undecided → Critical

This bug is missing log files that will aid in diagnosing the problem. While running an Ubuntu kernel (not a mainline or third-party kernel) please enter the following command in a terminal window:

apport-collect 1782689

and then change the status of the bug to 'Confirmed'.

If, due to the nature of the issue you have encountered, you are unable to run this command, please add a comment stating that fact and change the bug status to 'Confirmed'.

This change has been made by an automated script, maintained by the Ubuntu Kernel Team.

Changed in linux (Ubuntu):
status: New → Incomplete
Hui Wang (hui.wang) on 2018-07-20
description: updated
Hui Wang (hui.wang) on 2018-07-31
description: updated
Hui Wang (hui.wang) on 2018-07-31
description: updated
Changed in linux (Ubuntu Bionic):
status: New → Fix Committed
Seth Forshee (sforshee) on 2018-08-01
Changed in linux (Ubuntu):
status: Incomplete → Fix Committed
Brad Figg (brad-figg) wrote :

This bug is awaiting verification that the kernel in -proposed solves the problem. Please test the kernel and update this bug with the results. If the problem is solved, change the tag 'verification-needed-bionic' to 'verification-done-bionic'. If the problem still exists, change the tag 'verification-needed-bionic' to 'verification-failed-bionic'.

If verification is not done by 5 working days 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-bionic
Launchpad Janitor (janitor) wrote :
Download full text (30.8 KiB)

This bug was fixed in the package linux - 4.17.0-7.8

---------------
linux (4.17.0-7.8) cosmic; urgency=medium

  * linux: 4.17.0-7.8 -proposed tracker (LP: #1785242)

  * Cosmic update to 4.17.12 stable release (LP: #1785211)
    - spi: spi-s3c64xx: Fix system resume support
    - Input: elan_i2c - add ACPI ID for lenovo ideapad 330
    - Input: i8042 - add Lenovo LaVie Z to the i8042 reset list
    - Input: elan_i2c - add another ACPI ID for Lenovo Ideapad 330-15AST
    - mm: disallow mappings that conflict for devm_memremap_pages()
    - kvm, mm: account shadow page tables to kmemcg
    - delayacct: fix crash in delayacct_blkio_end() after delayacct init failure
    - tracing: Fix double free of event_trigger_data
    - tracing: Fix possible double free in event_enable_trigger_func()
    - kthread, tracing: Don't expose half-written comm when creating kthreads
    - tracing/kprobes: Fix trace_probe flags on enable_trace_kprobe() failure
    - tracing: Quiet gcc warning about maybe unused link variable
    - arm64: fix vmemmap BUILD_BUG_ON() triggering on !vmemmap setups
    - drm/i915/glk: Add Quirk for GLK NUC HDMI port issues.
    - mlxsw: spectrum_switchdev: Fix port_vlan refcounting
    - kcov: ensure irq code sees a valid area
    - mm: check for SIGKILL inside dup_mmap() loop
    - drm/amd/powerplay: Set higher SCLK&MCLK frequency than dpm7 in OD (v2)
    - xen/netfront: raise max number of slots in xennet_get_responses()
    - hv_netvsc: fix network namespace issues with VF support
    - skip LAYOUTRETURN if layout is invalid
    - ixgbe: Fix setting of TC configuration for macvlan case
    - ALSA: emu10k1: add error handling for snd_ctl_add
    - ALSA: fm801: add error handling for snd_ctl_add
    - NFSv4.1: Fix the client behaviour on NFS4ERR_SEQ_FALSE_RETRY
    - nfsd: fix error handling in nfs4_set_delegation()
    - nfsd: fix potential use-after-free in nfsd4_decode_getdeviceinfo
    - vfio: platform: Fix reset module leak in error path
    - vfio/mdev: Check globally for duplicate devices
    - vfio/type1: Fix task tracking for QEMU vCPU hotplug
    - kernel/hung_task.c: show all hung tasks before panic
    - mem_cgroup: make sure moving_account, move_lock_task and stat_cpu in the
      same cacheline
    - mm: /proc/pid/pagemap: hide swap entries from unprivileged users
    - mm: vmalloc: avoid racy handling of debugobjects in vunmap
    - mm/slub.c: add __printf verification to slab_err()
    - rtc: ensure rtc_set_alarm fails when alarms are not supported
    - rxrpc: Fix terminal retransmission connection ID to include the channel
    - perf tools: Fix pmu events parsing rule
    - netfilter: ipset: forbid family for hash:mac sets
    - netfilter: ipset: List timing out entries with "timeout 1" instead of zero
    - irqchip/ls-scfg-msi: Map MSIs in the iommu
    - watchdog: da9063: Fix updating timeout value
    - media: arch: sh: migor: Fix TW9910 PDN gpio
    - printk: drop in_nmi check from printk_safe_flush_on_panic()
    - bpf, arm32: fix inconsistent naming about emit_a32_lsr_{r64,i64}
    - ceph: fix alignment of rasize
    - ceph: fix use-after-free in ceph_statfs()
    - e1000e: Ignore TSYNCRXCTL when getting I219...

Changed in linux (Ubuntu):
status: Fix Committed → Fix Released
Launchpad Janitor (janitor) wrote :
Download full text (35.6 KiB)

This bug was fixed in the package linux - 4.15.0-33.36

---------------
linux (4.15.0-33.36) bionic; urgency=medium

  * linux: 4.15.0-33.36 -proposed tracker (LP: #1787149)

  * RTNL assertion failure on ipvlan (LP: #1776927)
    - ipvlan: drop ipv6 dependency
    - ipvlan: use per device spinlock to protect addrs list updates
    - SAUCE: fix warning from "ipvlan: drop ipv6 dependency"

  * ubuntu_bpf_jit test failed on Bionic s390x systems (LP: #1753941)
    - test_bpf: flag tests that cannot be jited on s390

  * HDMI/DP audio can't work on the laptop of Dell Latitude 5495 (LP: #1782689)
    - drm/nouveau: fix nouveau_dsm_get_client_id()'s return type
    - drm/radeon: fix radeon_atpx_get_client_id()'s return type
    - drm/amdgpu: fix amdgpu_atpx_get_client_id()'s return type
    - platform/x86: apple-gmux: fix gmux_get_client_id()'s return type
    - ALSA: hda: use PCI_BASE_CLASS_DISPLAY to replace PCI_CLASS_DISPLAY_VGA
    - vga_switcheroo: set audio client id according to bound GPU id

  * locking sockets broken due to missing AppArmor socket mediation patches
    (LP: #1780227)
    - UBUNTU SAUCE: apparmor: fix apparmor mediating locking non-fs, unix sockets

  * Update2 for ocxl driver (LP: #1781436)
    - ocxl: Fix page fault handler in case of fault on dying process

  * netns: unable to follow an interface that moves to another netns
    (LP: #1774225)
    - net: core: Expose number of link up/down transitions
    - dev: always advertise the new nsid when the netns iface changes
    - dev: advertise the new ifindex when the netns iface changes

  * [Bionic] Disk IO hangs when using BFQ as io scheduler (LP: #1780066)
    - block, bfq: fix occurrences of request finish method's old name
    - block, bfq: remove batches of confusing ifdefs
    - block, bfq: add requeue-request hook

  * HP ProBook 455 G5 needs mute-led-gpio fixup (LP: #1781763)
    - ALSA: hda: add mute led support for HP ProBook 455 G5

  * [Bionic] bug fixes to improve stability of the ThunderX2 i2c driver
    (LP: #1781476)
    - i2c: xlp9xx: Fix issue seen when updating receive length
    - i2c: xlp9xx: Make sure the transfer size is not more than
      I2C_SMBUS_BLOCK_SIZE

  * x86/kvm: fix LAPIC timer drift when guest uses periodic mode (LP: #1778486)
    - x86/kvm: fix LAPIC timer drift when guest uses periodic mode

  * Please include ax88179_178a and r8152 modules in d-i udeb (LP: #1771823)
    - [Config:] d-i: Add ax88179_178a and r8152 to nic-modules

  * Nvidia fails after switching its mode (LP: #1778658)
    - PCI: Restore config space on runtime resume despite being unbound

  * Kernel error "task zfs:pid blocked for more than 120 seconds" (LP: #1781364)
    - SAUCE: (noup) zfs to 0.7.5-1ubuntu16.3

  * CVE-2018-12232
    - PATCH 1/1] socket: close race condition between sock_close() and
      sockfs_setattr()

  * CVE-2018-10323
    - xfs: set format back to extents if xfs_bmap_extents_to_btree

  * change front mic location for more lenovo m7/8/9xx machines (LP: #1781316)
    - ALSA: hda/realtek - Fix the problem of two front mics on more machines
    - ALSA: hda/realtek - two more lenovo models need fixup of MIC_LOCATION

  * Cephfs + fscache: unab...

Changed in linux (Ubuntu Bionic):
status: Fix Committed → Fix Released
Launchpad Janitor (janitor) wrote :

This bug was fixed in the package linux-oem - 4.15.0-1017.20

---------------
linux-oem (4.15.0-1017.20) bionic; urgency=medium

  * linux-oem: 4.15.0-1017.20 -proposed tracker (LP: #1787544)

  * Bluetooth: Redpine: Bionics: L2test transfer is failed to start in Ubuntu
    18.04 (LP: #1781895)
    - SAUCE: Bluetooth: btrsi: fix l2test data transfer issue

  * [Redpine] Upgrades to improve throughput and stability (LP: #1782070)
    - SAUCE: rsi: Fix for low throughput issue
    - SAUCE: rsi: Set wowlan flag while writing wowlan config parameters
    - SAUCE: rsi: Add debug support for wowlan wakeup confirmation
    - Bluetooth: btrsi: rework dependencies
    - rsi: fix error path handling in SDIO probe
    - rsi: Add null check for virtual interfaces in wowlan config
    - SAUCE: rsi: Fix for wowlan hibernate resume issue
    - SAUCE: rsi: Firmware assert (version 2)
    - SAUCE: rsi: Fix for WoWLAN wakeup in security mode.
    - SAUCE: rsi: Optimizing virtual interfaces
    - SAUCE: rsi: disable p2p device mode support

 -- Chia-Lin Kao (AceLan) <email address hidden> Fri, 17 Aug 2018 15:53:57 +0800

Changed in linux-oem (Ubuntu Bionic):
status: New → Fix Released
Changed in linux-oem (Ubuntu):
status: New → Invalid
Changed in hwe-next:
status: New → Fix Released
Changed in linux-oem (Ubuntu):
status: Invalid → Fix Released
Hui Wang (hui.wang) on 2018-09-14
tags: added: verification-done-bionic
removed: verification-needed-bionic
Brad Figg (brad-figg) on 2019-07-24
tags: added: cscc
To post a comment you must log in.
This report contains Public information  Edit
Everyone can see this information.

Other bug subscribers