[RAMEN9610-12132] vipx: add logs for debugging
authorSanghwa Park <senius.park@samsung.com>
Wed, 13 Feb 2019 06:26:51 +0000 (15:26 +0900)
committerhskang <hs1218.kang@samsung.com>
Thu, 14 Feb 2019 12:45:47 +0000 (21:45 +0900)
Change-Id: I2ad36a3049c7e3a300987284c0c0e0ced44de4b9
Signed-off-by: Sanghwa Park <senius.park@samsung.com>
drivers/vision/vipx/vipx-core.c
drivers/vision/vipx/vipx-device.c
drivers/vision/vipx/vipx-interface.c
drivers/vision/vipx/vipx-mailbox.c
drivers/vision/vipx/vipx-mailbox.h
drivers/vision/vipx/vipx-memory.c

index e80bf26d5d2450e502820f6181097c3c87978ca3..7de774f0e5982c4eff4bf81124bca03f08af563c 100644 (file)
@@ -311,6 +311,7 @@ p_err_vops:
        mutex_unlock(&vctx->lock);
 p_err_lock:
        args->ret = ret;
+       vipx_err("Failed to load kernel binary(%d)\n", ret);
        /* return value is included in args->ret */
        return 0;
 }
@@ -340,6 +341,7 @@ p_err_vops:
        mutex_unlock(&vctx->lock);
 p_err_lock:
        args->ret = ret;
+       vipx_err("Failed to unload kernel binary(%d)\n", ret);
        /* return value is included in args->ret */
        return 0;
 }
@@ -368,6 +370,7 @@ p_err_vops:
        mutex_unlock(&vctx->lock);
 p_err_lock:
        args->ret = ret;
+       vipx_err("Failed to load graph(%d)\n", ret);
        /* return value is included in args->ret */
        return 0;
 }
@@ -396,6 +399,7 @@ p_err_vops:
        mutex_unlock(&vctx->lock);
 p_err_lock:
        args->ret = ret;
+       vipx_err("Failed to unload graph(%d)\n", ret);
        /* return value is included in args->ret */
        return 0;
 }
@@ -424,6 +428,7 @@ p_err_vops:
        mutex_unlock(&vctx->lock);
 p_err_lock:
        args->ret = ret;
+       vipx_err("Failed to execute submodel(%d)\n", ret);
        /* return value is included in args->ret */
        return 0;
 }
@@ -486,7 +491,8 @@ static int vipx_open(struct inode *inode, struct file *file)
 
        mutex_unlock(&core->lock);
 
-       vipx_info("The vipx has been successfully opened\n");
+       vipx_info("The vipx has been successfully opened(count:%d)\n",
+                       vdev->open_count);
 
        vipx_leave();
        return 0;
@@ -495,7 +501,8 @@ p_err_vctx:
        vipx_device_close(vdev);
 p_err_device:
        mutex_unlock(&core->lock);
-       vipx_err("Failed to open the vipx [%d]\n", ret);
+       vipx_err("Failed to open the vipx(count:%d)(%d)\n",
+                       vdev->open_count, ret);
 p_err_lock:
        return ret;
 }
@@ -521,7 +528,8 @@ static int vipx_release(struct inode *inode, struct file *file)
        vipx_device_close(core->device);
 
        mutex_unlock(&core->lock);
-       vipx_info("The vipx has been closed\n");
+       vipx_info("The vipx has been closed(count:%d)\n",
+                       core->device->open_count);
        vipx_leave();
        return 0;
 }
index edfd41227b29e8334ae374bad8ac125ac1ae8be9..65c0644dc21850affeeacf772f167223f9ac1717 100644 (file)
 #include <linux/exynos_iovmm.h>
 
 #include "vipx-log.h"
+#include "vipx-mailbox.h"
 #include "vipx-graph.h"
 #include "vipx-device.h"
 
-static void __vipx_fault_handler(struct vipx_device *vdev)
-{
-       vipx_enter();
-       vipx_leave();
-}
-
 static int __attribute__((unused)) vipx_fault_handler(
                struct iommu_domain *domain, struct device *dev,
                unsigned long fault_addr, int fault_flag, void *token)
 {
        struct vipx_device *vdev;
+       struct vipx_mailbox_ctrl *mctrl;
 
        pr_err("< VIPX FAULT HANDLER >\n");
        pr_err("Device virtual(0x%lX) is invalid access\n", fault_addr);
 
        vdev = dev_get_drvdata(dev);
-       vipx_debug_dump_debug_regs();
+       mctrl = vdev->system.interface.mctrl;
 
-       __vipx_fault_handler(vdev);
+       vipx_debug_dump_debug_regs();
+       vipx_mailbox_dump(mctrl);
 
        return -EINVAL;
 }
