diff options
Diffstat (limited to 'drivers/media/video/samsung/mfc5x/mfc_mem.c')
-rw-r--r-- | drivers/media/video/samsung/mfc5x/mfc_mem.c | 56 |
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; |