mbox series

[v11,0/7] Qualcomm's lpass-hdmi ASoC driver to support audio over dp port

Message ID 1602134223-2562-1-git-send-email-srivasam@codeaurora.org
Headers show
Series Qualcomm's lpass-hdmi ASoC driver to support audio over dp port | expand

Message

Srinivasa Rao Mandadapu Oct. 8, 2020, 5:16 a.m. UTC
These patches are to support audio over DP port on Qualcomm's SC7180 LPASS
Asoc. It includes machine driver, cpu driver, platform driver updates for 
HDMI path support, device tree documention, lpass variant structure 
optimization and configuration changes.
These patches depends on the DP patch series
https://patchwork.kernel.org/project/dri-devel/list/?series=332029
https://lore.kernel.org/patchwork/project/lkml/list/?series=464856

changes since V10:
    -- Moved hdmi regmap functions from lpass-hdmi.c to lpass-cpu.c
    -- Moved QCOM_REGMAP_FIELD_ALLOC macro from lpass-hdmi.c to lpass.h
changes since V9:
    -- Removed unused structures lpass_hdmi.h
changes since V8:
    -- Removed redundant structure wrapper for reg map field memebrs
    -- Updated lpass_hdmi_regmap_volatile API with appropriate registers as true
       and others as false.
changes since V7:
    -- Fixed typo errors
    -- Created Separate patch for buffer size change 
changes since V6:
    -- Removed compile time define flag, which used for enabling
     HDMI code, based on corresponding config param is included.
    -- Updated reg map alloc API with reg map bulk API.
    -- Removed unnecessary line splits
changes since V5:
    -- Removed unused struct regmap *map in lpass_platform_alloc_hdmidmactl_fields.
    -- DMA alloc and free API signature change in lpass-apq8016.c, lpass-ipq806x.c 
    -- Keeping API "irqreturn_t lpass_platform_hdmiif_irq" under ifdef macro
Changes Since v4:
    -- Updated with single compatible node for both I2S and HDMI.
Changes Since v3:
    -- Removed id in lpass variant structure and used snd_soc_dai_driver id.
Changes Since v2:
    -- Audio buffer size(i.e. LPASS_PLATFORM_BUFFER_SIZE) in lpass-platform.c increased.
Changes Since v1:
    -- Commit messages are updated
    -- Addressed Rob Herring review comments

V Sujith Kumar Reddy (7):
  ASoC: Add sc7180-lpass binding header hdmi define
  ASoC: dt-bindings: Add dt binding for lpass hdmi
  Asoc:qcom:lpass-cpu:Update dts property read API
  Asoc: qcom: lpass:Update lpaif_dmactl members order
  ASoC: qcom: Add support for lpass hdmi driver
  Asoc: qcom: lpass-platform : Increase buffer size
  ASoC: qcom: sc7180: Add support for audio over DP

 .../devicetree/bindings/sound/qcom,lpass-cpu.yaml  |  74 ++--
 include/dt-bindings/sound/sc7180-lpass.h           |   1 +
 sound/soc/qcom/Kconfig                             |   5 +
 sound/soc/qcom/Makefile                            |   2 +
 sound/soc/qcom/lpass-apq8016.c                     |   4 +-
 sound/soc/qcom/lpass-cpu.c                         | 249 ++++++++++++-
 sound/soc/qcom/lpass-hdmi.c                        | 258 ++++++++++++++
 sound/soc/qcom/lpass-hdmi.h                        | 102 ++++++
 sound/soc/qcom/lpass-ipq806x.c                     |   4 +-
 sound/soc/qcom/lpass-lpaif-reg.h                   |  49 ++-
 sound/soc/qcom/lpass-platform.c                    | 395 +++++++++++++++++----
 sound/soc/qcom/lpass-sc7180.c                      | 116 +++++-
 sound/soc/qcom/lpass.h                             | 124 ++++++-
 13 files changed, 1240 insertions(+), 143 deletions(-)
 create mode 100644 sound/soc/qcom/lpass-hdmi.c
 create mode 100644 sound/soc/qcom/lpass-hdmi.h

Comments