index 6eb897da6b51eeb6e4afab2a95936225f53748a2..bbe5ec0f0a7e92238e412913336b586ef1c615ae 100644 (file)
@@ -197,6 +197,7 @@ static int __vipx_interface_send_mailbox(struct vipx_interface *itf,
        ret = vipx_mailbox_check_full(mctrl, type, MAILBOX_WAIT);
        if (ret) {
                vipx_err("mailbox is full(%lu/%u)\n", type, itask->id);
+               vipx_mailbox_dump(mctrl);
                goto p_err_process;
        }
 
@@ -222,6 +223,8 @@ static int __vipx_interface_send_mailbox(struct vipx_interface *itf,
        taskmgr_x_barrier_irqr(itaskmgr, 0, flags);
 
        ret = __vipx_interface_wait_mailbox_reply(itf, itask);
+       if (ret)
+               vipx_mailbox_dump(mctrl);
 
        taskmgr_e_barrier_irqs(itaskmgr, 0, flags);
        vipx_task_trans_pro_to_com(itaskmgr, itask);
index 64bf00d8d7272771444f1818647b5080dc6f5555..0068a672084534963732dff06b90f6af05bca8c8 100644 (file)
 #include "vipx-io.h"
 #include "vipx-mailbox.h"
 
+static inline int __vipx_mailbox_is_empty(struct vipx_mailbox_head *head)
+{
+       vipx_check();
+       return head->wmsg_idx == head->rmsg_idx;
+}
+
+static void __vipx_mailbox_dump(struct vipx_mailbox_head *head, void *data)
+{
+       int idx;
+
+       vipx_enter();
+       vipx_info("mailbox haed (%u,%u,%u,%u)\n",
+                       head->rmsg_idx, head->wmsg_idx,
+                       head->mbox_size, head->elem_size);
+
+       for (idx = 0; idx < head->mbox_size; ++idx) {
+               vipx_info("mailbox data (%d/%u)\n", idx, head->mbox_size - 1);
+               print_hex_dump(KERN_INFO, "[VIPx]:", DUMP_PREFIX_OFFSET, 32, 4,
+                               data + (idx * head->elem_size),
+                               head->elem_size, false);
+       }
+       vipx_leave();
+}
+
+void vipx_mailbox_dump(struct vipx_mailbox_ctrl *mctrl)
+{
+       int ret;
+
+       vipx_enter();
+       ret = __vipx_mailbox_is_empty(&mctrl->h2d_normal_head);
+       if (ret) {
+               vipx_info("h2d normal mailbox is empty\n");
+       } else {
+               vipx_info("h2d normal mailbox dump\n");
+               __vipx_mailbox_dump(&mctrl->h2d_normal_head,
+                               mctrl->h2d_normal_data);
+       }
+
+       ret = __vipx_mailbox_is_empty(&mctrl->h2d_urgent_head);
+       if (ret) {
+               vipx_info("h2d urgent mailbox is empty\n");
+       } else {
+               vipx_info("h2d urgent mailbox dump\n");
+               __vipx_mailbox_dump(&mctrl->h2d_urgent_head,
+                               &mctrl->h2d_urgent_data);
+       }
+
+       ret = __vipx_mailbox_is_empty(&mctrl->d2h_normal_head);
+       if (ret) {
+               vipx_info("d2h normal mailbox is empty\n");
+       } else {
+               vipx_info("d2h normal mailbox dump\n");
+               __vipx_mailbox_dump(&mctrl->d2h_normal_head,
+                               &mctrl->d2h_normal_data);
+       }
+
+       ret = __vipx_mailbox_is_empty(&mctrl->d2h_urgent_head);
+       if (ret) {
+               vipx_info("d2h urgent mailbox is empty\n");
+       } else {
+               vipx_info("d2h urgent mailbox dump\n");
+               __vipx_mailbox_dump(&mctrl->d2h_urgent_head,
+                               &mctrl->d2h_urgent_data);
+       }
+
+       vipx_leave();
+}
+
 static ssize_t __vipx_mailbox_get_remain_size(struct vipx_mailbox_head *head)
 {
        unsigned int rmsg_idx, wmsg_idx, mbox_size;
@@ -161,12 +229,6 @@ p_err:
        return ret;
 }
 
-static inline int __vipx_mailbox_is_empty(struct vipx_mailbox_head *head)
-{
-       vipx_check();
-       return head->wmsg_idx == head->rmsg_idx;
-}
-
 int vipx_mailbox_check_reply(struct vipx_mailbox_ctrl *mctrl, unsigned int type,
                int wait)
 {
index 1f10277b804f5d597bd83c8c3851467c7601128b..9cb0dc7787ab594ea70d547e44d0a239340f2313 100644 (file)
@@ -51,6 +51,7 @@ struct vipx_mailbox_ctrl {
        struct vipx_d2h_message         d2h_urgent_data[MAX_URGENT_MSG_COUNT];
 };
 
+void vipx_mailbox_dump(struct vipx_mailbox_ctrl *mctrl);
 int vipx_mailbox_check_full(struct vipx_mailbox_ctrl *mctrl, unsigned int type,
                int wait);
 int vipx_mailbox_write(struct vipx_mailbox_ctrl *mctrl, unsigned int type,
index ac75be277ae6ef5ce91a1207106696e21d01aa5c..99ffe946d6ceffe7de5ca174ba0af4d48cba05d1 100644 (file)
@@ -278,6 +278,8 @@ static int __vipx_memory_alloc(struct vipx_memory *mem,
                }
                pmem->dvaddr = dvaddr;
        }
+       vipx_info("[%20s] memory is allocated(%#p,%#x,%zu)",
+                       pmem->name, kvaddr, (int)pmem->dvaddr, pmem->size);
 
        vipx_leave();
        return 0;