Commit Graph

64 Commits

Author SHA1 Message Date
Rander Wang 1fc1d28584 topology2: clean up audio format
Separate the input & output audio format.

Signed-off-by: Rander Wang <rander.wang@intel.com>
2023-10-17 15:55:07 -07:00
Rander Wang 4dad5c2d5c topolog2: nocodec: set output_pin number
The num_output_pins was set for pass-through path but missed in normal
path. Without it Linux kernel driver wouldn't set second output pin
format for dai copier which connects smart amp and gain module.

Signed-off-by: Rander Wang <rander.wang@intel.com>
2023-10-17 15:55:07 -07:00
Seppo Ingalsuo c22e3f438d Tools: Topology2: Use windows_fade in nocodec topologies
This patch changes all cavs-nocodec.conf based topologies to
use exponential Windows fade curve_type in gain components. It
is done to ensure the ramp gets tested after change of gain
curve_type default to linear.

The gain in included deep buffer playback pipeline (hw:0,31) and
in mixer pipeline (hw:0,41) are not changed because they are used
also in normal topologies. Also in capture direction DMIC raw
(hw:0,10) remains curve_type 2. Other gains are curve_type 1
Windows fade.

Signed-off-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com>
2023-10-17 17:33:50 +01:00
Seppo Ingalsuo 2cdd11a95d Tools: Topology2: Remove 50 ms curve duration set from nocodec
We need to care about audio user experience and peak MCPS
usage in production topologies.

The alsabat test is disturbed by the longer ramp so the
change can be reverted from nocodec topologies. Those
topologies are never used by end users. Also the peak MCPS
mitigation is not relevant for test topologies, as long as
higher MCPS is not triggering error reports. The curve
duration is restored without explicit set to the default 20 ms.