Srinivas Kandagatla Oct. 8, 2020, 5:37 a.m. UTC | #1
On 08/10/2020 06:16, Srinivasa Rao Mandadapu wrote:
> These patches are to support audio over DP port on Qualcomm's SC7180 LPASS
> Asoc. It includes machine driver, cpu driver, platform driver updates for
> HDMI path support, device tree documention, lpass variant structure
> optimization and configuration changes.
> These patches depends on the DP patch series
> https://patchwork.kernel.org/project/dri-devel/list/?series=332029
> https://lore.kernel.org/patchwork/project/lkml/list/?series=464856
> 
> changes since V10:
>      -- Moved hdmi regmap functions from lpass-hdmi.c to lpass-cpu.c
>      -- Moved QCOM_REGMAP_FIELD_ALLOC macro from lpass-hdmi.c to lpass.h
> changes since V9:
>      -- Removed unused structures lpass_hdmi.h
> changes since V8:
>      -- Removed redundant structure wrapper for reg map field memebrs
>      -- Updated lpass_hdmi_regmap_volatile API with appropriate registers as true
>         and others as false.
> changes since V7:
>      -- Fixed typo errors
>      -- Created Separate patch for buffer size change
> changes since V6:
>      -- Removed compile time define flag, which used for enabling
>       HDMI code, based on corresponding config param is included.
>      -- Updated reg map alloc API with reg map bulk API.
>      -- Removed unnecessary line splits
> changes since V5:
>      -- Removed unused struct regmap *map in lpass_platform_alloc_hdmidmactl_fields.
>      -- DMA alloc and free API signature change in lpass-apq8016.c, lpass-ipq806x.c
>      -- Keeping API "irqreturn_t lpass_platform_hdmiif_irq" under ifdef macro
> Changes Since v4:
>      -- Updated with single compatible node for both I2S and HDMI.
> Changes Since v3:
>      -- Removed id in lpass variant structure and used snd_soc_dai_driver id.
> Changes Since v2:
>      -- Audio buffer size(i.e. LPASS_PLATFORM_BUFFER_SIZE) in lpass-platform.c increased.
> Changes Since v1:
>      -- Commit messages are updated
>      -- Addressed Rob Herring review comments
> 
> V Sujith Kumar Reddy (7):
>    ASoC: Add sc7180-lpass binding header hdmi define
>    ASoC: dt-bindings: Add dt binding for lpass hdmi
>    Asoc:qcom:lpass-cpu:Update dts property read API
>    Asoc: qcom: lpass:Update lpaif_dmactl members order
>    ASoC: qcom: Add support for lpass hdmi driver
>    Asoc: qcom: lpass-platform : Increase buffer size
>    ASoC: qcom: sc7180: Add support for audio over DP
> 
>   .../devicetree/bindings/sound/qcom,lpass-cpu.yaml  |  74 ++--
>   include/dt-bindings/sound/sc7180-lpass.h           |   1 +
>   sound/soc/qcom/Kconfig                             |   5 +
>   sound/soc/qcom/Makefile                            |   2 +
>   sound/soc/qcom/lpass-apq8016.c                     |   4 +-
>   sound/soc/qcom/lpass-cpu.c                         | 249 ++++++++++++-
>   sound/soc/qcom/lpass-hdmi.c                        | 258 ++++++++++++++
>   sound/soc/qcom/lpass-hdmi.h                        | 102 ++++++
>   sound/soc/qcom/lpass-ipq806x.c                     |   4 +-
>   sound/soc/qcom/lpass-lpaif-reg.h                   |  49 ++-
>   sound/soc/qcom/lpass-platform.c                    | 395 +++++++++++++++++----
>   sound/soc/qcom/lpass-sc7180.c                      | 116 +++++-
>   sound/soc/qcom/lpass.h                             | 124 ++++++-
>   13 files changed, 1240 insertions(+), 143 deletions(-)
>   create mode 100644 sound/soc/qcom/lpass-hdmi.c
>   create mode 100644 sound/soc/qcom/lpass-hdmi.h
> 

Tested this series on DragonBoard 410c

