gpu: ion: Add heap ids
Add heap ids for ion heaps. Remove unused
system contiguous heap. Fix vmalloc heap name.
Change-Id: I3c3a653a53c8db8b66a7bba2abac0dfe560c407c
Signed-off-by: Olav Haugan <ohaugan@codeaurora.org>
diff --git a/arch/arm/mach-msm/board-8930.c b/arch/arm/mach-msm/board-8930.c
index d39f64e..c2592ae 100644
--- a/arch/arm/mach-msm/board-8930.c
+++ b/arch/arm/mach-msm/board-8930.c
@@ -127,12 +127,13 @@
#ifdef CONFIG_MSM_MULTIMEDIA_USE_ION
#define MSM_PMEM_KERNEL_EBI1_SIZE 0xB0C000
-#define MSM_ION_EBI_SIZE (MSM_PMEM_SIZE + 0x600000)
-#define MSM_ION_ADSP_SIZE MSM_PMEM_ADSP_SIZE
-#define MSM_ION_HEAP_NUM 4
+#define MSM_ION_SF_SIZE 0x1800000 /* 24MB */
+#define MSM_ION_MM_SIZE 0x4000000 /* (64MB) */
+#define MSM_ION_MFC_SIZE SZ_8K
+#define MSM_ION_HEAP_NUM 5
#else
#define MSM_PMEM_KERNEL_EBI1_SIZE 0x110C000
-#define MSM_ION_HEAP_NUM 2
+#define MSM_ION_HEAP_NUM 1
#endif
#ifdef CONFIG_KERNEL_PMEM_EBI_REGION
@@ -284,30 +285,37 @@
.nr = MSM_ION_HEAP_NUM,
.heaps = {
{
- .id = ION_HEAP_SYSTEM_ID,
+ .id = ION_SYSTEM_HEAP_ID,
.type = ION_HEAP_TYPE_SYSTEM,
- .name = ION_KMALLOC_HEAP_NAME,
- },
- {
- .id = ION_HEAP_SYSTEM_CONTIG_ID,
- .type = ION_HEAP_TYPE_SYSTEM_CONTIG,
.name = ION_VMALLOC_HEAP_NAME,
},
#ifdef CONFIG_MSM_MULTIMEDIA_USE_ION
{
- .id = ION_HEAP_EBI_ID,
+ .id = ION_SF_HEAP_ID,
.type = ION_HEAP_TYPE_CARVEOUT,
- .name = ION_EBI1_HEAP_NAME,
- .size = MSM_ION_EBI_SIZE,
+ .name = ION_SF_HEAP_NAME,
+ .size = MSM_ION_SF_SIZE,
.memory_type = ION_EBI_TYPE,
},
{
- .id = ION_HEAP_ADSP_ID,
+ .id = ION_CP_MM_HEAP_ID,
.type = ION_HEAP_TYPE_CARVEOUT,
- .name = ION_ADSP_HEAP_NAME,
- .size = MSM_ION_ADSP_SIZE,
+ .name = ION_MM_HEAP_NAME,
+ .size = MSM_ION_MM_SIZE,
.memory_type = ION_EBI_TYPE,
},
+ {
+ .id = ION_CP_MFC_HEAP_ID,
+ .type = ION_HEAP_TYPE_CARVEOUT,
+ .name = ION_MFC_HEAP_NAME,
+ .size = MSM_ION_MFC_SIZE,
+ .memory_type = ION_EBI_TYPE,
+ },
+ {
+ .id = ION_IOMMU_HEAP_ID,
+ .type = ION_HEAP_TYPE_IOMMU,
+ .name = ION_IOMMU_HEAP_NAME,
+ },
#endif
}
};
@@ -322,8 +330,9 @@
static void reserve_ion_memory(void)
{
#if defined(CONFIG_ION_MSM) && defined(CONFIG_MSM_MULTIMEDIA_USE_ION)
- msm8930_reserve_table[MEMTYPE_EBI1].size += MSM_ION_EBI_SIZE;
- msm8930_reserve_table[MEMTYPE_EBI1].size += MSM_ION_ADSP_SIZE;
+ msm8930_reserve_table[MEMTYPE_EBI1].size += MSM_ION_SF_SIZE;
+ msm8930_reserve_table[MEMTYPE_EBI1].size += MSM_ION_MM_SIZE;
+ msm8930_reserve_table[MEMTYPE_EBI1].size += MSM_ION_MFC_SIZE;
#endif
}
diff --git a/arch/arm/mach-msm/board-8960.c b/arch/arm/mach-msm/board-8960.c
index a9424d6..109ab9c 100644
--- a/arch/arm/mach-msm/board-8960.c
+++ b/arch/arm/mach-msm/board-8960.c
@@ -141,14 +141,15 @@
#ifdef CONFIG_MSM_MULTIMEDIA_USE_ION
#define MSM_PMEM_KERNEL_EBI1_SIZE 0xB0C000
-#define MSM_ION_EBI_SIZE (MSM_PMEM_SIZE + 0x600000)
-#define MSM_ION_ADSP_SIZE MSM_PMEM_ADSP_SIZE
+#define MSM_ION_SF_SIZE 0x1800000 /* 24MB */
+#define MSM_ION_MM_SIZE 0x4000000 /* (64MB) */
+#define MSM_ION_MFC_SIZE SZ_8K
#define MSM_ION_HEAP_NUM 5
-#define MSM_LIQUID_ION_EBI_SIZE (MSM_LIQUID_PMEM_SIZE + 0x600000)
-static unsigned msm_ion_ebi_size = MSM_ION_EBI_SIZE;
+#define MSM_LIQUID_ION_MM_SIZE (MSM_ION_MM_SIZE + 0x600000)
+static unsigned int msm_ion_cp_mm_size = MSM_ION_MM_SIZE;
#else
#define MSM_PMEM_KERNEL_EBI1_SIZE 0x110C000
-#define MSM_ION_HEAP_NUM 2
+#define MSM_ION_HEAP_NUM 1
#endif
#ifdef CONFIG_KERNEL_PMEM_EBI_REGION
@@ -312,32 +313,34 @@
.nr = MSM_ION_HEAP_NUM,
.heaps = {
{
- .id = ION_HEAP_SYSTEM_ID,
+ .id = ION_SYSTEM_HEAP_ID,
.type = ION_HEAP_TYPE_SYSTEM,
- .name = ION_KMALLOC_HEAP_NAME,
- },
- {
- .id = ION_HEAP_SYSTEM_CONTIG_ID,
- .type = ION_HEAP_TYPE_SYSTEM_CONTIG,
.name = ION_VMALLOC_HEAP_NAME,
},
#ifdef CONFIG_MSM_MULTIMEDIA_USE_ION
{
- .id = ION_HEAP_EBI_ID,
+ .id = ION_SF_HEAP_ID,
.type = ION_HEAP_TYPE_CARVEOUT,
- .name = ION_EBI1_HEAP_NAME,
- .size = MSM_ION_EBI_SIZE,
+ .name = ION_SF_HEAP_NAME,
+ .size = MSM_ION_SF_SIZE,
.memory_type = ION_EBI_TYPE,
},
{
- .id = ION_HEAP_ADSP_ID,
+ .id = ION_CP_MM_HEAP_ID,
.type = ION_HEAP_TYPE_CARVEOUT,
- .name = ION_ADSP_HEAP_NAME,
- .size = MSM_ION_ADSP_SIZE,
+ .name = ION_MM_HEAP_NAME,
+ .size = MSM_ION_MM_SIZE,
.memory_type = ION_EBI_TYPE,
},
{
- .id = ION_HEAP_IOMMU_ID,
+ .id = ION_CP_MFC_HEAP_ID,
+ .type = ION_HEAP_TYPE_CARVEOUT,
+ .name = ION_MFC_HEAP_NAME,
+ .size = MSM_ION_MFC_SIZE,
+ .memory_type = ION_EBI_TYPE,
+ },
+ {
+ .id = ION_IOMMU_HEAP_ID,
.type = ION_HEAP_TYPE_IOMMU,
.name = ION_IOMMU_HEAP_NAME,
},
@@ -364,18 +367,19 @@
unsigned int i;
if (!pmem_param_set && machine_is_msm8960_liquid()) {
- msm_ion_ebi_size = MSM_LIQUID_ION_EBI_SIZE;
+ msm_ion_cp_mm_size = MSM_LIQUID_ION_MM_SIZE;
for (i = 0; i < ion_pdata.nr; i++) {
- if (ion_pdata.heaps[i].id == ION_HEAP_EBI_ID) {
- ion_pdata.heaps[i].size = msm_ion_ebi_size;
- pr_debug("msm_ion_ebi_size 0x%x\n",
- msm_ion_ebi_size);
+ if (ion_pdata.heaps[i].id == ION_CP_MM_HEAP_ID) {
+ ion_pdata.heaps[i].size = msm_ion_cp_mm_size;
+ pr_debug("msm_ion_cp_mm_size 0x%x\n",
+ msm_ion_cp_mm_size);
break;
}
}
}
- msm8960_reserve_table[MEMTYPE_EBI1].size += msm_ion_ebi_size;
- msm8960_reserve_table[MEMTYPE_EBI1].size += MSM_ION_ADSP_SIZE;
+ msm8960_reserve_table[MEMTYPE_EBI1].size += msm_ion_cp_mm_size;
+ msm8960_reserve_table[MEMTYPE_EBI1].size += MSM_ION_SF_SIZE;
+ msm8960_reserve_table[MEMTYPE_EBI1].size += MSM_ION_MFC_SIZE;
#endif
}
diff --git a/arch/arm/mach-msm/board-msm8x60.c b/arch/arm/mach-msm/board-msm8x60.c
index ba7e658..418428b 100644
--- a/arch/arm/mach-msm/board-msm8x60.c
+++ b/arch/arm/mach-msm/board-msm8x60.c
@@ -2671,14 +2671,16 @@
#define USER_SMI_SIZE (MSM_SMI_SIZE - KERNEL_SMI_SIZE)
#define MSM_PMEM_SMIPOOL_SIZE USER_SMI_SIZE
-#define MSM_ION_EBI_SIZE MSM_PMEM_SF_SIZE
-#define MSM_ION_ADSP_SIZE MSM_PMEM_ADSP_SIZE
-#define MSM_ION_SMI_SIZE MSM_PMEM_SMIPOOL_SIZE
+#define MSM_ION_SF_SIZE 0x1800000 /* 24MB */
+#define MSM_ION_CAMERA_SIZE MSM_PMEM_ADSP_SIZE
+#define MSM_ION_MM_SIZE 0x3800000 /* 56MB */
+#define MSM_ION_MFC_SIZE SZ_8K
+#define MSM_ION_WB_SIZE 0x600000 /* 6MB */
#ifdef CONFIG_MSM_MULTIMEDIA_USE_ION
-#define MSM_ION_HEAP_NUM 5
+#define MSM_ION_HEAP_NUM 6
#else
-#define MSM_ION_HEAP_NUM 2
+#define MSM_ION_HEAP_NUM 1
#endif
static unsigned fb_size;
@@ -5242,40 +5244,52 @@
.nr = MSM_ION_HEAP_NUM,
.heaps = {
{
- .id = ION_HEAP_SYSTEM_ID,
+ .id = ION_SYSTEM_HEAP_ID,
.type = ION_HEAP_TYPE_SYSTEM,
.name = ION_VMALLOC_HEAP_NAME,
},
- {
- .id = ION_HEAP_SYSTEM_CONTIG_ID,
- .type = ION_HEAP_TYPE_SYSTEM_CONTIG,
- .name = ION_KMALLOC_HEAP_NAME,
- },
#ifdef CONFIG_MSM_MULTIMEDIA_USE_ION
{
- .id = ION_HEAP_EBI_ID,
+ .id = ION_SF_HEAP_ID,
.type = ION_HEAP_TYPE_CARVEOUT,
- .name = ION_EBI1_HEAP_NAME,
- .size = MSM_ION_EBI_SIZE,
+ .name = ION_SF_HEAP_NAME,
+ .size = MSM_ION_SF_SIZE,
.memory_type = ION_EBI_TYPE,
},
{
- .id = ION_HEAP_ADSP_ID,
+ .id = ION_CP_MM_HEAP_ID,
.type = ION_HEAP_TYPE_CARVEOUT,
- .name = ION_ADSP_HEAP_NAME,
- .size = MSM_ION_ADSP_SIZE,
- .memory_type = ION_EBI_TYPE,
- },
- {
- .id = ION_HEAP_SMI_ID,
- .type = ION_HEAP_TYPE_CARVEOUT,
- .name = ION_SMI_HEAP_NAME,
- .size = MSM_ION_SMI_SIZE,
+ .name = ION_MM_HEAP_NAME,
+ .size = MSM_ION_MM_SIZE,
.memory_type = ION_SMI_TYPE,
.request_region = request_smi_region,
.release_region = release_smi_region,
.setup_region = setup_smi_region,
},
+ {
+ .id = ION_CAMERA_HEAP_ID,
+ .type = ION_HEAP_TYPE_CARVEOUT,
+ .name = ION_CAMERA_HEAP_NAME,
+ .size = MSM_ION_CAMERA_SIZE,
+ .memory_type = ION_EBI_TYPE,
+ },
+ {
+ .id = ION_CP_MFC_HEAP_ID,
+ .type = ION_HEAP_TYPE_CARVEOUT,
+ .name = ION_MFC_HEAP_NAME,
+ .size = MSM_ION_MFC_SIZE,
+ .memory_type = ION_SMI_TYPE,
+ .request_region = request_smi_region,
+ .release_region = release_smi_region,
+ .setup_region = setup_smi_region,
+ },
+ {
+ .id = ION_CP_WB_HEAP_ID,
+ .type = ION_HEAP_TYPE_CARVEOUT,
+ .name = ION_WB_HEAP_NAME,
+ .size = MSM_ION_WB_SIZE,
+ .memory_type = ION_EBI_TYPE,
+ },
#endif
}
};
@@ -5318,9 +5332,11 @@
static void reserve_ion_memory(void)
{
#if defined(CONFIG_ION_MSM) && defined(CONFIG_MSM_MULTIMEDIA_USE_ION)
- msm8x60_reserve_table[MEMTYPE_EBI1].size += MSM_ION_EBI_SIZE;
- msm8x60_reserve_table[MEMTYPE_EBI1].size += MSM_ION_ADSP_SIZE;
- msm8x60_reserve_table[MEMTYPE_SMI].size += MSM_ION_SMI_SIZE;
+ msm8x60_reserve_table[MEMTYPE_EBI1].size += MSM_ION_SF_SIZE;
+ msm8x60_reserve_table[MEMTYPE_SMI].size += MSM_ION_MM_SIZE;
+ msm8x60_reserve_table[MEMTYPE_SMI].size += MSM_ION_MFC_SIZE;
+ msm8x60_reserve_table[MEMTYPE_EBI1].size += MSM_ION_CAMERA_SIZE;
+ msm8x60_reserve_table[MEMTYPE_EBI1].size += MSM_ION_WB_SIZE;
#endif
}
diff --git a/arch/arm/mach-msm/devices-8960.c b/arch/arm/mach-msm/devices-8960.c
index 26bb7ae..a4466ca 100644
--- a/arch/arm/mach-msm/devices-8960.c
+++ b/arch/arm/mach-msm/devices-8960.c
@@ -564,7 +564,7 @@
.vidc_bus_client_pdata = &vidc_bus_client_data,
#endif
#ifdef CONFIG_MSM_MULTIMEDIA_USE_ION
- .memtype = ION_HEAP_EBI_ID,
+ .memtype = ION_CP_MM_HEAP_ID,
.enable_ion = 1,
#else
.memtype = MEMTYPE_EBI1,
diff --git a/include/linux/ion.h b/include/linux/ion.h
index 2cced6d..4f8756a 100644
--- a/include/linux/ion.h
+++ b/include/linux/ion.h
@@ -27,8 +27,8 @@
* @ION_HEAP_TYPE_SYSTEM: memory allocated via vmalloc
* @ION_HEAP_TYPE_SYSTEM_CONTIG: memory allocated via kmalloc
* @ION_HEAP_TYPE_CARVEOUT: memory allocated from a prereserved
- * carveout heap, allocations are physically
- * contiguous
+ * carveout heap, allocations are physically
+ * contiguous
* @ION_HEAP_END: helper for iterating over heaps
*/
enum ion_heap_type {
@@ -51,24 +51,42 @@
* The ids listed are the order in which allocation will be attempted
* if specified. Don't swap the order of heap ids unless you know what
* you are doing!
+ * Id's are spaced by purpose to allow new Id's to be inserted in-between (for
+ * possible fallbacks)
*/
enum ion_heap_ids {
- ION_HEAP_SYSTEM_ID,
- ION_HEAP_SYSTEM_CONTIG_ID,
- ION_HEAP_EBI_ID,
- ION_HEAP_SMI_ID,
- ION_HEAP_ADSP_ID,
- ION_HEAP_AUDIO_ID,
- ION_HEAP_IOMMU_ID,
+ ION_IOMMU_HEAP_ID = 4,
+ ION_CP_MM_HEAP_ID = 8,
+ ION_CP_MFC_HEAP_ID = 12,
+ ION_CP_WB_HEAP_ID = 16, /* 8660 only */
+ ION_CAMERA_HEAP_ID = 20, /* 8660 only */
+ ION_SF_HEAP_ID = 24,
+ ION_AUDIO_HEAP_ID = 28,
+
+ ION_SYSTEM_HEAP_ID = 30,
+
+ ION_HEAP_ID_RESERVED = 31 /** Bit reserved for ION_SECURE flag */
};
-#define ION_KMALLOC_HEAP_NAME "kmalloc"
+/**
+ * Flag to use when allocating to indicate that a heap is secure.
+ */
+#define ION_SECURE (1 << ION_HEAP_ID_RESERVED)
+
+/**
+ * Macro should be used with ion_heap_ids defined above.
+ */
+#define ION_HEAP(bit) (1 << (bit))
+
#define ION_VMALLOC_HEAP_NAME "vmalloc"
-#define ION_EBI1_HEAP_NAME "EBI1"
-#define ION_ADSP_HEAP_NAME "adsp"
-#define ION_SMI_HEAP_NAME "smi"
+#define ION_AUDIO_HEAP_NAME "audio"
+#define ION_SF_HEAP_NAME "sf"
+#define ION_MM_HEAP_NAME "mm"
+#define ION_CAMERA_HEAP_NAME "camera_preview"
#define ION_IOMMU_HEAP_NAME "iommu"
+#define ION_MFC_HEAP_NAME "mfc"
+#define ION_WB_HEAP_NAME "wb"
#define CACHED 1
#define UNCACHED 0
@@ -98,7 +116,7 @@
* struct ion_platform_heap - defines a heap in the given platform
* @type: type of the heap from ion_heap_type enum
* @id: unique identifier for heap. When allocating (lower numbers
- * will be allocated from first)
+ * will be allocated from first)
* @name: used for debug purposes
* @base: base address of heap in physical memory if applicable
* @size: size of the heap in bytes if applicable