diff options
Diffstat (limited to 'drivers/staging')
11 files changed, 73 insertions, 15 deletions
diff --git a/drivers/staging/nmf-cm/cm/engine/component/src/instantiater.c b/drivers/staging/nmf-cm/cm/engine/component/src/instantiater.c index 2a61d4a7433..b7b42802cea 100644 --- a/drivers/staging/nmf-cm/cm/engine/component/src/instantiater.c +++ b/drivers/staging/nmf-cm/cm/engine/component/src/instantiater.c @@ -278,7 +278,7 @@ t_cm_error cm_instantiateComponent(const char* templateName, LOG_INTERNAL(1, "\n##### Instantiate %s/%x (%s) component on %s at priority %d #####\n", component->pathname, component, template->name, cm_getDspName(coreId), priority, 0); - if((error = cm_ELF_LoadInstance(domainId, elfhandle, template->memories, component->memories)) != CM_OK) + if((error = cm_ELF_LoadInstance(domainId, elfhandle, template->memories, component->memories, template->classe == SINGLETON)) != CM_OK) { cm_DestroyComponentMemory(component); return error; @@ -298,7 +298,6 @@ t_cm_error cm_instantiateComponent(const char* templateName, /* * Create a new component instance */ - component->domainId = domainId; component->priority = priority; component->thisAddress = 0xFFFFFFFF; component->state = STATE_NONE; @@ -314,6 +313,12 @@ t_cm_error cm_instantiateComponent(const char* templateName, cl->numberOfInstance = 1; template->singletonIfAvaliable = component; + if (cm_DM_GetDomainCoreId(domainId) == SVA_CORE_ID) + component->domainId = DEFAULT_SVA_DOMAIN; + else + component->domainId = DEFAULT_SIA_DOMAIN; + } else { + component->domainId = domainId; } if(component->memories[template->thisMemory->id] != INVALID_MEMORY_HANDLE) diff --git a/drivers/staging/nmf-cm/cm/engine/component/src/loader.c b/drivers/staging/nmf-cm/cm/engine/component/src/loader.c index ad6af00f5a5..a128b7aa8c7 100644 --- a/drivers/staging/nmf-cm/cm/engine/component/src/loader.c +++ b/drivers/staging/nmf-cm/cm/engine/component/src/loader.c @@ -226,7 +226,7 @@ t_cm_error cm_loadComponent( * Load shared memory from file */ // START(); - if((error = cm_ELF_LoadTemplate(domainId, elfhandle, template->memories)) != CM_OK) + if((error = cm_ELF_LoadTemplate(domainId, elfhandle, template->memories, template->classe == SINGLETON)) != CM_OK) goto out; MMDSP_serializeMemories(elfhandle->instanceProperty, &template->codeMemory, &template->thisMemory); // END("cm_ELF_LoadTemplate"); diff --git a/drivers/staging/nmf-cm/cm/engine/elf/inc/elfapi.h b/drivers/staging/nmf-cm/cm/engine/elf/inc/elfapi.h index 564086db26c..cce6d158b4e 100644 --- a/drivers/staging/nmf-cm/cm/engine/elf/inc/elfapi.h +++ b/drivers/staging/nmf-cm/cm/engine/elf/inc/elfapi.h @@ -48,7 +48,8 @@ void cm_ELF_CloseFile( t_cm_error cm_ELF_LoadTemplate( t_cm_domain_id domainId, t_elfdescription *elfhandle, - t_memory_handle sharedMemories[NUMBER_OF_MMDSP_MEMORY]); + t_memory_handle sharedMemories[NUMBER_OF_MMDSP_MEMORY], + t_bool isSingleton); /*! * \internal @@ -73,7 +74,8 @@ t_cm_error cm_ELF_LoadInstance( t_cm_domain_id domainId, t_elfdescription *elfhandle, t_memory_handle sharedMemories[NUMBER_OF_MMDSP_MEMORY], - t_memory_handle privateMemories[NUMBER_OF_MMDSP_MEMORY]); + t_memory_handle privateMemories[NUMBER_OF_MMDSP_MEMORY], + t_bool isSingleton); void cm_ELF_FreeInstance( t_nmf_core_id coreId, diff --git a/drivers/staging/nmf-cm/cm/engine/elf/src/elfload.c b/drivers/staging/nmf-cm/cm/engine/elf/src/elfload.c index 84f841ef443..7950cd99007 100644 --- a/drivers/staging/nmf-cm/cm/engine/elf/src/elfload.c +++ b/drivers/staging/nmf-cm/cm/engine/elf/src/elfload.c @@ -574,7 +574,8 @@ static t_cm_error allocSegment( t_cm_domain_id domainId, t_elfdescription *elfhandle, t_memory_handle memories[NUMBER_OF_MMDSP_MEMORY], - t_memory_property property) { + t_memory_property property, + t_bool isSingleton) { t_memory_id memId; const t_elfmemory *thisMemory; //!< Memory used to determine this const t_elfmemory *codeMemory; //!< Memory used to determine code @@ -610,6 +611,9 @@ static t_cm_error allocSegment( cm_DSP_GetDspAddress(memories[memId], &elfhandle->segments[memId].mpcAddr); + if (isSingleton) + cm_DM_SetDefaultDomain(memories[memId], cm_DM_GetDomainCoreId(domainId)); + // Log it LOG_INTERNAL(1, "\t%s%s: 0x%x..+0x%x (0x%x)\n", mapping->memoryName, @@ -639,11 +643,12 @@ static t_cm_error allocSegment( t_cm_error cm_ELF_LoadTemplate( t_cm_domain_id domainId, t_elfdescription *elfhandle, - t_memory_handle sharedMemories[NUMBER_OF_MMDSP_MEMORY]) + t_memory_handle sharedMemories[NUMBER_OF_MMDSP_MEMORY], + t_bool isSingleton) { t_cm_error error; - if((error = allocSegment(domainId, elfhandle, sharedMemories, MEM_SHARABLE)) != CM_OK) + if((error = allocSegment(domainId, elfhandle, sharedMemories, MEM_SHARABLE, isSingleton)) != CM_OK) return error; // Load each readonly segment @@ -657,7 +662,8 @@ t_cm_error cm_ELF_LoadInstance( t_cm_domain_id domainId, t_elfdescription *elfhandle, t_memory_handle sharedMemories[NUMBER_OF_MMDSP_MEMORY], - t_memory_handle privateMemories[NUMBER_OF_MMDSP_MEMORY]) + t_memory_handle privateMemories[NUMBER_OF_MMDSP_MEMORY], + t_bool isSingleton) { t_memory_id memId; t_cm_error error; @@ -668,7 +674,7 @@ t_cm_error cm_ELF_LoadInstance( privateMemories[memId] = sharedMemories[memId]; } - if((error = allocSegment(domainId, elfhandle, privateMemories, MEM_PRIVATE)) != CM_OK) + if((error = allocSegment(domainId, elfhandle, privateMemories, MEM_PRIVATE, isSingleton)) != CM_OK) return error; // Load each writable memory diff --git a/drivers/staging/nmf-cm/cm/engine/memory/inc/domain.h b/drivers/staging/nmf-cm/cm/engine/memory/inc/domain.h index 07caee2d8c1..c9b39956c63 100644 --- a/drivers/staging/nmf-cm/cm/engine/memory/inc/domain.h +++ b/drivers/staging/nmf-cm/cm/engine/memory/inc/domain.h @@ -20,6 +20,10 @@ #include <cm/engine/memory/inc/memory.h> #include <cm/engine/dsp/inc/dsp.h> +/* These default domains are used for singleton only ! */ +#define DEFAULT_SVA_DOMAIN (t_cm_domain_id)1 +#define DEFAULT_SIA_DOMAIN (t_cm_domain_id)2 + /*! * \brief Domain type. * \internal @@ -152,4 +156,8 @@ PUBLIC t_cm_error cm_DM_GetAllocatorStatus(t_cm_domain_id domainId, t_dsp_memory PUBLIC t_cm_error cm_DM_GetDomainAbsAdresses(t_cm_domain_id domainId, t_cm_domain_info *info); +/*! + * \brief Change the domain for the given allocated chunk + */ +PUBLIC void cm_DM_SetDefaultDomain(t_memory_handle memHandle, t_nmf_core_id coreId); #endif /* DOMAIN_H_ */ diff --git a/drivers/staging/nmf-cm/cm/engine/memory/inc/domain_type.h b/drivers/staging/nmf-cm/cm/engine/memory/inc/domain_type.h index 712d077d894..7463f82eb89 100644 --- a/drivers/staging/nmf-cm/cm/engine/memory/inc/domain_type.h +++ b/drivers/staging/nmf-cm/cm/engine/memory/inc/domain_type.h @@ -33,7 +33,6 @@ typedef t_uint8 t_cm_domain_id; * \ingroup CM_DOMAIN_API */ typedef t_uint32 t_nmf_client_id; -// TO BE REMOVED LATER, I guess, when default domains will be removed (PP) #define NMF_CORE_CLIENT (t_nmf_client_id)-1 #define NMF_CURRENT_CLIENT (t_nmf_client_id)0 diff --git a/drivers/staging/nmf-cm/cm/engine/memory/inc/remote_allocator.h b/drivers/staging/nmf-cm/cm/engine/memory/inc/remote_allocator.h index f556c6f7056..36994f37daa 100644 --- a/drivers/staging/nmf-cm/cm/engine/memory/inc/remote_allocator.h +++ b/drivers/staging/nmf-cm/cm/engine/memory/inc/remote_allocator.h @@ -261,4 +261,15 @@ PUBLIC void cm_MM_GetMemoryHandleUserData(t_memory_handle memHandle, t_uint16 *p */ PUBLIC void cm_MM_DumpMemory(t_cm_allocator_desc* alloc, t_uint32 start, t_uint32 end); +/*! + * \brief Change the domain for the given chunk of memory + * + * \param[in] memHandle The given chunk of memory + * \param[in] domainId The new domain id to set + * + * \retval void + * + * \ingroup MEMORY_INTERNAL + */ +PUBLIC void cm_MM_SetDefaultDomain(t_memory_handle memHandle, t_uint32 domainId); #endif /* _REMOTE_ALLOCATOR_H_*/ diff --git a/drivers/staging/nmf-cm/cm/engine/memory/src/domain.c b/drivers/staging/nmf-cm/cm/engine/memory/src/domain.c index 8524183ce19..a605cc475a9 100644 --- a/drivers/staging/nmf-cm/cm/engine/memory/src/domain.c +++ b/drivers/staging/nmf-cm/cm/engine/memory/src/domain.c @@ -122,6 +122,20 @@ PUBLIC t_cm_error cm_DM_Init(void) domainDesc[2].client = NMF_CORE_CLIENT; domainDesc[3].client = NMF_CORE_CLIENT; + /* We use domain 1 and 2 for the singleton, only used for components structure */ + domainDesc[DEFAULT_SVA_DOMAIN].type = DOMAIN_NORMAL; + domainDesc[DEFAULT_SVA_DOMAIN].domain.coreId= SVA_CORE_ID; + domainDesc[DEFAULT_SVA_DOMAIN].domain.esramCode.size = (t_uint32)-1; + domainDesc[DEFAULT_SVA_DOMAIN].domain.esramData.size = (t_uint32)-1; + domainDesc[DEFAULT_SVA_DOMAIN].domain.sdramCode.size = (t_uint32)-1; + domainDesc[DEFAULT_SVA_DOMAIN].domain.sdramData.size = (t_uint32)-1; + domainDesc[DEFAULT_SIA_DOMAIN].type = DOMAIN_NORMAL; + domainDesc[DEFAULT_SIA_DOMAIN].domain.coreId= SIA_CORE_ID; + domainDesc[DEFAULT_SIA_DOMAIN].domain.esramCode.size = (t_uint32)-1; + domainDesc[DEFAULT_SIA_DOMAIN].domain.esramData.size = (t_uint32)-1; + domainDesc[DEFAULT_SIA_DOMAIN].domain.sdramCode.size = (t_uint32)-1; + domainDesc[DEFAULT_SIA_DOMAIN].domain.sdramData.size = (t_uint32)-1; + for(i = 0; i < MAX_SCRATCH_DOMAIN_NB; i++) { domainScratchDesc[i].domainId = 0; domainScratchDesc[i].parentId = 0; @@ -585,3 +599,10 @@ static void cm_DM_DomainError(const t_cm_domain_id parentId, const t_nmf_client_ domainDesc[parentId].domain.esramData.offset + domainDesc[parentId].domain.esramData.size); } +PUBLIC void cm_DM_SetDefaultDomain(t_memory_handle memHandle, t_nmf_core_id coreId) +{ + if (coreId == SVA_CORE_ID) + cm_MM_SetDefaultDomain(memHandle, DEFAULT_SVA_DOMAIN); + else if (coreId == SIA_CORE_ID) + cm_MM_SetDefaultDomain(memHandle, DEFAULT_SIA_DOMAIN); +} diff --git a/drivers/staging/nmf-cm/cm/engine/memory/src/remote_allocator.c b/drivers/staging/nmf-cm/cm/engine/memory/src/remote_allocator.c index ec23e28917c..0d000d37371 100644 --- a/drivers/staging/nmf-cm/cm/engine/memory/src/remote_allocator.c +++ b/drivers/staging/nmf-cm/cm/engine/memory/src/remote_allocator.c @@ -649,3 +649,8 @@ PUBLIC void cm_MM_DumpMemory(t_cm_allocator_desc* alloc, t_uint32 start, t_uint3 chunk = chunk->next; } } + +PUBLIC void cm_MM_SetDefaultDomain(t_memory_handle memHandle, t_uint32 domainId) +{ + ((t_cm_chunk *) memHandle)->domainId = domainId; +} diff --git a/drivers/staging/nmf-cm/cm_debug.c b/drivers/staging/nmf-cm/cm_debug.c index bf3fa422208..78552c9ce67 100644 --- a/drivers/staging/nmf-cm/cm_debug.c +++ b/drivers/staging/nmf-cm/cm_debug.c @@ -194,8 +194,7 @@ static ssize_t domain_read(struct file *file, char __user *userbuf, int ret=0; OSAL_LOCK_API(); - if ((cm_DM_CheckDomain(id, DOMAIN_ANY) == CM_OK) - && (domain->domain.coreId != -1) + if ((domain->domain.coreId != -1) && (domain->dbgCooky != NULL)) { t_cm_allocator_status status; t_uint32 dOffset; @@ -822,8 +821,6 @@ void cm_debug_init(void) debugfs_create_u8("requested_opp", S_IRUSR|S_IRGRP, osalEnv.mpc[i].dir, &osalEnv.mpc[i].opp_request); - - } } osal_debug_ops.component_create = cm_debug_component_create; diff --git a/drivers/staging/nmf-cm/cmld.c b/drivers/staging/nmf-cm/cmld.c index f8fe0d41059..4c754c55b72 100644 --- a/drivers/staging/nmf-cm/cmld.c +++ b/drivers/staging/nmf-cm/cmld.c @@ -1163,6 +1163,10 @@ static int __init cmld_init_module(void) #ifdef CONFIG_DEBUG_FS cm_debug_init(); + if (osal_debug_ops.domain_create) { + osal_debug_ops.domain_create(DEFAULT_SVA_DOMAIN); + osal_debug_ops.domain_create(DEFAULT_SIA_DOMAIN); + } #endif /* Configure MPC Cores */ |