aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/video/samsung/mfc5x/mfc_mem.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/media/video/samsung/mfc5x/mfc_mem.c')
-rw-r--r--drivers/media/video/samsung/mfc5x/mfc_mem.c56
1 files changed, 53 insertions, 3 deletions
diff --git a/drivers/media/video/samsung/mfc5x/mfc_mem.c b/drivers/media/video/samsung/mfc5x/mfc_mem.c
index 051e4c0..a4f5345 100644
--- a/drivers/media/video/samsung/mfc5x/mfc_mem.c
+++ b/drivers/media/video/samsung/mfc5x/mfc_mem.c
@@ -551,12 +551,26 @@ int mfc_init_mem_mgr(struct mfc_dev *dev)
/* early allocator */
#if defined(CONFIG_S5P_MEM_CMA)
#ifdef CONFIG_EXYNOS_CONTENT_PATH_PROTECTION
-#if defined(CONFIG_USE_MFC_CMA) && defined(CONFIG_MACH_M0)
+#ifdef CONFIG_USE_MFC_CMA
+#if defined(CONFIG_MACH_M0)
cma_infos[0].lower_bound = 0x5C100000;
cma_infos[0].upper_bound = 0x5F200000;
cma_infos[0].total_size = 0x03100000;
cma_infos[0].free_size = 0x03100000;
cma_infos[0].count = 1;
+#elif defined(CONFIG_MACH_GC1) || defined(CONFIG_MACH_GC2PD)
+ cma_infos[0].lower_bound = 0x50200000;
+ cma_infos[0].upper_bound = 0x53300000;
+ cma_infos[0].total_size = 0x03100000;
+ cma_infos[0].free_size = 0x03100000;
+ cma_infos[0].count = 1;
+#elif defined(CONFIG_MACH_TAB3) || defined(CONFIG_MACH_ZEST)
+ cma_infos[0].lower_bound = 0x58100000;
+ cma_infos[0].upper_bound = 0x5B200000;
+ cma_infos[0].total_size = 0x03100000;
+ cma_infos[0].free_size = 0x03100000;
+ cma_infos[0].count = 1;
+#endif
#else
if (cma_info(&cma_infos[0], dev->device, "A")) {
mfc_info("failed to get CMA info of 'mfc-secure'\n");
@@ -611,8 +625,14 @@ int mfc_init_mem_mgr(struct mfc_dev *dev)
return -ENOMEM;
}
-#if defined(CONFIG_USE_MFC_CMA) && defined(CONFIG_MACH_M0)
+#ifdef CONFIG_USE_MFC_CMA
+#if defined(CONFIG_MACH_GC1) || defined(CONFIG_MACH_GC2PD)
+ base[0] = 0x50200000;
+#elif defined(CONFIG_MACH_TAB3) || defined(CONFIG_MACH_ZEST)
+ base[0] = 0x58100000;
+#else
base[0] = 0x5c100000;
+#endif
dev->mem_infos[0].base = base[0];
dev->mem_infos[0].size = size;
dev->mem_infos[0].addr = phys_to_virt(base[0]);
@@ -707,6 +727,20 @@ int mfc_init_mem_mgr(struct mfc_dev *dev)
dev->mem_infos[0].size = size;
dev->mem_infos[0].addr = cma_get_virt(base[0], size, 0);
} else if (dev->mem_ports == 2) {
+#if defined(CONFIG_USE_MFC_CMA) && defined(CONFIG_MACH_Q1_BD)
+ /* for MFC0:A */
+ cma_infos[0].lower_bound = 0x67200000;
+ cma_infos[0].upper_bound = 0x68400000;
+ cma_infos[0].total_size = 0x01200000;
+ cma_infos[0].free_size = 0x01200000;
+ cma_infos[0].count = 1;
+ /* for MFC1:B */
+ cma_infos[1].lower_bound = 0x68400000;
+ cma_infos[1].upper_bound = 0x6A000000;
+ cma_infos[1].total_size = 0x01C00000;
+ cma_infos[1].free_size = 0x01C00000;
+ cma_infos[1].count = 1;
+#else
if (cma_info(&cma_infos[0], dev->device, "A")) {
mfc_info("failed to get CMA info of 'mfc0'\n");
return -ENOMEM;
@@ -716,7 +750,7 @@ int mfc_init_mem_mgr(struct mfc_dev *dev)
mfc_info("failed to get CMA info of 'mfc1'\n");
return -ENOMEM;
}
-
+#endif
if (cma_infos[0].lower_bound > cma_infos[1].lower_bound)
cma_index = 1;
@@ -733,8 +767,12 @@ int mfc_init_mem_mgr(struct mfc_dev *dev)
base[0] = cma_alloc(dev->device, cma_index ? "B" : "A",
MFC_FW_SYSTEM_SIZE, ALIGN_128KB);
#else
+#if defined(CONFIG_USE_MFC_CMA) && defined(CONFIG_MACH_Q1_BD)
+ base[0] = cma_index ? 0x68400000 : 0x67200000;
+#else
base[0] = cma_alloc(dev->device, cma_index ? "B" : "A", size, ALIGN_128KB);
#endif
+#endif
if (IS_ERR_VALUE(base[0])) {
mfc_err("failed to get rsv. memory from CMA on port #0");
return -ENOMEM;
@@ -742,7 +780,11 @@ int mfc_init_mem_mgr(struct mfc_dev *dev)
dev->mem_infos[0].base = base[0];
dev->mem_infos[0].size = size;
+#if defined(CONFIG_USE_MFC_CMA) && defined(CONFIG_MACH_Q1_BD)
+ dev->mem_infos[0].addr = phys_to_virt(base[0]);
+#else
dev->mem_infos[0].addr = cma_get_virt(base[0], size, 0);
+#endif
/* swap CMA index */
cma_index = !cma_index;
@@ -760,8 +802,12 @@ int mfc_init_mem_mgr(struct mfc_dev *dev)
base[1] = cma_index ? cma_infos[1].lower_bound :
cma_infos[0].lower_bound;
#else
+#if defined(CONFIG_USE_MFC_CMA) && defined(CONFIG_MACH_Q1_BD)
+ base[1] = cma_index ? 0x68400000 : 0x67200000;
+#else
base[1] = cma_alloc(dev->device, cma_index ? "B" : "A", size, ALIGN_128KB);
#endif
+#endif
if (IS_ERR_VALUE(base[1])) {
mfc_err("failed to get rsv. memory from CMA on port #1");
cma_free(base[0]);
@@ -770,7 +816,11 @@ int mfc_init_mem_mgr(struct mfc_dev *dev)
dev->mem_infos[1].base = base[1];
dev->mem_infos[1].size = size;
+#if defined(CONFIG_USE_MFC_CMA) && defined(CONFIG_MACH_Q1_BD)
+ dev->mem_infos[1].addr = phys_to_virt(base[1]);
+#else
dev->mem_infos[1].addr = cma_get_virt(base[1], size, 0);
+#endif
} else {
mfc_err("failed to get reserved memory from CMA");
return -EPERM;