Fixes: #8238
Fixes: d0d74a477f
       ("Tools: Topology2: Change in capture gain
       curve_duration to 50 m")

Signed-off-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com>
2023-09-25 11:24:01 +01:00
Seppo Ingalsuo d0d74a477f Tools: Topology2: Change in capture gain curve_duration to 50 ms
This change increases the ramp duration from 20 ms to 50 ms. It
lowers the peak load of peak volume component due to longer same
gain value blocks. The internal update rate for gain becomes 250 us
instead of 125 us. The longer fade-in ramp also conceals better
possible analog capture start transients.

This changes for 4ch capture for gain.11.1 in sof-hda-generic-4ch.tplg
from

CPU_PEAK(MAX) = 21.95
PEAK(MAX)/AVG(AVG) = 7.51

to

CPU_PEAK(MAX) = 9.07
PEAK(MAX)/AVG(AVG) = 3.12

Signed-off-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com>
2023-09-20 15:37:05 +01:00
Seppo Ingalsuo 2a7a94d238 Tools: Topology2: Add SRC component to cavs-nocodec.conf topologies
This patch adds 8 - 192 kHz playback and capture SRC to nocodec
topologies such sof-tgl-nocodec.tplg. It enables testing of SRC
component with IPC4 via the SSP loopback in the nocodec topologies

E.g. Play random noise at 44.1 kHz and capture it as 32 kHz. The
SSP loopback runs internally at 48 kHz.

aplay -Dhw:0,2 -f S32_LE -c 2 -r 44100 -d 10 -t raw /dev/random
arecord -Dhw:0,2 -f S16_LE -c 2 -r 32000 -d 10 /tmp/recording.wav

Signed-off-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com>
2023-09-05 18:56:47 +03:00
Chao Song fc1ddf95d4 topology2: fix conditional inclusion of DMIC snippets for nocodec
DMIC now is controlled by two variables, PASSHTHROUGH
and NUM_DMICS, we should consider the values for both
variables to decide the inclusion of DMIC pipelines,
routes, widgets, etc.

Fixes: #7931

Signed-off-by: Chao Song <chao.song@linux.intel.com>
2023-07-20 09:57:12 -07:00
Jyri Sarha 50f5c8fbdc topology2: Rename remaining non mixer kcontrols to follow new naming scheme
Rename all remaining kcontrols to follow the new naming scheme that is
already used for all mixers.

This commit changes kcontrol names as follows:

cavs-nocodec.conf:
'smart_amp_init' -> 'Main Playback and Port0 smart_amp_init'

cavs-mixin-mixout-hda.conf:
'4 Main capture Iir Eq' -> 'Analog Capture IIR Eq'

dmic-generic.conf:
'DMIC0 capture Iir Eq' -> 'DMIC0 Capture IIR Eq'

sdw-jack-generic.conf:
'4 Main capture Iir Eq' -> 'Jack In Capture IIR Eq'

Signed-off-by: Jyri Sarha <jyri.sarha@linux.intel.com>
2023-06-30 13:24:56 +03:00
Ranjani Sridharan 75e8f4b63c topology2: cavs-nocodec: Introduce macros for PCM IDs
And fix the erroneous PCM ID for SSP0 capture.

Signed-off-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
2023-06-15 19:50:03 +03:00
Jyri Sarha 08acbe4b6f topology2: cavs-nocodec.conf: Rename ssp-capture and DMIC0 Raw PCMs
Rename cavs-nocodec capture PCMs. The current PCM names are confusing. These
should be better names for them. The former

"ssp-capture" is now "Port0 2nd Capture",
"DMIC0 Raw" is now "DMIC SFX1", and
"DMIC0 Raw 2" is now "DMIC SFX2".

The PCMs in question have extra gains in the path to simulate processing.
Also the mixer name is changed to compensate for the matching "Capture"
substring in the end of the PCM name, that is part of the mixer name,
to avoid "Capture Capture" tautology.

Signed-off-by: Jyri Sarha <jyri.sarha@linux.intel.com>
2023-06-02 13:13:45 +03:00
Ranjani Sridharan 6e2d497371 topology2: dai-copier: num_input_pins/num_output_pins shouldn't be mandatory
Set them based on direction and the actual number of pins used.

Signed-off-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
2023-05-29 09:56:13 +03:00
Ranjani Sridharan 66aaa599e9 topology2: dai-copier: Change the naming convention
Change the naming from dai-copier.<copier_type>.<pipeline_id>.<instance>
to dai_copier.<copier_type>.<stream_name.<direction>.

Signed-off-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
2023-05-29 09:56:13 +03:00
Ranjani Sridharan 96bd6bc62d topology2: copier: Rename it to dai-copier
To make it explicit that it is only for the DAI gateway.

Signed-off-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
2023-05-29 09:56:13 +03:00
Jyri Sarha bdff11cc7a topology2: cavs-nocodec.conf: Rename DMIC0 post mux volumes
Rename cavs-nocodec.conf DMIC0 volumes. Define variables for the
associated PCM names and refer to them in the mixer names. The changes
shown in sof-tgl-nocodec.tplg are:

'gain.18.1 Capture Raw Volume 1' > 'gain.18.1 Post Demux DMIC0 Raw Capture Volu'
'gain.19.1 Main Capture Volume 3' > 'gain.19.1 Pre Demux DMIC0 Raw Capture Volum'
'gain.20.1 Capture Raw Volume 2' > 'gain.20.1 Post Demux DMIC0 Raw 2 Capture Vo'

Signed-off-by: Jyri Sarha <jyri.sarha@linux.intel.com>
2023-05-26 11:08:26 +03:00
Jyri Sarha 0f7f4e96b8 topology2: cavs-nocodec.conf: Rename SSP0 Capture Volumes
Rename SSP0 capture related volumes. Define a variable for PCM name
and refer to it in the mixer names.

Using sof-tgl-nocodec.tplg the changes are:

'gain.8.1 Host Capture Volume' > 'gain.8.1 Pre Demux Port0 Capture Volume'
'gain.7.1 Main Capture Volume 1' > 'gain.7.1 Post Demux Port0 Capture Volume'
'gain.17.1 Main Capture Volume 2' > 'gain.17.1 Post Demux ssp-capture Capture Vo'

Signed-off-by: Jyri Sarha <jyri.sarha@linux.intel.com>
2023-05-26 11:08:26 +03:00
Jyri Sarha 76310a0a0e topology2: cavs-nocodec.conf: Rename SSP0, SSP1, and SSP2 playback volumes
Rename SSP0, SSP1, and SSP2 playback volumes according to PCM names
they are connected to. Define the PCM names as variables so the name
can be changed in a single place.

This is how the change will look like in sof-tgl-nocodec.tplg:

'gain.1.1 Playback Volume 1' > 'gain.1.1 Pre Mixer Port0 Playback Volume'
'gain.2.1 Main Playback Volume 2' > 'gain.2.1 Post Mixer Port0 Playback Volume'
'gain.3.1 Playback Volume 3' > 'gain.3.1 Pre Mixer Port1 Playback Volume'
'gain.5.1 Playback Volume 5' > 'gain.5.1 Pre Mixer Port2 Playback Volume'
'gain.6.1 Main Playback Volume 6' > 'gain.6.1 Post Mixer Port2 Playback Volume'

Signed-off-by: Jyri Sarha <jyri.sarha@linux.intel.com>
2023-05-26 11:08:26 +03:00
Yong Zhi 94f8b0c4d4 topology2: fix number range between 1 and 1000 used by Regex
Since IncludeByKey uses Regular expressions to validate text match,
the expression [1-1000] does not filter number between 1 to 1000 as
intended. For example, DEEPBUFFER_FW_DMA_MS=0 results in matched while
DEEPBUFFER_FW_DMA_MS=5 returns not found, fix with regex flavor pattern.

Signed-off-by: Yong Zhi <yong.zhi@intel.com>
2023-05-23 13:12:21 +03:00
Ranjani Sridharan b534fc6192 topology2: host-gateway-playback: Use host-copier
Replace the generic copier with host-copier in the class definition and
the instances.

Signed-off-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
2023-05-19 08:17:34 -07:00
Ranjani Sridharan ac26e70d95 topology2: host-gateway-capture: use host-copier
Replace the generic copier with host-copier in the class definition and
the instances.

Signed-off-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
2023-05-19 08:17:34 -07:00
Ranjani Sridharan 81a354e750 topology2: gain-copier-capture: Use host-copier
Replace the generic copier with host-copier in the class definition and
the instances.

Signed-off-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
2023-05-19 08:17:34 -07:00
Ranjani Sridharan 9e95cd288b topology2: gain-capture: Use host-copier
Replace the generic copier with host-copier in the class definition and
the instances.

Signed-off-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
2023-05-19 08:17:34 -07:00
Ranjani Sridharan f211f4c9da topology2: host-copier-gain-mixin-playback: Use host-copier
Replace the generic copier with host-copier object in the pipeline class
definition and all its instances.

Signed-off-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
2023-05-19 08:17:34 -07:00
Ranjani Sridharan 9e7ec5a3f2 Revert "topology2: cavs-nocodec: add a module copier to SSP 0 capture pipeline"
DAI copiers now support multiple sinks. So revert the temporary
workaround in the cavs-nocodec topology.

Signed-off-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
2023-05-12 14:26:51 +03:00
Ranjani Sridharan 4123f95353 topology2: cavs-nocodec: Build LNL nocodec topology
Build LNL nocodec topology with simple copier-copier pipelines.

Signed-off-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
2023-05-11 19:03:21 +03:00
Ranjani Sridharan 19d9cce4cf topology2: cavs-nocodec: Implement passthrough option
Add the host and io gateway pipelines when the passthrough option is
chosen and connect them directly.

Signed-off-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
2023-05-11 19:03:21 +03:00
Ranjani Sridharan 5ea630dbef topology2: cavs-nocodec: Make the processing pipelines optional
In preparation for generating simple copier->copier pipelines, add an
option to make the processing pipelines conditional. There is no change
in functionality or definitions. This is purely to make it easier to
exclude these pipelines/pcms/routes from the final topology.

Signed-off-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
2023-05-11 19:03:21 +03:00
Ranjani Sridharan d37da44c39 topology2: cavs-nocodec: Make io-gateway for SSP1 capture conditional
It should be added only if SSP1 is enabled

Signed-off-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
2023-05-11 19:03:21 +03:00
Ranjani Sridharan 74f324641a topology2: cavs-nocodec: add a module copier to SSP 0 capture pipeline
Add a module copier between the DAI copier and gain in preparation for
optimizing the single endpoint DAI copiers. This optimization will
temporarily make multiple sinks unsupported with DAI copiers. This
feature will be re-introduced in a follow up PR and the module copier
will be removed then.

Signed-off-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
2023-05-08 12:23:52 +03:00
Ranjani Sridharan b3139af01c topology2: Remove num_audio_formats attribute
This has been replaced by num_input_audio_formats and
num_output_audio_formats. So remove the attribute from all components
and mark the token ID as deprecated.

Signed-off-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
2023-04-24 10:10:51 +03:00
Ranjani Sridharan 78be251a44 topology2: Move common_definitions.conf
These are Intel-specific, so move them to the platform/intel folder

Signed-off-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
2023-04-11 15:54:31 +03:00
Ranjani Sridharan cbe01073f6 topology2: copier: Make node_type mandatory
Introduce a new class for module-to-module copiers and make node_type
mandatory for the copier class.

Signed-off-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
2023-04-11 15:54:31 +03:00
Ranjani Sridharan b74c26b52c topology2: Rename passthrough-capture.conf
Rename it to host-gateway-capture to align it with the documentation.

Signed-off-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
2023-04-11 15:54:31 +03:00
Ranjani Sridharan 91a436ef7d topology2: Rename passthrough-capture-be
Rename it to io-gateway-capture.conf to align with the documentation.

Signed-off-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
2023-04-11 15:54:31 +03:00
Ranjani Sridharan 650423feb1 topology2: Move the hw_config class definition
Move and rename the hw_config class to
platform/intel/hw_config_cardinal_clk.conf.
This hw_config is specific to Intel SSP DAI that use the cardinal clock
for the mclk frequency.

Ideally, this class should have immutable mclk_frequency and link clock
source. But because the alsatplg compiler expects the name of the hw
config class to be "hw_config" without any extensions, it is left as
modifiable for now. Once the topology compiler is modified, this will be
made immutable in a follow up PR.

Also, introduce a new hw_config_simple.conf file that contains the
hw_config definition for the HDA/DMIC/SDW type DAIs with only the ID and
name attributes.

Signed-off-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
2023-04-05 13:32:30 -07:00
Ranjani Sridharan ada8950551 topology2: ssp: Add blob version
Add the SSP blob version and set it based on the platform.

Co-developed-by: Jaska Uimonen <jaska.uimonen@intel.com>
Signed-off-by: Jaska Uimonen <jaska.uimonen@intel.com>
Signed-off-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
2023-04-05 13:32:30 -07:00
Ranjani Sridharan 362a0781f2 topology2: Remove dma_buffer_size attribute
There's been a recent kernel change to compute the DMA buffer size using
the ibs/obs. So this attribute no longer needs to be set in the
topology.

Signed-off-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
2023-03-31 20:41:07 +03:00
Chao Song 843fd70e91 topology2: cavs-nocodec: include SSP1 pipelines conditionally
There is pinmux conflict between SSP1 and DMIC
on MTL RVP, add a new nocodec topology target
for MTL, on which only SSP0 and SSP2 are enabled.

Signed-off-by: Chao Song <chao.song@linux.intel.com>
2023-03-29 15:17:48 +03:00
Guennadi Liakhovetski 8a48c78704 topology2: add a mixin-mixout level to nocodec
Add a second level of mixin-mixout mixing and a PCM to the nocodec
topology.

Signed-off-by: Guennadi Liakhovetski <guennadi.liakhovetski@linux.intel.com>
2023-03-13 09:59:21 +02:00
Seppo Ingalsuo d371135a63 Tools: Topology2: Add IIR high-pass with gain to DMIC capture
This patch replaces in DMIC0 capture the gain.N.1 component with IIR
high-pass. The gain has been a placeholder
dai-copier-gain-module-copier-capture.conf while the EQ component has
not been available. The pipeline is replaced by
otherwise similar dai-copier-eqiir-module-copier-capture.conf.

The dmic-default.conf sets the default IIR response to 40 Hz
high-pass with 0 dB gain. The topologies will get only the high-pass
filter but no amplification.  The default is changed in
sof-hda-generic.conf to 20 dB gain to address the too silent capture
because these topologies for generic Linux end users do not contain
any other capture enhancements.

Signed-off-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com>
2023-03-02 22:56:00 +00:00
Ranjani Sridharan 45e4cc484d topology2: Move to using arrays for defining objects
Where there more than 1 object of the same type defined at the same node
level, use arrays to define the object. For example, we can define 2
routes as follows:
Object.Base.route [
	{
		source	"smart_amp.2.1"
		sink	"copier.SSP.2.1"
	}
	{
		source	"mixin.1.1"
		sink	"mixout.2.1"
	}
]

This allows us to merge 2 arrays from different conf files without
needing to make their instance ID's unique.

Assume we add another route in a separate conf file like below:
Object.Base.route [
        {
                source  "gain.5.1"
                sink    "copier.5.1"
        }
]

The alsatplg compiler will merge them as follows resulting in 3 route
objects.

Object.Base.route [
        {
                source  "smart_amp.2.1"
                sink    "copier.SSP.2.1"
        }
        {
                source  "mixin.1.1"
                sink    "mixout.2.1"
        }
	{
                source  "gain.5.1"
                sink    "copier.5.1"
        }
]

Signed-off-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
2023-02-17 09:16:34 +02:00
Kai Vehmanen cfeaceb394 topology2: use passthrough-capture-be instead of passthrough-be
As the copier can do format conversions, and many pipeline components
can do conversions as well, it is important for the topology to define a
single format to use in the "dai_out" copier. This ensures deterministic
behaviour with the driver.

Implement this behaviour by switching topologies to use the
passthrough-capture-be pipeline as template for the backend capture
pipelines.

The previously used passthrough-be template is problematic as
the base class already defines multiple audio formats, with multiple
different sample formats. The new passthrough-capture-be only defines
one sample format by default and is a better starting point as a base
class.

Signed-off-by: Kai Vehmanen <kai.vehmanen@linux.intel.com>
2023-02-15 19:18:16 +02:00
Chao Song 2f29bc31fc Topology2: add smart amp pipeline in nocodec topology
Use mixout-gain-smart-amp-dai-copier-playback pipeline
for SSP0 DAI playback.

Signed-off-by: Chao Song <chao.song@linux.intel.com>
Signed-off-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
2023-02-15 18:47:30 +02:00
Ranjani Sridharan f7dd181e99 topology2: Use input/output pin consistently
Use the input/output pin terminology consistently to align with the
kernel driver and avoid any confusion.

Signed-off-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
2023-02-08 11:52:22 +02:00
Guennadi Liakhovetski 0f7c8be8fa topology2: nocodec: add a second level copier
Insert a second copier into the DMIC0 stream to generate a total of
three PCMs from it.

Signed-off-by: Guennadi Liakhovetski <guennadi.liakhovetski@linux.intel.com>
2023-02-07 11:30:59 +00:00
Guennadi Liakhovetski ce14849b5d topology2: remove a superfluous copier in nocodec
Use the simplified pipeline with just one module-type copier
connecting two pipelines.

Signed-off-by: Guennadi Liakhovetski <guennadi.liakhovetski@linux.intel.com>
2023-02-07 11:30:59 +00:00
Rander Wang a33a96b342 topology2: add second capture stream for DMIC0
The second capture stream can be used as a reference stream for user.

Signed-off-by: Rander Wang <rander.wang@intel.com>
2023-02-07 11:30:59 +00:00
Guennadi Liakhovetski 426b113071 topology2: add support for simplified copier module
Currently copier components of the module type are used in pairs -
one on each pipeline, connecting to each other. This isn't necessary.
It's enough to have one such copier component on the side, that does
forking. Add a single-copier capture pipeline variane and switch
DMIC over to it.

Signed-off-by: Guennadi Liakhovetski <guennadi.liakhovetski@linux.intel.com>
2023-02-07 11:30:59 +00:00
Rander Wang 4b0f1bbb9d topology2: add gain and copier in DMIC0 pipeline
This patch will support multiple capture streams with DMIC. The pcm stream
is composed of two pipelines: (1) copier host <- gain <- copier module
(2) copier module <-gain <- copier DMIC. We need to use copier module
to connect two pipelines because of the restriction with the ref FW that
the gain module can only be connected to modules that are in the same
pipeline

Signed-off-by: Rander Wang <rander.wang@intel.com>
2023-02-07 11:30:59 +00:00
Ranjani Sridharan ae8ca22a59 topology2: Add instance attribute for all classes
In preparation for making it easier to write topology conf files that
can be conditionally included without having to worry about conflicting
node ID's for objects between the included file and the top-level conf
file, modify all classes to include an instance attribute. This means
that irrespective of the object type, all objects will be instantiated
as follows:

Object.Widget.gain.1 {} or Object.Base.pdm_config.2 {} etc

The instance ID's are typically only meant for the alsatplg compiler to
differentiate the nodes in the conf file and are not relevant for the
kernel or the firmware. This change will allow the alsatplg compiler to
be modified to automatically make the node ID's unique before
conditionally including conf files.

Signed-off-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
2023-01-25 12:16:29 -08:00
Ranjani Sridharan 97374b6f91 topology2: Make name a mandatory attribute in hw_config
Add an instance attribute and make the name attribute mandatory for the
hw_config objects. This is required because the topology2 compiler allows
for expansion of string values with variable definitions. So, if we
wanted to expand the name from a variable definition(as shown below), it
is only possible if it were a normal attribute instead of the node ID as
it is currently.

Define {
	SSP0_HW_CONFIG_NAME	"SSP0"
}
Object.DAI.SSP.1 {
	dai_index 0
	Object.Base.hw_config.1 {
		name $SSP0_HW_CONFIG_NAME
	}
}

Signed-off-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
2023-01-23 21:14:17 +02:00