本文整理汇总了C++中MALI_ASSERT_GROUP_LOCKED函数的典型用法代码示例。如果您正苦于以下问题:C++ MALI_ASSERT_GROUP_LOCKED函数的具体用法?C++ MALI_ASSERT_GROUP_LOCKED怎么用?C++ MALI_ASSERT_GROUP_LOCKED使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了MALI_ASSERT_GROUP_LOCKED函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: mali_mmu_activate_fault_flush_page_directory
void mali_mmu_activate_fault_flush_page_directory(struct mali_mmu_core* mmu)
{
mali_bool stall_success;
MALI_DEBUG_ASSERT_POINTER(mmu);
MALI_ASSERT_GROUP_LOCKED(mmu->group);
MALI_DEBUG_PRINT(3, ("Activating the page fault flush page directory on MMU %s\n", mmu->hw_core.description));
stall_success = mali_mmu_enable_stall(mmu);
/* This function is expect to fail the stalling, since it might be in PageFault mode when it is called */
mali_mmu_activate_address_space(mmu, mali_page_fault_flush_page_directory);
if ( MALI_TRUE==stall_success ) mali_mmu_disable_stall(mmu);
}
开发者ID:1DeMaCr,项目名称:android_hd_kernel_samsung_codina,代码行数:12,代码来源:mali_mmu.c
示例2: mali_group_deactivate_page_directory
static void mali_group_deactivate_page_directory(struct mali_group *group, struct mali_session_data *session)
{
MALI_ASSERT_GROUP_LOCKED(group);
MALI_DEBUG_ASSERT(0 < group->page_dir_ref_count);
MALI_DEBUG_ASSERT(session == group->session);
group->page_dir_ref_count--;
/* As an optimization, the MMU still points to the group->session even if (0 == group->page_dir_ref_count),
and we do not call mali_mmu_activate_empty_page_directory(group->mmu); */
MALI_DEBUG_ASSERT(0 <= group->page_dir_ref_count);
}
开发者ID:4yush5663,项目名称:android_kernel_samsung_i9500,代码行数:13,代码来源:mali_group.c
示例3: mali_mmu_activate_empty_page_directory
void mali_mmu_activate_empty_page_directory(struct mali_mmu_core* mmu)
{
mali_bool stall_success;
MALI_DEBUG_ASSERT_POINTER(mmu);
MALI_ASSERT_GROUP_LOCKED(mmu->group);
MALI_DEBUG_PRINT(3, ("Activating the empty page directory on MMU %s\n", mmu->hw_core.description));
stall_success = mali_mmu_enable_stall(mmu);
/* This function can only be called when the core is idle, so it could not fail. */
MALI_DEBUG_ASSERT( stall_success );
mali_mmu_activate_address_space(mmu, mali_empty_page_directory);
mali_mmu_disable_stall(mmu);
}
开发者ID:32743069,项目名称:amlogic_common_3050,代码行数:13,代码来源:mali_mmu.c
示例4: mali_mmu_activate_page_directory
mali_bool mali_mmu_activate_page_directory(struct mali_mmu_core *mmu, struct mali_page_directory *pagedir)
{
mali_bool stall_success;
MALI_DEBUG_ASSERT_POINTER(mmu);
MALI_ASSERT_GROUP_LOCKED(mmu->group);
MALI_DEBUG_PRINT(5, ("Asked to activate page directory 0x%x on MMU %s\n", pagedir, mmu->hw_core.description));
stall_success = mali_mmu_enable_stall(mmu);
if ( MALI_FALSE==stall_success ) return MALI_FALSE;
mali_mmu_activate_address_space(mmu, pagedir->page_directory);
mali_mmu_disable_stall(mmu);
return MALI_TRUE;
}
开发者ID:32743069,项目名称:amlogic_common_3050,代码行数:14,代码来源:mali_mmu.c
示例5: mali_group_other_reschedule_needed
/* Used to check if scheduler for the other core type needs to be called on job completion.
*
* Used only for Mali-200, where job start may fail if the only MMU is busy
* with another session's address space.
*/
static inline mali_bool mali_group_other_reschedule_needed(struct mali_group *group)
{
MALI_ASSERT_GROUP_LOCKED(group);
#if defined(USING_MALI200)
if (group->pagedir_activation_failed)
{
group->pagedir_activation_failed = MALI_FALSE;
return MALI_TRUE;
}
else
#endif
{
return MALI_FALSE;
}
}
开发者ID:4yush5663,项目名称:android_kernel_samsung_i9500,代码行数:21,代码来源:mali_group.c
示例6: mali_pp_scheduler_can_move_virtual_to_physical
/**
* Checks if the criteria is met for removing a physical core from virtual group
*/
MALI_STATIC_INLINE mali_bool mali_pp_scheduler_can_move_virtual_to_physical(void)
{
MALI_ASSERT_PP_SCHEDULER_LOCKED();
MALI_DEBUG_ASSERT(NULL != virtual_group);
MALI_ASSERT_GROUP_LOCKED(virtual_group);
/*
* The criteria for taking out a physical group from a virtual group are the following:
* - There virtual group is idle
* - There are currently no physical groups (idle and working)
* - There are physical jobs to be scheduled (without a barrier)
*/
return (!virtual_group_working) &&
_mali_osk_list_empty(&group_list_idle) &&
_mali_osk_list_empty(&group_list_working) &&
(NULL != mali_pp_scheduler_get_physical_job());
}
开发者ID:Scorpio92,项目名称:mstar6a918,代码行数:19,代码来源:mali_pp_scheduler.c
示例7: mali_group_activate_page_directory
static enum mali_group_activate_pd_status mali_group_activate_page_directory(struct mali_group *group, struct mali_session_data *session)
{
enum mali_group_activate_pd_status retval;
MALI_ASSERT_GROUP_LOCKED(group);
MALI_DEBUG_PRINT(5, ("Mali group: Activating page directory 0x%08X from session 0x%08X on group 0x%08X\n", mali_session_get_page_directory(session), session, group));
MALI_DEBUG_ASSERT(0 <= group->page_dir_ref_count);
if (0 != group->page_dir_ref_count)
{
if (group->session != session)
{
MALI_DEBUG_PRINT(4, ("Mali group: Activating session FAILED: 0x%08x on group 0x%08X. Existing session: 0x%08x\n", session, group, group->session));
return MALI_GROUP_ACTIVATE_PD_STATUS_FAILED;
}
else
{
MALI_DEBUG_PRINT(4, ("Mali group: Activating session already activated: 0x%08x on group 0x%08X. New Ref: %d\n", session, group, 1+group->page_dir_ref_count));
retval = MALI_GROUP_ACTIVATE_PD_STATUS_OK_KEPT_PD;
}
}
else
{
/* There might be another session here, but it is ok to overwrite it since group->page_dir_ref_count==0 */
if (group->session != session)
{
mali_bool activate_success;
MALI_DEBUG_PRINT(5, ("Mali group: Activate session: %08x previous: %08x on group 0x%08X. Ref: %d\n", session, group->session, group, 1+group->page_dir_ref_count));
activate_success = mali_mmu_activate_page_directory(group->mmu, mali_session_get_page_directory(session));
MALI_DEBUG_ASSERT(activate_success);
if ( MALI_FALSE== activate_success ) return MALI_FALSE;
group->session = session;
retval = MALI_GROUP_ACTIVATE_PD_STATUS_OK_SWITCHED_PD;
}
else
{
MALI_DEBUG_PRINT(4, ("Mali group: Activate existing session 0x%08X on group 0x%08X. Ref: %d\n", session->page_directory, group, 1+group->page_dir_ref_count));
retval = MALI_GROUP_ACTIVATE_PD_STATUS_OK_KEPT_PD;
}
}
group->page_dir_ref_count++;
return retval;
}
开发者ID:4yush5663,项目名称:android_kernel_samsung_i9500,代码行数:46,代码来源:mali_group.c
示例8: mali_mmu_zap_tlb
mali_bool mali_mmu_zap_tlb(struct mali_mmu_core *mmu)
{
mali_bool stall_success;
MALI_ASSERT_GROUP_LOCKED(mmu->group);
stall_success = mali_mmu_enable_stall(mmu);
mali_hw_core_register_write(&mmu->hw_core, MALI_MMU_REGISTER_COMMAND, MALI_MMU_COMMAND_ZAP_CACHE);
if (MALI_FALSE == stall_success)
{
/* False means that it is in Pagefault state. Not possible to disable_stall then */
return MALI_FALSE;
}
mali_mmu_disable_stall(mmu);
return MALI_TRUE;
}
开发者ID:32743069,项目名称:amlogic_common_3050,代码行数:18,代码来源:mali_mmu.c
示例9: mali_group_remove_session_if_unused
void mali_group_remove_session_if_unused(struct mali_group *group, struct mali_session_data *session)
{
MALI_ASSERT_GROUP_LOCKED(group);
if (0 == group->page_dir_ref_count)
{
MALI_DEBUG_ASSERT(MALI_GROUP_CORE_STATE_IDLE == group->gp_state);
MALI_DEBUG_ASSERT(MALI_GROUP_CORE_STATE_IDLE == group->pp_state);
if (group->session == session)
{
MALI_DEBUG_ASSERT(MALI_TRUE == group->power_is_on);
MALI_DEBUG_PRINT(3, ("Mali group: Deactivating unused session 0x%08X on group %08X\n", session, group));
mali_mmu_activate_empty_page_directory(group->mmu);
group->session = NULL;
}
}
}
开发者ID:4yush5663,项目名称:android_kernel_samsung_i9500,代码行数:18,代码来源:mali_group.c
示例10: mali_group_bottom_half
/* group lock need to be taken before calling mali_group_bottom_half */
void mali_group_bottom_half(struct mali_group *group, enum mali_group_event_t event)
{
MALI_ASSERT_GROUP_LOCKED(group);
switch (event)
{
case GROUP_EVENT_PP_JOB_COMPLETED:
mali_group_complete_jobs(group, MALI_FALSE, MALI_TRUE, MALI_TRUE); /* PP job SUCCESS */
/* group lock is released by mali_group_complete_jobs() call above */
break;
case GROUP_EVENT_PP_JOB_FAILED:
mali_group_complete_jobs(group, MALI_FALSE, MALI_TRUE, MALI_FALSE); /* PP job FAIL */
/* group lock is released by mali_group_complete_jobs() call above */
break;
case GROUP_EVENT_PP_JOB_TIMED_OUT:
mali_group_complete_jobs(group, MALI_FALSE, MALI_TRUE, MALI_FALSE); /* PP job TIMEOUT */
/* group lock is released by mali_group_complete_jobs() call above */
break;
case GROUP_EVENT_GP_JOB_COMPLETED:
mali_group_complete_jobs(group, MALI_TRUE, MALI_FALSE, MALI_TRUE); /* GP job SUCCESS */
/* group lock is released by mali_group_complete_jobs() call above */
break;
case GROUP_EVENT_GP_JOB_FAILED:
mali_group_complete_jobs(group, MALI_TRUE, MALI_FALSE, MALI_FALSE); /* GP job FAIL */
/* group lock is released by mali_group_complete_jobs() call above */
break;
case GROUP_EVENT_GP_JOB_TIMED_OUT:
mali_group_complete_jobs(group, MALI_TRUE, MALI_FALSE, MALI_FALSE); /* GP job TIMEOUT */
/* group lock is released by mali_group_complete_jobs() call above */
break;
case GROUP_EVENT_GP_OOM:
group->gp_state = MALI_GROUP_CORE_STATE_OOM;
mali_group_unlock(group); /* Nothing to do on the HW side, so just release group lock right away */
mali_gp_scheduler_oom(group, group->gp_running_job);
break;
case GROUP_EVENT_MMU_PAGE_FAULT:
mali_group_complete_jobs(group, MALI_TRUE, MALI_TRUE, MALI_FALSE); /* GP and PP job FAIL */
/* group lock is released by mali_group_complete_jobs() call above */
break;
default:
break;
}
}
开发者ID:4yush5663,项目名称:android_kernel_samsung_i9500,代码行数:44,代码来源:mali_group.c
示例11: mali_mmu_disable_stall
void mali_mmu_disable_stall(struct mali_mmu_core *mmu)
{
const int max_loop_count = 100;
const int delay_in_usecs = 1;
int i;
u32 mmu_status;
/* There are no group when it is called from mali_mmu_create */
if ( mmu->group ) MALI_ASSERT_GROUP_LOCKED(mmu->group);
mmu_status = mali_hw_core_register_read(&mmu->hw_core, MALI_MMU_REGISTER_STATUS);
if ( 0 == (mmu_status & MALI_MMU_STATUS_BIT_PAGING_ENABLED ))
{
MALI_DEBUG_PRINT(3, ("MMU disable skipped since it was not enabled.\n"));
return;
}
if (mmu_status & MALI_MMU_STATUS_BIT_PAGE_FAULT_ACTIVE)
{
MALI_DEBUG_PRINT(2, ("Aborting MMU disable stall request since it is in pagefault state.\n"));
return;
}
mali_hw_core_register_write(&mmu->hw_core, MALI_MMU_REGISTER_COMMAND, MALI_MMU_COMMAND_DISABLE_STALL);
for (i = 0; i < max_loop_count; ++i)
{
u32 status = mali_hw_core_register_read(&mmu->hw_core, MALI_MMU_REGISTER_STATUS);
if ( 0 == (status & MALI_MMU_STATUS_BIT_STALL_ACTIVE) )
{
break;
}
if ( status & MALI_MMU_STATUS_BIT_PAGE_FAULT_ACTIVE )
{
break;
}
if ( 0 == (mmu_status & MALI_MMU_STATUS_BIT_PAGING_ENABLED ))
{
break;
}
_mali_osk_time_ubusydelay(delay_in_usecs);
}
if (max_loop_count == i) MALI_DEBUG_PRINT(1,("Disable stall request failed, MMU status is 0x%08X\n", mali_hw_core_register_read(&mmu->hw_core, MALI_MMU_REGISTER_STATUS)));
}
开发者ID:32743069,项目名称:amlogic_common_3050,代码行数:43,代码来源:mali_mmu.c
示例12: mali_pp_hard_reset
_mali_osk_errcode_t mali_pp_hard_reset(struct mali_pp_core *core)
{
/* Bus must be stopped before calling this function */
const int reset_finished_loop_count = 15;
const u32 reset_invalid_value = 0xC0FFE000;
const u32 reset_check_value = 0xC01A0000;
int i;
MALI_DEBUG_ASSERT_POINTER(core);
MALI_DEBUG_PRINT(2, ("Mali PP: Hard reset of core %s\n", core->hw_core.description));
MALI_ASSERT_GROUP_LOCKED(core->group);
mali_pp_post_process_job(core); /* @@@@?is there some cases where it is unsafe to post process the job here? */
/* Set register to a bogus value. The register will be used to detect when reset is complete */
mali_hw_core_register_write(&core->hw_core, MALI200_REG_ADDR_MGMT_WRITE_BOUNDARY_LOW, reset_invalid_value);
/* Force core to reset */
mali_hw_core_register_write(&core->hw_core, MALI200_REG_ADDR_MGMT_CTRL_MGMT, MALI200_REG_VAL_CTRL_MGMT_FORCE_RESET);
/* Wait for reset to be complete */
for (i = 0; i < reset_finished_loop_count; i++)
{
mali_hw_core_register_write(&core->hw_core, MALI200_REG_ADDR_MGMT_WRITE_BOUNDARY_LOW, reset_check_value);
if (reset_check_value == mali_hw_core_register_read(&core->hw_core, MALI200_REG_ADDR_MGMT_WRITE_BOUNDARY_LOW))
{
break;
}
_mali_osk_time_ubusydelay(10);
}
if (i == reset_finished_loop_count)
{
MALI_PRINT_ERROR(("Mali PP: The hard reset loop didn't work, unable to recover\n"));
}
mali_hw_core_register_write(&core->hw_core, MALI200_REG_ADDR_MGMT_WRITE_BOUNDARY_LOW, 0x00000000); /* set it back to the default */
/* Re-enable interrupts */
mali_hw_core_register_write(&core->hw_core, MALI200_REG_ADDR_MGMT_INT_CLEAR, MALI200_REG_VAL_IRQ_MASK_ALL);
mali_hw_core_register_write(&core->hw_core, MALI200_REG_ADDR_MGMT_INT_MASK, MALI200_REG_VAL_IRQ_MASK_USED);
return _MALI_OSK_ERR_OK;
}
开发者ID:Scorpio92,项目名称:mstar6a918,代码行数:43,代码来源:mali_pp.c
示例13: mali_group_recovery_reset
static void mali_group_recovery_reset(struct mali_group *group)
{
MALI_ASSERT_GROUP_LOCKED(group);
/* Stop cores, bus stop */
if (NULL != group->pp_core)
{
mali_pp_stop_bus(group->pp_core);
}
if (NULL != group->gp_core)
{
mali_gp_stop_bus(group->gp_core);
}
/* Flush MMU */
mali_mmu_activate_fault_flush_page_directory(group->mmu);
mali_mmu_page_fault_done(group->mmu);
/* Wait for cores to stop bus */
if (NULL != group->pp_core)
{
mali_pp_stop_bus_wait(group->pp_core);
}
if (NULL != group->gp_core)
{
mali_gp_stop_bus_wait(group->gp_core);
}
/* Reset cores */
if (NULL != group->pp_core)
{
mali_pp_hard_reset(group->pp_core);
}
if (NULL != group->gp_core)
{
mali_gp_hard_reset(group->gp_core);
}
/* Reset MMU */
mali_mmu_reset(group->mmu);
group->session = NULL;
}
开发者ID:4yush5663,项目名称:android_kernel_samsung_i9500,代码行数:42,代码来源:mali_group.c
示例14: mali_mmu_invalidate_page
void mali_mmu_invalidate_page(struct mali_mmu_core *mmu, u32 mali_address)
{
MALI_ASSERT_GROUP_LOCKED(mmu->group);
mali_hw_core_register_write(&mmu->hw_core, MALI_MMU_REGISTER_ZAP_ONE_LINE, MALI_MMU_PDE_ENTRY(mali_address));
}
开发者ID:32743069,项目名称:amlogic_common_3050,代码行数:5,代码来源:mali_mmu.c
示例15: mali_mmu_zap_tlb_without_stall
void mali_mmu_zap_tlb_without_stall(struct mali_mmu_core *mmu)
{
MALI_ASSERT_GROUP_LOCKED(mmu->group);
mali_hw_core_register_write(&mmu->hw_core, MALI_MMU_REGISTER_COMMAND, MALI_MMU_COMMAND_ZAP_CACHE);
}
开发者ID:32743069,项目名称:amlogic_common_3050,代码行数:5,代码来源:mali_mmu.c
示例16: mali_mmu_page_fault_done
void mali_mmu_page_fault_done(struct mali_mmu_core *mmu)
{
MALI_ASSERT_GROUP_LOCKED(mmu->group);
MALI_DEBUG_PRINT(4, ("Mali MMU: %s: Leaving page fault mode\n", mmu->hw_core.description));
mali_hw_core_register_write(&mmu->hw_core, MALI_MMU_REGISTER_COMMAND, MALI_MMU_COMMAND_PAGE_FAULT_DONE);
}
开发者ID:32743069,项目名称:amlogic_common_3050,代码行数:6,代码来源:mali_mmu.c
示例17: mali_pp_post_process_job
/* ------ local helper functions below --------- */
static void mali_pp_post_process_job(struct mali_pp_core *core)
{
MALI_ASSERT_GROUP_LOCKED(core->group);
if (NULL != core->running_job)
{
u32 val0 = 0;
u32 val1 = 0;
#if MALI_TIMELINE_PROFILING_ENABLED
int counter_index = COUNTER_FP0_C0 + (2 * core->core_id);
#endif
if (MALI_HW_CORE_NO_COUNTER != core->counter_src0_used)
{
val0 = mali_hw_core_register_read(&core->hw_core, MALI200_REG_ADDR_MGMT_PERF_CNT_0_VALUE);
if (mali_pp_job_get_perf_counter_flag(core->running_job) &&
_MALI_PERFORMANCE_COUNTER_FLAG_SRC0_ENABLE && mali_pp_job_get_perf_counter_src0(core->running_job) == core->counter_src0_used)
{
/* We retrieved the counter that user space asked for, so return the value through the job object */
mali_pp_job_set_perf_counter_value0(core->running_job, core->running_sub_job, val0);
}
else
{
/* User space asked for a counter, but this is not what we retrived (overridden by counter src set on core) */
mali_pp_job_set_perf_counter_value0(core->running_job, core->running_sub_job, MALI_HW_CORE_INVALID_VALUE);
}
#if MALI_TIMELINE_PROFILING_ENABLED
_mali_osk_profiling_report_hw_counter(counter_index, val0);
#endif
}
if (MALI_HW_CORE_NO_COUNTER != core->counter_src1_used)
{
val1 = mali_hw_core_register_read(&core->hw_core, MALI200_REG_ADDR_MGMT_PERF_CNT_1_VALUE);
if (mali_pp_job_get_perf_counter_flag(core->running_job) &&
_MALI_PERFORMANCE_COUNTER_FLAG_SRC1_ENABLE && mali_pp_job_get_perf_counter_src1(core->running_job) == core->counter_src1_used)
{
/* We retrieved the counter that user space asked for, so return the value through the job object */
mali_pp_job_set_perf_counter_value1(core->running_job, core->running_sub_job, val1);
}
else
{
/* User space asked for a counter, but this is not what we retrived (overridden by counter src set on core) */
mali_pp_job_set_perf_counter_value1(core->running_job, core->running_sub_job, MALI_HW_CORE_INVALID_VALUE);
}
#if MALI_TIMELINE_PROFILING_ENABLED
_mali_osk_profiling_report_hw_counter(counter_index + 1, val1);
#endif
}
#if MALI_TIMELINE_PROFILING_ENABLED
_mali_osk_profiling_add_event(MALI_PROFILING_EVENT_TYPE_STOP|MALI_PROFILING_MAKE_EVENT_CHANNEL_PP(core->core_id),
val0, val1, core->counter_src0_used | (core->counter_src1_used << 8), 0, 0);
#endif
/* We are no longer running a job... */
core->running_job = NULL;
_mali_osk_timer_del(core->timeout_timer);
}
}
开发者ID:Scorpio92,项目名称:mstar6a918,代码行数:63,代码来源:mali_pp.c
示例18: mali_pp_reset
_mali_osk_errcode_t mali_pp_reset(struct mali_pp_core *core)
{
int i;
const int request_loop_count = 20;
MALI_DEBUG_ASSERT_POINTER(core);
MALI_DEBUG_PRINT(4, ("Mali PP: Reset of core %s\n", core->hw_core.description));
MALI_ASSERT_GROUP_LOCKED(core->group);
mali_pp_post_process_job(core); /* @@@@?is there some cases where it is unsafe to post process the job here? */
mali_hw_core_register_write(&core->hw_core, MALI200_REG_ADDR_MGMT_INT_MASK, 0); /* disable the IRQs */
#if defined(USING_MALI200)
/* On Mali-200, stop the bus, then do a hard reset of the core */
mali_hw_core_register_write(&core->hw_core, MALI200_REG_ADDR_MGMT_CTRL_MGMT, MALI200_REG_VAL_CTRL_MGMT_STOP_BUS);
for (i = 0; i < request_loop_count; i++)
{
if (mali_hw_core_register_read(&core->hw_core, MALI200_REG_ADDR_MGMT_STATUS) & MALI200_REG_VAL_STATUS_BUS_STOPPED)
{
break;
}
_mali_osk_time_ubusydelay(10);
}
if (request_loop_count == i)
{
MALI_PRINT_ERROR(("Mali PP: Failed to stop bus for core %s, unable to recover\n", core->hw_core.description));
return _MALI_OSK_ERR_FAULT ;
}
/* the bus was stopped OK, do the hard reset */
mali_pp_hard_reset(core);
#elif defined(USING_MALI400)
/* Mali-300 and Mali-400 have a safe reset command which we use */
mali_hw_core_register_write(&core->hw_core, MALI200_REG_ADDR_MGMT_INT_CLEAR, MALI400PP_REG_VAL_IRQ_RESET_COMPLETED);
mali_hw_core_register_write(&core->hw_core, MALI200_REG_ADDR_MGMT_CTRL_MGMT, MALI400PP_REG_VAL_CTRL_MGMT_SOFT_RESET);
for (i = 0; i < request_loop_count; i++)
{
if (mali_hw_core_register_read(&core->hw_core, MALI200_REG_ADDR_MGMT_INT_RAWSTAT) & MALI400PP_REG_VAL_IRQ_RESET_COMPLETED)
{
break;
}
_mali_osk_time_ubusydelay(10);
}
if (request_loop_count == i)
{
MALI_DEBUG_PRINT(2, ("Mali PP: Failed to reset core %s, Status: 0x%08x\n", core->hw_core.description, mali_hw_core_register_read(&core->hw_core, MALI200_REG_ADDR_MGMT_STATUS)));
return _MALI_OSK_ERR_FAULT;
}
#else
#error "no supported mali core defined"
#endif
/* Re-enable interrupts */
mali_hw_core_register_write(&core->hw_core, MALI200_REG_ADDR_MGMT_INT_CLEAR, MALI200_REG_VAL_IRQ_MASK_ALL);
mali_hw_core_register_write(&core->hw_core, MALI200_REG_ADDR_MGMT_INT_MASK, MALI200_REG_VAL_IRQ_MASK_USED);
return _MALI_OSK_ERR_OK;
}
开发者ID:Scorpio92,项目名称:mstar6a918,代码行数:69,代码来源:mali_pp.c
示例19: mali_gp_post_process_job
static void mali_gp_post_process_job(struct mali_gp_core *core, mali_bool suspend)
{
MALI_ASSERT_GROUP_LOCKED(core->group);
if (NULL != core->running_job)
{
u32 val0 = 0;
u32 val1 = 0;
#if MALI_TIMELINE_PROFILING_ENABLED
u32 event_id;
#endif
if (MALI_HW_CORE_NO_COUNTER != core->counter_src0_used)
{
val0 = mali_hw_core_register_read(&core->hw_core, MALIGP2_REG_ADDR_MGMT_PERF_CNT_0_VALUE);
if (mali_gp_job_get_perf_counter_flag(core->running_job) &&
_MALI_PERFORMANCE_COUNTER_FLAG_SRC0_ENABLE && mali_gp_job_get_perf_counter_src0(core->running_job) == core->counter_src0_used)
{
/* We retrieved the counter that user space asked for, so return the value through the job object */
mali_gp_job_set_perf_counter_value0(core->running_job, val0);
}
else
{
/* User space asked for a counter, but this is not what we retrived (overridden by counter src set on core) */
mali_gp_job_set_perf_counter_value0(core->running_job, MALI_HW_CORE_INVALID_VALUE);
}
#if MALI_TIMELINE_PROFILING_ENABLED
_mali_osk_profiling_report_hw_counter(COUNTER_VP_C0, val0);
#endif
}
if (MALI_HW_CORE_NO_COUNTER != core->counter_src1_used)
{
val1 = mali_hw_core_register_read(&core->hw_core, MALIGP2_REG_ADDR_MGMT_PERF_CNT_1_VALUE);
if (mali_gp_job_get_perf_counter_flag(core->running_job) &&
_MALI_PERFORMANCE_COUNTER_FLAG_SRC1_ENABLE && mali_gp_job_get_perf_counter_src1(core->running_job) == core->counter_src1_used)
{
/* We retrieved the counter that user space asked for, so return the value through the job object */
mali_gp_job_set_perf_counter_value1(core->running_job, val1);
}
else
{
/* User space asked for a counter, but this is not what we retrieved (overridden by counter src set on core) */
mali_gp_job_set_perf_counter_value1(core->running_job, MALI_HW_CORE_INVALID_VALUE);
}
#if MALI_TIMELINE_PROFILING_ENABLED
_mali_osk_profiling_report_hw_counter(COUNTER_VP_C1, val1);
#endif
}
#if MALI_TIMELINE_PROFILING_ENABLED
if (MALI_TRUE == suspend)
{
event_id = MALI_PROFILING_EVENT_TYPE_SUSPEND|MALI_PROFILING_MAKE_EVENT_CHANNEL_GP(0);
}
else
{
event_id = MALI_PROFILING_EVENT_TYPE_STOP|MALI_PROFILING_MAKE_EVENT_CHANNEL_GP(0);
}
_mali_osk_profiling_add_event(event_id, val0, val1, core->counter_src0_used | (core->counter_src1_used << 8), 0, 0);
#endif
mali_gp_job_set_current_heap_addr(core->running_job,
mali_hw_core_register_read(&core->hw_core, MALIGP2_REG_ADDR_MGMT_PLBU_ALLOC_START_ADDR));
if (MALI_TRUE != suspend)
{
/* We are no longer running a job... */
core->running_job = NULL;
_mali_osk_timer_del(core->timeout_timer);
}
}
}
开发者ID:AndreiLux,项目名称:Perseus-S3,代码行数:76,代码来源:mali_gp.c
示例20: mali_group_complete_jobs
/* Group lock need to be taken before calling mali_group_complete_jobs. Will release the lock here. */
static void mali_group_complete_jobs(struct mali_group *group, mali_bool complete_gp, mali_bool complete_pp, bool success)
{
mali_bool need_group_reset = MALI_FALSE;
mali_bool gp_success = success;
mali_bool pp_success = success;
MALI_ASSERT_GROUP_LOCKED(group);
if (complete_gp && !complete_pp)
{
MALI_DEBUG_ASSERT_POINTER(group->gp_core);
if (_MALI_OSK_ERR_OK == mali_gp_reset(group->gp_core))
{
struct mali_gp_job *gp_job_to_return = group->gp_running_job;
group->gp_state = MALI_GROUP_CORE_STATE_IDLE;
group->gp_running_job = NULL;
MALI_DEBUG_ASSERT_POINTER(gp_job_to_return);
mali_group_deactivate_page_directory(group, mali_gp_job_get_session(gp_job_to_return));
if(mali_group_other_reschedule_needed(group))
{
mali_group_unlock(group);
mali_pp_scheduler_do_schedule();
}
else
{
mali_group_unlock(group);
}
mali_gp_scheduler_job_done(group, gp_job_to_return, gp_success);
mali_pm_core_event(MALI_CORE_EVENT_GP_STOP); /* It is ok to do this after schedule, since START/STOP is simply ++ and -- anyways */
return;
}
else
{
need_group_reset = MALI_TRUE;
MALI_DEBUG_PRINT(3, ("Mali group: Failed to reset GP, need to reset entire group\n"));
pp_success = MALI_FALSE; /* This might kill PP as well, so this should fail */
}
}
if (complete_pp && !complete_gp)
{
MALI_DEBUG_ASSERT_POINTER(group->pp_core);
if (_MALI_OSK_ERR_OK == mali_pp_reset(group->pp_core))
{
struct mali_pp_job *pp_job_to_return = group->pp_running_job;
u32 pp_sub_job_to_return = group->pp_running_sub_job;
group->pp_state = MALI_GROUP_CORE_STATE_IDLE;
group->pp_running_job = NULL;
MALI_DEBUG_ASSERT_POINTER(pp_job_to_return);
mali_group_deactivate_page_directory(group, mali_pp_job_get_session(pp_job_to_return));
if(mali_group_other_reschedule_needed(group))
{
mali_group_unlock(group);
mali_gp_scheduler_do_schedule();
}
else
{
mali_group_unlock(group);
}
mali_pp_scheduler_job_done(group, pp_job_to_return, pp_sub_job_to_return, pp_success);
mali_pm_core_event(MALI_CORE_EVENT_PP_STOP); /* It is ok to do this after schedule, since START/STOP is simply ++ and -- anyways */
return;
}
else
{
need_group_reset = MALI_TRUE;
MALI_DEBUG_PRINT(3, ("Mali group: Failed to reset PP, need to reset entire group\n"));
gp_success = MALI_FALSE; /* This might kill GP as well, so this should fail */
}
}
else if (complete_gp && complete_pp)
{
need_group_reset = MALI_TRUE;
}
if (MALI_TRUE == need_group_reset)
{
struct mali_gp_job *gp_job_to_return = group->gp_running_job;
struct mali_pp_job *pp_job_to_return = group->pp_running_job;
u32 pp_sub_job_to_return = group->pp_running_sub_job;
mali_bool schedule_other = MALI_FALSE;
MALI_DEBUG_PRINT(3, ("Mali group: Resetting entire group\n"));
group->gp_state = MALI_GROUP_CORE_STATE_IDLE;
group->gp_running_job = NULL;
if (NULL != gp_job_to_return)
{
mali_group_deactivate_page_directory(group, mali_gp_job_get_session(gp_job_to_return));
}
//.........这里部分代码省略.........
开发者ID:4yush5663,项目名称:android_kernel_samsung_i9500,代码行数:101,代码来源:mali_group.c
注:本文中的MALI_ASSERT_GROUP_LOCKED函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论