From 7af6a8b6a445f3941703a13a4bb9a5167f13f11e Mon Sep 17 00:00:00 2001 From: Shalini Manjunatha Date: Mon, 19 Dec 2022 19:05:22 +0530 Subject: [PATCH 01/13] asoc: wcd938x/wcd937x: add null pointer check for mbhc variable Whenever MBHC is disabled through kernel config file, particular vaiable of mbhc is not guarded for NULL pointer check causing kernel panic, Hence add NULL check for that pointer variable. Change-Id: Iae4950ceb076239a130b4f033cb2f08cd65a92a9 Signed-off-by: Shalini Manjunatha --- asoc/codecs/wcd937x/wcd937x.c | 8 +++++--- asoc/codecs/wcd938x/wcd938x.c | 8 +++++--- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/asoc/codecs/wcd937x/wcd937x.c b/asoc/codecs/wcd937x/wcd937x.c index c002574d26b2..7bec6b399a87 100644 --- a/asoc/codecs/wcd937x/wcd937x.c +++ b/asoc/codecs/wcd937x/wcd937x.c @@ -1734,8 +1734,9 @@ static int wcd937x_event_notify(struct notifier_block *block, case BOLERO_SLV_EVT_SSR_DOWN: wcd937x->mbhc->wcd_mbhc.deinit_in_progress = true; mbhc = &wcd937x->mbhc->wcd_mbhc; - wcd937x->usbc_hs_status = get_usbc_hs_status(component, - mbhc->mbhc_cfg); + if(mbhc->mbhc_cfg) + wcd937x->usbc_hs_status = get_usbc_hs_status(component, + mbhc->mbhc_cfg); wcd937x_mbhc_ssr_down(wcd937x->mbhc, component); wcd937x_reset_low(wcd937x->dev); break; @@ -1755,7 +1756,8 @@ static int wcd937x_event_notify(struct notifier_block *block, dev_err(component->dev, "%s: mbhc initialization failed\n", __func__); } else { - wcd937x_mbhc_hs_detect(component, mbhc->mbhc_cfg); + if(mbhc->mbhc_cfg) + wcd937x_mbhc_hs_detect(component, mbhc->mbhc_cfg); if (wcd937x->usbc_hs_status) mdelay(500); } diff --git a/asoc/codecs/wcd938x/wcd938x.c b/asoc/codecs/wcd938x/wcd938x.c index 1a976b86007d..3448e41f0727 100644 --- a/asoc/codecs/wcd938x/wcd938x.c +++ b/asoc/codecs/wcd938x/wcd938x.c @@ -2161,8 +2161,9 @@ static int wcd938x_event_notify(struct notifier_block *block, NULL); wcd938x->mbhc->wcd_mbhc.deinit_in_progress = true; mbhc = &wcd938x->mbhc->wcd_mbhc; - wcd938x->usbc_hs_status = get_usbc_hs_status(component, - mbhc->mbhc_cfg); + if(mbhc->mbhc_cfg) + wcd938x->usbc_hs_status = get_usbc_hs_status(component, + mbhc->mbhc_cfg); wcd938x_mbhc_ssr_down(wcd938x->mbhc, component); wcd938x_reset_low(wcd938x->dev); break; @@ -2184,7 +2185,8 @@ static int wcd938x_event_notify(struct notifier_block *block, dev_err(component->dev, "%s: mbhc initialization failed\n", __func__); } else { - wcd938x_mbhc_hs_detect(component, mbhc->mbhc_cfg); + if(mbhc->mbhc_cfg) + wcd938x_mbhc_hs_detect(component, mbhc->mbhc_cfg); } wcd938x->mbhc->wcd_mbhc.deinit_in_progress = false; wcd938x->dev_up = true; From 9e949d228f101118550895a92eefcefd60f96281 Mon Sep 17 00:00:00 2001 From: Manoj Kumar N D Date: Mon, 14 Nov 2022 19:14:09 +0530 Subject: [PATCH 02/13] asoc : send chanel mixer while rerouting sound device Channel mixer has to sent while the sound devices are rerouted as capture/playback prepare will not be called during rerouting. Change-Id: I8473d89c7aff9f5f2a1dd2f3f4a8fa5d387b2429 Signed-off-by: Manoj Kumar N D --- asoc/msm-pcm-routing-auto.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/asoc/msm-pcm-routing-auto.c b/asoc/msm-pcm-routing-auto.c index f8e15f51fc24..10e94d74f8f9 100644 --- a/asoc/msm-pcm-routing-auto.c +++ b/asoc/msm-pcm-routing-auto.c @@ -32338,6 +32338,9 @@ static int msm_pcm_routing_prepare(struct snd_pcm_substream *substream) (fdai->passthr_mode == LEGACY_PCM)) msm_pcm_routing_cfg_pp(port_id, copp_idx, topology, channels); + if(msm_pcm_routing_channel_mixer(i, fdai->perf_mode,fdai->strm_id, session_type)){ + pr_err("%s: failed to send channel mixer \n", __func__); + } } } From 7d196f8368cffb9a735f3f58531e7b4a63e820dc Mon Sep 17 00:00:00 2001 From: Manoj Kumar N D Date: Tue, 13 Dec 2022 12:16:31 +0530 Subject: [PATCH 03/13] dsp : assign null to pointer that has freed address After freeing up the memory assign null to the pointer that had the address. Change-Id: I242a936c434dc449ec9fd19b0c34e843c3cf0913 Signed-off-by: Manoj Kumar N D --- dsp/audio_cal_utils.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/dsp/audio_cal_utils.c b/dsp/audio_cal_utils.c index 01e9c349142d..1406088b4ea6 100644 --- a/dsp/audio_cal_utils.c +++ b/dsp/audio_cal_utils.c @@ -1,6 +1,7 @@ // SPDX-License-Identifier: GPL-2.0-only /* * Copyright (c) 2014-2020, The Linux Foundation. All rights reserved. + * Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved. */ #include #include @@ -458,6 +459,7 @@ static void delete_cal_block(struct cal_block_data *cal_block) cal_block->map_data.dma_buf = NULL; } kfree(cal_block); + cal_block = NULL; done: return; } From 02230ca65b59b3290245dee87acafef0d8943226 Mon Sep 17 00:00:00 2001 From: Soumya Managoli Date: Fri, 6 Jan 2023 14:37:20 +0530 Subject: [PATCH 04/13] ASoC: msm-pcm-q6-v2: Add dsp buf check Current logic copies user buf size of data from the avail dsp buf at a given offset. If this offset returned from DSP in READ_DONE event goes out of bounds or is corrupted, then it can lead to out of bounds DSP buffer access, resulting in memory fault. Fix is to add check for this buf offset, if it is within the buf size range. Change-Id: I7753cc6db394704dbb959477150141d42b836bef Signed-off-by: Soumya Managoli --- asoc/msm-pcm-q6-v2.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/asoc/msm-pcm-q6-v2.c b/asoc/msm-pcm-q6-v2.c index 1dfa857be5ea..b26ae17520c7 100644 --- a/asoc/msm-pcm-q6-v2.c +++ b/asoc/msm-pcm-q6-v2.c @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-only /* Copyright (c) 2012-2021, The Linux Foundation. All rights reserved. - * Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved. + * Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved. */ /* * Add support for 24 and 32bit format for ASM loopback and playback session. @@ -1328,6 +1328,14 @@ static int msm_pcm_capture_copy(struct snd_pcm_substream *substream, xfer = size; offset = prtd->in_frame_info[idx].offset; pr_debug("Offset value = %d\n", offset); + + if (offset >= size) { + pr_err("%s: Invalid dsp buf offset\n", __func__); + ret = -EFAULT; + q6asm_cpu_buf_release(OUT, prtd->audio_client); + goto fail; + } + if (size == 0 || size < prtd->pcm_count) { memset(bufptr + offset + size, 0, prtd->pcm_count - size); if (fbytes > prtd->pcm_count) From 89e9d61385b76b5f47c9215b82dcec079645e12b Mon Sep 17 00:00:00 2001 From: Soumya Managoli Date: Mon, 12 Dec 2022 12:22:23 +0530 Subject: [PATCH 05/13] ASoC: Add check for pm_qos_req before removal Check if pm_qos_req is active before removal. Change-Id: I0076a73ffa6310dbb4cb207ca7a651aa1d3fdf04 Signed-off-by: Soumya Managoli --- asoc/msm-pcm-hostless.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/asoc/msm-pcm-hostless.c b/asoc/msm-pcm-hostless.c index 63c5db85fe42..aaf714bc9907 100644 --- a/asoc/msm-pcm-hostless.c +++ b/asoc/msm-pcm-hostless.c @@ -1,5 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-only /* Copyright (c) 2011-2014, 2017-2019 The Linux Foundation. All rights reserved. + * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved. */ #include @@ -18,7 +19,8 @@ static int msm_pcm_hostless_prepare(struct snd_pcm_substream *substream) pr_err("%s: invalid params\n", __func__); return -EINVAL; } - pm_qos_remove_request(&substream->latency_pm_qos_req); + if (pm_qos_request_active(&substream->latency_pm_qos_req)) + pm_qos_remove_request(&substream->latency_pm_qos_req); return 0; } From b12f10836f3120d0e614ae1f34705435c7e53ce6 Mon Sep 17 00:00:00 2001 From: ronghuiz Date: Wed, 1 Feb 2023 10:28:05 +0800 Subject: [PATCH 06/13] asoc: kona: Add QUAD I2S EBIT clk define to kona Hdmi-in used QUAD-I2S to input, need configure I2S to slave mode. Change-Id: I1d27d51c766538bb8f61cd74c5dcb6cc18954e81 Signed-off-by: ronghuiz --- asoc/kona.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/asoc/kona.c b/asoc/kona.c index 2c1a86c8b973..d801702c667c 100644 --- a/asoc/kona.c +++ b/asoc/kona.c @@ -1,7 +1,7 @@ // SPDX-License-Identifier: GPL-2.0-only /* * Copyright (c) 2016-2021, The Linux Foundation. All rights reserved. - * Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved. + * Copyright (c) 2022-2023, Qualcomm Innovation Center, Inc. All rights reserved. */ #include @@ -328,6 +328,7 @@ static u32 mi2s_ebit_clk[MI2S_MAX] = { Q6AFE_LPASS_CLK_ID_PRI_MI2S_EBIT, Q6AFE_LPASS_CLK_ID_SEC_MI2S_EBIT, Q6AFE_LPASS_CLK_ID_TER_MI2S_EBIT, + Q6AFE_LPASS_CLK_ID_QUAD_MI2S_EBIT, }; static struct mi2s_conf mi2s_intf_conf[MI2S_MAX]; From 8972574067e47c05d4011e9bea21110e5b372cfe Mon Sep 17 00:00:00 2001 From: Boyuan Yan Date: Tue, 7 Feb 2023 14:51:14 +0530 Subject: [PATCH 07/13] asoc: Add build option for qcs6490 Add build option for qcs6490. Change-Id: I2cd3ac1e296c8eb64702d26d0cb461052bc3ade2 Signed-off-by: Boyuan Yan --- Makefile.am | 10 ++++++++++ asoc/Kbuild | 5 +++++ asoc/codecs/Kbuild | 5 +++++ asoc/codecs/bolero/Kbuild | 5 +++++ asoc/codecs/wcd937x/Kbuild | 5 +++++ asoc/codecs/wcd938x/Kbuild | 5 +++++ asoc/codecs/wsa883x/Kbuild | 1 + dsp/Kbuild | 4 ++++ dsp/codecs/Kbuild | 5 +++++ ipc/Kbuild | 5 +++++ soc/Kbuild | 5 +++++ 11 files changed, 55 insertions(+) diff --git a/Makefile.am b/Makefile.am index 5a1b82f16a5f..e9fd72731fa5 100755 --- a/Makefile.am +++ b/Makefile.am @@ -18,6 +18,9 @@ endif ifeq ($(TARGET_SUPPORT), qrb5165) KBUILD_OPTIONS += CONFIG_ARCH_KONA=y endif +ifeq ($(TARGET_SUPPORT), qcs6490) +KBUILD_OPTIONS += CONFIG_ARCH_LAHAINA=y +endif subdir-ccflags-y += -I$(AUDIO_ROOT)/include/uapi/ @@ -48,6 +51,13 @@ obj-m += asoc/codecs/wcd938x/ bj-m += asoc/codecs/wsa883x/ KBUILD_CFLAGS += -Wno-error endif +ifeq ($(TARGET_SUPPORT), $(filter $(TARGET_SUPPORT), qcs6490)) +obj-m += asoc/codecs/bolero/ +obj-m += asoc/codecs/wcd937x/ +obj-m += asoc/codecs/wcd938x/ +obj-m += asoc/codecs/wsa883x/ +KBUILD_CFLAGS += -Wno-error +endif ifeq ($(TARGET_SUPPORT), sdmsteppe) obj-m += asoc/codecs/bolero/ obj-m += asoc/codecs/wcd937x/ diff --git a/asoc/Kbuild b/asoc/Kbuild index 6014ba9c5634..c3a0458ccf3e 100755 --- a/asoc/Kbuild +++ b/asoc/Kbuild @@ -72,6 +72,11 @@ else include $(AUDIO_ROOT)/config/konaauto.conf INCS += -include $(AUDIO_ROOT)/config/konaautoconf.h endif + ifeq ($(CONFIG_ARCH_LAHAINA), y) + include $(AUDIO_ROOT)/config/lahainaauto.conf + export + INCS += -include $(AUDIO_ROOT)/config/lahainaautoconf.h + endif ifeq ($(CONFIG_ARCH_LITO), y) include $(AUDIO_ROOT)/config/litoauto.conf export diff --git a/asoc/codecs/Kbuild b/asoc/codecs/Kbuild index 8f19011f6f02..e8cb6f140854 100755 --- a/asoc/codecs/Kbuild +++ b/asoc/codecs/Kbuild @@ -72,6 +72,11 @@ else include $(AUDIO_ROOT)/config/konaauto.conf INCS += -include $(AUDIO_ROOT)/config/konaautoconf.h endif + ifeq ($(CONFIG_ARCH_LAHAINA), y) + include $(AUDIO_ROOT)/config/lahainaauto.conf + export + INCS += -include $(AUDIO_ROOT)/config/lahainaautoconf.h + endif ifeq ($(CONFIG_ARCH_LITO), y) include $(AUDIO_ROOT)/config/litoauto.conf export diff --git a/asoc/codecs/bolero/Kbuild b/asoc/codecs/bolero/Kbuild index a6a11c1a0e7d..4552b59ea7ee 100644 --- a/asoc/codecs/bolero/Kbuild +++ b/asoc/codecs/bolero/Kbuild @@ -30,6 +30,11 @@ ifeq ($(KERNEL_BUILD), 0) include $(AUDIO_ROOT)/config/konaauto.conf INCS += -include $(AUDIO_ROOT)/config/konaautoconf.h endif + ifeq ($(CONFIG_ARCH_LAHAINA), y) + include $(AUDIO_ROOT)/config/lahainaauto.conf + export + INCS += -include $(AUDIO_ROOT)/config/lahainaautoconf.h + endif ifeq ($(CONFIG_ARCH_LITO), y) include $(AUDIO_ROOT)/config/litoauto.conf export diff --git a/asoc/codecs/wcd937x/Kbuild b/asoc/codecs/wcd937x/Kbuild index c7286d0cd875..12efaf338108 100644 --- a/asoc/codecs/wcd937x/Kbuild +++ b/asoc/codecs/wcd937x/Kbuild @@ -36,6 +36,11 @@ ifeq ($(KERNEL_BUILD), 0) export INCS += -include $(AUDIO_ROOT)/config/litoautoconf.h endif + ifeq ($(CONFIG_ARCH_LAHAINA), y) + include $(AUDIO_ROOT)/config/lahainaauto.conf + export + INCS += -include $(AUDIO_ROOT)/config/lahainaautoconf.h + endif endif # As per target team, build is done as follows: diff --git a/asoc/codecs/wcd938x/Kbuild b/asoc/codecs/wcd938x/Kbuild index 873a7b29d434..21181c0f8b5f 100644 --- a/asoc/codecs/wcd938x/Kbuild +++ b/asoc/codecs/wcd938x/Kbuild @@ -23,6 +23,11 @@ ifeq ($(KERNEL_BUILD), 0) export INCS += -include $(AUDIO_ROOT)/config/litoautoconf.h endif + ifeq ($(CONFIG_ARCH_LAHAINA), y) + include $(AUDIO_ROOT)/config/lahainaauto.conf + export + INCS += -include $(AUDIO_ROOT)/config/lahainaautoconf.h + endif endif diff --git a/asoc/codecs/wsa883x/Kbuild b/asoc/codecs/wsa883x/Kbuild index 6cda76756dc2..e9ca09d0eb60 100644 --- a/asoc/codecs/wsa883x/Kbuild +++ b/asoc/codecs/wsa883x/Kbuild @@ -16,6 +16,7 @@ endif ifeq ($(KERNEL_BUILD), 0) ifeq ($(CONFIG_ARCH_LAHAINA), y) include $(AUDIO_ROOT)/config/lahainaauto.conf + export INCS += -include $(AUDIO_ROOT)/config/lahainaautoconf.h endif ifeq ($(CONFIG_ARCH_LITO), y) diff --git a/dsp/Kbuild b/dsp/Kbuild index 2c5506ff7c5c..060ce5d88009 100755 --- a/dsp/Kbuild +++ b/dsp/Kbuild @@ -61,6 +61,10 @@ else include $(AUDIO_ROOT)/config/konaauto.conf INCS += -include $(AUDIO_ROOT)/config/konaautoconf.h endif + ifeq ($(CONFIG_ARCH_LAHAINA), y) + include $(AUDIO_ROOT)/config/lahainaauto.conf + INCS += -include $(AUDIO_ROOT)/config/lahainaautoconf.h + endif ifeq ($(CONFIG_ARCH_LITO), y) include $(AUDIO_ROOT)/config/litoauto.conf export diff --git a/dsp/codecs/Kbuild b/dsp/codecs/Kbuild index 68b05ffacced..c87c4224de79 100644 --- a/dsp/codecs/Kbuild +++ b/dsp/codecs/Kbuild @@ -28,6 +28,11 @@ ifeq ($(KERNEL_BUILD), 0) include $(AUDIO_ROOT)/config/konaauto.conf INCS += -include $(AUDIO_ROOT)/config/konaautoconf.h endif + ifeq ($(CONFIG_ARCH_LAHAINA), y) + include $(AUDIO_ROOT)/config/lahainaauto.conf + export + INCS += -include $(AUDIO_ROOT)/config/lahainaautoconf.h + endif ifeq ($(CONFIG_ARCH_LITO), y) include $(AUDIO_ROOT)/config/litoauto.conf export diff --git a/ipc/Kbuild b/ipc/Kbuild index 06a1f42b9063..1a70731e6dfc 100755 --- a/ipc/Kbuild +++ b/ipc/Kbuild @@ -62,6 +62,11 @@ else include $(AUDIO_ROOT)/config/konaauto.conf INCS += -include $(AUDIO_ROOT)/config/konaautoconf.h endif + ifeq ($(CONFIG_ARCH_LAHAINA), y) + include $(AUDIO_ROOT)/config/lahainaauto.conf + export + INCS += -include $(AUDIO_ROOT)/config/lahainaautoconf.h + endif ifeq ($(CONFIG_ARCH_LITO), y) include $(AUDIO_ROOT)/config/litoauto.conf export diff --git a/soc/Kbuild b/soc/Kbuild index edb9aeee478b..6548624ad390 100755 --- a/soc/Kbuild +++ b/soc/Kbuild @@ -56,6 +56,11 @@ else include $(AUDIO_ROOT)/config/konaauto.conf INCS += -include $(AUDIO_ROOT)/config/konaautoconf.h endif + ifeq ($(CONFIG_ARCH_LAHAINA), y) + include $(AUDIO_ROOT)/config/lahainaauto.conf + export + INCS += -include $(AUDIO_ROOT)/config/lahainaautoconf.h + endif ifeq ($(CONFIG_ARCH_LITO), y) include $(AUDIO_ROOT)/config/litoauto.conf export From 60eaf5fe50079a65a815e04d08cdd4b2de629b33 Mon Sep 17 00:00:00 2001 From: Manoj Kumar N D Date: Tue, 7 Feb 2023 18:47:55 +0530 Subject: [PATCH 08/13] asoc : mark used cal block as stale Mark the used cal block as stale so that it is not reused. Change-Id: I142d21d6d32a1b5ad24c3a2708b1df023d70947e Signed-off-by: Manoj Kumar N D --- asoc/msm-pcm-routing-auto.c | 1 + 1 file changed, 1 insertion(+) diff --git a/asoc/msm-pcm-routing-auto.c b/asoc/msm-pcm-routing-auto.c index 10e94d74f8f9..73960cb46e65 100644 --- a/asoc/msm-pcm-routing-auto.c +++ b/asoc/msm-pcm-routing-auto.c @@ -1818,6 +1818,7 @@ static int msm_routing_find_topology_on_index(int fedai_id, int session_type, in if (cal_block != NULL) { topology = ((struct audio_cal_info_adm_top *) cal_block->cal_info)->topology; + cal_utils_mark_cal_used(cal_block); } mutex_unlock(&cal_data[idx]->lock); return topology; From 8440c8f13756f5baa81396cb57625d0e6879b1ad Mon Sep 17 00:00:00 2001 From: Manoj Kumar N D Date: Tue, 14 Feb 2023 14:52:54 +0530 Subject: [PATCH 09/13] asoc : Update proper comment for endpoint 2 Update proper description to explain the usage of endpoint ID 2. Change-Id: I45a52ef43c3fcd42f97de37e7bb80517dfe09db3 Signed-off-by: Manoj Kumar N D --- include/dsp/apr_audio-v2.h | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/include/dsp/apr_audio-v2.h b/include/dsp/apr_audio-v2.h index f1c73e5087b8..ed5963474da6 100644 --- a/include/dsp/apr_audio-v2.h +++ b/include/dsp/apr_audio-v2.h @@ -333,9 +333,11 @@ struct adm_cmd_device_open_v5 { */ u16 endpoint_id_2; -/* Logical and physical endpoint ID 2 for a voice processor - * Tx block. - * This is not applicable to audio COPP. +/* Endpoint 2 is set with 0xFFFF by default. + * In cases of ECREF, Endpoint 2 can be set with the ecref AFE port id, + * which will be connected to the TX block. + * ECREF data is given as input to the TX block. + * Endpoint 2 is applicable to audio CoPreP. * Supported values: * - AFE Rx port * - 0xFFFF -- Endpoint 2 is unavailable and the voice @@ -423,9 +425,11 @@ struct adm_cmd_device_open_v6 { */ u16 endpoint_id_2; -/* Logical and physical endpoint ID 2 for a voice processor - * Tx block. - * This is not applicable to audio COPP. +/* Endpoint 2 is set with 0xFFFF by default. + * In cases of ECREF, Endpoint 2 can be set with the ecref AFE port id, + * which will be connected to the TX block. + * ECREF data is given as input to the TX block. + * Endpoint 2 is applicable to audio CoPreP. * Supported values: * - AFE Rx port * - 0xFFFF -- Endpoint 2 is unavailable and the voice @@ -589,9 +593,11 @@ struct adm_cmd_device_open_v8 { */ u16 endpoint_id_2; -/* Logical and physical endpoint ID 2 for a voice processor - * Tx block. - * This is not applicable to audio COPP. +/* Endpoint 2 is set with 0xFFFF by default. + * In cases of ECREF, Endpoint 2 can be set with the ecref AFE port id, + * which will be connected to the TX block. + * ECREF data is given as input to the TX block. + * Endpoint 2 is applicable to audio CoPreP. * Supported values: * - AFE Rx port * - 0xFFFF -- Endpoint 2 is unavailable and the voice From 6a133ce3b43dbb08de378b1e4ba2ad77de0d4514 Mon Sep 17 00:00:00 2001 From: Kishan Kumar Majeti Date: Thu, 9 Feb 2023 11:35:41 +0530 Subject: [PATCH 10/13] asoc: Fix possible overflow in routing driver Send SOC_NO_PM in reg filed to avoid overflow in DAPM operation Change-Id: Id4845f1513612b54c7949d7c5c921f0529e5b847 Signed-off-by: Kishan Kumar Majeti --- asoc/msm-pcm-routing-v2.c | 37 +++++++++++++++++++++++++++++++++++-- 1 file changed, 35 insertions(+), 2 deletions(-) diff --git a/asoc/msm-pcm-routing-v2.c b/asoc/msm-pcm-routing-v2.c index 6ec26e7d53b9..d77844984bdb 100644 --- a/asoc/msm-pcm-routing-v2.c +++ b/asoc/msm-pcm-routing-v2.c @@ -1,6 +1,39 @@ // SPDX-License-Identifier: GPL-2.0-only /* Copyright (c) 2012-2021, The Linux Foundation. All rights reserved. - * Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved. + * + * Changes from Qualcomm Innovation Center are provided under the following license: + * Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted (subject to the limitations in the + * disclaimer below) provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided + * with the distribution. + * + * * Neither the name of Qualcomm Innovation Center, Inc. nor the + * names of its contributors may be used to endorse or promote + * products derived from this software without specific prior + * written permission. + * + * NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE + * GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT + * HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER + * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN + * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /* * Add support for 24 and 32bit format for ASM loopback and playback session. @@ -33189,7 +33222,7 @@ static const struct soc_enum wsa_rx_0_vi_fb_rch_mux_enum = wsa_rx_0_vi_fb_tx_rch_mux_text, wsa_rx_0_vi_fb_tx_rch_value); static const struct soc_enum mi2s_rx_vi_fb_mux_enum = - SOC_VALUE_ENUM_DOUBLE(0, MSM_BACKEND_DAI_PRI_MI2S_RX, 0, 0, + SOC_VALUE_ENUM_DOUBLE(SND_SOC_NOPM, MSM_BACKEND_DAI_PRI_MI2S_RX, 0, 0, ARRAY_SIZE(mi2s_rx_vi_fb_tx_mux_text), mi2s_rx_vi_fb_tx_mux_text, mi2s_rx_vi_fb_tx_value); From 2bd17f3f0d65a1271db348ee7576bdc364d7c958 Mon Sep 17 00:00:00 2001 From: Sujin Panicker Date: Thu, 23 Feb 2023 11:25:19 +0530 Subject: [PATCH 11/13] dsp: Add check for negative value size There is a possibility where an access to /dev/msm_audio_cal from third party could pass negative size which would lead to crash. Avoid this by negative value size check. Change-Id: Id36c5f10dccbd7d0ee85aa3310badec6815237a2 Signed-off-by: Sujin Panicker --- dsp/audio_calibration.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/dsp/audio_calibration.c b/dsp/audio_calibration.c index a77be946a231..74a05c27b04a 100644 --- a/dsp/audio_calibration.c +++ b/dsp/audio_calibration.c @@ -1,6 +1,7 @@ // SPDX-License-Identifier: GPL-2.0-only /* * Copyright (c) 2014, 2016-2017, 2020-2021, The Linux Foundation. All rights reserved. + * Copyright (c) 2023, Qualcomm Innovation Center, Inc. All rights reserved. */ #include #include @@ -416,7 +417,7 @@ static long audio_cal_shared_ioctl(struct file *file, unsigned int cmd, pr_err("%s: Could not copy size value from user\n", __func__); ret = -EFAULT; goto done; - } else if ((size < sizeof(struct audio_cal_basic)) + } else if ((size < 0) || (size < sizeof(struct audio_cal_basic)) || (size > MAX_IOCTL_CMD_SIZE)) { pr_err("%s: Invalid size sent to driver: %d, max size is %d, min size is %zd\n", __func__, size, MAX_IOCTL_CMD_SIZE, From b39f6924f3d3fb57217aa36721722d43d14c5f84 Mon Sep 17 00:00:00 2001 From: Long Li Date: Wed, 8 Mar 2023 13:30:07 +0530 Subject: [PATCH 12/13] asoc: msm-pcm-routing-auto: Add checks to enable senary port Add checks to enable senary port. Change-Id: I100d785842780ad32e8693f3b4a77dbfb0d5746b Signed-off-by: Long Li --- asoc/Kbuild | 2 ++ asoc/msm-pcm-routing-auto.c | 52 +++++++++++++++++++++++++++++++++++-- 2 files changed, 52 insertions(+), 2 deletions(-) diff --git a/asoc/Kbuild b/asoc/Kbuild index c3a0458ccf3e..b80f81a35fed 100755 --- a/asoc/Kbuild +++ b/asoc/Kbuild @@ -15,11 +15,13 @@ endif ifeq ($(CONFIG_SND_SOC_AUTO), y) ifdef CONFIG_SND_SOC_SA8155 + CDEFINES += -DCONFIG_SEN_TDM_DISABLE include $(AUDIO_ROOT)/config/sa8155auto.conf export INCS += -include $(AUDIO_ROOT)/config/sa8155autoconf.h endif ifdef CONFIG_SND_SOC_SA6155 + CDEFINES += -DCONFIG_SEN_TDM_DISABLE include $(AUDIO_ROOT)/config/sa6155auto.conf export INCS += -include $(AUDIO_ROOT)/config/sa6155autoconf.h diff --git a/asoc/msm-pcm-routing-auto.c b/asoc/msm-pcm-routing-auto.c index 73960cb46e65..14114c820b29 100644 --- a/asoc/msm-pcm-routing-auto.c +++ b/asoc/msm-pcm-routing-auto.c @@ -27441,11 +27441,12 @@ static const struct snd_soc_dapm_route intercon[] = { {"MultiMedia6 Mixer", "QUIN_TDM_TX_1", "QUIN_TDM_TX_1"}, {"MultiMedia6 Mixer", "QUIN_TDM_TX_2", "QUIN_TDM_TX_2"}, {"MultiMedia6 Mixer", "QUIN_TDM_TX_3", "QUIN_TDM_TX_3"}, +#ifndef CONFIG_SEN_TDM_DISABLE {"MultiMedia6 Mixer", "SEN_TDM_TX_0", "SEN_TDM_TX_0"}, {"MultiMedia6 Mixer", "SEN_TDM_TX_1", "SEN_TDM_TX_1"}, {"MultiMedia6 Mixer", "SEN_TDM_TX_2", "SEN_TDM_TX_2"}, {"MultiMedia6 Mixer", "SEN_TDM_TX_3", "SEN_TDM_TX_3"}, - +#endif {"MultiMedia8 Mixer", "AFE_LOOPBACK_TX", "AFE_LOOPBACK_TX"}, {"MultiMedia9 Mixer", "AFE_LOOPBACK_TX", "AFE_LOOPBACK_TX"}, @@ -27483,41 +27484,48 @@ static const struct snd_soc_dapm_route intercon[] = { {"MultiMedia18 Mixer", "QUAT_TDM_TX_1", "QUAT_TDM_TX_1"}, {"MultiMedia18 Mixer", "QUAT_TDM_TX_2", "QUAT_TDM_TX_2"}, {"MultiMedia18 Mixer", "QUAT_TDM_TX_3", "QUAT_TDM_TX_3"}, +#ifndef CONFIG_SEN_TDM_DISABLE {"MultiMedia18 Mixer", "SEN_TDM_TX_0", "SEN_TDM_TX_0"}, {"MultiMedia18 Mixer", "SEN_TDM_TX_1", "SEN_TDM_TX_1"}, {"MultiMedia18 Mixer", "SEN_TDM_TX_2", "SEN_TDM_TX_2"}, {"MultiMedia18 Mixer", "SEN_TDM_TX_3", "SEN_TDM_TX_3"}, - +#endif {"MultiMedia19 Mixer", "AFE_LOOPBACK_TX", "AFE_LOOPBACK_TX"}, {"MultiMedia19 Mixer", "QUAT_TDM_TX_0", "QUAT_TDM_TX_0"}, {"MultiMedia19 Mixer", "QUAT_TDM_TX_1", "QUAT_TDM_TX_1"}, {"MultiMedia19 Mixer", "QUAT_TDM_TX_2", "QUAT_TDM_TX_2"}, {"MultiMedia19 Mixer", "QUAT_TDM_TX_3", "QUAT_TDM_TX_3"}, +#ifndef CONFIG_SEN_TDM_DISABLE {"MultiMedia19 Mixer", "SEN_TDM_TX_0", "SEN_TDM_TX_0"}, {"MultiMedia19 Mixer", "SEN_TDM_TX_1", "SEN_TDM_TX_1"}, {"MultiMedia19 Mixer", "SEN_TDM_TX_2", "SEN_TDM_TX_2"}, {"MultiMedia19 Mixer", "SEN_TDM_TX_3", "SEN_TDM_TX_3"}, +#endif {"MultiMedia28 Mixer", "AFE_LOOPBACK_TX", "AFE_LOOPBACK_TX"}, {"MultiMedia28 Mixer", "QUAT_TDM_TX_0", "QUAT_TDM_TX_0"}, {"MultiMedia28 Mixer", "QUAT_TDM_TX_1", "QUAT_TDM_TX_1"}, {"MultiMedia28 Mixer", "QUAT_TDM_TX_2", "QUAT_TDM_TX_2"}, {"MultiMedia28 Mixer", "QUAT_TDM_TX_3", "QUAT_TDM_TX_3"}, +#ifndef CONFIG_SEN_TDM_DISABLE {"MultiMedia28 Mixer", "SEN_TDM_TX_0", "SEN_TDM_TX_0"}, {"MultiMedia28 Mixer", "SEN_TDM_TX_1", "SEN_TDM_TX_1"}, {"MultiMedia28 Mixer", "SEN_TDM_TX_2", "SEN_TDM_TX_2"}, {"MultiMedia28 Mixer", "SEN_TDM_TX_3", "SEN_TDM_TX_3"}, +#endif {"MultiMedia29 Mixer", "AFE_LOOPBACK_TX", "AFE_LOOPBACK_TX"}, {"MultiMedia29 Mixer", "QUAT_TDM_TX_0", "QUAT_TDM_TX_0"}, {"MultiMedia29 Mixer", "QUAT_TDM_TX_1", "QUAT_TDM_TX_1"}, {"MultiMedia29 Mixer", "QUAT_TDM_TX_2", "QUAT_TDM_TX_2"}, {"MultiMedia29 Mixer", "QUAT_TDM_TX_3", "QUAT_TDM_TX_3"}, +#ifndef CONFIG_SEN_TDM_DISABLE {"MultiMedia29 Mixer", "SEN_TDM_TX_0", "SEN_TDM_TX_0"}, {"MultiMedia29 Mixer", "SEN_TDM_TX_1", "SEN_TDM_TX_1"}, {"MultiMedia29 Mixer", "SEN_TDM_TX_2", "SEN_TDM_TX_2"}, {"MultiMedia29 Mixer", "SEN_TDM_TX_3", "SEN_TDM_TX_3"}, +#endif {"INTERNAL_BT_SCO_RX Audio Mixer", "MultiMedia1", "MM_DL1"}, {"INTERNAL_BT_SCO_RX Audio Mixer", "MultiMedia2", "MM_DL2"}, @@ -28825,10 +28833,12 @@ static const struct snd_soc_dapm_route intercon_tdm[] = { {"PRI_TDM_RX_0 Port Mixer", "QUIN_TDM_TX_1", "QUIN_TDM_TX_1"}, {"PRI_TDM_RX_0 Port Mixer", "QUIN_TDM_TX_2", "QUIN_TDM_TX_2"}, {"PRI_TDM_RX_0 Port Mixer", "QUIN_TDM_TX_3", "QUIN_TDM_TX_3"}, +#ifndef CONFIG_SEN_TDM_DISABLE {"PRI_TDM_RX_0 Port Mixer", "SEN_TDM_TX_0", "SEN_TDM_TX_0"}, {"PRI_TDM_RX_0 Port Mixer", "SEN_TDM_TX_1", "SEN_TDM_TX_1"}, {"PRI_TDM_RX_0 Port Mixer", "SEN_TDM_TX_2", "SEN_TDM_TX_2"}, {"PRI_TDM_RX_0 Port Mixer", "SEN_TDM_TX_3", "SEN_TDM_TX_3"}, +#endif {"PRI_TDM_RX_0", NULL, "PRI_TDM_RX_0 Port Mixer"}, #ifndef CONFIG_MI2S_DISABLE @@ -28854,10 +28864,12 @@ static const struct snd_soc_dapm_route intercon_tdm[] = { {"PRI_TDM_RX_1 Port Mixer", "QUIN_TDM_TX_1", "QUIN_TDM_TX_1"}, {"PRI_TDM_RX_1 Port Mixer", "QUIN_TDM_TX_2", "QUIN_TDM_TX_2"}, {"PRI_TDM_RX_1 Port Mixer", "QUIN_TDM_TX_3", "QUIN_TDM_TX_3"}, +#ifndef CONFIG_SEN_TDM_DISABLE {"PRI_TDM_RX_1 Port Mixer", "SEN_TDM_TX_0", "SEN_TDM_TX_0"}, {"PRI_TDM_RX_1 Port Mixer", "SEN_TDM_TX_1", "SEN_TDM_TX_1"}, {"PRI_TDM_RX_1 Port Mixer", "SEN_TDM_TX_2", "SEN_TDM_TX_2"}, {"PRI_TDM_RX_1 Port Mixer", "SEN_TDM_TX_3", "SEN_TDM_TX_3"}, +#endif {"PRI_TDM_RX_1", NULL, "PRI_TDM_RX_1 Port Mixer"}, #ifndef CONFIG_MI2S_DISABLE @@ -28883,10 +28895,12 @@ static const struct snd_soc_dapm_route intercon_tdm[] = { {"PRI_TDM_RX_2 Port Mixer", "QUIN_TDM_TX_1", "QUIN_TDM_TX_1"}, {"PRI_TDM_RX_2 Port Mixer", "QUIN_TDM_TX_2", "QUIN_TDM_TX_2"}, {"PRI_TDM_RX_2 Port Mixer", "QUIN_TDM_TX_3", "QUIN_TDM_TX_3"}, +#ifndef CONFIG_SEN_TDM_DISABLE {"PRI_TDM_RX_2 Port Mixer", "SEN_TDM_TX_0", "SEN_TDM_TX_0"}, {"PRI_TDM_RX_2 Port Mixer", "SEN_TDM_TX_1", "SEN_TDM_TX_1"}, {"PRI_TDM_RX_2 Port Mixer", "SEN_TDM_TX_2", "SEN_TDM_TX_2"}, {"PRI_TDM_RX_2 Port Mixer", "SEN_TDM_TX_3", "SEN_TDM_TX_3"}, +#endif {"PRI_TDM_RX_2", NULL, "PRI_TDM_RX_2 Port Mixer"}, #ifndef CONFIG_MI2S_DISABLE @@ -28912,10 +28926,12 @@ static const struct snd_soc_dapm_route intercon_tdm[] = { {"PRI_TDM_RX_3 Port Mixer", "QUIN_TDM_TX_1", "QUIN_TDM_TX_1"}, {"PRI_TDM_RX_3 Port Mixer", "QUIN_TDM_TX_2", "QUIN_TDM_TX_2"}, {"PRI_TDM_RX_3 Port Mixer", "QUIN_TDM_TX_3", "QUIN_TDM_TX_3"}, +#ifndef CONFIG_SEN_TDM_DISABLE {"PRI_TDM_RX_3 Port Mixer", "SEN_TDM_TX_0", "SEN_TDM_TX_0"}, {"PRI_TDM_RX_3 Port Mixer", "SEN_TDM_TX_1", "SEN_TDM_TX_1"}, {"PRI_TDM_RX_3 Port Mixer", "SEN_TDM_TX_2", "SEN_TDM_TX_2"}, {"PRI_TDM_RX_3 Port Mixer", "SEN_TDM_TX_3", "SEN_TDM_TX_3"}, +#endif {"PRI_TDM_RX_3", NULL, "PRI_TDM_RX_3 Port Mixer"}, #ifndef CONFIG_MI2S_DISABLE @@ -28941,10 +28957,12 @@ static const struct snd_soc_dapm_route intercon_tdm[] = { {"SEC_TDM_RX_0 Port Mixer", "QUIN_TDM_TX_1", "QUIN_TDM_TX_1"}, {"SEC_TDM_RX_0 Port Mixer", "QUIN_TDM_TX_2", "QUIN_TDM_TX_2"}, {"SEC_TDM_RX_0 Port Mixer", "QUIN_TDM_TX_3", "QUIN_TDM_TX_3"}, +#ifndef CONFIG_SEN_TDM_DISABLE {"SEC_TDM_RX_0 Port Mixer", "SEN_TDM_TX_0", "SEN_TDM_TX_0"}, {"SEC_TDM_RX_0 Port Mixer", "SEN_TDM_TX_1", "SEN_TDM_TX_1"}, {"SEC_TDM_RX_0 Port Mixer", "SEN_TDM_TX_2", "SEN_TDM_TX_2"}, {"SEC_TDM_RX_0 Port Mixer", "SEN_TDM_TX_3", "SEN_TDM_TX_3"}, +#endif {"SEC_TDM_RX_0", NULL, "SEC_TDM_RX_0 Port Mixer"}, #ifndef CONFIG_MI2S_DISABLE @@ -28970,10 +28988,12 @@ static const struct snd_soc_dapm_route intercon_tdm[] = { {"SEC_TDM_RX_1 Port Mixer", "QUIN_TDM_TX_1", "QUIN_TDM_TX_1"}, {"SEC_TDM_RX_1 Port Mixer", "QUIN_TDM_TX_2", "QUIN_TDM_TX_2"}, {"SEC_TDM_RX_1 Port Mixer", "QUIN_TDM_TX_3", "QUIN_TDM_TX_3"}, +#ifndef CONFIG_SEN_TDM_DISABLE {"SEC_TDM_RX_1 Port Mixer", "SEN_TDM_TX_0", "SEN_TDM_TX_0"}, {"SEC_TDM_RX_1 Port Mixer", "SEN_TDM_TX_1", "SEN_TDM_TX_1"}, {"SEC_TDM_RX_1 Port Mixer", "SEN_TDM_TX_2", "SEN_TDM_TX_2"}, {"SEC_TDM_RX_1 Port Mixer", "SEN_TDM_TX_3", "SEN_TDM_TX_3"}, +#endif {"SEC_TDM_RX_1", NULL, "SEC_TDM_RX_1 Port Mixer"}, #ifndef CONFIG_MI2S_DISABLE @@ -28999,10 +29019,12 @@ static const struct snd_soc_dapm_route intercon_tdm[] = { {"SEC_TDM_RX_2 Port Mixer", "QUIN_TDM_TX_1", "QUIN_TDM_TX_1"}, {"SEC_TDM_RX_2 Port Mixer", "QUIN_TDM_TX_2", "QUIN_TDM_TX_2"}, {"SEC_TDM_RX_2 Port Mixer", "QUIN_TDM_TX_3", "QUIN_TDM_TX_3"}, +#ifndef CONFIG_SEN_TDM_DISABLE {"SEC_TDM_RX_2 Port Mixer", "SEN_TDM_TX_0", "SEN_TDM_TX_0"}, {"SEC_TDM_RX_2 Port Mixer", "SEN_TDM_TX_1", "SEN_TDM_TX_1"}, {"SEC_TDM_RX_2 Port Mixer", "SEN_TDM_TX_2", "SEN_TDM_TX_2"}, {"SEC_TDM_RX_2 Port Mixer", "SEN_TDM_TX_3", "SEN_TDM_TX_3"}, +#endif {"SEC_TDM_RX_2", NULL, "SEC_TDM_RX_2 Port Mixer"}, #ifndef CONFIG_MI2S_DISABLE @@ -29028,10 +29050,12 @@ static const struct snd_soc_dapm_route intercon_tdm[] = { {"SEC_TDM_RX_3 Port Mixer", "QUIN_TDM_TX_1", "QUIN_TDM_TX_1"}, {"SEC_TDM_RX_3 Port Mixer", "QUIN_TDM_TX_2", "QUIN_TDM_TX_2"}, {"SEC_TDM_RX_3 Port Mixer", "QUIN_TDM_TX_3", "QUIN_TDM_TX_3"}, +#ifndef CONFIG_SEN_TDM_DISABLE {"SEC_TDM_RX_3 Port Mixer", "SEN_TDM_TX_0", "SEN_TDM_TX_0"}, {"SEC_TDM_RX_3 Port Mixer", "SEN_TDM_TX_1", "SEN_TDM_TX_1"}, {"SEC_TDM_RX_3 Port Mixer", "SEN_TDM_TX_2", "SEN_TDM_TX_2"}, {"SEC_TDM_RX_3 Port Mixer", "SEN_TDM_TX_3", "SEN_TDM_TX_3"}, +#endif {"SEC_TDM_RX_3", NULL, "SEC_TDM_RX_3 Port Mixer"}, {"SEC_TDM_RX_7 Port Mixer", "TERT_TDM_TX_7", "TERT_TDM_TX_7"}, @@ -29060,10 +29084,12 @@ static const struct snd_soc_dapm_route intercon_tdm[] = { {"TERT_TDM_RX_0 Port Mixer", "QUIN_TDM_TX_1", "QUIN_TDM_TX_1"}, {"TERT_TDM_RX_0 Port Mixer", "QUIN_TDM_TX_2", "QUIN_TDM_TX_2"}, {"TERT_TDM_RX_0 Port Mixer", "QUIN_TDM_TX_3", "QUIN_TDM_TX_3"}, +#ifndef CONFIG_SEN_TDM_DISABLE {"TERT_TDM_RX_0 Port Mixer", "SEN_TDM_TX_0", "SEN_TDM_TX_0"}, {"TERT_TDM_RX_0 Port Mixer", "SEN_TDM_TX_1", "SEN_TDM_TX_1"}, {"TERT_TDM_RX_0 Port Mixer", "SEN_TDM_TX_2", "SEN_TDM_TX_2"}, {"TERT_TDM_RX_0 Port Mixer", "SEN_TDM_TX_3", "SEN_TDM_TX_3"}, +#endif {"TERT_TDM_RX_0", NULL, "TERT_TDM_RX_0 Port Mixer"}, #ifndef CONFIG_MI2S_DISABLE @@ -29089,10 +29115,12 @@ static const struct snd_soc_dapm_route intercon_tdm[] = { {"TERT_TDM_RX_1 Port Mixer", "QUIN_TDM_TX_1", "QUIN_TDM_TX_1"}, {"TERT_TDM_RX_1 Port Mixer", "QUIN_TDM_TX_2", "QUIN_TDM_TX_2"}, {"TERT_TDM_RX_1 Port Mixer", "QUIN_TDM_TX_3", "QUIN_TDM_TX_3"}, +#ifndef CONFIG_SEN_TDM_DISABLE {"TERT_TDM_RX_1 Port Mixer", "SEN_TDM_TX_0", "SEN_TDM_TX_0"}, {"TERT_TDM_RX_1 Port Mixer", "SEN_TDM_TX_1", "SEN_TDM_TX_1"}, {"TERT_TDM_RX_1 Port Mixer", "SEN_TDM_TX_2", "SEN_TDM_TX_2"}, {"TERT_TDM_RX_1 Port Mixer", "SEN_TDM_TX_3", "SEN_TDM_TX_3"}, +#endif {"TERT_TDM_RX_1", NULL, "TERT_TDM_RX_1 Port Mixer"}, #ifndef CONFIG_MI2S_DISABLE @@ -29118,10 +29146,12 @@ static const struct snd_soc_dapm_route intercon_tdm[] = { {"TERT_TDM_RX_2 Port Mixer", "QUIN_TDM_TX_1", "QUIN_TDM_TX_1"}, {"TERT_TDM_RX_2 Port Mixer", "QUIN_TDM_TX_2", "QUIN_TDM_TX_2"}, {"TERT_TDM_RX_2 Port Mixer", "QUIN_TDM_TX_3", "QUIN_TDM_TX_3"}, +#ifndef CONFIG_SEN_TDM_DISABLE {"TERT_TDM_RX_2 Port Mixer", "SEN_TDM_TX_0", "SEN_TDM_TX_0"}, {"TERT_TDM_RX_2 Port Mixer", "SEN_TDM_TX_1", "SEN_TDM_TX_1"}, {"TERT_TDM_RX_2 Port Mixer", "SEN_TDM_TX_2", "SEN_TDM_TX_2"}, {"TERT_TDM_RX_2 Port Mixer", "SEN_TDM_TX_3", "SEN_TDM_TX_3"}, +#endif {"TERT_TDM_RX_2", NULL, "TERT_TDM_RX_2 Port Mixer"}, #ifndef CONFIG_MI2S_DISABLE @@ -29147,10 +29177,12 @@ static const struct snd_soc_dapm_route intercon_tdm[] = { {"TERT_TDM_RX_3 Port Mixer", "QUIN_TDM_TX_1", "QUIN_TDM_TX_1"}, {"TERT_TDM_RX_3 Port Mixer", "QUIN_TDM_TX_2", "QUIN_TDM_TX_2"}, {"TERT_TDM_RX_3 Port Mixer", "QUIN_TDM_TX_3", "QUIN_TDM_TX_3"}, +#ifndef CONFIG_SEN_TDM_DISABLE {"TERT_TDM_RX_3 Port Mixer", "SEN_TDM_TX_0", "SEN_TDM_TX_0"}, {"TERT_TDM_RX_3 Port Mixer", "SEN_TDM_TX_1", "SEN_TDM_TX_1"}, {"TERT_TDM_RX_3 Port Mixer", "SEN_TDM_TX_2", "SEN_TDM_TX_2"}, {"TERT_TDM_RX_3 Port Mixer", "SEN_TDM_TX_3", "SEN_TDM_TX_3"}, +#endif {"TERT_TDM_RX_3", NULL, "TERT_TDM_RX_3 Port Mixer"}, #ifndef CONFIG_MI2S_DISABLE @@ -29176,10 +29208,12 @@ static const struct snd_soc_dapm_route intercon_tdm[] = { {"QUAT_TDM_RX_0 Port Mixer", "QUIN_TDM_TX_1", "QUIN_TDM_TX_1"}, {"QUAT_TDM_RX_0 Port Mixer", "QUIN_TDM_TX_2", "QUIN_TDM_TX_2"}, {"QUAT_TDM_RX_0 Port Mixer", "QUIN_TDM_TX_3", "QUIN_TDM_TX_3"}, +#ifndef CONFIG_SEN_TDM_DISABLE {"QUAT_TDM_RX_0 Port Mixer", "SEN_TDM_TX_0", "SEN_TDM_TX_0"}, {"QUAT_TDM_RX_0 Port Mixer", "SEN_TDM_TX_1", "SEN_TDM_TX_1"}, {"QUAT_TDM_RX_0 Port Mixer", "SEN_TDM_TX_2", "SEN_TDM_TX_2"}, {"QUAT_TDM_RX_0 Port Mixer", "SEN_TDM_TX_3", "SEN_TDM_TX_3"}, +#endif {"QUAT_TDM_RX_0", NULL, "QUAT_TDM_RX_0 Port Mixer"}, #ifndef CONFIG_MI2S_DISABLE @@ -29205,10 +29239,12 @@ static const struct snd_soc_dapm_route intercon_tdm[] = { {"QUAT_TDM_RX_1 Port Mixer", "QUIN_TDM_TX_1", "QUIN_TDM_TX_1"}, {"QUAT_TDM_RX_1 Port Mixer", "QUIN_TDM_TX_2", "QUIN_TDM_TX_2"}, {"QUAT_TDM_RX_1 Port Mixer", "QUIN_TDM_TX_3", "QUIN_TDM_TX_3"}, +#ifndef CONFIG_SEN_TDM_DISABLE {"QUAT_TDM_RX_1 Port Mixer", "SEN_TDM_TX_0", "SEN_TDM_TX_0"}, {"QUAT_TDM_RX_1 Port Mixer", "SEN_TDM_TX_1", "SEN_TDM_TX_1"}, {"QUAT_TDM_RX_1 Port Mixer", "SEN_TDM_TX_2", "SEN_TDM_TX_2"}, {"QUAT_TDM_RX_1 Port Mixer", "SEN_TDM_TX_3", "SEN_TDM_TX_3"}, +#endif {"QUAT_TDM_RX_1", NULL, "QUAT_TDM_RX_1 Port Mixer"}, #ifndef CONFIG_MI2S_DISABLE @@ -29234,10 +29270,12 @@ static const struct snd_soc_dapm_route intercon_tdm[] = { {"QUAT_TDM_RX_2 Port Mixer", "QUIN_TDM_TX_1", "QUIN_TDM_TX_1"}, {"QUAT_TDM_RX_2 Port Mixer", "QUIN_TDM_TX_2", "QUIN_TDM_TX_2"}, {"QUAT_TDM_RX_2 Port Mixer", "QUIN_TDM_TX_3", "QUIN_TDM_TX_3"}, +#ifndef CONFIG_SEN_TDM_DISABLE {"QUAT_TDM_RX_2 Port Mixer", "SEN_TDM_TX_0", "SEN_TDM_TX_0"}, {"QUAT_TDM_RX_2 Port Mixer", "SEN_TDM_TX_1", "SEN_TDM_TX_1"}, {"QUAT_TDM_RX_2 Port Mixer", "SEN_TDM_TX_2", "SEN_TDM_TX_2"}, {"QUAT_TDM_RX_2 Port Mixer", "SEN_TDM_TX_3", "SEN_TDM_TX_3"}, +#endif {"QUAT_TDM_RX_2", NULL, "QUAT_TDM_RX_2 Port Mixer"}, #ifndef CONFIG_MI2S_DISABLE @@ -29263,10 +29301,12 @@ static const struct snd_soc_dapm_route intercon_tdm[] = { {"QUAT_TDM_RX_3 Port Mixer", "QUIN_TDM_TX_1", "QUIN_TDM_TX_1"}, {"QUAT_TDM_RX_3 Port Mixer", "QUIN_TDM_TX_2", "QUIN_TDM_TX_2"}, {"QUAT_TDM_RX_3 Port Mixer", "QUIN_TDM_TX_3", "QUIN_TDM_TX_3"}, +#ifndef CONFIG_SEN_TDM_DISABLE {"QUAT_TDM_RX_3 Port Mixer", "SEN_TDM_TX_0", "SEN_TDM_TX_0"}, {"QUAT_TDM_RX_3 Port Mixer", "SEN_TDM_TX_1", "SEN_TDM_TX_1"}, {"QUAT_TDM_RX_3 Port Mixer", "SEN_TDM_TX_2", "SEN_TDM_TX_2"}, {"QUAT_TDM_RX_3 Port Mixer", "SEN_TDM_TX_3", "SEN_TDM_TX_3"}, +#endif {"QUAT_TDM_RX_3", NULL, "QUAT_TDM_RX_3 Port Mixer"}, {"QUAT_TDM_RX_7 Port Mixer", "TERT_TDM_TX_7", "TERT_TDM_TX_7"}, @@ -29297,10 +29337,12 @@ static const struct snd_soc_dapm_route intercon_tdm[] = { {"QUIN_TDM_RX_0 Port Mixer", "QUIN_TDM_TX_1", "QUIN_TDM_TX_1"}, {"QUIN_TDM_RX_0 Port Mixer", "QUIN_TDM_TX_2", "QUIN_TDM_TX_2"}, {"QUIN_TDM_RX_0 Port Mixer", "QUIN_TDM_TX_3", "QUIN_TDM_TX_3"}, +#ifndef CONFIG_SEN_TDM_DISABLE {"QUIN_TDM_RX_0 Port Mixer", "SEN_TDM_TX_0", "SEN_TDM_TX_0"}, {"QUIN_TDM_RX_0 Port Mixer", "SEN_TDM_TX_1", "SEN_TDM_TX_1"}, {"QUIN_TDM_RX_0 Port Mixer", "SEN_TDM_TX_2", "SEN_TDM_TX_2"}, {"QUIN_TDM_RX_0 Port Mixer", "SEN_TDM_TX_3", "SEN_TDM_TX_3"}, +#endif {"QUIN_TDM_RX_0", NULL, "QUIN_TDM_RX_0 Port Mixer"}, #ifndef CONFIG_MI2S_DISABLE @@ -29326,10 +29368,12 @@ static const struct snd_soc_dapm_route intercon_tdm[] = { {"QUIN_TDM_RX_1 Port Mixer", "QUIN_TDM_TX_1", "QUIN_TDM_TX_1"}, {"QUIN_TDM_RX_1 Port Mixer", "QUIN_TDM_TX_2", "QUIN_TDM_TX_2"}, {"QUIN_TDM_RX_1 Port Mixer", "QUIN_TDM_TX_3", "QUIN_TDM_TX_3"}, +#ifndef CONFIG_SEN_TDM_DISABLE {"QUIN_TDM_RX_1 Port Mixer", "SEN_TDM_TX_0", "SEN_TDM_TX_0"}, {"QUIN_TDM_RX_1 Port Mixer", "SEN_TDM_TX_1", "SEN_TDM_TX_1"}, {"QUIN_TDM_RX_1 Port Mixer", "SEN_TDM_TX_2", "SEN_TDM_TX_2"}, {"QUIN_TDM_RX_1 Port Mixer", "SEN_TDM_TX_3", "SEN_TDM_TX_3"}, +#endif {"QUIN_TDM_RX_1", NULL, "QUIN_TDM_RX_1 Port Mixer"}, #ifndef CONFIG_MI2S_DISABLE @@ -29355,10 +29399,12 @@ static const struct snd_soc_dapm_route intercon_tdm[] = { {"QUIN_TDM_RX_2 Port Mixer", "QUIN_TDM_TX_1", "QUIN_TDM_TX_1"}, {"QUIN_TDM_RX_2 Port Mixer", "QUIN_TDM_TX_2", "QUIN_TDM_TX_2"}, {"QUIN_TDM_RX_2 Port Mixer", "QUIN_TDM_TX_3", "QUIN_TDM_TX_3"}, +#ifndef CONFIG_SEN_TDM_DISABLE {"QUIN_TDM_RX_2 Port Mixer", "SEN_TDM_TX_0", "SEN_TDM_TX_0"}, {"QUIN_TDM_RX_2 Port Mixer", "SEN_TDM_TX_1", "SEN_TDM_TX_1"}, {"QUIN_TDM_RX_2 Port Mixer", "SEN_TDM_TX_2", "SEN_TDM_TX_2"}, {"QUIN_TDM_RX_2 Port Mixer", "SEN_TDM_TX_3", "SEN_TDM_TX_3"}, +#endif {"QUIN_TDM_RX_2", NULL, "QUIN_TDM_RX_2 Port Mixer"}, #ifndef CONFIG_MI2S_DISABLE @@ -29384,10 +29430,12 @@ static const struct snd_soc_dapm_route intercon_tdm[] = { {"QUIN_TDM_RX_3 Port Mixer", "QUIN_TDM_TX_1", "QUIN_TDM_TX_1"}, {"QUIN_TDM_RX_3 Port Mixer", "QUIN_TDM_TX_2", "QUIN_TDM_TX_2"}, {"QUIN_TDM_RX_3 Port Mixer", "QUIN_TDM_TX_3", "QUIN_TDM_TX_3"}, +#ifndef CONFIG_SEN_TDM_DISABLE {"QUIN_TDM_RX_3 Port Mixer", "SEN_TDM_TX_0", "SEN_TDM_TX_0"}, {"QUIN_TDM_RX_3 Port Mixer", "SEN_TDM_TX_1", "SEN_TDM_TX_1"}, {"QUIN_TDM_RX_3 Port Mixer", "SEN_TDM_TX_2", "SEN_TDM_TX_2"}, {"QUIN_TDM_RX_3 Port Mixer", "SEN_TDM_TX_3", "SEN_TDM_TX_3"}, +#endif {"QUIN_TDM_RX_3", NULL, "QUIN_TDM_RX_3 Port Mixer"}, {"QUIN_TDM_RX_7 Port Mixer", "TERT_TDM_TX_7", "TERT_TDM_TX_7"}, From 1b16d157fa716af14232c88b7e8c1d74a4c49ee5 Mon Sep 17 00:00:00 2001 From: Shalini Manjunatha Date: Thu, 16 Mar 2023 17:51:57 +0530 Subject: [PATCH 13/13] asoc: compress: Modify incorrect partial buffer size check Due to incorrect check for buffer size calculation during partial buffer size check, which is part of code for gapless playback support in GKI mode, partial buffers are missed from sending to DSP causing buffer handling issues. Change-Id: Ic6f5a3ce6958ddc94dc7bb7e92ebb778aa13cb64 Signed-off-by: Shalini Manjunatha --- asoc/msm-compress-q6-v2.c | 36 +++++++++++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/asoc/msm-compress-q6-v2.c b/asoc/msm-compress-q6-v2.c index e84ea1dab668..745ff4771efd 100644 --- a/asoc/msm-compress-q6-v2.c +++ b/asoc/msm-compress-q6-v2.c @@ -1,5 +1,39 @@ // SPDX-License-Identifier: GPL-2.0-only /* Copyright (c) 2012-2021, The Linux Foundation. All rights reserved. + * + * Changes from Qualcomm Innovation Center are provided under the following license: + * Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted (subject to the limitations in the + * disclaimer below) provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided + * with the distribution. + * + * * Neither the name of Qualcomm Innovation Center, Inc. nor the + * names of its contributors may be used to endorse or promote + * products derived from this software without specific prior + * written permission. + * + * NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE + * GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT + * HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER + * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN + * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ @@ -2950,7 +2984,7 @@ static int msm_compr_trigger(struct snd_compr_stream *cstream, int cmd) } #else if ((prtd->bytes_received > prtd->copied_total) && - (prtd->bytes_received < runtime->fragment_size)) { + ((prtd->bytes_received - prtd->copied_total) < runtime->fragment_size)) { pr_debug("%s: send the only partial buffer to dsp\n", __func__); bytes_to_write = prtd->bytes_received