ASoC: SOF: ipc4-pcm: Harmonize set pipeline state dbg

Merge series from Peter Ujfalusi <peter.ujfalusi@linux.intel.com>:

The series harmonizes the debug prints for pipeline state changes.

Currently we only print readable state change for single pipeline
changes but when multiple pipeline's state is changed, it is omitted.

Use human readable information in both cases in a harmonized way to aid
debugging.
This commit is contained in:
Mark Brown 2025-06-20 11:33:05 +01:00
commit f186a1a985
No known key found for this signature in database
GPG Key ID: 24D68B725D5487D0
3 changed files with 54 additions and 1 deletions

View File

@ -56,17 +56,41 @@ sof_ipc4_sps_to_time_info(struct snd_sof_pcm_stream *sps)
return stream_priv->time_info;
}
static
char *sof_ipc4_set_multi_pipeline_state_debug(struct snd_sof_dev *sdev, char *buf, size_t size,
struct ipc4_pipeline_set_state_data *trigger_list)
{
int i, offset = 0;
for (i = 0; i < trigger_list->count; i++) {
offset += snprintf(buf + offset, size - offset, " %d",
trigger_list->pipeline_instance_ids[i]);
if (offset >= size - 1) {
buf[size - 1] = '\0';
break;
}
}
return buf;
}
static int sof_ipc4_set_multi_pipeline_state(struct snd_sof_dev *sdev, u32 state,
struct ipc4_pipeline_set_state_data *trigger_list)
{
struct sof_ipc4_msg msg = {{ 0 }};
u32 primary, ipc_size;
char debug_buf[32];
/* trigger a single pipeline */
if (trigger_list->count == 1)
return sof_ipc4_set_pipeline_state(sdev, trigger_list->pipeline_instance_ids[0],
state);
dev_dbg(sdev->dev, "Set pipelines %s to state %d%s",
sof_ipc4_set_multi_pipeline_state_debug(sdev, debug_buf, sizeof(debug_buf),
trigger_list),
state, sof_ipc4_pipeline_state_str(state));
primary = state;
primary |= SOF_IPC4_MSG_TYPE_SET(SOF_IPC4_GLB_SET_PIPELINE_STATE);
primary |= SOF_IPC4_MSG_DIR(SOF_IPC4_MSG_REQUEST);
@ -89,7 +113,8 @@ int sof_ipc4_set_pipeline_state(struct snd_sof_dev *sdev, u32 instance_id, u32 s
struct sof_ipc4_msg msg = {{ 0 }};
u32 primary;
dev_dbg(sdev->dev, "ipc4 set pipeline instance %d state %d", instance_id, state);
dev_dbg(sdev->dev, "Set pipeline %d to state %d%s", instance_id, state,
sof_ipc4_pipeline_state_str(state));
primary = state;
primary |= SOF_IPC4_GLB_PIPE_STATE_ID(instance_id);

View File

@ -126,4 +126,7 @@ size_t sof_ipc4_find_debug_slot_offset_by_type(struct snd_sof_dev *sdev,
void sof_ipc4_mic_privacy_state_change(struct snd_sof_dev *sdev, bool state);
enum sof_ipc4_pipeline_state;
const char *sof_ipc4_pipeline_state_str(enum sof_ipc4_pipeline_state state);
#endif

View File

@ -237,6 +237,26 @@ static void sof_ipc4_log_header(struct device *dev, u8 *text, struct sof_ipc4_ms
msg->extension, str);
}
}
const char *sof_ipc4_pipeline_state_str(enum sof_ipc4_pipeline_state state)
{
switch (state) {
case SOF_IPC4_PIPE_INVALID_STATE:
return " (INVALID_STATE)";
case SOF_IPC4_PIPE_UNINITIALIZED:
return " (UNINITIALIZED)";
case SOF_IPC4_PIPE_RESET:
return " (RESET)";
case SOF_IPC4_PIPE_PAUSED:
return " (PAUSED)";
case SOF_IPC4_PIPE_RUNNING:
return " (RUNNING)";
case SOF_IPC4_PIPE_EOS:
return " (EOS)";
default:
return " (<unknown>)";
}
}
#else /* CONFIG_SND_SOC_SOF_DEBUG_VERBOSE_IPC */
static void sof_ipc4_log_header(struct device *dev, u8 *text, struct sof_ipc4_msg *msg,
bool data_size_valid)
@ -254,6 +274,11 @@ static void sof_ipc4_log_header(struct device *dev, u8 *text, struct sof_ipc4_ms
else
dev_dbg(dev, "%s: %#x|%#x\n", text, msg->primary, msg->extension);
}
const char *sof_ipc4_pipeline_state_str(enum sof_ipc4_pipeline_state state)
{
return "";
}
#endif
static void sof_ipc4_dump_payload(struct snd_sof_dev *sdev,