From 9db96e007d83671046fe5ca1fd6f5233526992d7 Mon Sep 17 00:00:00 2001 From: Francis Murtagh Date: Fri, 13 Aug 2021 16:15:09 +0100 Subject: IVGCVSW-6076 PCA: Add support for Importing Protected DMA buffers * Add DmaBufProtected support to ClImportTensorHandle::Import() * Add DmaBufProtected to Map/Unmap switch case in ClBackend * Remove unreachable return statement Signed-off-by: Francis Murtagh Change-Id: I5918f6235af74ae287b8a73744a8cc979a07b0bf --- src/backends/cl/ClBackend.hpp | 44 +++++++++++++++++++++++++++++++++++-------- 1 file changed, 36 insertions(+), 8 deletions(-) (limited to 'src/backends/cl/ClBackend.hpp') diff --git a/src/backends/cl/ClBackend.hpp b/src/backends/cl/ClBackend.hpp index e3ff91c268..4f68c3bcc7 100644 --- a/src/backends/cl/ClBackend.hpp +++ b/src/backends/cl/ClBackend.hpp @@ -140,9 +140,9 @@ public: { const cl_import_properties_arm importProperties[] = { - CL_IMPORT_TYPE_ARM, - CL_IMPORT_TYPE_HOST_ARM, - 0 + CL_IMPORT_TYPE_ARM, + CL_IMPORT_TYPE_HOST_ARM, + 0 }; cl_int error = CL_SUCCESS; cl_mem buffer = clImportMemoryARM(arm_compute::CLKernelLibrary::get().context().get(), @@ -163,11 +163,37 @@ public: { const cl_import_properties_arm importProperties[] = { - CL_IMPORT_TYPE_ARM, - CL_IMPORT_TYPE_DMA_BUF_ARM, - CL_IMPORT_DMA_BUF_DATA_CONSISTENCY_WITH_HOST_ARM, - CL_TRUE, - 0 + CL_IMPORT_TYPE_ARM, + CL_IMPORT_TYPE_DMA_BUF_ARM, + CL_IMPORT_DMA_BUF_DATA_CONSISTENCY_WITH_HOST_ARM, + CL_TRUE, + 0 + }; + cl_int error = CL_SUCCESS; + cl_mem buffer = clImportMemoryARM(arm_compute::CLKernelLibrary::get().context().get(), + CL_MEM_READ_WRITE, + importProperties, + memory, + roundedSize, + &error); + if (error == CL_SUCCESS) + { + m_AllocatedBufferMappings.insert(std::make_pair(static_cast(buffer), memory)); + return buffer; + } + throw armnn::Exception( + "Mapping allocated memory from CustomMemoryAllocator failed, errcode: " + + std::to_string(error)); + } + else if (source == MemorySource::DmaBufProtected) + { + const cl_import_properties_arm importProperties[] = + { + CL_IMPORT_TYPE_ARM, + CL_IMPORT_TYPE_DMA_BUF_ARM, + CL_IMPORT_TYPE_PROTECTED_ARM, + CL_TRUE, + 0 }; cl_int error = CL_SUCCESS; cl_mem buffer = clImportMemoryARM(arm_compute::CLKernelLibrary::get().context().get(), @@ -228,6 +254,7 @@ public: return _mapping; break; case armnn::MemorySource::DmaBuf: + case armnn::MemorySource::DmaBufProtected: // If the source is a Dmabuf then the memory ptr should be pointing to an integer value for the fd _mapping = mmap(NULL, _size, PROT_WRITE, MAP_SHARED, *(reinterpret_cast(m_HostMemPtr)), 0); return _mapping; @@ -247,6 +274,7 @@ public: _mapping = nullptr; break; case armnn::MemorySource::DmaBuf: + case armnn::MemorySource::DmaBufProtected: munmap(_mapping, _size); _mapping = nullptr; break; -- cgit v1.2.1