Tested-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
Reviewed-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
Srinivas Kandagatla Oct. 8, 2020, 5:37 a.m. UTC | #2
On 08/10/2020 06:17, Srinivasa Rao Mandadapu wrote:
> From: V Sujith Kumar Reddy <vsujithk@codeaurora.org>
> 
> Upadate lpass cpu and platform driver to support audio over dp.
> Also add lpass-hdmi.c and lpass-hdmi.h.
> 
> Signed-off-by: V Sujith Kumar Reddy <vsujithk@codeaurora.org>
> Signed-off-by: Srinivasa Rao <srivasam@codeaurora.org>
> ---
>   sound/soc/qcom/Kconfig           |   5 +
>   sound/soc/qcom/Makefile          |   2 +
>   sound/soc/qcom/lpass-apq8016.c   |   4 +-
>   sound/soc/qcom/lpass-cpu.c       | 247 ++++++++++++++++++++++++-
>   sound/soc/qcom/lpass-hdmi.c      | 258 ++++++++++++++++++++++++++
>   sound/soc/qcom/lpass-hdmi.h      | 102 +++++++++++
>   sound/soc/qcom/lpass-ipq806x.c   |   4 +-
>   sound/soc/qcom/lpass-lpaif-reg.h |  49 +++--
>   sound/soc/qcom/lpass-platform.c  | 383 ++++++++++++++++++++++++++++++++-------
>   sound/soc/qcom/lpass.h           | 118 +++++++++++-
>   10 files changed, 1075 insertions(+), 97 deletions(-)
>   create mode 100644 sound/soc/qcom/lpass-hdmi.c
>   create mode 100644 sound/soc/qcom/lpass-hdmi.h
> 

Reviewed-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
Mark Brown Oct. 8, 2020, 10:01 p.m. UTC | #3
On Thu, 8 Oct 2020 10:46:56 +0530, Srinivasa Rao Mandadapu wrote:
> These patches are to support audio over DP port on Qualcomm's SC7180 LPASS
> Asoc. It includes machine driver, cpu driver, platform driver updates for
> HDMI path support, device tree documention, lpass variant structure
> optimization and configuration changes.
> These patches depends on the DP patch series
> https://patchwork.kernel.org/project/dri-devel/list/?series=332029
> https://lore.kernel.org/patchwork/project/lkml/list/?series=464856
> 
> [...]

Applied to

   https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git for-next

Thanks!

[1/7] ASoC: Add sc7180-lpass binding header hdmi define
      commit: 12fbfc4cabec65950bb0cc10eab0fc5c4c4d039f
[2/7] ASoC: dt-bindings: Add dt binding for lpass hdmi
      commit: 8e3fdc52ccc64c64912b4785a39f525db9db1fbc
[3/7] Asoc:qcom:lpass-cpu:Update dts property read API
      commit: 4049a3b87847fec754632d233bffbd608364917f
[4/7] Asoc: qcom: lpass:Update lpaif_dmactl members order
      commit: d9e8e61243958409645c18c9267b6dbaaaf22364
[5/7] ASoC: qcom: Add support for lpass hdmi driver
      commit: 7cb37b7bd0d3c93e381ae7abf30971819966bd9d
[6/7] Asoc: qcom: lpass-platform : Increase buffer size
      commit: 03f20e209d07968c410fc404b3d636dc446d3ef2
[7/7] ASoC: qcom: sc7180: Add support for audio over DP
      commit: 2ad63dc8df6b6108aee82dc77c820e3918bc0a65

All being well this means that it will be integrated into the linux-next
tree (usually sometime in the next 24 hours) and sent to Linus during
the next merge window (or sooner if it is a bug fix), however if
problems are discovered then the patch may be dropped or reverted.

You may get further e-mails resulting from automated or manual testing
and review of the tree, please engage with people reporting problems and
send followup patches addressing any issues that are reported if needed.

If any updates are required or you are submitting further changes they
should be sent as incremental updates against current git, existing
patches will not be replaced.

Please add any relevant lists and maintainers to the CCs when replying
to this mail.

Thanks,
Mark
Stephan Gerhold Jan. 13, 2021, 8:08 p.m. UTC | #4
Hi Srinivas,

