Re: Working on audio for qcom apq8098 / msm8998

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 10/10/2024 19:04, Jeffrey Hugo wrote:
> On 10/10/2024 10:10 AM, Marc Gonzalez wrote:
>> On 08/10/2024 17:49, Marc Gonzalez wrote:
>>> On 08/10/2024 15:46, Marc Gonzalez wrote:
>>>
>>>> [   15.106412] qcom,apr 17300000.remoteproc:glink-edge.apr_audio_svc.-1.-1: Adding APR/GPR dev: aprsvc:apr-service:4:3
>>>> [   15.109935] qcom,apr 17300000.remoteproc:glink-edge.apr_audio_svc.-1.-1: Adding APR/GPR dev: aprsvc:apr-service:4:4
>>>> [   15.119041] qcom-q6afe aprsvc:apr-service:4:4: YO: q6afe_probe:1759
>>>> [   15.134672] q6afe-dai 17300000.remoteproc:glink-edge:apr:apr-service@4:dais: YOA: q6afe_dai_dev_probe
>>>> [   15.137948] q6afe-dai 17300000.remoteproc:glink-edge:apr:apr-service@4:dais: YOA: of_q6afe_parse_dai_data
>>>> [   15.146461] qcom,apr 17300000.remoteproc:glink-edge.apr_audio_svc.-1.-1: Adding APR/GPR dev: aprsvc:apr-service:4:7
>>>> [   15.153563] remoteproc remoteproc0: powering up 4080000.remoteproc
>>>> [   15.166371] remoteproc remoteproc0: Booting fw image mba.mbn, size 234152
>>>> [   15.169747] q6asm-dai 17300000.remoteproc:glink-edge:apr:apr-service@7:dais: Adding to iommu group 5
>>>> [   15.170559] qcom,apr 17300000.remoteproc:glink-edge.apr_audio_svc.-1.-1: Adding APR/GPR dev: aprsvc:apr-service:4:8
>>>> [   15.179732] q6afe-dai 17300000.remoteproc:glink-edge:apr:apr-service@4:dais: YOA: msm_dai_q6_dai_probe
>>>> [   15.199345] qcom-q6afe aprsvc:apr-service:4:4: YO: q6afe_find_port:860
>>>> [   15.208834] msm-snd-msm8998 sound: ASoC: registered pcm #0 MultiMedia1 (*)
>>>> [   15.216194] msm-snd-msm8998 sound: snd-soc-dummy-dai <-> MultiMedia1 mapping ok
>>>> [   15.221994] msm-snd-msm8998 sound: ASoC: registered pcm #1 MultiMedia2 (*)
>>>> [   15.229582] msm-snd-msm8998 sound: snd-soc-dummy-dai <-> MultiMedia2 mapping ok
>>>> [   15.236045] msm-snd-msm8998 sound: ASoC: registered pcm #2 (HDMI)
>>>> [   15.243211] msm-snd-msm8998 sound: i2s-hifi <-> HDMI mapping ok
>>>> [   15.285770] input: batfish Headset Jack as /devices/platform/sound/sound/card0/input2
>>>> [   15.298010] qcom-q6v5-mss 4080000.remoteproc: MBA booted without debug policy, loading mpss
>>>> [   15.542937] remoteproc remoteproc0: remote processor 4080000.remoteproc is now up
>>>
>>> If I try to play sound on the HDMI link:
>>>
>>> # tinymix set "HDMI Mixer MultiMedia1" 1
>>> (no logs on the command line or in dmesg)
>>>
>>> # tinyplay /home/equinox.wav
>>> playing '/home/equinox.wav': 2 ch, 48000 hz, 16 bit
>>> error playing sample
>>>
>>> The corresponding kernel logs are:
>>>
>>> [  204.324095] msm-snd-msm8998 sound: ASoC: find BE for widget MultiMedia1 Playback
>>> [  204.324280] msm-snd-msm8998 sound: ASoC: try BE : HDMI Playback
>>> [  204.330832] msm-snd-msm8998 sound: ASoC: try BE : I2S Playback
>>> [  204.336452] msm-snd-msm8998 sound: ASoC: find BE for widget MM_DL1
>>> [  204.342361] msm-snd-msm8998 sound: ASoC: try BE : HDMI Playback
>>> [  204.348471] msm-snd-msm8998 sound: ASoC: try BE : I2S Playback
>>> [  204.354319] msm-snd-msm8998 sound: ASoC: find BE for widget HDMI Mixer
>>> [  204.360152] msm-snd-msm8998 sound: ASoC: try BE : HDMI Playback
>>> [  204.366702] msm-snd-msm8998 sound: ASoC: try BE : I2S Playback
>>> [  204.372545] msm-snd-msm8998 sound: ASoC: find BE for widget HDMI_RX
>>> [  204.378439] msm-snd-msm8998 sound: ASoC: try BE : HDMI Playback
>>> [  204.384520] msm-snd-msm8998 sound: ASoC: try BE : I2S Playback
>>> [  204.390471] msm-snd-msm8998 sound: ASoC: find BE for widget HDMI Playback
>>> [  204.396400] msm-snd-msm8998 sound: ASoC: try BE : HDMI Playback
>>> [  204.403231]  MultiMedia1: ASoC: found 2 audio Playback paths
>>> [  204.408912]  MultiMedia1: YO: dpcm_add_paths:1595
>>> [  204.414855]  MultiMedia1: YO: dpcm_add_paths:1601
>>> [  204.419435]  MultiMedia1: YO: dpcm_add_paths:1605 widget=MM_DL1
>>> [  204.424105]  MultiMedia1: YO: dpcm_add_paths:1605 widget=HDMI Mixer
>>> [  204.429867]  MultiMedia1: YO: dpcm_add_paths:1605 widget=HDMI_RX
>>> [  204.436139]  MultiMedia1: YO: dpcm_add_paths:1605 widget=HDMI Playback
>>> [  204.442394] msm-snd-msm8998 sound: ASoC: find BE for widget HDMI Playback
>>> [  204.448691] msm-snd-msm8998 sound: ASoC: try BE : HDMI Playback
>>> [  204.455581]  MultiMedia1: YO: dpcm_add_paths:1638
>>> [  204.461316]  MultiMedia1: connected new DPCM Playback path MultiMedia1 -> HDMI
>>> [  204.466220]  MultiMedia1: ASoC: found 1 new BE paths
>>> [  204.473232]  HDMI: ASoC: open Playback BE HDMI
>>> [  204.478379]  MultiMedia1: ASoC: open FE MultiMedia1
>>> [  204.482911]  HDMI: ASoC: hw_params BE HDMI
>>> [  204.487489] q6afe-dai 17300000.remoteproc:glink-edge:apr:apr-service@4:dais: YOA: q6hdmi_hw_params
>>> [  204.491715]  MultiMedia1: ASoC: hw_params FE MultiMedia1 rate 48000 chan 2 fmt 2
>>> [  204.500814]  MultiMedia1: ASoC: prepare FE MultiMedia1
>>> [  204.508108]  HDMI: ASoC: prepare BE HDMI
>>> [  204.512978] q6afe-dai 17300000.remoteproc:glink-edge:apr:apr-service@4:dais: YOA: q6afe_dai_prepare
>>> [  204.517117] qcom-q6afe aprsvc:apr-service:4:4: YO: q6afe_hdmi_port_prepare:1317
>>> [  204.525864] qcom-q6afe aprsvc:apr-service:4:4: YO: q6afe_port_start:1511
>>> [  204.533151] qcom-q6afe aprsvc:apr-service:4:4: YO: q6afe_port_set_param_v2:1050
>>> [  204.540129] qcom-q6afe aprsvc:apr-service:4:4: YO: afe_apr_send_pkt:947
>>> [  204.547820] qcom-q6afe aprsvc:apr-service:4:4: YO: q6afe_callback:880
>>> [  204.553692] qcom-q6afe aprsvc:apr-service:4:4: cmd = 0x100ef returned error = 0x18
>>> [  204.560292] qcom-q6afe aprsvc:apr-service:4:4: YO: q6afe_find_port:860
>>> [  204.567937] qcom-q6afe aprsvc:apr-service:4:4: DSP returned error[18]
>>> [  204.574262] qcom-q6afe aprsvc:apr-service:4:4: AFE enable for port 0x100e failed -22
>>> [  204.583561] qcom-q6afe aprsvc:apr-service:4:4: AFE enable for port 0x100e failed -22
>>> [  204.591317] q6afe-dai 17300000.remoteproc:glink-edge:apr:apr-service@4:dais: fail to start AFE port 1
>>> [  204.599101] q6afe-dai 17300000.remoteproc:glink-edge:apr:apr-service@4:dais: ASoC: error at snd_soc_pcm_dai_prepare on HDMI: -22
>>> [  204.608501]  MultiMedia1: ASoC: hw_free FE MultiMedia1
>>> [  204.619781]  HDMI: ASoC: hw_free BE HDMI
>>> [  204.624821] q6afe-dai 17300000.remoteproc:glink-edge:apr:apr-service@4:dais: YOA: q6afe_dai_shutdown
>>> [  204.628835]  MultiMedia1: ASoC: close FE MultiMedia1
>>> [  204.637798]  HDMI: ASoC: BE HDMI event 2 dir 0
>>> [  204.642745]  MultiMedia1: ASoC: BE Playback disconnect check for HDMI
>>> [  204.646987]  MultiMedia1: freed DSP Playback path MultiMedia1 -> HDMI
>>>
>>>
>>> Looks like the audio DSP might not be correctly initialized?
>>
>> [ Adding Bjorn & Jeffrey & Rohit ]
>>
>> Right now, I'm thinking I might (??) need the code in sound/soc/qcom/lpass-cpu.c
>> to be called.
>>
>> $ git grep asoc_qcom_lpass_cpu_platform_probe
>> sound/soc/qcom/lpass-apq8016.c: .probe  = asoc_qcom_lpass_cpu_platform_probe,
>> sound/soc/qcom/lpass-cpu.c:int asoc_qcom_lpass_cpu_platform_probe(struct platform_device *pdev)
>> sound/soc/qcom/lpass-cpu.c:EXPORT_SYMBOL_GPL(asoc_qcom_lpass_cpu_platform_probe);
>> sound/soc/qcom/lpass-ipq806x.c: .probe  = asoc_qcom_lpass_cpu_platform_probe,
>> sound/soc/qcom/lpass-msm8998.c: .probe = asoc_qcom_lpass_cpu_platform_probe,
>> sound/soc/qcom/lpass-sc7180.c:  .probe = asoc_qcom_lpass_cpu_platform_probe,
>> sound/soc/qcom/lpass-sc7280.c:  .probe = asoc_qcom_lpass_cpu_platform_probe,
>> sound/soc/qcom/lpass.h:int asoc_qcom_lpass_cpu_platform_probe(struct platform_device *pdev);
>>
>>
>> For example, lpass-sc7280.c defines "qcom,sc7280-lpass-cpu"
>>
>> Binding:
>> Documentation/devicetree/bindings/sound/qcom,lpass-cpu.yaml
>>
>> Corresponding DTS in arch/arm64/boot/dts/qcom/sc7280.dtsi
>>
>> 		lpass_cpu: audio@3987000 {
>> 			compatible = "qcom,sc7280-lpass-cpu";
>>
>> 			reg = <0 0x03987000 0 0x68000>,
>> 			      <0 0x03b00000 0 0x29000>,
>> 			      <0 0x03260000 0 0xc000>,
>> 			      <0 0x03280000 0 0x29000>,
>> 			      <0 0x03340000 0 0x29000>,
>> 			      <0 0x0336c000 0 0x3000>;
>> 			reg-names = "lpass-hdmiif",
>> 				    "lpass-lpaif",
>> 				    "lpass-rxtx-cdc-dma-lpm",
>> 				    "lpass-rxtx-lpaif",
>> 				    "lpass-va-lpaif",
>> 				    "lpass-va-cdc-dma-lpm";
>>
>> 			iommus = <&apps_smmu 0x1820 0>,
>> 				 <&apps_smmu 0x1821 0>,
>> 				 <&apps_smmu 0x1832 0>;
>>
>> 			power-domains = <&rpmhpd SC7280_LCX>;
>> 			power-domain-names = "lcx";
>> 			required-opps = <&rpmhpd_opp_nom>;
>>
>> 			clocks = <&lpass_aon LPASS_AON_CC_AUDIO_HM_H_CLK>,
>> 				 <&lpass_core LPASS_CORE_CC_EXT_MCLK0_CLK>,
>> 				 <&lpass_core LPASS_CORE_CC_SYSNOC_MPORT_CORE_CLK>,
>> 				 <&lpass_core LPASS_CORE_CC_EXT_IF0_IBIT_CLK>,
>> 				 <&lpass_core LPASS_CORE_CC_EXT_IF1_IBIT_CLK>,
>> 				 <&lpass_audiocc LPASS_AUDIO_CC_CODEC_MEM_CLK>,
>> 				 <&lpass_audiocc LPASS_AUDIO_CC_CODEC_MEM0_CLK>,
>> 				 <&lpass_audiocc LPASS_AUDIO_CC_CODEC_MEM1_CLK>,
>> 				 <&lpass_audiocc LPASS_AUDIO_CC_CODEC_MEM2_CLK>,
>> 				 <&lpass_aon LPASS_AON_CC_VA_MEM0_CLK>;
>> 			clock-names = "aon_cc_audio_hm_h",
>> 				      "audio_cc_ext_mclk0",
>> 				      "core_cc_sysnoc_mport_core",
>> 				      "core_cc_ext_if0_ibit",
>> 				      "core_cc_ext_if1_ibit",
>> 				      "audio_cc_codec_mem",
>> 				      "audio_cc_codec_mem0",
>> 				      "audio_cc_codec_mem1",
>> 				      "audio_cc_codec_mem2",
>> 				      "aon_cc_va_mem0";
>>
>> 			#sound-dai-cells = <1>;
>> 			#address-cells = <1>;
>> 			#size-cells = <0>;
>>
>> 			interrupts = <GIC_SPI 160 IRQ_TYPE_LEVEL_HIGH>,
>> 				     <GIC_SPI 268 IRQ_TYPE_LEVEL_HIGH>,
>> 				     <GIC_SPI 176 IRQ_TYPE_LEVEL_HIGH>,
>> 				     <GIC_SPI 180 IRQ_TYPE_LEVEL_HIGH>;
>> 			interrupt-names = "lpass-irq-lpaif",
>> 					  "lpass-irq-hdmi",
>> 					  "lpass-irq-vaif",
>> 					  "lpass-irq-rxtxif";
>>
>> 			status = "disabled";
>> 		};
>>
>>
>> Is there an equivalent HW block for msm8998?
>>
>> Vendor kernel has no hits for hdmiif.
>>
>> I don't see anything relevant downstream :(
>>
>> Do I need to look at the HW block at address 0xee000000 ?
> 
> I haven't dug into audio.  Not entirely sure how to help here.
> 
> 0xee000000 is DDR on 8998.
> LPASS is at 0x17000000

#define LPASS_BASE		0xee000000
#define LPASS_BASE_SIZE		0x00800000
#define LPASS_BASE_PHYS		0x17000000

#define LPASS_LPASS_CC_REG_REG_BASE	(LPASS_BASE + 0)
#define LPASS_LPA_IF_REG_BASE		(LPASS_BASE + 0x00100000)

What's this LPASS_BASE at 0xee000000? Virtual address?

$ git grep 17000000 arch/arm/boot/dts/qcom
/* nothing for my vendor kernel DTS */






[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [Linux for Sparc]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux