Skip to content

ipc4: notification: Add filtering feature#10552

Open
wjablon1 wants to merge 2 commits intothesofproject:mainfrom
wjablon1:notif_mask
Open

ipc4: notification: Add filtering feature#10552
wjablon1 wants to merge 2 commits intothesofproject:mainfrom
wjablon1:notif_mask

Conversation

@wjablon1
Copy link
Contributor

@wjablon1 wjablon1 commented Feb 17, 2026

Adding a handler for retrieving info about the IPC4 notification mask out
of the LargeConfig. The notification mask is then used for filtering IPC4
notifications sent by the FW.

This feature allows muting notifications of a given kind to enhance
readability of logs during debugging. Also, this feature enhances
reliability of certain tests run on FPGA-based setups where the FW
notifications are too overwhelming for those setups.

@wjablon1 wjablon1 changed the title Notif mask ipc4: notification: Add filtering feature Feb 17, 2026
Moving memory allocation for IPC4 notifications to the notification
module. With this change all the logic needed for sending IPC4
notifications is contained within the notification module.
Currently all the notifications are allocated out of the same memory
pool, so the selection of a memory pool is not part of the function
interface of the notification module, but we can easily modify that
behavior by adding a pool ID parameter.

This change enables robust implementation of the notification filtering
feature without exposing additional symbols to LLEXT modules.

Signed-off-by: Wojciech Jablonski <wojciech.jablonski@intel.com>
Adding a handler for retrieving info about the IPC4 notification mask out
of the LargeConfig. The notification mask is then used for filtering IPC4
notifications sent by the FW.

This feature allows muting notifications of a given kind to enhance
readability of logs during debugging. Also, this feature enhances
reliability of certain tests run on FPGA-based setups where the FW
notifications are too overwhelming for those setups.

Signed-off-by: Wojciech Jablonski <wojciech.jablonski@intel.com>
cd->xrun_notification_sent = true;
}
uint32_t node_id = cd->link_connector_node_id.dw;
bool notif_sent = false;
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

superfluous initialisation

if (ret == -EPIPE && !dd->xrun_notification_sent) {
struct ipc_msg *notify = ipc_notification_pool_get(IPC4_RESOURCE_EVENT_SIZE);
uint32_t ppl_id = dev->pipeline->pipeline_id;
bool notif_sent = false;
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ditto

hd->xrun_notification_sent = true;
}
uint32_t ppl_id = dev->pipeline->pipeline_id;
bool notif_sent = false;
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

same here

if (!msg)
return false;

struct ipc4_resource_event_data_notification *notif = msg->tx_data;
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I assume this cannot be NULL

mixer_underrun_data.data_mixed = data_mixed;
mixer_underrun_data.expected_data_mixed = expected_data_mixed;

send_resource_notif(resource_id, SOF_IPC4_MIXER_UNDERRUN_DETECTED, SOF_IPC4_PIPELINE,
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

how about we only export send_resource_notif() and move all this component-specific functions to respective components and potentially make them static there?


__cold static int basefw_notification_mask_info(const char *data)
{
struct ipc4_notification_mask_info *mask_info;
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

we could make the argument const void *data and just initialise struct ipc4_notification_mask_info *mask_info = data; directly here

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants