⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 custom_emi.c

📁 MTK debug flash 兼容性的code
💻 C
📖 第 1 页 / 共 2 页
字号:
	{{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 + -