mirror of https://github.com/thesofproject/sof.git
Merge pull request #399 from tlauda/topic/idc_simplify_ppl_trigger
idc: simplify idc_pipeline_trigger
This commit is contained in:
commit
f79d45c95e
|
@ -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");
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue