Merge pull request #399 from tlauda/topic/idc_simplify_ppl_trigger

idc: simplify idc_pipeline_trigger
This commit is contained in:
Liam Girdwood 2018-09-20 16:03:06 +01:00 committed by GitHub
commit f79d45c95e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 23 additions and 21 deletions

View File

@ -60,6 +60,11 @@ static inline struct idc **idc_get(void)
return &ctx->idc;
}
/**
* \brief Enables IDC interrupts.
* \param[in] target_core Target core id.
* \param[in] source_core Source core id.
*/
static inline void idc_enable_interrupts(int target_core, int source_core)
{
idc_write(IPC_IDCCTL, target_core,
@ -160,13 +165,22 @@ static inline int arch_idc_send_msg(struct idc_msg *msg, uint32_t mode)
return ret;
}
static inline int idc_pipeline_trigger(uint32_t comp_id, uint32_t cmd)
/**
* \brief Executes IDC pipeline trigger message.
* \param[in] cmd Trigger command.
* \return Error code.
*/
static inline int idc_pipeline_trigger(uint32_t cmd)
{
struct sof_ipc_stream *data = _ipc->comp_data;
struct ipc_comp_dev *pcm_dev;
int ret;
/* invalidate stream data */
dcache_invalidate_region(data, sizeof(*data));
/* check whether component exists */
pcm_dev = ipc_get_comp(_ipc, comp_id);
pcm_dev = ipc_get_comp(_ipc, data->comp_id);
if (!pcm_dev)
return -ENODEV;
@ -203,8 +217,7 @@ static inline void idc_cmd(struct idc_msg *msg)
cpu_power_down_core();
break;
case iTS(IDC_MSG_PPL_TRIGGER):
idc_pipeline_trigger(iPTComp(msg->extension),
iPTCommand(msg->extension));
idc_pipeline_trigger(msg->extension);
break;
default:
trace_idc_error("eTc");

View File

@ -735,10 +735,8 @@ void pipeline_cache(struct pipeline *p, struct comp_dev *dev, int cmd)
static int pipeline_trigger_on_core(struct pipeline *p, struct comp_dev *host,
int cmd)
{
struct idc_msg pipeline_trigger = {
IDC_MSG_PPL_TRIGGER,
IDC_MSG_PPL_TRIGGER_EXT(host->comp.id, cmd),
p->ipc_pipe.core };
struct idc_msg pipeline_trigger = { IDC_MSG_PPL_TRIGGER,
IDC_MSG_PPL_TRIGGER_EXT(cmd), p->ipc_pipe.core };
int ret;
/* check if requested core is enabled */

View File

@ -83,24 +83,12 @@
#define IDC_MSG_POWER_DOWN_EXT IDC_EXTENSION(0x0)
/** \brief IDC trigger pipeline message. */
#define IDC_MSG_PPL_COMP_SHIFT 4
#define IDC_MSG_PPL_COMP(x) ((x) << IDC_MSG_PPL_COMP_SHIFT)
#define IDC_MSG_PPL_CMD_MASK 0xf
#define IDC_MSG_PPL_CMD(x) ((x) & IDC_MSG_PPL_CMD_MASK)
#define IDC_MSG_PPL_TRIGGER IDC_TYPE(0x3)
#define IDC_MSG_PPL_TRIGGER_EXT(x, y) IDC_EXTENSION( \
IDC_MSG_PPL_COMP(x) | \
IDC_MSG_PPL_CMD(y))
#define IDC_MSG_PPL_TRIGGER_EXT(x) IDC_EXTENSION(x)
/** \brief Decodes IDC message type. */
#define iTS(x) (((x) >> IDC_TYPE_SHIFT) & IDC_TYPE_MASK)
/** \brief Decodes component id from IDC trigger pipeline message. */
#define iPTComp(x) ((x) >> IDC_MSG_PPL_COMP_SHIFT)
/** \brief Decodes command from IDC trigger pipeline message. */
#define iPTCommand(x) ((x) & IDC_MSG_PPL_CMD_MASK)
/** \brief IDC message. */
struct idc_msg {
uint32_t header; /**< header value */

View File

@ -85,6 +85,9 @@ static inline struct sof_ipc_hdr *mailbox_validate(void)
/* read rest of component data */
mailbox_hostbox_read(hdr + 1, sizeof(*hdr), hdr->size - sizeof(*hdr));
dcache_writeback_region(hdr, hdr->size);
return hdr;
}