sgx_src: Update sgx_src with missing files and platform rev
authorHemant Hariyani <hemanthariyani@ti.com>
Mon, 1 Dec 2014 16:31:50 +0000 (10:31 -0600)
committerHemant Hariyani <hemanthariyani@ti.com>
Mon, 1 Dec 2014 16:59:08 +0000 (10:59 -0600)
This files were missing from the previous commit. Also, set
default platform version to 5.0 to allow building KM
without Android enviornment.

Change-Id: I768a1824846ac07574ca3b78769dd4bf56628c80
Signed-off-by: Hemant Hariyani <hemanthariyani@ti.com>
jacinto6/README.SGX
jacinto6/sgx_src/eurasia_km/eurasiacon/build/linux2/common/android/platform_version.mk
jacinto6/sgx_src/eurasia_km/services4/srvkm/env/linux/dmabuf.c [new file with mode: 0644]
jacinto6/sgx_src/eurasia_km/services4/srvkm/env/linux/dmabuf.h [new file with mode: 0644]
jacinto6/sgx_src/eurasia_km/services4/srvkm/include/external_sync.h [moved from jacinto6/sgx_src/eurasia_km/services4/srvkm/include/ion_sync.h with 79% similarity]

index 1479e47f2182395e8f609923007b264c9d2d2eb4..c1fde6c951d61a84d853ea11c51d36662acb30f3 100644 (file)
@@ -16,11 +16,13 @@ sgx.tgz a set of binaries built for SGX544.
 [DDK Version]
     1.12/2917986
 [DDK commit ID]
 [DDK Version]
     1.12/2917986
 [DDK commit ID]
-    0c60181 android: update hal_public.h for TI formats
+    c76a085 build-km: Set 5.0 as default version
 [Branch]
     android/1.12/2917986_k3.14_L_gem
 [Kernel modules built against]
     Kernel Version: 3.14.y with CONFIG_MODVERSIONS=y
 [Branch]
     android/1.12/2917986_k3.14_L_gem
 [Kernel modules built against]
     Kernel Version: 3.14.y with CONFIG_MODVERSIONS=y
+[Build type]
+    debug (export BUILD=debug)
 
 #===========================================================================
 #   Building SGX Kernel Modules
 
 #===========================================================================
 #   Building SGX Kernel Modules
@@ -31,17 +33,17 @@ Make sure kernel is built before building modules
 
 # cd ANDROID_ROOT/device/ti/proprietary-open/jacinto6/sgx_src/eurasia_km/eurasiacon/build/linux2/omap_android/
 # export KERNELDIR=path_to_kernel
 
 # cd ANDROID_ROOT/device/ti/proprietary-open/jacinto6/sgx_src/eurasia_km/eurasiacon/build/linux2/omap_android/
 # export KERNELDIR=path_to_kernel
+# export PATH=<path to kernel toolchain>:$PATH
 
 To build for OMAP5 (SGX 544 multi core):
 
 To build for OMAP5 (SGX 544 multi core):
-# make ARCH=arm KERNEL_CROSS_COMPILE=arm-eabi- CROSS_COMPILE=arm-eabi- TARGET_PRODUCT="jacinto6evm" PLATFORM_VERSION=5.0 BUILD=debug
+# make ARCH=arm KERNEL_CROSS_COMPILE=arm-eabi- CROSS_COMPILE=arm-eabi- TARGET_PRODUCT="jacinto6evm" BUILD=debug
 
 Once the .ko is built, install it onto device (/system/lib/modules)
 
 
 Once the .ko is built, install it onto device (/system/lib/modules)
 
-# cd ANDROID_ROOT/device/ti/proprietary-open/jacinto6/sgx_src/eurasia_km/eurasiacon/binary2_omap_android_release/target/
+# cd ANDROID_ROOT/device/ti/proprietary-open/jacinto6/sgx_src/eurasia_km/eurasiacon/binary2_omap_android_debug/target/
 # adb push pvrsrvkm.ko /system/lib/modules/
 # adb push pvrsrvkm.ko /system/lib/modules/
-# adb push omaplfb.ko /system/lib/modules/
 
 If you build the kernel module, it is highly advisable to replace the binaries
 
 If you build the kernel module, it is highly advisable to replace the binaries
-in your device with the ones located in sgx.tgz to avoid incompatibility.
+in your device with the ones in sgx.tgz to avoid incompatibility.
 
 Reboot device.
 
 Reboot device.