On Thu, Oct 08, 2020 at 06:37:40AM +0100, Srinivas Kandagatla wrote:
> On 08/10/2020 06:16, Srinivasa Rao Mandadapu wrote:
> > These patches are to support audio over DP port on Qualcomm's SC7180 LPASS
> > Asoc. It includes machine driver, cpu driver, platform driver updates for
> > HDMI path support, device tree documention, lpass variant structure
> > optimization and configuration changes.
> > These patches depends on the DP patch series
> > https://patchwork.kernel.org/project/dri-devel/list/?series=332029
> > https://lore.kernel.org/patchwork/project/lkml/list/?series=464856
> > 
> > changes since V10:
> >      -- Moved hdmi regmap functions from lpass-hdmi.c to lpass-cpu.c
> >      -- Moved QCOM_REGMAP_FIELD_ALLOC macro from lpass-hdmi.c to lpass.h
> > changes since V9:
> >      -- Removed unused structures lpass_hdmi.h
> > changes since V8:
> >      -- Removed redundant structure wrapper for reg map field memebrs
> >      -- Updated lpass_hdmi_regmap_volatile API with appropriate registers as true
> >         and others as false.
> > changes since V7:
> >      -- Fixed typo errors
> >      -- Created Separate patch for buffer size change
> > changes since V6:
> >      -- Removed compile time define flag, which used for enabling
> >       HDMI code, based on corresponding config param is included.
> >      -- Updated reg map alloc API with reg map bulk API.
> >      -- Removed unnecessary line splits
> > changes since V5:
> >      -- Removed unused struct regmap *map in lpass_platform_alloc_hdmidmactl_fields.
> >      -- DMA alloc and free API signature change in lpass-apq8016.c, lpass-ipq806x.c
> >      -- Keeping API "irqreturn_t lpass_platform_hdmiif_irq" under ifdef macro
> > Changes Since v4:
> >      -- Updated with single compatible node for both I2S and HDMI.
> > Changes Since v3:
> >      -- Removed id in lpass variant structure and used snd_soc_dai_driver id.
> > Changes Since v2:
> >      -- Audio buffer size(i.e. LPASS_PLATFORM_BUFFER_SIZE) in lpass-platform.c increased.
> > Changes Since v1:
> >      -- Commit messages are updated
> >      -- Addressed Rob Herring review comments
> > 
> > V Sujith Kumar Reddy (7):
> >    ASoC: Add sc7180-lpass binding header hdmi define
> >    ASoC: dt-bindings: Add dt binding for lpass hdmi
> >    Asoc:qcom:lpass-cpu:Update dts property read API
> >    Asoc: qcom: lpass:Update lpaif_dmactl members order
> >    ASoC: qcom: Add support for lpass hdmi driver
> >    Asoc: qcom: lpass-platform : Increase buffer size
> >    ASoC: qcom: sc7180: Add support for audio over DP
> > 
> >   .../devicetree/bindings/sound/qcom,lpass-cpu.yaml  |  74 ++--
> >   include/dt-bindings/sound/sc7180-lpass.h           |   1 +
> >   sound/soc/qcom/Kconfig                             |   5 +
> >   sound/soc/qcom/Makefile                            |   2 +
> >   sound/soc/qcom/lpass-apq8016.c                     |   4 +-
> >   sound/soc/qcom/lpass-cpu.c                         | 249 ++++++++++++-
> >   sound/soc/qcom/lpass-hdmi.c                        | 258 ++++++++++++++
> >   sound/soc/qcom/lpass-hdmi.h                        | 102 ++++++
> >   sound/soc/qcom/lpass-ipq806x.c                     |   4 +-
> >   sound/soc/qcom/lpass-lpaif-reg.h                   |  49 ++-
> >   sound/soc/qcom/lpass-platform.c                    | 395 +++++++++++++++++----
> >   sound/soc/qcom/lpass-sc7180.c                      | 116 +++++-
> >   sound/soc/qcom/lpass.h                             | 124 ++++++-
> >   13 files changed, 1240 insertions(+), 143 deletions(-)
> >   create mode 100644 sound/soc/qcom/lpass-hdmi.c
> >   create mode 100644 sound/soc/qcom/lpass-hdmi.h
> > 
> 
> Tested this series on DragonBoard 410c
> 
> Tested-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
> Reviewed-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>

I spent quite some time today trying to track down another regression
for MSM8916/DragonBoard 410c audio in 5.10 and identified this patch
series as the cause. So I'm very surprised that you successfully tested
this on DB410c.

Attempting to play HDMI audio results in:

  ADV7533: lpass_platform_pcmops_hw_params: invalid  interface: 3
  ADV7533: lpass_platform_pcmops_trigger: invalid 3 interface
  apq8016-lpass-cpu 7708000.audio-controller: ASoC: error at soc_component_trigger on 7708000.audio-controller: -22

