** Description changed:

+ 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 these 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.
+    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.
+    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.
+    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 two patches, the driver will not always set vgaswicheroo clients of
+ 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. 
+ 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 two patches, the vgaswitchroo client of audio will be
+ 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.

** Description changed:

  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.
+ 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".
  
- To fix the building error, I cherry-picked 4 more patches [3/6-6/6], and the 
purpose of those
- 4 patches is straightforward.
+ 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 these two patches to
- fix this problem and now the patches are merged to sound repository.
+ 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.
+ 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.
+ 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.
+ 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.
+ 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
+ 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.
+ 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.

-- 
You received this bug notification because you are a member of Kernel
Packages, which is subscribed to linux-oem in Ubuntu.
https://bugs.launchpad.net/bugs/1782689

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

Status in HWE Next:
  New
Status in linux package in Ubuntu:
  Incomplete
Status in linux-oem package in Ubuntu:
  New
Status in linux source package in Bionic:
  New
Status in linux-oem source package in Bionic:
  New

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.

To manage notifications about this bug go to:
https://bugs.launchpad.net/hwe-next/+bug/1782689/+subscriptions

-- 
Mailing list: https://launchpad.net/~kernel-packages
Post to     : kernel-packages@lists.launchpad.net
Unsubscribe : https://launchpad.net/~kernel-packages
More help   : https://help.launchpad.net/ListHelp

Reply via email to