cavs: ipc: added debug ipc received and processed counter
I've added debug ipc received and processed counters and
timestamps
Signed-off-by: Bartosz Kokoszko <bartoszx.kokoszko@linux.intel.com>
diff --git a/src/drivers/intel/cavs/ipc.c b/src/drivers/intel/cavs/ipc.c
index 5ca723f..a5a13b3 100644
--- a/src/drivers/intel/cavs/ipc.c
+++ b/src/drivers/intel/cavs/ipc.c
@@ -56,6 +56,40 @@
extern struct ipc *_ipc;
+static uint64_t ipc_rx_ticks;
+static uint64_t ipc_proc_ticks;
+
+static inline void increment_ipc_received_counter(void)
+{
+ static uint32_t ipc_received_counter;
+
+ ipc_received_counter++;
+
+ ipc_rx_ticks = platform_timer_get(platform_timer);
+
+ mailbox_sw_reg_write(SRAM_REG_ROM_STATUS, 0);
+ mailbox_sw_reg_write(SRAM_REG_FW_STATUS, ipc_received_counter);
+}
+
+static inline void increment_ipc_processed_counter(void)
+{
+ static uint32_t ipc_processed_counter;
+ uint64_t delta_in_ticks;
+ uint64_t delta_in_us;
+
+ ipc_processed_counter++;
+
+ ipc_proc_ticks = platform_timer_get(platform_timer);
+
+ delta_in_ticks = ipc_proc_ticks - ipc_rx_ticks;
+
+ delta_in_us = delta_in_ticks * 1000 /
+ clock_ms_to_ticks(PLATFORM_DEFAULT_CLOCK, 1);
+
+ mailbox_sw_reg_write(SRAM_REG_ROM_STATUS, (uint32_t)delta_in_us);
+ mailbox_sw_reg_write(SRAM_REG_FW_TRACEP, ipc_processed_counter);
+}
+
/* test code to check working IRQ */
static void ipc_irq_handler(void *arg)
{
@@ -93,6 +127,8 @@
/* mask Busy interrupt */
ipc_write(IPC_DIPCCTL, dipcctl & ~IPC_DIPCCTL_IPCTBIE);
+ increment_ipc_received_counter();
+
/* TODO: place message in Q and process later */
/* It's not Q ATM, may overwrite */
if (_ipc->host_pending) {
@@ -173,6 +209,7 @@
ipc_write(IPC_DIPCTDR, ipc_read(IPC_DIPCTDR) | IPC_DIPCTDR_BUSY);
ipc_write(IPC_DIPCTDA, ipc_read(IPC_DIPCTDA) | IPC_DIPCTDA_BUSY);
#endif
+ increment_ipc_processed_counter();
/* unmask Busy interrupt */
ipc_write(IPC_DIPCCTL, ipc_read(IPC_DIPCCTL) | IPC_DIPCCTL_IPCTBIE);