Attempting to record analog audio results in:

  Unable to handle kernel NULL pointer dereference at virtual address 00000000000001e4
  Internal error: Oops: 96000004 [#1] PREEMPT SMP
  CPU: 1 PID: 1568 Comm: arecord Not tainted 5.11.0-rc3 #20
  Hardware name: Qualcomm Technologies, Inc. APQ 8016 SBC (DT)
  pc : regmap_write+0x14/0x80
  lr : lpass_platform_pcmops_open+0xd8/0x210 [snd_soc_lpass_platform]
  Call trace:
   regmap_write+0x14/0x80
   lpass_platform_pcmops_open+0xd8/0x210 [snd_soc_lpass_platform]
   snd_soc_component_open+0x2c/0x94
   ...

Looking at the changes in "ASoC: qcom: Add support for lpass hdmi driver"
there is a quite obvious mistake there. lpass.h now contains

#include <dt-bindings/sound/sc7180-lpass.h>

and then the SC7810 DAI IDs are hardcoded all over lpass-cpu.c and
lpass-platform.c. But apq8016 and ipq806x have completely different
DAI IDs so now MI2S_QUATERNARY (HDMI) is invalid and
MI2S_TERTIARY (= LPASS_DP_RX in sc7180-lpass.h) is treated as HDMI port.

Effectively LPASS is broken on all platforms except SC7810.

I have a patch prepared to fix this (will send it tomorrow),
but I wonder how you have tested this successfully on DB410c. :)

Stephan
Srinivas Kandagatla Jan. 13, 2021, 10:24 p.m. UTC | #5
Hi Stephan,

