|
@@ -98,21 +98,30 @@ static const struct cx18_api_info *find_api_info(u32 cmd)
|
|
return NULL;
|
|
return NULL;
|
|
}
|
|
}
|
|
|
|
|
|
-static void dump_mb(struct cx18 *cx, struct cx18_mailbox *mb, char *name)
|
|
|
|
|
|
+/* Call with buf of n*11+1 bytes */
|
|
|
|
+static char *u32arr2hex(u32 data[], int n, char *buf)
|
|
{
|
|
{
|
|
- char argstr[MAX_MB_ARGUMENTS*11+1];
|
|
|
|
char *p;
|
|
char *p;
|
|
int i;
|
|
int i;
|
|
|
|
|
|
|
|
+ for (i = 0, p = buf; i < n; i++, p += 11) {
|
|
|
|
+ /* kernel snprintf() appends '\0' always */
|
|
|
|
+ snprintf(p, 12, " %#010x", data[i]);
|
|
|
|
+ }
|
|
|
|
+ *p = '\0';
|
|
|
|
+ return buf;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static void dump_mb(struct cx18 *cx, struct cx18_mailbox *mb, char *name)
|
|
|
|
+{
|
|
|
|
+ char argstr[MAX_MB_ARGUMENTS*11+1];
|
|
|
|
+
|
|
if (!(cx18_debug & CX18_DBGFLG_API))
|
|
if (!(cx18_debug & CX18_DBGFLG_API))
|
|
return;
|
|
return;
|
|
|
|
|
|
- for (i = 0, p = argstr; i < MAX_MB_ARGUMENTS; i++, p += 11) {
|
|
|
|
- /* kernel snprintf() appends '\0' always */
|
|
|
|
- snprintf(p, 12, " %#010x", mb->args[i]);
|
|
|
|
- }
|
|
|
|
CX18_DEBUG_API("%s: req %#010x ack %#010x cmd %#010x err %#010x args%s"
|
|
CX18_DEBUG_API("%s: req %#010x ack %#010x cmd %#010x err %#010x args%s"
|
|
- "\n", name, mb->request, mb->ack, mb->cmd, mb->error, argstr);
|
|
|
|
|
|
+ "\n", name, mb->request, mb->ack, mb->cmd, mb->error,
|
|
|
|
+ u32arr2hex(mb->args, MAX_MB_ARGUMENTS, argstr));
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
@@ -439,7 +448,8 @@ void cx18_api_epu_cmd_irq(struct cx18 *cx, int rpu)
|
|
"incoming %s to EPU mailbox (sequence no. %u)"
|
|
"incoming %s to EPU mailbox (sequence no. %u)"
|
|
"\n",
|
|
"\n",
|
|
rpu_str[rpu], rpu_str[rpu], order_mb->request);
|
|
rpu_str[rpu], rpu_str[rpu], order_mb->request);
|
|
- dump_mb(cx, order_mb, "incoming");
|
|
|
|
|
|
+ if (cx18_debug & CX18_DBGFLG_WARN)
|
|
|
|
+ dump_mb(cx, order_mb, "incoming");
|
|
order->flags = CX18_F_EWO_MB_STALE_UPON_RECEIPT;
|
|
order->flags = CX18_F_EWO_MB_STALE_UPON_RECEIPT;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -468,16 +478,24 @@ static int cx18_api_call(struct cx18 *cx, u32 cmd, int args, u32 data[])
|
|
struct mutex *mb_lock;
|
|
struct mutex *mb_lock;
|
|
long int timeout, ret;
|
|
long int timeout, ret;
|
|
int i;
|
|
int i;
|
|
|
|
+ char argstr[MAX_MB_ARGUMENTS*11+1];
|
|
|
|
|
|
if (info == NULL) {
|
|
if (info == NULL) {
|
|
CX18_WARN("unknown cmd %x\n", cmd);
|
|
CX18_WARN("unknown cmd %x\n", cmd);
|
|
return -EINVAL;
|
|
return -EINVAL;
|
|
}
|
|
}
|
|
|
|
|
|
- if (cmd == CX18_CPU_DE_SET_MDL)
|
|
|
|
- CX18_DEBUG_HI_API("%s\n", info->name);
|
|
|
|
- else
|
|
|
|
- CX18_DEBUG_API("%s\n", info->name);
|
|
|
|
|
|
+ if (cx18_debug & CX18_DBGFLG_API) { /* only call u32arr2hex if needed */
|
|
|
|
+ if (cmd == CX18_CPU_DE_SET_MDL) {
|
|
|
|
+ if (cx18_debug & CX18_DBGFLG_HIGHVOL)
|
|
|
|
+ CX18_DEBUG_HI_API("%s\tcmd %#010x args%s\n",
|
|
|
|
+ info->name, cmd,
|
|
|
|
+ u32arr2hex(data, args, argstr));
|
|
|
|
+ } else
|
|
|
|
+ CX18_DEBUG_API("%s\tcmd %#010x args%s\n",
|
|
|
|
+ info->name, cmd,
|
|
|
|
+ u32arr2hex(data, args, argstr));
|
|
|
|
+ }
|
|
|
|
|
|
switch (info->rpu) {
|
|
switch (info->rpu) {
|
|
case APU:
|
|
case APU:
|