index 482fd196b05435836a1248f5437c3ccd1983903e..bf43ddab89d970e332f60b3edbeccb3fe00371d4 100644 (file)
@@ -45,7 +45,7 @@ PLATFORM_VERSION := $(shell \
                cat $(TARGET_ROOT)/product/$(TARGET_DEVICE)/system/build.prop | \
                        grep ^ro.build.version.release | cut -f2 -d'=' | cut -f1 -d'-'; \
        else \
                cat $(TARGET_ROOT)/product/$(TARGET_DEVICE)/system/build.prop | \
                        grep ^ro.build.version.release | cut -f2 -d'=' | cut -f1 -d'-'; \
        else \
-               echo 1.6; \
+               echo 5.0; \
        fi)
 
 define version-starts-with
        fi)
 
 define version-starts-with
diff --git a/jacinto6/sgx_src/eurasia_km/services4/srvkm/env/linux/dmabuf.c b/jacinto6/sgx_src/eurasia_km/services4/srvkm/env/linux/dmabuf.c
new file mode 100644 (file)
index 0000000..29c7d5d
--- /dev/null
@@ -0,0 +1,283 @@
+/*************************************************************************/ /*!
+@Title          Ion driver inter-operability code.
+@Copyright      Copyright (c) Imagination Technologies Ltd. All Rights Reserved
+@License        Dual MIT/GPLv2
+
+The contents of this file are subject to the MIT license as set out below.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+Alternatively, the contents of this file may be used under the terms of
+the GNU General Public License Version 2 ("GPL") in which case the provisions
+of GPL are applicable instead of those above.
+
+If you wish to allow use of your version of this file only under the terms of
+GPL, and not to allow others to use your version of this file under the terms
+of the MIT license, indicate your decision by deleting the provisions above
+and replace them with the notice and other provisions required by GPL as set
+out in the file called "GPL-COPYING" included in this distribution. If you do
+not delete the provisions above, a recipient may use your version of this file
+under the terms of either the MIT license or GPL.
+
+This License is also included in this distribution in the file called
+"MIT-COPYING".
+
+EXCEPT AS OTHERWISE STATED IN A NEGOTIATED AGREEMENT: (A) THE SOFTWARE IS
+PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
+PURPOSE AND NONINFRINGEMENT; AND (B) IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/ /**************************************************************************/
+
+#include "dmabuf.h"
+#include <linux/platform_device.h>
+#include <linux/dma-buf.h>
+#include <linux/dma-direction.h>
+#include <linux/scatterlist.h>
+#include <linux/kernel.h>
+#include <linux/slab.h>
+#include <linux/err.h>
+
+extern struct platform_device *gpsPVRLDMDev;
+
+#define MAX_IMPORT_DMABUF_FDS 3
+
+typedef struct _DMABUF_IMPORT_DATA_
+{
+       /* Number of dma_buf handles represented by this import */
+       IMG_UINT32 ui32NumHandles;
+
+       /* Array of dma_buf handles in use by services */
+       struct dma_buf *apsDmaBuf[MAX_IMPORT_DMABUF_FDS];
+
+        /* Array of dma_buf attachments */
+       struct dma_buf_attachment *apsDmaBufAttachment[MAX_IMPORT_DMABUF_FDS];
+
+       /* Array of sg_tables */
+       struct sg_table *apsSgTable[MAX_IMPORT_DMABUF_FDS];
+
+       /* Array of physical addresses represented by these buffers */
+       IMG_SYS_PHYADDR *psSysPhysAddr;
+
+#if defined(PDUMP)
+        /* FIXME: Not sure if this is needed here */
+       IMG_PVOID pvKernAddr0;
+#endif /* defined(PDUMP) */
+}
+DMABUF_IMPORT_DATA;
+
+PVRSRV_ERROR DmabufImportBufferAndAcquirePhysAddr(IMG_UINT32 ui32NumFDs,
+                                                                                          IMG_INT32  *pai32BufferFDs,
+                                                                                          IMG_UINT32 *pui32PageCount,
+                                                                                          IMG_SYS_PHYADDR **ppsSysPhysAddr,
+                                                                                          IMG_PVOID  *ppvKernAddr0,
+                                                                                          IMG_HANDLE *phPriv,
+                                                                                          IMG_HANDLE *phUnique)
+{
+       struct scatterlist *psTemp, *psScatterList[MAX_IMPORT_DMABUF_FDS] = {};
+       PVRSRV_ERROR eError = PVRSRV_ERROR_OUT_OF_MEMORY;
+       IMG_UINT32 i, k, ui32PageCount = 0;
+       DMABUF_IMPORT_DATA *psImportData;
+
+       if(ui32NumFDs > MAX_IMPORT_DMABUF_FDS)
+       {
+               printk(KERN_ERR "%s: More passed in than supported "
+                                               "(%d provided, %d max)", __func__, ui32NumFDs,
+                                               MAX_IMPORT_DMABUF_FDS);
+               return PVRSRV_ERROR_INVALID_PARAMS;
+       }
+
+       psImportData = kzalloc(sizeof(DMABUF_IMPORT_DATA), GFP_KERNEL);
+       if (psImportData == NULL)
+       {
+               goto exitFailKMallocImportData;
+       }
+
+       /* Set up import data for free call */
+       psImportData->ui32NumHandles = ui32NumFDs;
+
+       for(i = 0; i < ui32NumFDs; i++)
+       {
+               int fd = (int)pai32BufferFDs[i];
+
+               psImportData->apsDmaBuf[i] = dma_buf_get(fd);
+               if (psImportData->apsDmaBuf[i] == IMG_NULL)
+               {
+                       eError = PVRSRV_ERROR_BAD_MAPPING;
+                       goto exitFailImport;
+               }
+
+               psImportData->apsDmaBufAttachment[i] = dma_buf_attach(psImportData->apsDmaBuf[i],
+                                                                       &gpsPVRLDMDev->dev);
+
+               psImportData->apsSgTable[i] = dma_buf_map_attachment(psImportData->apsDmaBufAttachment[i],
+                                                       DMA_BIDIRECTIONAL);
+
+               psScatterList[i] = psImportData->apsSgTable[i]->sgl;
+               if (psScatterList[i] == NULL)
+               {
+                       eError = PVRSRV_ERROR_INVALID_PARAMS;
+                       goto exitFailImport;
+               }
+
+               /* Although all heaps will provide an sg_table, the tables cannot
+                * always be trusted because sg_lists are just pointers to "struct
+                * page" values, and some memory e.g. carveout may not have valid
+                * "struct page" values. In particular, on ARM, carveout is
+                * generally reserved with memblock_remove(), which leaves the
+                * "struct page" entries uninitialized when SPARSEMEM is enabled.
+                * The effect of this is that page_to_pfn(pfn_to_page(pfn)) != pfn.
+                *
+                * There's more discussion on this mailing list thread:
+                * http://lists.linaro.org/pipermail/linaro-mm-sig/2012-August/002440.html
+                *
+                * probably a contiguous allocator. If the phys() function is
+                * implemented, we'll use it to check sg_table->sgl[0]. If we find
+                * they don't agree, we'll assume phys() is more reliable and use
+                * that.
+                *
+                * Some heaps out there will implement phys() even though they are
+                * not for physically contiguous allocations (so the sg_table must
+                * be used). Therefore use the sg_table if the phys() and first
+                * sg_table entry match. This should be reliable because for most
+                * contiguous allocators, the sg_table should be a single span
+                * from 'start' to 'start+size'.
+                *
+                * Also, ion prints out an error message if the heap doesn't implement
+                * ->phys(), which we want to avoid, so only use ->phys() if the
+                * sg_table contains a single span and therefore could plausibly
+                * be a contiguous allocator.
+                */
+               #if 0
+               if(!sg_next(psScatterList[i]))
+               {
+                       ion_phys_addr_t sPhyAddr;
+                       size_t sLength;
+
+                       if(!ion_phys(psIonClient, psImportData->apsIonHandle[i],
+                                                &sPhyAddr, &sLength))
+                       {
+                               BUG_ON(sLength & ~PAGE_MASK);
+
+                               if(sg_phys(psScatterList[i]) != sPhyAddr)
+                               {
+                                       psScatterList[i] = IMG_NULL;
+                                       ui32PageCount += sLength / PAGE_SIZE;
+                               }
+                       }
+               }
+               #endif
+               for(psTemp = psScatterList[i]; psTemp; psTemp = sg_next(psTemp))
+               {
+                       IMG_UINT32 j;
+                       for (j = 0; j < psTemp->length; j += PAGE_SIZE)
+                       {
+                               ui32PageCount++;
+                       }
+               }
+       }
+
+       BUG_ON(ui32PageCount == 0);
+
+       psImportData->psSysPhysAddr = kmalloc(sizeof(IMG_SYS_PHYADDR) * ui32PageCount, GFP_KERNEL);
+       if (psImportData->psSysPhysAddr == NULL)
+       {
+               goto exitFailImport;
+       }
+
+       for(i = 0, k = 0; i < ui32NumFDs; i++)
+       {
+               if(psScatterList[i])
+               {
+                       for(psTemp = psScatterList[i]; psTemp; psTemp = sg_next(psTemp))
+                       {
+                               IMG_UINT32 j;
+                               for (j = 0; j < psTemp->length; j += PAGE_SIZE)
+                               {
+                                       psImportData->psSysPhysAddr[k].uiAddr = sg_phys(psTemp) + j;
+                                       k++;
+                               }
+                       }
+               }
+#if 0
+               else
+               {
+                       ion_phys_addr_t sPhyAddr;
+                       size_t sLength, j;
+
+                       ion_phys(psIonClient, psImportData->apsIonHandle[i],
+                                        &sPhyAddr, &sLength);
+
+                       for(j = 0; j < sLength; j += PAGE_SIZE)
+                       {
+                               psImportData->psSysPhysAddr[k].uiAddr = sPhyAddr + j;
+                               k++;
+                       }
+               }
+#endif
+       }
+
+       *pui32PageCount = ui32PageCount;
+       *ppsSysPhysAddr = psImportData->psSysPhysAddr;
+
+#if defined(PDUMP)
+       if(ui32NumFDs == 1)
+       {
+               /*FIXME */
+               /* Need to handle kernel mapping */
+       }
+       else
+#endif /* defined(PDUMP) */
+       {
+               *ppvKernAddr0 = NULL;
+       }
+
+       *phPriv = psImportData;
+       *phUnique = (IMG_HANDLE)psImportData->psSysPhysAddr[0].uiAddr;
+
+       return PVRSRV_OK;
+
+exitFailImport:
+       for(i = 0; psImportData->apsDmaBuf[i] != NULL; i++)
+       {
+               dma_buf_put(psImportData->apsDmaBuf[i]);
+       }
+       kfree(psImportData);
+exitFailKMallocImportData:
+       return eError;
+}
+
+IMG_VOID DmabufUnimportBufferAndReleasePhysAddr(IMG_HANDLE hPriv)
+{
+       DMABUF_IMPORT_DATA *psImportData = hPriv;
+       IMG_UINT32 i;
+
+#if defined(PDUMP)
+       if (psImportData->pvKernAddr0)
+       {
+               //FIXME
+       }
+#endif /* defined(PDUMP) */
+       for(i = 0; i < psImportData->ui32NumHandles; i++)
+       {
+               dma_buf_unmap_attachment(psImportData->apsDmaBufAttachment[i],
+                                               psImportData->apsSgTable[i],
+                                               DMA_BIDIRECTIONAL);
+               dma_buf_detach(psImportData->apsDmaBuf[i],
+                                       psImportData->apsDmaBufAttachment[i]);
+               dma_buf_put(psImportData->apsDmaBuf[i]);
+       }
+
+       kfree(psImportData->psSysPhysAddr);
+       kfree(psImportData);
+}
diff --git a/jacinto6/sgx_src/eurasia_km/services4/srvkm/env/linux/dmabuf.h b/jacinto6/sgx_src/eurasia_km/services4/srvkm/env/linux/dmabuf.h
new file mode 100644 (file)
index 0000000..4ea3ff1
--- /dev/null
@@ -0,0 +1,58 @@
+/*************************************************************************/ /*!
+@Title          Ion driver inter-operability code.
+@Copyright      Copyright (c) Imagination Technologies Ltd. All Rights Reserved
+@License        Dual MIT/GPLv2
+
+The contents of this file are subject to the MIT license as set out below.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+Alternatively, the contents of this file may be used under the terms of
+the GNU General Public License Version 2 ("GPL") in which case the provisions
+of GPL are applicable instead of those above.
+
+If you wish to allow use of your version of this file only under the terms of
+GPL, and not to allow others to use your version of this file under the terms
+of the MIT license, indicate your decision by deleting the provisions above
+and replace them with the notice and other provisions required by GPL as set
+out in the file called "GPL-COPYING" included in this distribution. If you do
+not delete the provisions above, a recipient may use your version of this file
+under the terms of either the MIT license or GPL.
+
+This License is also included in this distribution in the file called
+"MIT-COPYING".
+
+EXCEPT AS OTHERWISE STATED IN A NEGOTIATED AGREEMENT: (A) THE SOFTWARE IS
+PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
+PURPOSE AND NONINFRINGEMENT; AND (B) IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/ /**************************************************************************/
+
+#ifndef __IMG_LINUX_DMABUF_H__
+#define __IMG_LINUX_DMABUF_H__
+
+#include "img_types.h"
+#include "servicesext.h"
+
+PVRSRV_ERROR DmabufImportBufferAndAcquirePhysAddr(IMG_UINT32 ui32NumFDs,
+                                                                                          IMG_INT32  *pi32BufferFDs,
+                                                                                          IMG_UINT32 *pui32PageCount,
+                                                                                          IMG_SYS_PHYADDR **ppsSysPhysAddr,
+                                                                                          IMG_PVOID *ppvKernAddr0,
+                                                                                          IMG_HANDLE *phPriv,
+                                                                                          IMG_HANDLE *phUnique);
+
+IMG_VOID DmabufUnimportBufferAndReleasePhysAddr(IMG_HANDLE hPriv);
+
+#endif /* __IMG_LINUX_DMABUF_H__ */
similarity index 79%
rename from jacinto6/sgx_src/eurasia_km/services4/srvkm/include/ion_sync.h
rename to jacinto6/sgx_src/eurasia_km/services4/srvkm/include/external_sync.h
index 8600a19ebb75f8fa7e594d2bbe485e81f09c7b8d..9b64d1e6d35a943d353a80100acd595d5691e8a8 100644 (file)
@@ -43,31 +43,31 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 #include "img_types.h"
 #include "servicesint.h"
 
 #include "img_types.h"
 #include "servicesint.h"
 