On 13/01/2021 20:08, Stephan Gerhold wrote:
> Hi Srinivas,
> 
> On Thu, Oct 08, 2020 at 06:37:40AM +0100, Srinivas Kandagatla wrote:
>> On 08/10/2020 06:16, Srinivasa Rao Mandadapu wrote:
>>> These patches are to support audio over DP port on Qualcomm's SC7180 LPASS
>>> Asoc. It includes machine driver, cpu driver, platform driver updates for
>>> HDMI path support, device tree documention, lpass variant structure
>>> optimization and configuration changes.
>>> These patches depends on the DP patch series
>>> https://patchwork.kernel.org/project/dri-devel/list/?series=332029
>>> https://lore.kernel.org/patchwork/project/lkml/list/?series=464856
>>>
>>> changes since V10:
>>>       -- Moved hdmi regmap functions from lpass-hdmi.c to lpass-cpu.c
>>>       -- Moved QCOM_REGMAP_FIELD_ALLOC macro from lpass-hdmi.c to lpass.h
>>> changes since V9:
>>>       -- Removed unused structures lpass_hdmi.h
>>> changes since V8:
>>>       -- Removed redundant structure wrapper for reg map field memebrs
>>>       -- Updated lpass_hdmi_regmap_volatile API with appropriate registers as true
>>>          and others as false.
>>> changes since V7:
>>>       -- Fixed typo errors
>>>       -- Created Separate patch for buffer size change
>>> changes since V6:
>>>       -- Removed compile time define flag, which used for enabling
>>>        HDMI code, based on corresponding config param is included.
>>>       -- Updated reg map alloc API with reg map bulk API.
>>>       -- Removed unnecessary line splits
>>> changes since V5:
>>>       -- Removed unused struct regmap *map in lpass_platform_alloc_hdmidmactl_fields.
>>>       -- DMA alloc and free API signature change in lpass-apq8016.c, lpass-ipq806x.c
>>>       -- Keeping API "irqreturn_t lpass_platform_hdmiif_irq" under ifdef macro
>>> Changes Since v4:
>>>       -- Updated with single compatible node for both I2S and HDMI.
>>> Changes Since v3:
>>>       -- Removed id in lpass variant structure and used snd_soc_dai_driver id.
>>> Changes Since v2:
>>>       -- Audio buffer size(i.e. LPASS_PLATFORM_BUFFER_SIZE) in lpass-platform.c increased.
>>> Changes Since v1:
>>>       -- Commit messages are updated
>>>       -- Addressed Rob Herring review comments
>>>
>>> V Sujith Kumar Reddy (7):
>>>     ASoC: Add sc7180-lpass binding header hdmi define
>>>     ASoC: dt-bindings: Add dt binding for lpass hdmi
>>>     Asoc:qcom:lpass-cpu:Update dts property read API
>>>     Asoc: qcom: lpass:Update lpaif_dmactl members order
>>>     ASoC: qcom: Add support for lpass hdmi driver
>>>     Asoc: qcom: lpass-platform : Increase buffer size
>>>     ASoC: qcom: sc7180: Add support for audio over DP
>>>
>>>    .../devicetree/bindings/sound/qcom,lpass-cpu.yaml  |  74 ++--
>>>    include/dt-bindings/sound/sc7180-lpass.h           |   1 +
>>>    sound/soc/qcom/Kconfig                             |   5 +
>>>    sound/soc/qcom/Makefile                            |   2 +
>>>    sound/soc/qcom/lpass-apq8016.c                     |   4 +-
>>>    sound/soc/qcom/lpass-cpu.c                         | 249 ++++++++++++-
>>>    sound/soc/qcom/lpass-hdmi.c                        | 258 ++++++++++++++
>>>    sound/soc/qcom/lpass-hdmi.h                        | 102 ++++++
>>>    sound/soc/qcom/lpass-ipq806x.c                     |   4 +-
>>>    sound/soc/qcom/lpass-lpaif-reg.h                   |  49 ++-
>>>    sound/soc/qcom/lpass-platform.c                    | 395 +++++++++++++++++----
>>>    sound/soc/qcom/lpass-sc7180.c                      | 116 +++++-
>>>    sound/soc/qcom/lpass.h                             | 124 ++++++-
>>>    13 files changed, 1240 insertions(+), 143 deletions(-)
>>>    create mode 100644 sound/soc/qcom/lpass-hdmi.c
>>>    create mode 100644 sound/soc/qcom/lpass-hdmi.h
>>>
>>
>> Tested this series on DragonBoard 410c
>>
>> Tested-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
>> Reviewed-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
> 
> I spent quite some time today trying to track down another regression
> for MSM8916/DragonBoard 410c audio in 5.10 and identified this patch
> series as the cause. So I'm very surprised that you successfully tested
> this on DB410c.
> 
> Attempting to play HDMI audio results in:
> 
>    ADV7533: lpass_platform_pcmops_hw_params: invalid  interface: 3
>    ADV7533: lpass_platform_pcmops_trigger: invalid 3 interface
>    apq8016-lpass-cpu 7708000.audio-controller: ASoC: error at soc_component_trigger on 7708000.audio-controller: -22
> 
> Attempting to record analog audio results in:
> 
>    Unable to handle kernel NULL pointer dereference at virtual address 00000000000001e4
>    Internal error: Oops: 96000004 [#1] PREEMPT SMP
>    CPU: 1 PID: 1568 Comm: arecord Not tainted 5.11.0-rc3 #20
>    Hardware name: Qualcomm Technologies, Inc. APQ 8016 SBC (DT)
>    pc : regmap_write+0x14/0x80
>    lr : lpass_platform_pcmops_open+0xd8/0x210 [snd_soc_lpass_platform]
>    Call trace:
>     regmap_write+0x14/0x80
>     lpass_platform_pcmops_open+0xd8/0x210 [snd_soc_lpass_platform]
>     snd_soc_component_open+0x2c/0x94
>     ...
> 
> Looking at the changes in "ASoC: qcom: Add support for lpass hdmi driver"
> there is a quite obvious mistake there. lpass.h now contains
>

We did hit these two bugs recently while June was testing a platform 
based of 410c.

we had to these 2 fixes in his dev branch

https://paste.ubuntu.com/p/MCbpBgH7JV/

and a hack:
https://paste.ubuntu.com/p/GYDSDmJt7Y/

I got side tracked with other stuff, so I could not cleanup the lpass 
hack patch to send it!

With this two patches June was able to test all the usecases for 410c.

> #include <dt-bindings/sound/sc7180-lpass.h>
> 
> and then the SC7810 DAI IDs are hardcoded all over lpass-cpu.c and
> lpass-platform.c. But apq8016 and ipq806x have completely different
> DAI IDs so now MI2S_QUATERNARY (HDMI) is invalid and
> MI2S_TERTIARY (= LPASS_DP_RX in sc7180-lpass.h) is treated as HDMI port.
> 
Yes, this basically overwritten some of the defines. Specially 
MI2S_TERTIARY and MI2S_QUATERNARY

We should probably consolidate these defines to a single lpass.h file in 
include/dt-bindings/ and not split them into soc specific.

> Effectively LPASS is broken on all platforms except SC7810.
> 
> I have a patch prepared to fix this (will send it tomorrow),
> but I wonder how you have tested this successfully on DB410c. :)
My tests are pretty basic headset/speaker playback cases, this basically 
tests PRIMARY and SECONDARY MI2S and not MI2S_TERTIARY or QUAT MI2S.

