mirror of https://github.com/thesofproject/sof.git
fuzzer: cleanup mailbox platform abstraction
Pass mailbox as parameter and add convenience helper for platform ops. Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com>
This commit is contained in:
parent
29a9b9d529
commit
bf72bf7a7b
|
@ -113,13 +113,14 @@ struct fuzz {
|
|||
};
|
||||
|
||||
/* called by platform when it receives IPC message */
|
||||
void fuzzer_ipc_msg_rx(struct fuzz *fuzzer);
|
||||
void fuzzer_ipc_msg_rx(struct fuzz *fuzzer, struct mailbox *mailbox);
|
||||
|
||||
/* called by platform when it receives IPC message reply */
|
||||
void fuzzer_ipc_msg_reply(struct fuzz *fuzzer);
|
||||
void fuzzer_ipc_msg_reply(struct fuzz *fuzzer, struct mailbox *mailbox);
|
||||
|
||||
/* called by platform when FW crashses */
|
||||
void fuzzer_ipc_crash(struct fuzz *fuzzer, unsigned int offset);
|
||||
void fuzzer_ipc_crash(struct fuzz *fuzzer, struct mailbox *mailbox,
|
||||
unsigned int offset);
|
||||
|
||||
/* called by platforms to allocate memory/register regions */
|
||||
void *fuzzer_create_memory_region(struct fuzz *fuzzer, int id, int idx);
|
||||
|
@ -132,6 +133,29 @@ int fuzzer_send_msg(struct fuzz *fuzzer);
|
|||
/* topology */
|
||||
int parse_tplg(struct fuzz *fuzzer, char *tplg_filename);
|
||||
|
||||
/* Convenience platform ops */
|
||||
static inline void fuzzer_mailbox_read(struct fuzz *fuzzer,
|
||||
struct mailbox *mailbox, int offset,
|
||||
void *dest, size_t bytes)
|
||||
{
|
||||
fuzzer->platform->mailbox_read(fuzzer, mailbox->offset + offset,
|
||||
dest, bytes);
|
||||
}
|
||||
|
||||
static inline void fuzzer_mailbox_write(struct fuzz *fuzzer,
|
||||
struct mailbox *mailbox, int offset,
|
||||
void *src, size_t bytes)
|
||||
{
|
||||
fuzzer->platform->mailbox_write(fuzzer, mailbox->offset + offset,
|
||||
src, bytes);
|
||||
}
|
||||
|
||||
static inline void fuzzer_fw_ready(struct fuzz *fuzzer)
|
||||
{
|
||||
fuzzer->platform->fw_ready(fuzzer);
|
||||
}
|
||||
|
||||
|
||||
extern struct fuzz_platform byt_platform;
|
||||
extern struct fuzz_platform cht_platform;
|
||||
|
||||
|
|
|
@ -158,14 +158,14 @@ void fuzzer_free_regions(struct fuzz *fuzzer)
|
|||
}
|
||||
|
||||
/* called by platform when it receives IPC message */
|
||||
void fuzzer_ipc_msg_rx(struct fuzz *fuzzer)
|
||||
void fuzzer_ipc_msg_rx(struct fuzz *fuzzer, struct mailbox *mailbox)
|
||||
{
|
||||
struct sof_ipc_comp_reply r;
|
||||
struct sof_ipc_cmd_hdr hdr;
|
||||
uint32_t cmd;
|
||||
|
||||
/* read mailbox */
|
||||
fuzzer->platform->mailbox_read(fuzzer, 0, &hdr, sizeof(hdr));
|
||||
fuzzer_mailbox_read(fuzzer, mailbox, 0, &hdr, sizeof(hdr));
|
||||
cmd = hdr.cmd & SOF_GLB_TYPE_MASK;
|
||||
|
||||
/* check message type */
|
||||
|
@ -174,7 +174,7 @@ void fuzzer_ipc_msg_rx(struct fuzz *fuzzer)
|
|||
fprintf(stderr, "error: ipc reply unknown\n");
|
||||
break;
|
||||
case SOF_IPC_FW_READY:
|
||||
fuzzer->platform->fw_ready(fuzzer);
|
||||
fuzzer_fw_ready(fuzzer);
|
||||
fuzzer->boot_complete = 1;
|
||||
break;
|
||||
case SOF_IPC_GLB_COMPOUND:
|
||||
|
@ -183,16 +183,17 @@ void fuzzer_ipc_msg_rx(struct fuzz *fuzzer)
|
|||
case SOF_IPC_GLB_COMP_MSG:
|
||||
case SOF_IPC_GLB_STREAM_MSG:
|
||||
case SOF_IPC_GLB_TRACE_MSG:
|
||||
fuzzer->platform->mailbox_read(fuzzer, 0, &r, sizeof(r));
|
||||
fuzzer_mailbox_read(fuzzer, mailbox, 0, &r, sizeof(r));
|
||||
break;
|
||||
default:
|
||||
fprintf(stderr, "error: unknown DSP message 0x%x\n", cmd);
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/* called by platform when it receives IPC message reply */
|
||||
void fuzzer_ipc_msg_reply(struct fuzz *fuzzer)
|
||||
void fuzzer_ipc_msg_reply(struct fuzz *fuzzer, struct mailbox *mailbox)
|
||||
{
|
||||
int ret;
|
||||
|
||||
|
@ -209,7 +210,8 @@ void fuzzer_ipc_msg_reply(struct fuzz *fuzzer)
|
|||
}
|
||||
|
||||
/* called by platform when FW crashses */
|
||||
void fuzzer_ipc_crash(struct fuzz *fuzzer, unsigned int offset)
|
||||
void fuzzer_ipc_crash(struct fuzz *fuzzer, struct mailbox *mailbox,
|
||||
unsigned int offset)
|
||||
{
|
||||
/* TODO: DSP FW has crashed. dump stack, regs, last IPC, log etc */
|
||||
fprintf(stderr, "error: DSP FW crash\n");
|
||||
|
|
|
@ -287,7 +287,7 @@ static int byt_irq_thread(int irq, void *context)
|
|||
* because the done bit can't be set in cmd_done function
|
||||
* which is triggered by msg
|
||||
*/
|
||||
fuzzer_ipc_msg_reply(fuzzer);
|
||||
fuzzer_ipc_msg_reply(fuzzer, &data->host_box);
|
||||
byt_cmd_done(fuzzer, SOF_IPC_DSP_REPLY);
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
|
@ -304,10 +304,10 @@ static int byt_irq_thread(int irq, void *context)
|
|||
|
||||
/* read mailbox */
|
||||
if ((ipcd & SOF_IPC_PANIC_MAGIC_MASK) == SOF_IPC_PANIC_MAGIC) {
|
||||
fuzzer_ipc_crash(fuzzer, BYT_PANIC_OFFSET(ipcd) +
|
||||
MBOX_OFFSET);
|
||||
fuzzer_ipc_crash(fuzzer, &data->dsp_box,
|
||||
BYT_PANIC_OFFSET(ipcd) + MBOX_OFFSET);
|
||||
} else {
|
||||
fuzzer_ipc_msg_rx(fuzzer);
|
||||
fuzzer_ipc_msg_rx(fuzzer, &data->dsp_box);
|
||||
}
|
||||
|
||||
if (!data->boot_complete && fuzzer->boot_complete) {
|
||||
|
@ -329,7 +329,7 @@ static int byt_send_msg(struct fuzz *fuzzer, struct ipc_msg *msg)
|
|||
uint64_t cmd = msg->header;
|
||||
|
||||
/* send the message */
|
||||
mailbox_write(fuzzer, data->host_box.offset, msg->msg_data,
|
||||
fuzzer_mailbox_write(fuzzer, &data->host_box, 0, msg->msg_data,
|
||||
msg->msg_size);
|
||||
dsp_write64(fuzzer, BYT_DSP_BAR, SHIM_IPCX,
|
||||
cmd | SHIM_BYT_IPCX_BUSY);
|
||||
|
@ -346,7 +346,7 @@ static int byt_get_reply(struct fuzz *fuzzer, struct ipc_msg *msg)
|
|||
uint32_t size;
|
||||
|
||||
/* get reply */
|
||||
mailbox_read(fuzzer, data->host_box.offset, &reply, sizeof(reply));
|
||||
fuzzer_mailbox_read(fuzzer, &data->host_box, 0, &reply, sizeof(reply));
|
||||
|
||||
if (reply.error < 0) {
|
||||
size = sizeof(reply);
|
||||
|
@ -366,8 +366,8 @@ static int byt_get_reply(struct fuzz *fuzzer, struct ipc_msg *msg)
|
|||
|
||||
/* read the message */
|
||||
if (msg->msg_data && size > 0)
|
||||
mailbox_read(fuzzer, data->host_box.offset, msg->reply_data,
|
||||
size);
|
||||
fuzzer_mailbox_read(fuzzer, &data->host_box, 0,
|
||||
msg->reply_data, size);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
@ -468,7 +468,8 @@ static void byt_fw_ready(struct fuzz *fuzzer)
|
|||
uint32_t offset = MBOX_OFFSET;
|
||||
|
||||
/* read fw_ready data from mailbox */
|
||||
mailbox_read(fuzzer, 0, &fw_ready, sizeof(fw_ready));
|
||||
fuzzer_mailbox_read(fuzzer, &data->dsp_box, 0,
|
||||
&fw_ready, sizeof(fw_ready));
|
||||
|
||||
/*
|
||||
* Hardcode offsets.
|
||||
|
|
Loading…
Reference in New Issue