Beispiel #1
0
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
}
Beispiel #2
0
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;
}