June reported this to me some time during Christmas.

Look forward to review your patches!

--srini

> 
> Stephan
>
Stephan Gerhold Jan. 14, 2021, 7:59 a.m. UTC | #6
Hi,

On Wed, Jan 13, 2021 at 10:24:49PM +0000, Srinivas Kandagatla wrote:
> On 13/01/2021 20:08, Stephan Gerhold wrote:
> > On Thu, Oct 08, 2020 at 06:37:40AM +0100, Srinivas Kandagatla wrote:
> > > On 08/10/2020 06:16, Srinivasa Rao Mandadapu wrote:
> > > > These patches are to support audio over DP port on Qualcomm's SC7180 LPASS
> > > > Asoc. It includes machine driver, cpu driver, platform driver updates for
> > > > HDMI path support, device tree documention, lpass variant structure
> > > > optimization and configuration changes.
> > > > These patches depends on the DP patch series
> > > > https://patchwork.kernel.org/project/dri-devel/list/?series=332029
> > > > https://lore.kernel.org/patchwork/project/lkml/list/?series=464856
> > > > 
> > > > changes since V10:
> > > >       -- Moved hdmi regmap functions from lpass-hdmi.c to lpass-cpu.c
> > > >       -- Moved QCOM_REGMAP_FIELD_ALLOC macro from lpass-hdmi.c to lpass.h
> > > > changes since V9:
> > > >       -- Removed unused structures lpass_hdmi.h
> > > > changes since V8:
> > > >       -- Removed redundant structure wrapper for reg map field memebrs
> > > >       -- Updated lpass_hdmi_regmap_volatile API with appropriate registers as true
> > > >          and others as false.
> > > > changes since V7:
> > > >       -- Fixed typo errors
> > > >       -- Created Separate patch for buffer size change
> > > > changes since V6:
> > > >       -- Removed compile time define flag, which used for enabling
> > > >        HDMI code, based on corresponding config param is included.
> > > >       -- Updated reg map alloc API with reg map bulk API.
> > > >       -- Removed unnecessary line splits
> > > > changes since V5:
> > > >       -- Removed unused struct regmap *map in lpass_platform_alloc_hdmidmactl_fields.
> > > >       -- DMA alloc and free API signature change in lpass-apq8016.c, lpass-ipq806x.c
> > > >       -- Keeping API "irqreturn_t lpass_platform_hdmiif_irq" under ifdef macro
> > > > Changes Since v4:
> > > >       -- Updated with single compatible node for both I2S and HDMI.
> > > > Changes Since v3:
> > > >       -- Removed id in lpass variant structure and used snd_soc_dai_driver id.
> > > > Changes Since v2:
> > > >       -- Audio buffer size(i.e. LPASS_PLATFORM_BUFFER_SIZE) in lpass-platform.c increased.
> > > > Changes Since v1:
> > > >       -- Commit messages are updated
> > > >       -- Addressed Rob Herring review comments
> > > > 
> > > > V Sujith Kumar Reddy (7):
> > > >     ASoC: Add sc7180-lpass binding header hdmi define
> > > >     ASoC: dt-bindings: Add dt binding for lpass hdmi
> > > >     Asoc:qcom:lpass-cpu:Update dts property read API
> > > >     Asoc: qcom: lpass:Update lpaif_dmactl members order
> > > >     ASoC: qcom: Add support for lpass hdmi driver
> > > >     Asoc: qcom: lpass-platform : Increase buffer size
> > > >     ASoC: qcom: sc7180: Add support for audio over DP
> > > > 
> > > >    .../devicetree/bindings/sound/qcom,lpass-cpu.yaml  |  74 ++--
> > > >    include/dt-bindings/sound/sc7180-lpass.h           |   1 +
> > > >    sound/soc/qcom/Kconfig                             |   5 +
> > > >    sound/soc/qcom/Makefile                            |   2 +
> > > >    sound/soc/qcom/lpass-apq8016.c                     |   4 +-
> > > >    sound/soc/qcom/lpass-cpu.c                         | 249 ++++++++++++-
> > > >    sound/soc/qcom/lpass-hdmi.c                        | 258 ++++++++++++++
> > > >    sound/soc/qcom/lpass-hdmi.h                        | 102 ++++++
> > > >    sound/soc/qcom/lpass-ipq806x.c                     |   4 +-
> > > >    sound/soc/qcom/lpass-lpaif-reg.h                   |  49 ++-
> > > >    sound/soc/qcom/lpass-platform.c                    | 395 +++++++++++++++++----
> > > >    sound/soc/qcom/lpass-sc7180.c                      | 116 +++++-
> > > >    sound/soc/qcom/lpass.h                             | 124 ++++++-
> > > >    13 files changed, 1240 insertions(+), 143 deletions(-)
> > > >    create mode 100644 sound/soc/qcom/lpass-hdmi.c
> > > >    create mode 100644 sound/soc/qcom/lpass-hdmi.h
> > > > 
> > > 
> > > Tested this series on DragonBoard 410c
> > > 
> > > Tested-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
> > > Reviewed-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
> > 
> > I spent quite some time today trying to track down another regression
> > for MSM8916/DragonBoard 410c audio in 5.10 and identified this patch
> > series as the cause. So I'm very surprised that you successfully tested
> > this on DB410c.
> > 
> > Attempting to play HDMI audio results in:
> > 
> >    ADV7533: lpass_platform_pcmops_hw_params: invalid  interface: 3
> >    ADV7533: lpass_platform_pcmops_trigger: invalid 3 interface
> >    apq8016-lpass-cpu 7708000.audio-controller: ASoC: error at soc_component_trigger on 7708000.audio-controller: -22
> > 
> > Attempting to record analog audio results in:
> > 
> >    Unable to handle kernel NULL pointer dereference at virtual address 00000000000001e4
> >    Internal error: Oops: 96000004 [#1] PREEMPT SMP
> >    CPU: 1 PID: 1568 Comm: arecord Not tainted 5.11.0-rc3 #20
> >    Hardware name: Qualcomm Technologies, Inc. APQ 8016 SBC (DT)
> >    pc : regmap_write+0x14/0x80
> >    lr : lpass_platform_pcmops_open+0xd8/0x210 [snd_soc_lpass_platform]
> >    Call trace:
> >     regmap_write+0x14/0x80
> >     lpass_platform_pcmops_open+0xd8/0x210 [snd_soc_lpass_platform]
> >     snd_soc_component_open+0x2c/0x94
> >     ...
> > 
> > Looking at the changes in "ASoC: qcom: Add support for lpass hdmi driver"
> > there is a quite obvious mistake there. lpass.h now contains
> > 
> 
> We did hit these two bugs recently while June was testing a platform based
> of 410c.
> 
> we had to these 2 fixes in his dev branch
> 
> https://paste.ubuntu.com/p/MCbpBgH7JV/
> 

I fixed that one a bit differently in
"ASoC: hdmi-codec: Fix return value in hdmi_codec_set_jack()"
https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git/commit/?h=for-5.11&id=2a0435df963f996ca870a2ef1cbf1773dc0ea25a

It might be useful to implement the jack detection in adv7511, but
I guess we would also need some changes in sound/soc/qcom/apq8016_sbc.c
to setup SND_JACK_LINEOUT. And somehow there would need to be a way to
differentiate between the normal audio jack and the "HDMI jack".

> and a hack:
> https://paste.ubuntu.com/p/GYDSDmJt7Y/
> 
> I got side tracked with other stuff, so I could not cleanup the lpass hack
> patch to send it!
> 
> With this two patches June was able to test all the usecases for 410c.
> 
> [...]
> 
> We should probably consolidate these defines to a single lpass.h file in
> include/dt-bindings/ and not split them into soc specific.
> 

I agree, especially in case more special DAIs are added in the future.
However, in my patch I tried to avoid doing that for the following two reasons:

  - Changing dt-bindings after they are added is generally discouraged.

but more importantly:

  - lpass-ipq806x.c does not seem to have PRIMARY, SECONDARY, ...
    but something completely different. I know nothing about that
    platform so I would not know how to handle it.

I will post my patch and then you can decide.

Thanks,
Stephan