media: mfc: add QoS request for MFC
authorJeonghee Kim <jhhhh.kim@samsung.com>
Thu, 15 Mar 2018 08:51:20 +0000 (17:51 +0900)
committerSunyoung Kang <sy0816.kang@samsung.com>
Tue, 29 May 2018 06:59:18 +0000 (15:59 +0900)
Change-Id: I144e96c6197c4eb5b1d48d85d64a17d0cc65cc67
Signed-off-by: Jeonghee Kim <jhhhh.kim@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_qos.c

index d27b81f633ef33e6477c2e4b7abc34b8740f576a..e753cd3deff67afe00dd438d2b6b130942644f2a 100644 (file)
@@ -849,6 +849,7 @@ static int mfc_parse_mfc_qos_platdata(struct device_node *np, char *node_name,
        }
 
        of_property_read_u32(np_qos, "thrd_mb", &qosdata->threshold_mb);
+       of_property_read_u32(np_qos, "freq_mfc", &qosdata->freq_mfc);
        of_property_read_u32(np_qos, "freq_int", &qosdata->freq_int);
        of_property_read_u32(np_qos, "freq_mif", &qosdata->freq_mif);
        of_property_read_u32(np_qos, "freq_cpu", &qosdata->freq_cpu);
@@ -1189,8 +1190,9 @@ static int s5p_mfc_probe(struct platform_device *pdev)
        atomic_set(&dev->qos_req_cur, 0);
 
        for (i = 0; i < dev->pdata->num_qos_steps; i++) {
-               mfc_info_dev("QoS table[%d] int : %d, mif : %d\n",
+               mfc_info_dev("QoS table[%d] mfc: %d, int : %d, mif : %d\n",
                                i,
+                               dev->pdata->qos_table[i].freq_mfc,
                                dev->pdata->qos_table[i].freq_int,
                                dev->pdata->qos_table[i].freq_mif);
        }
index 121ff5ff4a28ed34b56df0b938e236c4512e97e8..6a75fc6e19c88d4995c5c508f612be4dd7dff6e9 100644 (file)
@@ -723,6 +723,7 @@ struct s5p_mfc_dev {
 #ifdef CONFIG_MFC_USE_BUS_DEVFREQ
        struct list_head qos_queue;
        atomic_t qos_req_cur;
+       struct pm_qos_request qos_req_mfc;
        struct pm_qos_request qos_req_int;
        struct pm_qos_request qos_req_mif;
 #ifdef CONFIG_ARM_EXYNOS_MP_CPUFREQ
index a3e9cc45c8ddaa6d2a97cb7418ba43095c0eb3e5..1e362618cb82f800c7714a94160ad69823913e6a 100644 (file)
@@ -33,9 +33,13 @@ static void mfc_qos_operate(struct s5p_mfc_ctx *ctx, int opr_type, int idx)
 
        switch (opr_type) {
        case MFC_QOS_ADD:
-               MFC_TRACE_CTX("++ QOS add[%d] (int:%d, mif:%d)\n",
-                       idx, qos_table[idx].freq_int, qos_table[idx].freq_mif);
+               MFC_TRACE_CTX("++ QOS add[%d] (mfc: %d, int:%d, mif:%d)\n",
+                       idx, qos_table[idx].freq_mfc,
+                       qos_table[idx].freq_int, qos_table[idx].freq_mif);
 
+               pm_qos_add_request(&dev->qos_req_mfc,
+                               PM_QOS_MFC_THROUGHPUT,
+                               qos_table[idx].freq_mfc);
                pm_qos_add_request(&dev->qos_req_int,
                                PM_QOS_DEVICE_THROUGHPUT,
                                qos_table[idx].freq_int);
@@ -59,19 +63,22 @@ static void mfc_qos_operate(struct s5p_mfc_ctx *ctx, int opr_type, int idx)
 #endif
 
                atomic_set(&dev->qos_req_cur, idx + 1);
-               MFC_TRACE_CTX("-- QOS add[%d] (int:%d, mif:%d, mo:%d, mo_10bit:%d, mo_uhd_enc:%d)\n",
-                               idx, qos_table[idx].freq_int, qos_table[idx].freq_mif,
-                               qos_table[idx].mo_value, qos_table[idx].mo_10bit_value,
-                               qos_table[idx].mo_uhd_enc60_value);
-               mfc_debug(2, "QOS add[%d] (int:%d, mif:%d, mo:%d, mo_10bit:%d, mo_uhd_enc:%d)\n",
-                               idx, qos_table[idx].freq_int, qos_table[idx].freq_mif,
-                               qos_table[idx].mo_value, qos_table[idx].mo_10bit_value,
-                               qos_table[idx].mo_uhd_enc60_value);
+               MFC_TRACE_CTX("-- QOS add[%d] (mfc: %d, int:%d, mif:%d, mo:%d, mo10:%d, moenc:%d)\n",
+                               idx, qos_table[idx].freq_mfc, qos_table[idx].freq_int,
+                               qos_table[idx].freq_mif, qos_table[idx].mo_value,
+                               qos_table[idx].mo_10bit_value, qos_table[idx].mo_uhd_enc60_value);
+               mfc_debug(2, "QOS add[%d] (mfc: %d, int:%d, mif:%d, mo:%d, mo10:%d, moenc:%d)\n",
+                               idx, qos_table[idx].freq_mfc, qos_table[idx].freq_int,
+                               qos_table[idx].freq_mif, qos_table[idx].mo_value,
+                               qos_table[idx].mo_10bit_value, qos_table[idx].mo_uhd_enc60_value);
                break;
        case MFC_QOS_UPDATE:
-               MFC_TRACE_CTX("++ QOS update[%d] (int:%d, mif:%d)\n",
-                               idx, qos_table[idx].freq_int, qos_table[idx].freq_mif);
+               MFC_TRACE_CTX("++ QOS update[%d] (mfc: %d, int:%d, mif:%d)\n",
+                               idx, qos_table[idx].freq_mfc,
+                               qos_table[idx].freq_int, qos_table[idx].freq_mif);
 
+               pm_qos_update_request(&dev->qos_req_mfc,
+                               qos_table[idx].freq_mfc);
                pm_qos_update_request(&dev->qos_req_int,
                                qos_table[idx].freq_int);
                pm_qos_update_request(&dev->qos_req_mif,
@@ -91,18 +98,19 @@ static void mfc_qos_operate(struct s5p_mfc_ctx *ctx, int opr_type, int idx)
 #endif
 
                atomic_set(&dev->qos_req_cur, idx + 1);
-               MFC_TRACE_CTX("-- QOS update[%d] (int:%d, mif:%d, mo:%d, mo_10bit:%d, mo_uhd_enc:%d)\n",
-                               idx, qos_table[idx].freq_int, qos_table[idx].freq_mif,
-                               qos_table[idx].mo_value, qos_table[idx].mo_10bit_value,
-                               qos_table[idx].mo_uhd_enc60_value);
-               mfc_debug(2, "QOS update[%d] (int:%d, mif:%d, mo:%d, mo_10bit:%d, mo_uhd_enc:%d)\n",
-                               idx, qos_table[idx].freq_int, qos_table[idx].freq_mif,
-                               qos_table[idx].mo_value, qos_table[idx].mo_10bit_value,
-                               qos_table[idx].mo_uhd_enc60_value);
+               MFC_TRACE_CTX("-- QOS update[%d] (mfc: %d, int:%d, mif:%d, mo:%d, mo10:%d, moenc:%d)\n",
+                               idx, qos_table[idx].freq_mfc, qos_table[idx].freq_int,
+                               qos_table[idx].freq_mif, qos_table[idx].mo_value,
+                               qos_table[idx].mo_10bit_value, qos_table[idx].mo_uhd_enc60_value);
+               mfc_debug(2, "QOS update[%d] (mfc: %d, int:%d, mif:%d, mo:%d, mo10:%d, moenc:%d)\n",
+                               idx, qos_table[idx].freq_mfc, qos_table[idx].freq_int,
+                               qos_table[idx].freq_mif, qos_table[idx].mo_value,
+                               qos_table[idx].mo_10bit_value, qos_table[idx].mo_uhd_enc60_value);
                break;
        case MFC_QOS_REMOVE:
                MFC_TRACE_CTX("++ QOS remove\n");
 
+               pm_qos_remove_request(&dev->qos_req_mfc);
                pm_qos_remove_request(&dev->qos_req_int);
                pm_qos_remove_request(&dev->qos_req_mif);
 
@@ -156,11 +164,12 @@ static void mfc_qos_set(struct s5p_mfc_ctx *ctx, int i)
        struct s5p_mfc_platdata *pdata = dev->pdata;
        struct s5p_mfc_qos *qos_table = pdata->qos_table;
 
-       mfc_debug(2, "QoS table[%d] covered mb %d ~ %d (int:%d, mif:%d)\n",
+       mfc_debug(2, "QoS table[%d] covered mb %d ~ %d (mfc: %d, int:%d, mif:%d)\n",
                        i, qos_table[i].threshold_mb,
                        i == pdata->num_qos_steps - 1 ?
                        pdata->max_mb : qos_table[i + 1].threshold_mb,
-                       qos_table[i].freq_int, qos_table[i].freq_mif);
+                       qos_table[i].freq_mfc, qos_table[i].freq_int,
+                       qos_table[i].freq_mif);
 
 #ifdef CONFIG_EXYNOS_BTS
        if (mfc_bw->peak != dev->mfc_bw.peak) {