kal_bool jaia_extmem_switch_cachable_region(void **mem_ptr, kal_uint32 size, kal_bool b_cacheable) { #if defined(__DYNAMIC_SWITCH_CACHEABILITY__) kal_bool ret = KAL_FALSE; if ((IS_CACHE_LINE_SIZE_ALIGNED((kal_uint32)(*mem_ptr))) && (IS_CACHE_LINE_SIZE_ALIGNED(size)) && (is_predef_dyna_c_region((kal_uint32)(*mem_ptr), size))) { if(b_cacheable == KAL_TRUE) { if(INT_QueryIsNonCachedRAM((kal_uint32 *)*mem_ptr, size) == KAL_TRUE) { dynamic_switch_cacheable_region((void **)mem_ptr, size, PAGE_CACHEABLE); ret = KAL_TRUE; } } else { if(INT_QueryIsCachedRAM((kal_uint32 *)*mem_ptr, size) == KAL_TRUE) { dynamic_switch_cacheable_region((void **)mem_ptr, size, PAGE_NO_CACHE); ret = KAL_TRUE; } } } return ret; #elif defined(__MTK_L1CACHEABLE__) kal_bool ret = KAL_FALSE; kal_uint32 buffer_size = size; if((buffer_size%CPU_CACHE_LINE_SIZE) != 0) { buffer_size = ((buffer_size+CPU_CACHE_LINE_SIZE-1)/CPU_CACHE_LINE_SIZE)*CPU_CACHE_LINE_SIZE; } if(b_cacheable == KAL_TRUE) { if(INT_QueryIsNonCachedRAM((kal_uint32 *)*mem_ptr, buffer_size) == KAL_TRUE) { dynamic_switch_cacheable_region((kal_uint32)(*mem_ptr), ((kal_uint32)*mem_ptr + buffer_size), buffer_size, PAGE_CACHEABLE); ret = KAL_TRUE; } } else { if(INT_QueryIsCachedRAM((kal_uint32 *)*mem_ptr, buffer_size) == KAL_TRUE) { dynamic_switch_cacheable_region((kal_uint32)(*mem_ptr), ((kal_uint32)*mem_ptr + buffer_size), buffer_size, PAGE_NO_CACHE); ret = KAL_TRUE; } } return ret; #endif }
kal_bool gfxExtMemSwitchCachableRegion(void **mem_ptr, kal_uint32 size, kal_bool b_cacheable) { kal_bool ret_switch = KAL_FALSE; #ifdef __MTK_TARGET__ kal_uint32 buffer_size = size; #if defined(__DYNAMIC_SWITCH_CACHEABILITY__) if (0 != (buffer_size % CPU_CACHE_LINE_SIZE)) { buffer_size = ((buffer_size + CPU_CACHE_LINE_SIZE - 1) / CPU_CACHE_LINE_SIZE) * CPU_CACHE_LINE_SIZE; } if ((IS_CACHE_LINE_SIZE_ALIGNED((kal_uint32)(*mem_ptr))) && (IS_CACHE_LINE_SIZE_ALIGNED(buffer_size)) && (is_predef_dyna_c_region((kal_uint32)(*mem_ptr), size))) { if (KAL_TRUE == b_cacheable) { if(KAL_TRUE == INT_QueryIsNonCachedRAM((kal_uint32 *)*mem_ptr, buffer_size)) { dynamic_switch_cacheable_region(mem_ptr, buffer_size, PAGE_CACHEABLE); ret_switch = KAL_TRUE; } } else { if(KAL_TRUE == INT_QueryIsCachedRAM((kal_uint32 *)*mem_ptr, buffer_size)) { dynamic_switch_cacheable_region(mem_ptr, buffer_size, PAGE_NO_CACHE); ret_switch = KAL_TRUE; } } } #elif defined(__MTK_L1CACHEABLE__) kal_bool is_wt_cache = (kal_bool)(INT_QueryIsWriteThroughCachedRAM(*mem_ptr, buffer_size)); if (KAL_TRUE == is_wt_cache) { if(KAL_TRUE == b_cacheable) { invalidate_wt_cache((kal_uint32)*mem_ptr, buffer_size); } } else { if(KAL_TRUE == b_cacheable) { invalidate_l1cache((kal_uint32)*mem_ptr, buffer_size); } } #endif #endif /* __MTK_TARGET__ */ return ret_switch; }
void h264_intmem_init(void *start_ptr,kal_uint32 length) { kal_uint8 *p_video_addr = (kal_uint8*)start_ptr; kal_uint32 video_length = length; if(INT_QueryIsCachedRAM(start_ptr, length)) { EXT_ASSERT(0, (kal_uint32)start_ptr, length, 0); } ASSERT( (((kal_uint32)p_video_addr&0x03)==0)&&(rH264WorkMem.int_ram_init==KAL_FALSE) ); rH264WorkMem.int_ram_start_ptr = (kal_uint32 *)p_video_addr; rH264WorkMem.int_ram_total_length = video_length; rH264WorkMem.int_ram_index = 0; rH264WorkMem.int_ram_init = KAL_TRUE; }
static int WriteSectors(void * DriveData, DWORD Sector, UINT Sectors, void * Buffer) { SDC_CMD_STATUS status; kal_uint8 retry = 0; kal_uint32 adrs; #ifdef MSDC_CACHED_SUPPORT /*tell buffer type each time this function called*/ if (INT_QueryIsCachedRAM(Buffer, Sectors * SECTOR_SIZE)) { msdc2_handle->isCachedBuf = KAL_TRUE; } else msdc2_handle->isCachedBuf = KAL_FALSE; #endif #if defined(SD_MMC_HIGH_DENSITY_SUPPORT) if(gSD2->flags & SD_FLAG_HCS_SUPPORT) adrs = Sector; else #endif adrs = Sector * SECTOR_SIZE; msdc2_handle->timeout_count = 0; start: if(!msdc2_handle->mIsInitialized) { //dbg_print("Write but not Initialized \r\n"); MSDC_PDNControl2(KAL_TRUE); return FS_MSDC_WRITE_SECTOR_ERROR; } retry++; MSDC_PDNControl2(KAL_FALSE); if(Sectors > 1) { if(msdc2_handle->mMSDC_type == SD_CARD) SD_SetPreEraseBlk_2(Sectors); status = SD_WriteMultiBlock_2((kal_uint32)adrs,(kal_uint32*)Buffer,(kal_uint32)Sectors); } else status = SD_WriteSingleBlock_2((kal_uint32)adrs,(kal_uint32*)Buffer); if(status != NO_ERROR) { sd_w++; if(kal_query_systemInit()== KAL_TRUE) { MSDC_PDNControl2(KAL_TRUE); return FS_MSDC_WRITE_SECTOR_ERROR; } if(status == ERR_CMD_TIMEOUT || status == MSDC_GPT_TIMEOUT_ERR) msdc2_handle->timeout_count++; if(msdc2_handle->timeout_count++ == 3 && msdc2_handle->mIsPresent == KAL_TRUE) { tst_sys_trace("[MSDC]:SD re-mount (write fail)"); msdc2_handle->mIsInitialized = KAL_FALSE; retry = 0; if(SD_Initialize_2() != NO_ERROR) { MSDC_PDNControl2(KAL_TRUE); return FS_MSDC_WRITE_SECTOR_ERROR; } } if(retry >= SD_MAX_RETRY) { MSDC_PDNControl2(KAL_TRUE); return FS_MSDC_WRITE_SECTOR_ERROR; } else { // kal_prompt_trace(MOD_AUD,"CRC write Error retry %d",retry); goto start; } } MSDC_PDNControl2(KAL_TRUE); return FS_NO_ERROR; }