-#ifndef __ION_SYNC_H__
-#define __ION_SYNC_H__
+#ifndef __EXTERNAL_SYNC_H__
+#define __EXTERNAL_SYNC_H__
 
 
-typedef struct _PVRSRV_ION_SYNC_INFO_ {
+typedef struct _PVRSRV_EXTERNAL_SYNC_INFO_ {
        PVRSRV_KERNEL_SYNC_INFO *psSyncInfo;
        IMG_HANDLE                              hUnique;
        IMG_UINT32                              ui32RefCount;
        IMG_UINT64                              ui64Stamp;
        PVRSRV_KERNEL_SYNC_INFO *psSyncInfo;
        IMG_HANDLE                              hUnique;
        IMG_UINT32                              ui32RefCount;
        IMG_UINT64                              ui64Stamp;
-} PVRSRV_ION_SYNC_INFO;
+} PVRSRV_EXTERNAL_SYNC_INFO;
 
 
-PVRSRV_ERROR PVRSRVIonBufferSyncAcquire(IMG_HANDLE hUnique,
+PVRSRV_ERROR PVRSRVExternalBufferSyncAcquire(IMG_HANDLE hUnique,
                                                                                IMG_HANDLE hDevCookie,
                                                                                IMG_HANDLE hDevMemContext,
                                                                                IMG_HANDLE hDevCookie,
                                                                                IMG_HANDLE hDevMemContext,
-                                                                               PVRSRV_ION_SYNC_INFO **ppsIonSyncInfo);
+                                                                               PVRSRV_EXTERNAL_SYNC_INFO **ppsExternalSyncInfo);
 
 
-IMG_VOID PVRSRVIonBufferSyncRelease(PVRSRV_ION_SYNC_INFO *psIonSyncInfo);
+IMG_VOID PVRSRVExternalBufferSyncRelease(PVRSRV_EXTERNAL_SYNC_INFO *psExternalSyncInfo);
 
 
-static INLINE PVRSRV_KERNEL_SYNC_INFO *IonBufferSyncGetKernelSyncInfo(PVRSRV_ION_SYNC_INFO *psIonSyncInfo)
+static INLINE PVRSRV_KERNEL_SYNC_INFO *ExternalBufferSyncGetKernelSyncInfo(PVRSRV_EXTERNAL_SYNC_INFO *psExternalSyncInfo)
 {
 {
-       return psIonSyncInfo->psSyncInfo;
+       return psExternalSyncInfo->psSyncInfo;
 }
 
 }
 
-static INLINE IMG_UINT64 IonBufferSyncGetStamp(PVRSRV_ION_SYNC_INFO *psIonSyncInfo)
+static INLINE IMG_UINT64 ExternalBufferSyncGetStamp(PVRSRV_EXTERNAL_SYNC_INFO *psExternalSyncInfo)
 {
 {
-       return psIonSyncInfo->ui64Stamp;
+       return psExternalSyncInfo->ui64Stamp;
 }
 
 }
 
-#endif /* __ION_SYNC_H__ */
+#endif /* __EXTERNAL_SYNC_H__ */