All of lore.kernel.org
 help / color / mirror / Atom feed
From: kernel test robot <lkp@intel.com>
To: oe-kbuild@lists.linux.dev
Cc: lkp@intel.com, Julia Lawall <julia.lawall@inria.fr>
Subject: [thesofproject:topic/sof-dev 2/13] sound/soc/sof/ipc4-topology.c:2179:6-18: WARNING: Unsigned expression compared with zero: out_ref_type < 0
Date: Wed, 20 Aug 2025 15:42:35 +0800	[thread overview]
Message-ID: <202508201544.S9UnIFSd-lkp@intel.com> (raw)

BCC: lkp@intel.com
CC: oe-kbuild-all@lists.linux.dev
TO: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com>
CC: Bard Liao <yung-chuan.liao@linux.intel.com>

tree:   https://github.com/thesofproject/linux topic/sof-dev
head:   dbed0a33a87b7b6170f9fcb9de6d6af35109b31e
commit: a7006879612645731c75fc3afccdac0918c9526c [2/13] ASoC: SOF: ipc4-topology: Add support for 8-bit formats
:::::: branch date: 18 hours ago
:::::: commit date: 8 weeks ago
config: alpha-randconfig-r053-20250820 (https://download.01.org/0day-ci/archive/20250820/202508201544.S9UnIFSd-lkp@intel.com/config)
compiler: alpha-linux-gcc (GCC) 10.5.0

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Reported-by: Julia Lawall <julia.lawall@inria.fr>
| Closes: https://lore.kernel.org/r/202508201544.S9UnIFSd-lkp@intel.com/

cocci warnings: (new ones prefixed by >>)
>> sound/soc/sof/ipc4-topology.c:2179:6-18: WARNING: Unsigned expression compared with zero: out_ref_type < 0

vim +2179 sound/soc/sof/ipc4-topology.c

5292b1adc2189ab Ranjani Sridharan    2024-12-07  1974  
3369b10d8f25803 Ranjani Sridharan    2022-03-11  1975  static int
3369b10d8f25803 Ranjani Sridharan    2022-03-11  1976  sof_ipc4_prepare_copier_module(struct snd_sof_widget *swidget,
3369b10d8f25803 Ranjani Sridharan    2022-03-11  1977  			       struct snd_pcm_hw_params *fe_params,
3369b10d8f25803 Ranjani Sridharan    2022-03-11  1978  			       struct snd_sof_platform_stream_params *platform_params,
3369b10d8f25803 Ranjani Sridharan    2022-03-11  1979  			       struct snd_pcm_hw_params *pipeline_params, int dir)
3369b10d8f25803 Ranjani Sridharan    2022-03-11  1980  {
3369b10d8f25803 Ranjani Sridharan    2022-03-11  1981  	struct sof_ipc4_available_audio_format *available_fmt;
3369b10d8f25803 Ranjani Sridharan    2022-03-11  1982  	struct snd_soc_component *scomp = swidget->scomp;
3369b10d8f25803 Ranjani Sridharan    2022-03-11  1983  	struct snd_sof_dev *sdev = snd_soc_component_get_drvdata(scomp);
3369b10d8f25803 Ranjani Sridharan    2022-03-11  1984  	struct sof_ipc4_copier_data *copier_data;
e87ee5e551e0a9e Peter Ujfalusi       2024-05-22  1985  	int input_fmt_index, output_fmt_index;
3369b10d8f25803 Ranjani Sridharan    2022-03-11  1986  	struct sof_ipc4_copier *ipc4_copier;
a935b3f98180927 Andy Shevchenko      2025-03-12  1987  	struct snd_pcm_hw_params *ref_params __free(kfree) = NULL;
0e357b529053232 Bard Liao            2022-04-08  1988  	struct snd_sof_dai *dai;
0437cd0868ff42b Pierre-Louis Bossart 2023-02-07  1989  	u32 gtw_cfg_config_length;
0437cd0868ff42b Pierre-Louis Bossart 2023-02-07  1990  	u32 dma_config_tlv_size = 0;
3369b10d8f25803 Ranjani Sridharan    2022-03-11  1991  	void **ipc_config_data;
3369b10d8f25803 Ranjani Sridharan    2022-03-11  1992  	int *ipc_config_size;
3369b10d8f25803 Ranjani Sridharan    2022-03-11  1993  	u32 **data;
fcbc3aaccfd57c7 Yang Li              2023-05-16  1994  	int ipc_size, ret, out_ref_valid_bits;
a70068796126457 Seppo Ingalsuo       2025-04-29  1995  	u32 out_ref_rate, out_ref_channels, out_ref_type;
a2db53360203f6f Ranjani Sridharan    2023-01-30  1996  	u32 deep_buffer_dma_ms = 0;
9c3200176a1b4a2 Peter Ujfalusi       2024-05-15  1997  	bool single_output_bitdepth;
53c7ac974837bfa Bard Liao            2023-12-29  1998  	int i;
3369b10d8f25803 Ranjani Sridharan    2022-03-11  1999  
3369b10d8f25803 Ranjani Sridharan    2022-03-11  2000  	switch (swidget->id) {
3369b10d8f25803 Ranjani Sridharan    2022-03-11  2001  	case snd_soc_dapm_aif_in:
3369b10d8f25803 Ranjani Sridharan    2022-03-11  2002  	case snd_soc_dapm_aif_out:
3369b10d8f25803 Ranjani Sridharan    2022-03-11  2003  	{
50e829ca6bd448f Peter Ujfalusi       2025-01-08  2004  		struct snd_sof_widget *pipe_widget = swidget->spipe->pipe_widget;
50e829ca6bd448f Peter Ujfalusi       2025-01-08  2005  		struct sof_ipc4_pipeline *pipeline = pipe_widget->private;
3369b10d8f25803 Ranjani Sridharan    2022-03-11  2006  		struct sof_ipc4_gtw_attributes *gtw_attr;
50e829ca6bd448f Peter Ujfalusi       2025-01-08  2007  
50e829ca6bd448f Peter Ujfalusi       2025-01-08  2008  		dev_dbg(sdev->dev,
50e829ca6bd448f Peter Ujfalusi       2025-01-08  2009  			"Host copier %s, type %d, ChainDMA: %s, stream_tag: %d\n",
50e829ca6bd448f Peter Ujfalusi       2025-01-08  2010  			swidget->widget->name, swidget->id,
50e829ca6bd448f Peter Ujfalusi       2025-01-08  2011  			str_yes_no(pipeline->use_chain_dma),
50e829ca6bd448f Peter Ujfalusi       2025-01-08  2012  			platform_params->stream_tag);
3369b10d8f25803 Ranjani Sridharan    2022-03-11  2013  
a2db53360203f6f Ranjani Sridharan    2023-01-30  2014  		/* parse the deep buffer dma size */
a2db53360203f6f Ranjani Sridharan    2023-01-30  2015  		ret = sof_update_ipc_object(scomp, &deep_buffer_dma_ms,
a2db53360203f6f Ranjani Sridharan    2023-01-30  2016  					    SOF_COPIER_DEEP_BUFFER_TOKENS, swidget->tuples,
a2db53360203f6f Ranjani Sridharan    2023-01-30  2017  					    swidget->num_tuples, sizeof(u32), 1);
a2db53360203f6f Ranjani Sridharan    2023-01-30  2018  		if (ret) {
a2db53360203f6f Ranjani Sridharan    2023-01-30  2019  			dev_err(scomp->dev, "Failed to parse deep buffer dma size for %s\n",
a2db53360203f6f Ranjani Sridharan    2023-01-30  2020  				swidget->widget->name);
a2db53360203f6f Ranjani Sridharan    2023-01-30  2021  			return ret;
a2db53360203f6f Ranjani Sridharan    2023-01-30  2022  		}
a2db53360203f6f Ranjani Sridharan    2023-01-30  2023  
3369b10d8f25803 Ranjani Sridharan    2022-03-11  2024  		ipc4_copier = (struct sof_ipc4_copier *)swidget->private;
3369b10d8f25803 Ranjani Sridharan    2022-03-11  2025  		gtw_attr = ipc4_copier->gtw_attr;
3369b10d8f25803 Ranjani Sridharan    2022-03-11  2026  		copier_data = &ipc4_copier->data;
3369b10d8f25803 Ranjani Sridharan    2022-03-11  2027  		available_fmt = &ipc4_copier->available_fmt;
3369b10d8f25803 Ranjani Sridharan    2022-03-11  2028  
f87fd63c2066c02 Jyri Sarha           2022-10-25  2029  		if (pipeline->use_chain_dma) {
f87fd63c2066c02 Jyri Sarha           2022-10-25  2030  			u32 host_dma_id;
f87fd63c2066c02 Jyri Sarha           2022-10-25  2031  			u32 fifo_size;
f87fd63c2066c02 Jyri Sarha           2022-10-25  2032  
f87fd63c2066c02 Jyri Sarha           2022-10-25  2033  			host_dma_id = platform_params->stream_tag - 1;
f87fd63c2066c02 Jyri Sarha           2022-10-25  2034  			pipeline->msg.primary |= SOF_IPC4_GLB_CHAIN_DMA_HOST_ID(host_dma_id);
f87fd63c2066c02 Jyri Sarha           2022-10-25  2035  
f87fd63c2066c02 Jyri Sarha           2022-10-25  2036  			if (params_format(fe_params) == SNDRV_PCM_FORMAT_S16_LE)
f87fd63c2066c02 Jyri Sarha           2022-10-25  2037  				pipeline->msg.primary |= SOF_IPC4_GLB_CHAIN_DMA_SCS_MASK;
f87fd63c2066c02 Jyri Sarha           2022-10-25  2038  
a70068796126457 Seppo Ingalsuo       2025-04-29  2039  			/* Set SCS bit for 8 and 16 bit formats */
a70068796126457 Seppo Ingalsuo       2025-04-29  2040  			if (params_physical_width(fe_params) <= 16)
a70068796126457 Seppo Ingalsuo       2025-04-29  2041  				pipeline->msg.primary |= SOF_IPC4_GLB_CHAIN_DMA_SCS_MASK;
a70068796126457 Seppo Ingalsuo       2025-04-29  2042  
f87fd63c2066c02 Jyri Sarha           2022-10-25  2043  			/*
f87fd63c2066c02 Jyri Sarha           2022-10-25  2044  			 * Despite its name the bitfield 'fifo_size' is used to define DMA buffer
f87fd63c2066c02 Jyri Sarha           2022-10-25  2045  			 * size. The expression calculates 2ms buffer size.
f87fd63c2066c02 Jyri Sarha           2022-10-25  2046  			 */
f87fd63c2066c02 Jyri Sarha           2022-10-25  2047  			fifo_size = DIV_ROUND_UP((SOF_IPC4_CHAIN_DMA_BUF_SIZE_MS *
f87fd63c2066c02 Jyri Sarha           2022-10-25  2048  						  params_rate(fe_params) *
f87fd63c2066c02 Jyri Sarha           2022-10-25  2049  						  params_channels(fe_params) *
f87fd63c2066c02 Jyri Sarha           2022-10-25  2050  						  params_physical_width(fe_params)), 8000);
f87fd63c2066c02 Jyri Sarha           2022-10-25  2051  			pipeline->msg.extension |= SOF_IPC4_GLB_EXT_CHAIN_DMA_FIFO_SIZE(fifo_size);
f87fd63c2066c02 Jyri Sarha           2022-10-25  2052  
f87fd63c2066c02 Jyri Sarha           2022-10-25  2053  			/*
47469c223c7e52d Peter Ujfalusi       2025-05-16  2054  			 * Chain DMA does not support stream timestamping, but it
47469c223c7e52d Peter Ujfalusi       2025-05-16  2055  			 * can use the host side registers for delay calculation.
f87fd63c2066c02 Jyri Sarha           2022-10-25  2056  			 */
47469c223c7e52d Peter Ujfalusi       2025-05-16  2057  			copier_data->gtw_cfg.node_id = SOF_IPC4_CHAIN_DMA_NODE_ID;
f87fd63c2066c02 Jyri Sarha           2022-10-25  2058  
f87fd63c2066c02 Jyri Sarha           2022-10-25  2059  			return 0;
f87fd63c2066c02 Jyri Sarha           2022-10-25  2060  		}
f87fd63c2066c02 Jyri Sarha           2022-10-25  2061  
3369b10d8f25803 Ranjani Sridharan    2022-03-11  2062  		/*
ac1bd23b07315e7 Ranjani Sridharan    2023-01-30  2063  		 * Use the input_pin_fmts to match pcm params for playback and the output_pin_fmts
8f3fc5d0cfdee6e Ranjani Sridharan    2023-01-30  2064  		 * for capture.
3369b10d8f25803 Ranjani Sridharan    2022-03-11  2065  		 */
dbfb4a73357a8fd Ranjani Sridharan    2023-04-19  2066  		if (dir == SNDRV_PCM_STREAM_PLAYBACK)
a935b3f98180927 Andy Shevchenko      2025-03-12  2067  			ref_params = kmemdup(fe_params, sizeof(*ref_params), GFP_KERNEL);
dbfb4a73357a8fd Ranjani Sridharan    2023-04-19  2068  		else
a935b3f98180927 Andy Shevchenko      2025-03-12  2069  			ref_params = kmemdup(pipeline_params, sizeof(*ref_params), GFP_KERNEL);
a935b3f98180927 Andy Shevchenko      2025-03-12  2070  		if (!ref_params)
a935b3f98180927 Andy Shevchenko      2025-03-12  2071  			return -ENOMEM;
8f3fc5d0cfdee6e Ranjani Sridharan    2023-01-30  2072  
9fc5fed76dc4e96 Ranjani Sridharan    2022-03-24  2073  		copier_data->gtw_cfg.node_id &= ~SOF_IPC4_NODE_INDEX_MASK;
3369b10d8f25803 Ranjani Sridharan    2022-03-11  2074  		copier_data->gtw_cfg.node_id |=
3369b10d8f25803 Ranjani Sridharan    2022-03-11  2075  			SOF_IPC4_NODE_INDEX(platform_params->stream_tag - 1);
3369b10d8f25803 Ranjani Sridharan    2022-03-11  2076  
3369b10d8f25803 Ranjani Sridharan    2022-03-11  2077  		/* set gateway attributes */
3369b10d8f25803 Ranjani Sridharan    2022-03-11  2078  		gtw_attr->lp_buffer_alloc = pipeline->lp_mode;
3369b10d8f25803 Ranjani Sridharan    2022-03-11  2079  		break;
3369b10d8f25803 Ranjani Sridharan    2022-03-11  2080  	}
66b72199c76d9c6 Ranjani Sridharan    2022-03-11  2081  	case snd_soc_dapm_dai_in:
66b72199c76d9c6 Ranjani Sridharan    2022-03-11  2082  	case snd_soc_dapm_dai_out:
66b72199c76d9c6 Ranjani Sridharan    2022-03-11  2083  	{
f87fd63c2066c02 Jyri Sarha           2022-10-25  2084  		struct snd_sof_widget *pipe_widget = swidget->spipe->pipe_widget;
f87fd63c2066c02 Jyri Sarha           2022-10-25  2085  		struct sof_ipc4_pipeline *pipeline = pipe_widget->private;
f87fd63c2066c02 Jyri Sarha           2022-10-25  2086  
50e829ca6bd448f Peter Ujfalusi       2025-01-08  2087  		dev_dbg(sdev->dev, "Dai copier %s, type %d, ChainDMA: %s\n",
50e829ca6bd448f Peter Ujfalusi       2025-01-08  2088  			swidget->widget->name, swidget->id,
50e829ca6bd448f Peter Ujfalusi       2025-01-08  2089  			str_yes_no(pipeline->use_chain_dma));
50e829ca6bd448f Peter Ujfalusi       2025-01-08  2090  
f87fd63c2066c02 Jyri Sarha           2022-10-25  2091  		if (pipeline->use_chain_dma)
f87fd63c2066c02 Jyri Sarha           2022-10-25  2092  			return 0;
f87fd63c2066c02 Jyri Sarha           2022-10-25  2093  
0e357b529053232 Bard Liao            2022-04-08  2094  		dai = swidget->private;
66b72199c76d9c6 Ranjani Sridharan    2022-03-11  2095  
66b72199c76d9c6 Ranjani Sridharan    2022-03-11  2096  		ipc4_copier = (struct sof_ipc4_copier *)dai->private;
66b72199c76d9c6 Ranjani Sridharan    2022-03-11  2097  		copier_data = &ipc4_copier->data;
66b72199c76d9c6 Ranjani Sridharan    2022-03-11  2098  		available_fmt = &ipc4_copier->available_fmt;
66b72199c76d9c6 Ranjani Sridharan    2022-03-11  2099  
dbfb4a73357a8fd Ranjani Sridharan    2023-04-19  2100  		/*
9048e78a223ca3d Peter Ujfalusi       2024-04-03  2101  		 * Use the fe_params as a base for the copier configuration.
9048e78a223ca3d Peter Ujfalusi       2024-04-03  2102  		 * The ref_params might get updated to reflect what format is
9048e78a223ca3d Peter Ujfalusi       2024-04-03  2103  		 * supported by the copier on the DAI side.
9048e78a223ca3d Peter Ujfalusi       2024-04-03  2104  		 *
9048e78a223ca3d Peter Ujfalusi       2024-04-03  2105  		 * In case of capture the ref_params returned will be used to
9048e78a223ca3d Peter Ujfalusi       2024-04-03  2106  		 * find the input configuration of the copier.
dbfb4a73357a8fd Ranjani Sridharan    2023-04-19  2107  		 */
a935b3f98180927 Andy Shevchenko      2025-03-12  2108  		ref_params = kmemdup(fe_params, sizeof(*ref_params), GFP_KERNEL);
a935b3f98180927 Andy Shevchenko      2025-03-12  2109  		if (!ref_params)
a935b3f98180927 Andy Shevchenko      2025-03-12  2110  			return -ENOMEM;
a935b3f98180927 Andy Shevchenko      2025-03-12  2111  
a935b3f98180927 Andy Shevchenko      2025-03-12  2112  		ret = sof_ipc4_prepare_dai_copier(sdev, dai, ref_params, dir);
e63bfb55ca58c2c Ranjani Sridharan    2022-03-28  2113  		if (ret < 0)
e63bfb55ca58c2c Ranjani Sridharan    2022-03-28  2114  			return ret;
e63bfb55ca58c2c Ranjani Sridharan    2022-03-28  2115  
9048e78a223ca3d Peter Ujfalusi       2024-04-03  2116  		/*
9048e78a223ca3d Peter Ujfalusi       2024-04-03  2117  		 * For playback the pipeline_params needs to be used to find the
9048e78a223ca3d Peter Ujfalusi       2024-04-03  2118  		 * input configuration of the copier.
9048e78a223ca3d Peter Ujfalusi       2024-04-03  2119  		 */
9048e78a223ca3d Peter Ujfalusi       2024-04-03  2120  		if (dir == SNDRV_PCM_STREAM_PLAYBACK)
a935b3f98180927 Andy Shevchenko      2025-03-12  2121  			memcpy(ref_params, pipeline_params, sizeof(*ref_params));
9048e78a223ca3d Peter Ujfalusi       2024-04-03  2122  
66b72199c76d9c6 Ranjani Sridharan    2022-03-11  2123  		break;
66b72199c76d9c6 Ranjani Sridharan    2022-03-11  2124  	}
69222fa6d06d71f Bard Liao            2022-09-27  2125  	case snd_soc_dapm_buffer:
69222fa6d06d71f Bard Liao            2022-09-27  2126  	{
50e829ca6bd448f Peter Ujfalusi       2025-01-08  2127  		dev_dbg(sdev->dev, "Module copier %s, type %d\n",
50e829ca6bd448f Peter Ujfalusi       2025-01-08  2128  			swidget->widget->name, swidget->id);
50e829ca6bd448f Peter Ujfalusi       2025-01-08  2129  
69222fa6d06d71f Bard Liao            2022-09-27  2130  		ipc4_copier = (struct sof_ipc4_copier *)swidget->private;
69222fa6d06d71f Bard Liao            2022-09-27  2131  		copier_data = &ipc4_copier->data;
69222fa6d06d71f Bard Liao            2022-09-27  2132  		available_fmt = &ipc4_copier->available_fmt;
a935b3f98180927 Andy Shevchenko      2025-03-12  2133  
a935b3f98180927 Andy Shevchenko      2025-03-12  2134  		ref_params = kmemdup(pipeline_params, sizeof(*ref_params), GFP_KERNEL);
a935b3f98180927 Andy Shevchenko      2025-03-12  2135  		if (!ref_params)
a935b3f98180927 Andy Shevchenko      2025-03-12  2136  			return -ENOMEM;
69222fa6d06d71f Bard Liao            2022-09-27  2137  
69222fa6d06d71f Bard Liao            2022-09-27  2138  		break;
69222fa6d06d71f Bard Liao            2022-09-27  2139  	}
3369b10d8f25803 Ranjani Sridharan    2022-03-11  2140  	default:
3369b10d8f25803 Ranjani Sridharan    2022-03-11  2141  		dev_err(sdev->dev, "unsupported type %d for copier %s",
3369b10d8f25803 Ranjani Sridharan    2022-03-11  2142  			swidget->id, swidget->widget->name);
3369b10d8f25803 Ranjani Sridharan    2022-03-11  2143  		return -EINVAL;
3369b10d8f25803 Ranjani Sridharan    2022-03-11  2144  	}
3369b10d8f25803 Ranjani Sridharan    2022-03-11  2145  
3369b10d8f25803 Ranjani Sridharan    2022-03-11  2146  	/* set input and output audio formats */
e87ee5e551e0a9e Peter Ujfalusi       2024-05-22  2147  	input_fmt_index = sof_ipc4_init_input_audio_fmt(sdev, swidget,
e87ee5e551e0a9e Peter Ujfalusi       2024-05-22  2148  							&copier_data->base_config,
a935b3f98180927 Andy Shevchenko      2025-03-12  2149  							ref_params, available_fmt);
e87ee5e551e0a9e Peter Ujfalusi       2024-05-22  2150  	if (input_fmt_index < 0)
e87ee5e551e0a9e Peter Ujfalusi       2024-05-22  2151  		return input_fmt_index;
3369b10d8f25803 Ranjani Sridharan    2022-03-11  2152  
4d63163dfc7d38a Ranjani Sridharan    2023-04-19  2153  	/* set the reference params for output format selection */
9c3200176a1b4a2 Peter Ujfalusi       2024-05-15  2154  	single_output_bitdepth = sof_ipc4_copier_is_single_bitdepth(sdev,
0246a452d675b47 Ranjani Sridharan    2023-05-22  2155  					available_fmt->output_pin_fmts,
0246a452d675b47 Ranjani Sridharan    2023-05-22  2156  					available_fmt->num_output_formats);
4d63163dfc7d38a Ranjani Sridharan    2023-04-19  2157  	switch (swidget->id) {
4d63163dfc7d38a Ranjani Sridharan    2023-04-19  2158  	case snd_soc_dapm_aif_in:
4d63163dfc7d38a Ranjani Sridharan    2023-04-19  2159  	case snd_soc_dapm_dai_out:
4d63163dfc7d38a Ranjani Sridharan    2023-04-19  2160  	case snd_soc_dapm_buffer:
4d63163dfc7d38a Ranjani Sridharan    2023-04-19  2161  	{
4d63163dfc7d38a Ranjani Sridharan    2023-04-19  2162  		struct sof_ipc4_audio_format *in_fmt;
4d63163dfc7d38a Ranjani Sridharan    2023-04-19  2163  
e87ee5e551e0a9e Peter Ujfalusi       2024-05-22  2164  		in_fmt = &available_fmt->input_pin_fmts[input_fmt_index].audio_fmt;
4d63163dfc7d38a Ranjani Sridharan    2023-04-19  2165  		out_ref_rate = in_fmt->sampling_frequency;
4d63163dfc7d38a Ranjani Sridharan    2023-04-19  2166  		out_ref_channels = SOF_IPC4_AUDIO_FORMAT_CFG_CHANNELS_COUNT(in_fmt->fmt_cfg);
a70068796126457 Seppo Ingalsuo       2025-04-29  2167  		out_ref_type = SOF_IPC4_AUDIO_FORMAT_CFG_SAMPLE_TYPE(in_fmt->fmt_cfg);
0246a452d675b47 Ranjani Sridharan    2023-05-22  2168  
9c3200176a1b4a2 Peter Ujfalusi       2024-05-15  2169  		if (!single_output_bitdepth)
0246a452d675b47 Ranjani Sridharan    2023-05-22  2170  			out_ref_valid_bits =
0246a452d675b47 Ranjani Sridharan    2023-05-22  2171  				SOF_IPC4_AUDIO_FORMAT_CFG_V_BIT_DEPTH(in_fmt->fmt_cfg);
4d63163dfc7d38a Ranjani Sridharan    2023-04-19  2172  		break;
4d63163dfc7d38a Ranjani Sridharan    2023-04-19  2173  	}
4d63163dfc7d38a Ranjani Sridharan    2023-04-19  2174  	case snd_soc_dapm_aif_out:
4d63163dfc7d38a Ranjani Sridharan    2023-04-19  2175  	case snd_soc_dapm_dai_in:
0246a452d675b47 Ranjani Sridharan    2023-05-22  2176  		out_ref_rate = params_rate(fe_params);
0246a452d675b47 Ranjani Sridharan    2023-05-22  2177  		out_ref_channels = params_channels(fe_params);
a70068796126457 Seppo Ingalsuo       2025-04-29  2178  		out_ref_type = sof_ipc4_get_sample_type(sdev, fe_params);
a70068796126457 Seppo Ingalsuo       2025-04-29 @2179  		if (out_ref_type < 0)
a70068796126457 Seppo Ingalsuo       2025-04-29  2180  			return out_ref_type;
a70068796126457 Seppo Ingalsuo       2025-04-29  2181  
9c3200176a1b4a2 Peter Ujfalusi       2024-05-15  2182  		if (!single_output_bitdepth) {
4d63163dfc7d38a Ranjani Sridharan    2023-04-19  2183  			out_ref_valid_bits = sof_ipc4_get_valid_bits(sdev, fe_params);
4d63163dfc7d38a Ranjani Sridharan    2023-04-19  2184  			if (out_ref_valid_bits < 0)
4d63163dfc7d38a Ranjani Sridharan    2023-04-19  2185  				return out_ref_valid_bits;
0246a452d675b47 Ranjani Sridharan    2023-05-22  2186  		}
4d63163dfc7d38a Ranjani Sridharan    2023-04-19  2187  		break;
4d63163dfc7d38a Ranjani Sridharan    2023-04-19  2188  	default:
a04b5fad2d61faf Yong Zhi             2023-05-03  2189  		/*
a04b5fad2d61faf Yong Zhi             2023-05-03  2190  		 * Unsupported type should be caught by the former switch default
a04b5fad2d61faf Yong Zhi             2023-05-03  2191  		 * case, this should never happen in reality.
a04b5fad2d61faf Yong Zhi             2023-05-03  2192  		 */
a04b5fad2d61faf Yong Zhi             2023-05-03  2193  		return -EINVAL;
4d63163dfc7d38a Ranjani Sridharan    2023-04-19  2194  	}
4d63163dfc7d38a Ranjani Sridharan    2023-04-19  2195  
0246a452d675b47 Ranjani Sridharan    2023-05-22  2196  	/*
0246a452d675b47 Ranjani Sridharan    2023-05-22  2197  	 * if the output format is the same across all available output formats, choose
0246a452d675b47 Ranjani Sridharan    2023-05-22  2198  	 * that as the reference.
0246a452d675b47 Ranjani Sridharan    2023-05-22  2199  	 */
9c3200176a1b4a2 Peter Ujfalusi       2024-05-15  2200  	if (single_output_bitdepth) {
0246a452d675b47 Ranjani Sridharan    2023-05-22  2201  		struct sof_ipc4_audio_format *out_fmt;
0246a452d675b47 Ranjani Sridharan    2023-05-22  2202  
0246a452d675b47 Ranjani Sridharan    2023-05-22  2203  		out_fmt = &available_fmt->output_pin_fmts[0].audio_fmt;
0246a452d675b47 Ranjani Sridharan    2023-05-22  2204  		out_ref_valid_bits =
0246a452d675b47 Ranjani Sridharan    2023-05-22  2205  			SOF_IPC4_AUDIO_FORMAT_CFG_V_BIT_DEPTH(out_fmt->fmt_cfg);
a70068796126457 Seppo Ingalsuo       2025-04-29  2206  		out_ref_type = SOF_IPC4_AUDIO_FORMAT_CFG_SAMPLE_TYPE(out_fmt->fmt_cfg);
0246a452d675b47 Ranjani Sridharan    2023-05-22  2207  	}
0246a452d675b47 Ranjani Sridharan    2023-05-22  2208  
fa045ad167d6ef6 Peter Ujfalusi       2024-05-20  2209  	output_fmt_index = sof_ipc4_init_output_audio_fmt(sdev, swidget,
fa045ad167d6ef6 Peter Ujfalusi       2024-05-20  2210  							  &copier_data->base_config,
4d63163dfc7d38a Ranjani Sridharan    2023-04-19  2211  							  available_fmt, out_ref_rate,
a70068796126457 Seppo Ingalsuo       2025-04-29  2212  							  out_ref_channels, out_ref_valid_bits,
a70068796126457 Seppo Ingalsuo       2025-04-29  2213  							  out_ref_type);
fa045ad167d6ef6 Peter Ujfalusi       2024-05-20  2214  	if (output_fmt_index < 0)
13e5b53cae9a869 Ranjani Sridharan    2023-04-19  2215  		return output_fmt_index;
0ab59723f906930 Ranjani Sridharan    2023-04-19  2216  
9877ad8314d7e10 Ranjani Sridharan    2023-02-06  2217  	/*
9877ad8314d7e10 Ranjani Sridharan    2023-02-06  2218  	 * Set the output format. Current topology defines pin 0 input and output formats in pairs.
9877ad8314d7e10 Ranjani Sridharan    2023-02-06  2219  	 * This assumes that the pin 0 formats are defined before all other pins.
9877ad8314d7e10 Ranjani Sridharan    2023-02-06  2220  	 * So pick the output audio format with the same index as the chosen
9877ad8314d7e10 Ranjani Sridharan    2023-02-06  2221  	 * input format. This logic will need to be updated when the format definitions
9877ad8314d7e10 Ranjani Sridharan    2023-02-06  2222  	 * in topology change.
9877ad8314d7e10 Ranjani Sridharan    2023-02-06  2223  	 */
0ab59723f906930 Ranjani Sridharan    2023-04-19  2224  	memcpy(&copier_data->out_format,
0ab59723f906930 Ranjani Sridharan    2023-04-19  2225  	       &available_fmt->output_pin_fmts[output_fmt_index].audio_fmt,
9877ad8314d7e10 Ranjani Sridharan    2023-02-06  2226  	       sizeof(struct sof_ipc4_audio_format));
9877ad8314d7e10 Ranjani Sridharan    2023-02-06  2227  
5874b9d4abfaba1 Bard Liao            2022-03-01  2228  	switch (swidget->id) {
5874b9d4abfaba1 Bard Liao            2022-03-01  2229  	case snd_soc_dapm_dai_in:
5874b9d4abfaba1 Bard Liao            2022-03-01  2230  	case snd_soc_dapm_dai_out:
5874b9d4abfaba1 Bard Liao            2022-03-01  2231  	{
5874b9d4abfaba1 Bard Liao            2022-03-01  2232  		/*
5874b9d4abfaba1 Bard Liao            2022-03-01  2233  		 * Only SOF_DAI_INTEL_ALH needs copier_data to set blob.
72d33ff56eb8b1c Ranjani Sridharan    2023-04-19  2234  		 * That's why only ALH dai's blob is set after sof_ipc4_init_input_audio_fmt
5874b9d4abfaba1 Bard Liao            2022-03-01  2235  		 */
5874b9d4abfaba1 Bard Liao            2022-03-01  2236  		if (ipc4_copier->dai_type == SOF_DAI_INTEL_ALH) {
5874b9d4abfaba1 Bard Liao            2022-03-01  2237  			struct sof_ipc4_alh_configuration_blob *blob;
5d981b2e13194d3 Bard Liao            2023-12-29  2238  			struct sof_ipc4_dma_config *dma_config;
0e357b529053232 Bard Liao            2022-04-08  2239  			struct sof_ipc4_copier_data *alh_data;
0e357b529053232 Bard Liao            2022-04-08  2240  			struct sof_ipc4_copier *alh_copier;
0e357b529053232 Bard Liao            2022-04-08  2241  			struct snd_sof_widget *w;
c4ab4765e548e92 Bard Liao            2022-12-20  2242  			u32 ch_count = 0;
0e357b529053232 Bard Liao            2022-04-08  2243  			u32 ch_mask = 0;
5874b9d4abfaba1 Bard Liao            2022-03-01  2244  			u32 ch_map;
c4ab4765e548e92 Bard Liao            2022-12-20  2245  			u32 step;
c4ab4765e548e92 Bard Liao            2022-12-20  2246  			u32 mask;
5874b9d4abfaba1 Bard Liao            2022-03-01  2247  
5874b9d4abfaba1 Bard Liao            2022-03-01  2248  			blob = (struct sof_ipc4_alh_configuration_blob *)ipc4_copier->copier_config;
0e357b529053232 Bard Liao            2022-04-08  2249  
5874b9d4abfaba1 Bard Liao            2022-03-01  2250  			blob->gw_attr.lp_buffer_alloc = 0;
5874b9d4abfaba1 Bard Liao            2022-03-01  2251  
5874b9d4abfaba1 Bard Liao            2022-03-01  2252  			/* Get channel_mask from ch_map */
5874b9d4abfaba1 Bard Liao            2022-03-01  2253  			ch_map = copier_data->base_config.audio_fmt.ch_map;
2e09d08f3f07fb2 Bard Liao            2022-04-18  2254  			for (i = 0; ch_map; i++) {
c4ab4765e548e92 Bard Liao            2022-12-20  2255  				if ((ch_map & 0xf) != 0xf) {
0e357b529053232 Bard Liao            2022-04-08  2256  					ch_mask |= BIT(i);
c4ab4765e548e92 Bard Liao            2022-12-20  2257  					ch_count++;
c4ab4765e548e92 Bard Liao            2022-12-20  2258  				}
5874b9d4abfaba1 Bard Liao            2022-03-01  2259  				ch_map >>= 4;
5874b9d4abfaba1 Bard Liao            2022-03-01  2260  			}
0e357b529053232 Bard Liao            2022-04-08  2261  
c7095700bbfea9f Pierre-Louis Bossart 2023-02-07  2262  			step = ch_count / blob->alh_cfg.device_count;
c4ab4765e548e92 Bard Liao            2022-12-20  2263  			mask =  GENMASK(step - 1, 0);
0e357b529053232 Bard Liao            2022-04-08  2264  			/*
0e357b529053232 Bard Liao            2022-04-08  2265  			 * Set each gtw_cfg.node_id to blob->alh_cfg.mapping[]
0e357b529053232 Bard Liao            2022-04-08  2266  			 * for all widgets with the same stream name
0e357b529053232 Bard Liao            2022-04-08  2267  			 */
0e357b529053232 Bard Liao            2022-04-08  2268  			i = 0;
0e357b529053232 Bard Liao            2022-04-08  2269  			list_for_each_entry(w, &sdev->widget_list, list) {
da70425e0e4bbe3 Ranjani Sridharan    2024-02-15  2270  				u32 node_type;
da70425e0e4bbe3 Ranjani Sridharan    2024-02-15  2271  
5a72ff807ddfb40 Peter Ujfalusi       2024-11-20  2272  				if (!WIDGET_IS_DAI(w->id) || !w->widget->sname ||
0e357b529053232 Bard Liao            2022-04-08  2273  				    strcmp(w->widget->sname, swidget->widget->sname))
0e357b529053232 Bard Liao            2022-04-08  2274  					continue;
0e357b529053232 Bard Liao            2022-04-08  2275  
0e357b529053232 Bard Liao            2022-04-08  2276  				dai = w->private;
5a72ff807ddfb40 Peter Ujfalusi       2024-11-20  2277  				if (dai->type != SOF_DAI_INTEL_ALH)
5a72ff807ddfb40 Peter Ujfalusi       2024-11-20  2278  					continue;
0e357b529053232 Bard Liao            2022-04-08  2279  				alh_copier = (struct sof_ipc4_copier *)dai->private;
0e357b529053232 Bard Liao            2022-04-08  2280  				alh_data = &alh_copier->data;
da70425e0e4bbe3 Ranjani Sridharan    2024-02-15  2281  				node_type = SOF_IPC4_GET_NODE_TYPE(alh_data->gtw_cfg.node_id);
da70425e0e4bbe3 Ranjani Sridharan    2024-02-15  2282  				blob->alh_cfg.mapping[i].device = SOF_IPC4_NODE_TYPE(node_type);
da70425e0e4bbe3 Ranjani Sridharan    2024-02-15  2283  				blob->alh_cfg.mapping[i].device |=
da70425e0e4bbe3 Ranjani Sridharan    2024-02-15  2284  					SOF_IPC4_NODE_INDEX(alh_copier->dai_index);
5d981b2e13194d3 Bard Liao            2023-12-29  2285  
5d981b2e13194d3 Bard Liao            2023-12-29  2286  				/*
5d981b2e13194d3 Bard Liao            2023-12-29  2287  				 * The mapping[i] device in ALH blob should be the same as the
5d981b2e13194d3 Bard Liao            2023-12-29  2288  				 * dma_config_tlv[i] mapping device if a dma_config_tlv is present.
5d981b2e13194d3 Bard Liao            2023-12-29  2289  				 * The device id will be used for DMA tlv mapping purposes.
5d981b2e13194d3 Bard Liao            2023-12-29  2290  				 */
5d981b2e13194d3 Bard Liao            2023-12-29  2291  				if (ipc4_copier->dma_config_tlv[i].length) {
5d981b2e13194d3 Bard Liao            2023-12-29  2292  					dma_config = &ipc4_copier->dma_config_tlv[i].dma_config;
5d981b2e13194d3 Bard Liao            2023-12-29  2293  					blob->alh_cfg.mapping[i].device =
5d981b2e13194d3 Bard Liao            2023-12-29  2294  						dma_config->dma_stream_channel_map.mapping[0].device;
5d981b2e13194d3 Bard Liao            2023-12-29  2295  				}
5d981b2e13194d3 Bard Liao            2023-12-29  2296  
c4ab4765e548e92 Bard Liao            2022-12-20  2297  				/*
c4ab4765e548e92 Bard Liao            2022-12-20  2298  				 * Set the same channel mask for playback as the audio data is
c4ab4765e548e92 Bard Liao            2022-12-20  2299  				 * duplicated for all speakers. For capture, split the channels
c4ab4765e548e92 Bard Liao            2022-12-20  2300  				 * among the aggregated DAIs. For example, with 4 channels on 2
c4ab4765e548e92 Bard Liao            2022-12-20  2301  				 * aggregated DAIs, the channel_mask should be 0x3 and 0xc for the
c4ab4765e548e92 Bard Liao            2022-12-20  2302  				 * two DAI's.
c4ab4765e548e92 Bard Liao            2022-12-20  2303  				 * The channel masks used depend on the cpu_dais used in the
c4ab4765e548e92 Bard Liao            2022-12-20  2304  				 * dailink at the machine driver level, which actually comes from
c4ab4765e548e92 Bard Liao            2022-12-20  2305  				 * the tables in soc_acpi files depending on the _ADR and devID
c4ab4765e548e92 Bard Liao            2022-12-20  2306  				 * registers for each codec.
c4ab4765e548e92 Bard Liao            2022-12-20  2307  				 */
c4ab4765e548e92 Bard Liao            2022-12-20  2308  				if (w->id == snd_soc_dapm_dai_in)
0e357b529053232 Bard Liao            2022-04-08  2309  					blob->alh_cfg.mapping[i].channel_mask = ch_mask;
c4ab4765e548e92 Bard Liao            2022-12-20  2310  				else
c4ab4765e548e92 Bard Liao            2022-12-20  2311  					blob->alh_cfg.mapping[i].channel_mask = mask << (step * i);
c4ab4765e548e92 Bard Liao            2022-12-20  2312  
0e357b529053232 Bard Liao            2022-04-08  2313  				i++;
0e357b529053232 Bard Liao            2022-04-08  2314  			}
c7095700bbfea9f Pierre-Louis Bossart 2023-02-07  2315  			if (blob->alh_cfg.device_count > 1) {
0e357b529053232 Bard Liao            2022-04-08  2316  				int group_id;
0e357b529053232 Bard Liao            2022-04-08  2317  
a5e71829b52c34d Bard Liao            2022-08-12  2318  				group_id = ida_alloc_max(&alh_group_ida, ALH_MULTI_GTW_COUNT - 1,
0e357b529053232 Bard Liao            2022-04-08  2319  							 GFP_KERNEL);
0e357b529053232 Bard Liao            2022-04-08  2320  
0e357b529053232 Bard Liao            2022-04-08  2321  				if (group_id < 0)
0e357b529053232 Bard Liao            2022-04-08  2322  					return group_id;
0e357b529053232 Bard Liao            2022-04-08  2323  
0e357b529053232 Bard Liao            2022-04-08  2324  				/* add multi-gateway base */
0e357b529053232 Bard Liao            2022-04-08  2325  				group_id += ALH_MULTI_GTW_BASE;
0e357b529053232 Bard Liao            2022-04-08  2326  				copier_data->gtw_cfg.node_id &= ~SOF_IPC4_NODE_INDEX_MASK;
0e357b529053232 Bard Liao            2022-04-08  2327  				copier_data->gtw_cfg.node_id |= SOF_IPC4_NODE_INDEX(group_id);
0e357b529053232 Bard Liao            2022-04-08  2328  			}
5874b9d4abfaba1 Bard Liao            2022-03-01  2329  		}
5874b9d4abfaba1 Bard Liao            2022-03-01  2330  	}
5874b9d4abfaba1 Bard Liao            2022-03-01  2331  	}
5874b9d4abfaba1 Bard Liao            2022-03-01  2332  
3369b10d8f25803 Ranjani Sridharan    2022-03-11  2333  	/* modify the input params for the next widget */
564d85b5766cff7 Peter Ujfalusi       2024-04-03  2334  	ret = sof_ipc4_update_hw_params(sdev, pipeline_params,
564d85b5766cff7 Peter Ujfalusi       2024-04-03  2335  					&copier_data->out_format,
564d85b5766cff7 Peter Ujfalusi       2024-04-03  2336  					BIT(SNDRV_PCM_HW_PARAM_FORMAT) |
564d85b5766cff7 Peter Ujfalusi       2024-04-03  2337  					BIT(SNDRV_PCM_HW_PARAM_CHANNELS) |
564d85b5766cff7 Peter Ujfalusi       2024-04-03  2338  					BIT(SNDRV_PCM_HW_PARAM_RATE));
80d7c2e0fe7cb84 Kai Vehmanen         2023-01-25  2339  	if (ret)
80d7c2e0fe7cb84 Kai Vehmanen         2023-01-25  2340  		return ret;
3369b10d8f25803 Ranjani Sridharan    2022-03-11  2341  
a2db53360203f6f Ranjani Sridharan    2023-01-30  2342  	/*
a2db53360203f6f Ranjani Sridharan    2023-01-30  2343  	 * Set the gateway dma_buffer_size to 2ms buffer size to meet the FW expectation. In the
a2db53360203f6f Ranjani Sridharan    2023-01-30  2344  	 * deep buffer case, set the dma_buffer_size depending on the deep_buffer_dma_ms set
a2db53360203f6f Ranjani Sridharan    2023-01-30  2345  	 * in topology.
a2db53360203f6f Ranjani Sridharan    2023-01-30  2346  	 */
a2db53360203f6f Ranjani Sridharan    2023-01-30  2347  	switch (swidget->id) {
a2db53360203f6f Ranjani Sridharan    2023-01-30  2348  	case snd_soc_dapm_dai_in:
a2db53360203f6f Ranjani Sridharan    2023-01-30  2349  		copier_data->gtw_cfg.dma_buffer_size =
a2db53360203f6f Ranjani Sridharan    2023-01-30  2350  			SOF_IPC4_MIN_DMA_BUFFER_SIZE * copier_data->base_config.ibs;
a2db53360203f6f Ranjani Sridharan    2023-01-30  2351  		break;
a2db53360203f6f Ranjani Sridharan    2023-01-30  2352  	case snd_soc_dapm_aif_in:
a2db53360203f6f Ranjani Sridharan    2023-01-30  2353  		copier_data->gtw_cfg.dma_buffer_size =
a2db53360203f6f Ranjani Sridharan    2023-01-30  2354  			max((u32)SOF_IPC4_MIN_DMA_BUFFER_SIZE, deep_buffer_dma_ms) *
a2db53360203f6f Ranjani Sridharan    2023-01-30  2355  				copier_data->base_config.ibs;
e327169bf75247e Yong Zhi             2023-08-24  2356  		dev_dbg(sdev->dev, "copier %s, dma buffer%s: %u ms (%u bytes)",
e327169bf75247e Yong Zhi             2023-08-24  2357  			swidget->widget->name,
e327169bf75247e Yong Zhi             2023-08-24  2358  			deep_buffer_dma_ms ? " (using Deep Buffer)" : "",
e327169bf75247e Yong Zhi             2023-08-24  2359  			max((u32)SOF_IPC4_MIN_DMA_BUFFER_SIZE, deep_buffer_dma_ms),
e327169bf75247e Yong Zhi             2023-08-24  2360  			copier_data->gtw_cfg.dma_buffer_size);
a2db53360203f6f Ranjani Sridharan    2023-01-30  2361  		break;
a2db53360203f6f Ranjani Sridharan    2023-01-30  2362  	case snd_soc_dapm_dai_out:
a2db53360203f6f Ranjani Sridharan    2023-01-30  2363  	case snd_soc_dapm_aif_out:
a2db53360203f6f Ranjani Sridharan    2023-01-30  2364  		copier_data->gtw_cfg.dma_buffer_size =
a2db53360203f6f Ranjani Sridharan    2023-01-30  2365  			SOF_IPC4_MIN_DMA_BUFFER_SIZE * copier_data->base_config.obs;
a2db53360203f6f Ranjani Sridharan    2023-01-30  2366  		break;
a2db53360203f6f Ranjani Sridharan    2023-01-30  2367  	default:
a2db53360203f6f Ranjani Sridharan    2023-01-30  2368  		break;
a2db53360203f6f Ranjani Sridharan    2023-01-30  2369  	}
3369b10d8f25803 Ranjani Sridharan    2022-03-11  2370  
3369b10d8f25803 Ranjani Sridharan    2022-03-11  2371  	data = &ipc4_copier->copier_config;
3369b10d8f25803 Ranjani Sridharan    2022-03-11  2372  	ipc_config_size = &ipc4_copier->ipc_config_size;
3369b10d8f25803 Ranjani Sridharan    2022-03-11  2373  	ipc_config_data = &ipc4_copier->ipc_config_data;
3369b10d8f25803 Ranjani Sridharan    2022-03-11  2374  
3369b10d8f25803 Ranjani Sridharan    2022-03-11  2375  	/* config_length is DWORD based */
0437cd0868ff42b Pierre-Louis Bossart 2023-02-07  2376  	gtw_cfg_config_length = copier_data->gtw_cfg.config_length * 4;
0437cd0868ff42b Pierre-Louis Bossart 2023-02-07  2377  	ipc_size = sizeof(*copier_data) + gtw_cfg_config_length;
0437cd0868ff42b Pierre-Louis Bossart 2023-02-07  2378  
53c7ac974837bfa Bard Liao            2023-12-29  2379  	dma_config_tlv_size = 0;
53c7ac974837bfa Bard Liao            2023-12-29  2380  	for (i = 0; i < SOF_IPC4_DMA_DEVICE_MAX_COUNT; i++) {
53c7ac974837bfa Bard Liao            2023-12-29  2381  		if (ipc4_copier->dma_config_tlv[i].type != SOF_IPC4_GTW_DMA_CONFIG_ID)
53c7ac974837bfa Bard Liao            2023-12-29  2382  			continue;
53c7ac974837bfa Bard Liao            2023-12-29  2383  		dma_config_tlv_size += ipc4_copier->dma_config_tlv[i].length;
53c7ac974837bfa Bard Liao            2023-12-29  2384  		dma_config_tlv_size +=
53c7ac974837bfa Bard Liao            2023-12-29  2385  			ipc4_copier->dma_config_tlv[i].dma_config.dma_priv_config_size;
53c7ac974837bfa Bard Liao            2023-12-29  2386  		dma_config_tlv_size += (sizeof(ipc4_copier->dma_config_tlv[i]) -
53c7ac974837bfa Bard Liao            2023-12-29  2387  			sizeof(ipc4_copier->dma_config_tlv[i].dma_config));
0437cd0868ff42b Pierre-Louis Bossart 2023-02-07  2388  	}
0437cd0868ff42b Pierre-Louis Bossart 2023-02-07  2389  
53c7ac974837bfa Bard Liao            2023-12-29  2390  	if (dma_config_tlv_size) {
0437cd0868ff42b Pierre-Louis Bossart 2023-02-07  2391  		ipc_size += dma_config_tlv_size;
0437cd0868ff42b Pierre-Louis Bossart 2023-02-07  2392  
0437cd0868ff42b Pierre-Louis Bossart 2023-02-07  2393  		/* we also need to increase the size at the gtw level */
0437cd0868ff42b Pierre-Louis Bossart 2023-02-07  2394  		copier_data->gtw_cfg.config_length += dma_config_tlv_size / 4;
0437cd0868ff42b Pierre-Louis Bossart 2023-02-07  2395  	}
3369b10d8f25803 Ranjani Sridharan    2022-03-11  2396  
3369b10d8f25803 Ranjani Sridharan    2022-03-11  2397  	dev_dbg(sdev->dev, "copier %s, IPC size is %d", swidget->widget->name, ipc_size);
3369b10d8f25803 Ranjani Sridharan    2022-03-11  2398  
3369b10d8f25803 Ranjani Sridharan    2022-03-11  2399  	*ipc_config_data = kzalloc(ipc_size, GFP_KERNEL);
3369b10d8f25803 Ranjani Sridharan    2022-03-11  2400  	if (!*ipc_config_data)
3369b10d8f25803 Ranjani Sridharan    2022-03-11  2401  		return -ENOMEM;
3369b10d8f25803 Ranjani Sridharan    2022-03-11  2402  
3369b10d8f25803 Ranjani Sridharan    2022-03-11  2403  	*ipc_config_size = ipc_size;
3369b10d8f25803 Ranjani Sridharan    2022-03-11  2404  
e87ee5e551e0a9e Peter Ujfalusi       2024-05-22  2405  	sof_ipc4_dbg_module_audio_format(sdev->dev, swidget, available_fmt,
e87ee5e551e0a9e Peter Ujfalusi       2024-05-22  2406  					 input_fmt_index, output_fmt_index);
e87ee5e551e0a9e Peter Ujfalusi       2024-05-22  2407  
78ed121c2989e2a Peter Ujfalusi       2023-08-07  2408  	/* update pipeline memory usage */
78ed121c2989e2a Peter Ujfalusi       2023-08-07  2409  	sof_ipc4_update_resource_usage(sdev, swidget, &copier_data->base_config);
78ed121c2989e2a Peter Ujfalusi       2023-08-07  2410  
3369b10d8f25803 Ranjani Sridharan    2022-03-11  2411  	/* copy IPC data */
3369b10d8f25803 Ranjani Sridharan    2022-03-11  2412  	memcpy(*ipc_config_data, (void *)copier_data, sizeof(*copier_data));
0437cd0868ff42b Pierre-Louis Bossart 2023-02-07  2413  	if (gtw_cfg_config_length)
3369b10d8f25803 Ranjani Sridharan    2022-03-11  2414  		memcpy(*ipc_config_data + sizeof(*copier_data),
0437cd0868ff42b Pierre-Louis Bossart 2023-02-07  2415  		       *data, gtw_cfg_config_length);
0437cd0868ff42b Pierre-Louis Bossart 2023-02-07  2416  
0437cd0868ff42b Pierre-Louis Bossart 2023-02-07  2417  	/* add DMA Config TLV, if configured */
0437cd0868ff42b Pierre-Louis Bossart 2023-02-07  2418  	if (dma_config_tlv_size)
0437cd0868ff42b Pierre-Louis Bossart 2023-02-07  2419  		memcpy(*ipc_config_data + sizeof(*copier_data) +
0437cd0868ff42b Pierre-Louis Bossart 2023-02-07  2420  		       gtw_cfg_config_length,
0437cd0868ff42b Pierre-Louis Bossart 2023-02-07  2421  		       &ipc4_copier->dma_config_tlv, dma_config_tlv_size);
3369b10d8f25803 Ranjani Sridharan    2022-03-11  2422  
d933a389dd1681f Pierre-Louis Bossart 2023-07-05  2423  	/*
d933a389dd1681f Pierre-Louis Bossart 2023-07-05  2424  	 * Restore gateway config length now that IPC payload is prepared. This avoids
d933a389dd1681f Pierre-Louis Bossart 2023-07-05  2425  	 * counting the DMA CONFIG TLV multiple times
d933a389dd1681f Pierre-Louis Bossart 2023-07-05  2426  	 */
d933a389dd1681f Pierre-Louis Bossart 2023-07-05  2427  	copier_data->gtw_cfg.config_length = gtw_cfg_config_length / 4;
d933a389dd1681f Pierre-Louis Bossart 2023-07-05  2428  
3ecf8f41dc299ce Bard Liao            2022-07-06  2429  	return 0;
6b26395013c7126 Ranjani Sridharan    2022-03-10  2430  }
6b26395013c7126 Ranjani Sridharan    2022-03-10  2431  

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

                 reply	other threads:[~2025-08-20  7:43 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=202508201544.S9UnIFSd-lkp@intel.com \
    --to=lkp@intel.com \
    --cc=julia.lawall@inria.fr \
    --cc=oe-kbuild@lists.linux.dev \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.