media: mfc: DRV3.2: separate dump_info and stop_hw
authorAyoung Sim <a.sim@samsung.com>
Mon, 2 Apr 2018 04:52:43 +0000 (13:52 +0900)
committerSunyoung Kang <sy0816.kang@samsung.com>
Tue, 29 May 2018 06:59:18 +0000 (15:59 +0900)
When the sysmmu page fault is occured,
panic will be occured by iommu driver.
So, we don't need to occur panic when page fault is occured.

Change-Id: I2f6842333cbd46992f5b868b319532c774220b6d
Signed-off-by: Ayoung Sim <a.sim@samsung.com>
drivers/media/platform/exynos/mfc/s5p_mfc.c
drivers/media/platform/exynos/mfc/s5p_mfc_data_struct.h
drivers/media/platform/exynos/mfc/s5p_mfc_watchdog.c

index 17e66ca69d8e4f928e450f0034b660227a0c4854..85233a71e1c613ef43bc5502bcb2cf0e0ce915a0 100644 (file)
@@ -906,7 +906,7 @@ int s5p_mfc_sysmmu_fault_handler(struct iommu_domain *iodmn, struct device *devi
        dev->logging_data->fault_addr = (unsigned int)addr;
 
        s5p_mfc_dump_buffer_info(dev, addr);
-       call_dop(dev, dump_and_stop_always, dev);
+       call_dop(dev, dump_info, dev);
 
        return 0;
 }
index ddff79fd4bb55b54d06568b8f67c8c68c1e1ea0b..d3fb313f08a89cf9b2beb9509e80592fe6619278 100644 (file)
@@ -667,6 +667,7 @@ struct s5p_mfc_perf {
 extern struct s5p_mfc_dump_ops mfc_dump_ops;
 struct s5p_mfc_dump_ops {
        void (*dump_regs)(struct s5p_mfc_dev *dev);
+       void (*dump_info)(struct s5p_mfc_dev *dev);
        void (*dump_and_stop_always)(struct s5p_mfc_dev *dev);
        void (*dump_and_stop_debug_mode)(struct s5p_mfc_dev *dev);
 };
index 7fbdaeb98066895ee92e60159530c980c5ed97ed..dee4fd615ec7269f12e61a37604cb680b77ec8e5 100644 (file)
@@ -264,14 +264,19 @@ void s5p_mfc_dump_buffer_info(struct s5p_mfc_dev *dev, unsigned long addr)
        }
 }
 
-static void mfc_dump_info_and_stop_hw(struct s5p_mfc_dev *dev)
+static void mfc_dump_info(struct s5p_mfc_dev *dev)
 {
-       MFC_TRACE_DEV("** mfc will stop!!!\n");
        mfc_display_state(dev);
        mfc_print_trace(dev);
        mfc_save_logging_sfr(dev);
        mfc_dump_regs(dev);
        exynos_sysmmu_show_status(dev->device);
+}
+
+static void mfc_dump_info_and_stop_hw(struct s5p_mfc_dev *dev)
+{
+       MFC_TRACE_DEV("** mfc will stop!!!\n");
+       mfc_dump_info(dev);
        BUG();
 }
 
@@ -281,11 +286,7 @@ static void mfc_dump_info_and_stop_hw_debug(struct s5p_mfc_dev *dev)
                return;
 
        MFC_TRACE_DEV("** mfc will stop!!!\n");
-       mfc_display_state(dev);
-       mfc_print_trace(dev);
-       mfc_save_logging_sfr(dev);
-       mfc_dump_regs(dev);
-       exynos_sysmmu_show_status(dev->device);
+       mfc_dump_info(dev);
        BUG();
 }
 
@@ -333,6 +334,7 @@ void s5p_mfc_watchdog_worker(struct work_struct *work)
 
 struct s5p_mfc_dump_ops mfc_dump_ops = {
        .dump_regs                      = mfc_dump_regs,
+       .dump_info                      = mfc_dump_info,
        .dump_and_stop_always           = mfc_dump_info_and_stop_hw,
        .dump_and_stop_debug_mode       = mfc_dump_info_and_stop_hw_debug,
 };