void mali_mmu_delete(struct mali_mmu_core *mmu) { mali_mmu_raw_reset(mmu); _mali_osk_irq_term(mmu->irq); mali_hw_core_delete(&mmu->hw_core); _mali_osk_free(mmu); }
_mali_osk_errcode_t mali_mmu_reset(struct mali_mmu_core *mmu) { _mali_osk_errcode_t err = _MALI_OSK_ERR_FAULT; mali_bool stall_success; MALI_DEBUG_ASSERT_POINTER(mmu); /* The _if_ is neccessary when called from mali_mmu_create and NULL==group */ if (mmu->group) { MALI_ASSERT_GROUP_LOCKED(mmu->group); } stall_success = mali_mmu_enable_stall(mmu); /* The stall can not fail in current hw-state */ MALI_DEBUG_ASSERT(stall_success); MALI_DEBUG_PRINT(3, ("Mali MMU: mali_kernel_mmu_reset: %s\n", mmu->hw_core.description)); if (_MALI_OSK_ERR_OK == mali_mmu_raw_reset(mmu)) { mali_hw_core_register_write(&mmu->hw_core, MALI_MMU_REGISTER_INT_MASK, MALI_MMU_INTERRUPT_PAGE_FAULT | MALI_MMU_INTERRUPT_READ_BUS_ERROR); /* no session is active, so just activate the empty page directory */ mali_hw_core_register_write(&mmu->hw_core, MALI_MMU_REGISTER_DTE_ADDR, mali_empty_page_directory); mali_mmu_enable_paging(mmu); err = _MALI_OSK_ERR_OK; } mali_mmu_disable_stall(mmu); return err; }
_mali_osk_errcode_t mali_mmu_reset(struct mali_mmu_core *mmu) { _mali_osk_errcode_t err = _MALI_OSK_ERR_FAULT; mali_bool stall_success; MALI_DEBUG_ASSERT_POINTER(mmu); stall_success = mali_mmu_enable_stall(mmu); if (!stall_success) { err = _MALI_OSK_ERR_BUSY; } MALI_DEBUG_PRINT(3, ("Mali MMU: mali_kernel_mmu_reset: %s\n", mmu->hw_core.description)); if (_MALI_OSK_ERR_OK == mali_mmu_raw_reset(mmu)) { mali_hw_core_register_write(&mmu->hw_core, MALI_MMU_REGISTER_INT_MASK, MALI_MMU_INTERRUPT_PAGE_FAULT | MALI_MMU_INTERRUPT_READ_BUS_ERROR); /* no session is active, so just activate the empty page directory */ mali_hw_core_register_write(&mmu->hw_core, MALI_MMU_REGISTER_DTE_ADDR, mali_empty_page_directory); mali_mmu_enable_paging(mmu); err = _MALI_OSK_ERR_OK; } mali_mmu_disable_stall(mmu); return err; }