📄 custom_emi.c
字号:
{{0x00ec,0x257e,0x2508,0x2501},0x00800000,0x40514648, 0x40514808},//K5L2763CAM
{{0x0001,0x227e,0x2220,0x2200},0x00400000,0x40514648, 0x40514808},//71PL127NBOHFW4U checked
{{0x00ec,0x257e,0x2508,0x2501},0x00400000,0x40514648, 0x40514808}//K5L2731CAA
};
#if (defined(MT6225) || defined(MT6227D) || defined(MT6226D) || defined(MT6223) || defined(MT6223P)) && !defined(ADMUX_MCP)
*(volatile kal_uint32 *)(0x80010078) = 0;
#endif
//start caculate the ext_sram size
tmp0=*(volatile kal_uint32 *)EXTRAM_0MADDR;
tmp1=*(volatile kal_uint32 *)EXTRAM_32MADDR;//save the 0and 32M adress data
*(volatile kal_uint32 *)EXTRAM_32MADDR=TEST_MEMORY+1;
*(volatile kal_uint32 *)EXTRAM_0MADDR=TEST_MEMORY;
if((*(volatile kal_uint32 *)EXTRAM_32MADDR==TEST_MEMORY)&&(*(volatile kal_uint32 *)EXTRAM_0MADDR==TEST_MEMORY))
EXTSRAM_SIZE=0x00400000;
else
EXTSRAM_SIZE=0x00800000;
*(volatile kal_uint32 *)EXTRAM_0MADDR=tmp0;
*(volatile kal_uint32 *)EXTRAM_32MADDR=tmp1;//caculate the extram_size END
Manufacture_code=*(volatile kal_uint16*)MANUFACTURE_ID_ADDR;
Dev_code=*(volatile kal_uint16*)DEV_ID_ADDR;
Ext_dev_code1=*(volatile kal_uint16*)EXT_DEV1_ID_ADDR;
Ext_dev_code2=*(volatile kal_uint16*)EXT_DEV2_ID_ADDR;
for(i=0;i<MCP_NUMBERS;i++)//look up table
{
if((timing_table[i].id_code.manufacture_code==Manufacture_code)&&(timing_table[i].id_code.dev_code==Dev_code)
&&(timing_table[i].id_code.ext_dev_code1==Ext_dev_code1)
&&(timing_table[i].id_code.ext_dev_code2==Ext_dev_code2)
)
{
flash_found=KAL_TRUE;
break;
}
}
ASSERT(flash_found);
*(volatile kal_uint32 *)EMI_LOCATION_ADDR=i;//save the founded number in table for debug and get fat information
if ( EMI_CSConfiguration[0] != UNUSED )
*(EMI_CONA) = timing_table[i].CS0_SETTING;
if ( EMI_CSConfiguration[1] != UNUSED )
*(EMI_CONB) = timing_table[i].CS1_SETTING;
if ( EMI_CSConfiguration[2] != UNUSED )
*(EMI_CONC) = EMI_SettingOnCS[2];
if ( EMI_CSConfiguration[3] != UNUSED )
*(EMI_COND) = EMI_SettingOnCS[3];
/* Setting EMI general control register and cache/prefetch size if necessary */
#if ( defined(MT6228) || defined(MT6229) || defined(MT6230) || defined(MT6225) || defined(MT6268T) )
*EMI_GENA = EMI_GENERAL_CONTROL_0;
*EMI_GENB = EMI_GENERAL_CONTROL_1;
#if ( defined(MT6229) || defined(MT6230) || defined(MT6268T) )
*EMI_GENC = EMI_GENERAL_CONTROL_2;
#endif /* MT6229, MT6230, MT6268T */
#elif ( defined(MT6205B) || defined(MT6208) )
*EMI_GEN = EMI_GENERAL_CONTROL;
#else
*EMI_GEN = EMI_GENERAL_CONTROL;
*PREFETCH_CON = EMI_CACHE_PREFETCH;
#endif
return 0;
}
void GetmemoryInformation()
{
//start caculate ext_sram_size
kal_uint32 tmp0,tmp1;
tmp0=*(volatile kal_uint32 *)EXTRAM_0MADDR;
tmp1=*(volatile kal_uint32 *)EXTRAM_32MADDR;//save the 0and 32M adress data
*(volatile kal_uint32 *)EXTRAM_32MADDR=TEST_MEMORY+1;
*(volatile kal_uint32 *)EXTRAM_0MADDR=TEST_MEMORY;
if((*(volatile kal_uint32 *)EXTRAM_32MADDR==TEST_MEMORY)&&(*(volatile kal_uint32 *)EXTRAM_0MADDR==TEST_MEMORY))
EMI_EXTSRAM_SIZE=0x00400000;
else
EMI_EXTSRAM_SIZE=0x00800000;
*(volatile kal_uint32 *)EXTRAM_0MADDR=tmp0;
*(volatile kal_uint32 *)EXTRAM_32MADDR=tmp1;
gFatsize=flash_info_table[*(volatile kal_uint32 *)EMI_LOCATION_ADDR].Fat_size;
gfat_base_addr=flash_info_table[*(volatile kal_uint32 *)EMI_LOCATION_ADDR].Fatbase_addr;
#if ( defined(__FS_SYSDRV_ON_NAND__) || defined( _NAND_FLASH_BOOTING_) )
/* System Drive on NAND-flash */
kal_uint32 NFB_BASE_ADDRESS = gfat_base_addr;
kal_uint32 NFB_ALLOCATED_FAT_SPACE = gFatsize;
#endif
return;
}
/*************************************************************************
* FUNCTION
* custom_InitDRAM()
*
* DESCRIPTION
* This routine aims to set EMI and initialize LPSDRAM
*
* PARAMETERS
*
* RETURNS
* None
*
* GLOBALS AFFECTED
*
*************************************************************************/
kal_int8 custom_InitDRAM(void)
{
return -1;
}
#ifndef __FUE__
#ifdef __MTK_TARGET__
#pragma arm section code = "INTERNCODE"
#endif /* __MTK_TARGET__ */
/*************************************************************************
* FUNCTION
* custom_setAdvEMI()
*
* DESCRIPTION
* This routine aims to set additional EMI
* This is special for device which needs to set device configuration
* register to turn-on special mode.
*
* PARAMETERS
*
* RETURNS
* 1:
*
* GLOBALS AFFECTED
*
*************************************************************************/
kal_int8 custom_setAdvEMI(void)
{
kal_int8 status = 0;
return status;
}
#ifdef __MTK_TARGET__
#pragma arm section code
#endif /* __MTK_TARGET__ */
/*************************************************************************
* FUNCTION
* custom_get_EXTSRAM_size()
*
* DESCRIPTION
* Return predefined external SRAM size.
*
* PARAMETERS
*
* RETURNS
* None
*
* GLOBALS AFFECTED
*
*************************************************************************/
void
custom_get_EXTSRAM_size(kal_uint32 *size)
{
*size = (kal_uint32)EMI_EXTSRAM_SIZE;
}
/*************************************************************************
* FUNCTION
* custom_ifLPSDRAM()
*
* DESCRIPTION
* Query if the memory device is LPSDRAM
*
* PARAMETERS
*
* RETURNS
* KAL_TRUE: The memory device is LPSDRAM
* KAL_FALSE: The memory device is not LPSDRAM
*
* GLOBALS AFFECTED
*
*************************************************************************/
kal_bool
custom_ifLPSDRAM(void)
{
#if defined(DRAM_CS) && defined(DRAM_SIZE)
return KAL_TRUE;
#else
return KAL_FALSE;
#endif
}
/*************************************************************************
* FUNCTION
* custom_get_NORFLASH_ROMSpace()
*
* DESCRIPTION
* Query the of space configured for NORFLASH ROM
*
* PARAMETERS
*
* RETURNS
* BASE ADDRESS
*
* GLOBALS AFFECTED
*
*************************************************************************/
kal_uint32
custom_get_NORFLASH_ROMSpace(void)
{
#if defined(_NAND_FLASH_BOOTING_)
return 0;
#elif defined(__FS_SYSDRV_ON_NAND__)
return gfat_base_addr + gFatsize;
#else
return gfat_base_addr;
#endif
}
/*************************************************************************
* FUNCTION
* Initialize_FDD_tables
*
* DESCRIPTION
* Initialize important information for NOR-flash disk
*
* PARAMETERS
*
* RETURNS
* None
*
* GLOBALS AFFECTED
*
*************************************************************************/
#if defined(__SINGLE_BANK_NOR_FLASH_SUPPORT__)
extern kal_uint32 NOR_Flash_Base_Address;
#if defined(MT6205B)
extern NOR_AddrLookup addr_lookup_tbl[][];
#endif
#endif /* __SINGLE_BANK_NOR_FLASH_SUPPORT__ */
#ifndef __NOR_FDM5__
void Initialize_FDD_tables(void)
{
kal_uint8 i,flash_drv_flag;
kal_bool mcp_found=KAL_FALSE;
for(i=0;i<MCP_NUMBERS;i++)
{
if((flash_info_table[i].id_code.manufacture_code==gManufacture_code)
&&(flash_info_table[i].id_code.dev_code==gDev_code)
&&(flash_info_table[i].id_code.ext_dev_code1==gExt_dev_code1)
&&(flash_info_table[i].id_code.ext_dev_code2==gExt_dev_code2)
&&(flash_info_table[i].Extsram_size==EMI_EXTSRAM_SIZE))
{
mcp_found=KAL_TRUE;
break;
}
}
ASSERT(mcp_found);
drv_dbg=i;
gFatsize=flash_info_table[i].Fat_size;
PAGE_BUFFER_SIZE=flash_info_table[i].page_buffer_size;
flash_drv_flag=(kal_uint8)flash_info_table[i].flash_series;
drvier_config(flash_drv_flag,PAGE_BUFFER_SIZE);//config driver
#if ( !defined(__FS_SYSDRV_ON_NAND__) && !defined( _NAND_FLASH_BOOTING_) )
/* Initialize MTD data table */
mtdflash.Signature = ~((kal_uint32)(flash_info_table[i].region_infor));
#ifdef __MTK_TARGET__
#if defined(__SINGLE_BANK_NOR_FLASH_SUPPORT__)
NOR_Flash_Base_Address =INT_RetrieveFlashBaseAddr();
#endif /* __SINGLE_BANK_NOR_FLASH_SUPPORT__ */
mtdflash.BaseAddr = (BYTE *)(INT_RetrieveFlashBaseAddr() + flash_info_table[i].Fatbase_addr);
#endif /* __MTK_TARGET__ */
mtdflash.RegionInfo = (FlashRegionInfo *)(flash_info_table[i].region_infor);
#if defined(__SINGLE_BANK_NOR_FLASH_SUPPORT__) && defined(__MULTI_BANK_NOR_DEVICE__)
mtdflash.BankInfo = (FlashBankInfo*)flash_info_table[i].bank_infor;
#endif
/* Initialize FDD data table */
FlashDriveData.MTDDriver = &NORFlashMtd;
FlashDriveData.MTDData = &mtdflash;
FlashDriveData.AvailSectorsInBlock = AVAILSECTORS;
FlashDriveData.ValidSectorsInBlock = VALIDSECTORS;
FlashDriveData.SectorMap = (BYTE*)SectorMap;
FlashDriveData.PartitionSectors = PARTITION_SECTORS;
FlashDriveData.Buffer = FDMBuffer;
#if defined(__SINGLE_BANK_NOR_FLASH_SUPPORT__)
FlashDriveData.queueSize = SNOR_ERASE_QUEUE_SIZE;
FlashDriveData.EraseQueue = EraseBlockQueue;
/* align page buffer size for iteration */
#if defined(__PAGE_BUFFER_PROGRAM__)
PAGE_BUFFER_SIZE = 0;
#endif /* __PAGE_BUFFER_PROGRAM__ */
/* initialize address look up table */
#if defined(MT6205B)
memset(addr_lookup_tbl, 0xFF, sizeof(NOR_AddrLookup)*LOOKUP_TABLE_SIZE*2);
#else /* MT6205B */
memset(mtdflash.lookup_tbl, 0xFF, sizeof(NOR_AddrLookup)*LOOKUP_TABLE_SIZE*2);
#endif /* MT6205B */
#endif /* __SINGLE_BANK_NOR_FLASH_SUPPORT__ */
#endif /* !__FS_SYSDRV_ON_NAND__ && !_NAND_FLASH_BOOTING_ */
}
#endif /*__NOR_FDM5__*/
void nor_sweep_device(void)
{
#ifdef __NOR_FDM5__
kal_set_eg_events(nor_egid, NOR_DMAN_EVENT, KAL_OR);
#endif
return;
}
void nor_manual_reclaim(void)
{
#ifdef __NOR_FDM5__
kal_set_eg_events(nor_egid, NOR_BRECL_EVENT, KAL_OR);
#endif
return;
}
#endif /*__FUE__*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -