[COMMON] media: mfc: add itmon debug for MMCache
authorSunyoung Kang <sy0816.kang@samsung.com>
Thu, 7 Mar 2019 02:54:53 +0000 (11:54 +0900)
committerKim Gunho <gunho.kim@samsung.com>
Fri, 28 Jun 2019 14:45:41 +0000 (23:45 +0900)
When the itmon notifier is called, this adds to check whether MMCache port or not.
If it is MMCache master, show the MMCache and MFC info.

Change-Id: If83e97bb198c919a8ef54376dad063867810acd9
Signed-off-by: Sunyoung Kang <sy0816.kang@samsung.com>
drivers/media/platform/exynos/mfc/mfc.c
drivers/media/platform/exynos/mfc/mfc_mmcache.c
drivers/media/platform/exynos/mfc/mfc_mmcache.h

index cbb1d74ff3aaacbb3b1a230ddaf671725e4a5e68..77200400f6144220bce087705043ecca88ea69b0 100644 (file)
@@ -1273,6 +1273,7 @@ static int __mfc_itmon_notifier(struct notifier_block *nb, unsigned long action,
        struct mfc_dev *dev;
        struct itmon_notifier *itmon_info = nb_data;
        int is_mfc_itmon = 0, is_master = 0;
+       int is_mmcache_itmon = 0;
 
        dev = container_of(nb, struct mfc_dev, itmon_nb);
 
@@ -1291,13 +1292,20 @@ static int __mfc_itmon_notifier(struct notifier_block *nb, unsigned long action,
                        strncmp("MFC", itmon_info->dest, sizeof("MFC") - 1) == 0) {
                is_mfc_itmon = 1;
                is_master = 0;
+       } else if (itmon_info->port &&
+                       strncmp("M-CACHE", itmon_info->port, sizeof("M-CACHE") - 1) == 0) {
+               is_mmcache_itmon = 1;
+               is_master = 1;
        }
 
-       if (is_mfc_itmon) {
-               pr_err("mfc_itmon_notifier: MFC +\n");
-               pr_err("MFC is %s\n", is_master ? "master" : "dest");
+       if (is_mfc_itmon || is_mmcache_itmon) {
+               pr_err("mfc_itmon_notifier: %s +\n", is_mfc_itmon ? "MFC" : "MMCACHE");
+               pr_err("%s is %s\n", is_mfc_itmon ? "MFC" : "MMCACHE",
+                               is_master ? "master" : "dest");
                if (!dev->itmon_notified) {
-                       pr_err("dump MFC information\n");
+                       pr_err("dump MFC %s information\n", is_mmcache_itmon ? "MMCACHE" : "");
+                       if (is_mmcache_itmon)
+                               mfc_mmcache_dump_info(dev);
                        if (is_master || (!is_master && itmon_info->onoff))
                                call_dop(dev, dump_info, dev);
                        else
@@ -1305,7 +1313,7 @@ static int __mfc_itmon_notifier(struct notifier_block *nb, unsigned long action,
                } else {
                        pr_err("MFC notifier has already been called. skip MFC information\n");
                }
-               pr_err("mfc_itmon_notifier: MFC -\n");
+               pr_err("mfc_itmon_notifier: %s -\n", is_mfc_itmon ? "MFC" : "MMCACHE");
                dev->itmon_notified = 1;
        }
        return NOTIFY_DONE;
index aec68fd63b989460cfadaa1a998c2c76e3c567c4..ebed0d3c5194a386a005bff26cf85dec43ae8dc1 100644 (file)
@@ -190,15 +190,15 @@ void mfc_mmcache_disable(struct mfc_dev *dev)
        mfc_debug_leave();
 }
 
-void __mfc_mmcache_dump_info(struct mfc_dev *dev)
+void mfc_mmcache_dump_info(struct mfc_dev *dev)
 {
-       pr_err("-----------dumping MMCACHE registers (SFR base = 0x%#lx, dev = 0x%pK)\n",
-                               (unsigned long)dev->mmcache.base, dev);
-       print_hex_dump(KERN_ERR, "[MMCACHE] ", DUMP_PREFIX_ADDRESS, 32, 4, dev->mmcache.base, 0x10, false);
+       if (dev->has_mmcache) {
+               pr_err("-----------dumping MMCACHE registers (SFR base = 0x%#lx)\n", (unsigned long)dev->mmcache.base);
+               print_hex_dump(KERN_ERR, "[MMCACHE] ", DUMP_PREFIX_ADDRESS, 32, 4, dev->mmcache.base, 0x10, false);
+       }
 
        if (dev->has_cmu) {
-               pr_err("-----------dumping CMU BUSC registers (SFR base = 0x%#lx, dev = 0x%pK)\n",
-                               (unsigned long)dev->cmu_busc_base, dev);
+               pr_err("-----------dumping CMU BUSC registers (SFR base = 0x%#lx)\n", (unsigned long)dev->cmu_busc_base);
                /* PLL_CON0_MUX_CLKCMU_BUSC_BUS_USER (0x140) */
                print_hex_dump(KERN_ERR, "[MMCACHE][BUSC] ", DUMP_PREFIX_ADDRESS, 32, 4, dev->cmu_busc_base + 0x140, 0xc, false);
                /* CMU_BUSC (0x60ec) */
@@ -206,8 +206,7 @@ void __mfc_mmcache_dump_info(struct mfc_dev *dev)
                /* DBG_NFO_QCH_CON_MMCACHE_QCH (0x7184) */
                print_hex_dump(KERN_ERR, "[MMCACHE][BUSC] ", DUMP_PREFIX_ADDRESS, 32, 4, dev->cmu_busc_base + 0x7180, 0x10, false);
 
-               pr_err("-----------dumping CMU MIF0~3 registers (SFR base = 0x%#lx, dev = 0x%pK)\n",
-                               (unsigned long)dev->cmu_mif0_base, dev);
+               pr_err("-----------dumping CMU MIF0~3 registers (SFR base = 0x%#lx)\n", (unsigned long)dev->cmu_mif0_base);
                /* CMU_MIF0 (0x7018 ~ 0x7024) */
                print_hex_dump(KERN_ERR, "[MMCACHE][MIF0] ", DUMP_PREFIX_ADDRESS, 32, 4, dev->cmu_mif0_base + 0x7018, 0x10, false);
                /* CMU_MIF1 (0x7018 ~ 0x7024) */
@@ -229,7 +228,7 @@ void mfc_invalidate_mmcache(struct mfc_dev *dev)
        ret = exynos_smc(SMC_CMD_MM_CACHE_OPERATION, MMCACHE_GROUP2, 0x0, 0x0);
        if (ret != DRMDRV_OK) {
                mfc_err_dev("[MMCACHE] Fail to invalidation 0x%x\n", ret);
-               __mfc_mmcache_dump_info(dev);
+               mfc_mmcache_dump_info(dev);
                call_dop(dev, dump_and_stop_debug_mode, dev);
        }
        mfc_debug(2, "[MMCACHE] invalidated\n");
index 61f6b427a5e95daaf711f3a05e8cc660cb3a20be..cee0ec4b06fac4fd8c8511ef1e1d1e2561dafd53 100644 (file)
@@ -34,6 +34,7 @@
 void mfc_mmcache_enable(struct mfc_dev *dev);
 void mfc_mmcache_disable(struct mfc_dev *dev);
 
+void mfc_mmcache_dump_info(struct mfc_dev *dev);
 
 /* Need HW lock to call this function */
 void mfc_invalidate_mmcache(struct mfc_dev *dev);