📄 bbu_dd_post.c
字号:
/*******************************************************************************
* COPYRIGHT (C) 中国普天研究院 *
********************************************************************************
* 源文件名: BBU_DD_Post.c *
* 功能描述:POST Testing Operation Module *
* 编写者:louyajun *
* 版本:1.0.0 *
* 编制日期:07/19/2004 *
* 说明: *
* 修改历史: *
* *
*******************************************************************************/
#include "BBU_DD_ChipCsl.h"
#include "BBU_DD_IrqCsl.h"
#include "BBU_DD_EdmaCsl.h"
#include "BBU_DD_McbspCsl.h"
#include "BBU_DD_EmifaCsl.h"
#include "BBU_DD_GpioCsl.h"
#include "BBU_DD_HpiCsl.h"
#include "BBU_DD_Post.h"
#if 1
#include "stdio.h"
#endif
/******************************************************************************\
* POST Static Global Variable Definitions
\******************************************************************************/
/* Static Global structure for MPC8260 Ack to DSP by HPI */
#pragma DATA_SECTION(mpc8260Ack,".gvariable");
static HOST_Ack mpc8260Ack = {0,0xFFFFFFFF};
/* Static Global log structure for HPI to MPC8260 */
#pragma DATA_SECTION(postTestResult,".gvariable");
static POST_Log postTestResult = {11,0,0,0,0,0,0,0,0,0,0,(Uint32)&mpc8260Ack};
/* Static Global Buffer for McBSP */
#pragma DATA_SECTION(mcbspTxBuf,".gvariable");
static Uint32 mcbspTxBuf[MCBSP_PORT_CNT][MCBSP_TX_BUFFER_SIZE];
#pragma DATA_SECTION(mcbspRxBuf,".gvariable");
static Uint32 mcbspRxBuf[MCBSP_PORT_CNT][MCBSP_TX_BUFFER_SIZE];
#pragma DATA_SECTION(mcbspRxBufPing,".gvariable");
static Uint32 mcbspRxBufPing[MCBSP_PORT_CNT][MCBSP_RX_BUFFER_SIZE];
#pragma DATA_SECTION(mcbspRxBufPong,".gvariable");
static Uint32 mcbspRxBufPong[MCBSP_PORT_CNT][MCBSP_RX_BUFFER_SIZE];
/* Static Global Buffer for L2MEM test */
#pragma DATA_SECTION(ResBuf,".ressec");
static Uint32 ResBuf[L2MEM_RESERVE_SIZE>>2];
/* Used by Core testing */
#pragma DATA_SECTION(CSR1,".gvariable");
Uint32 CSR1;
#pragma DATA_SECTION(CSR2,".gvariable");
Uint32 CSR2;
/*----------------------------------------------------------------------------*/
/******************************************************************************\
* External Variable Definitions
\******************************************************************************/
CSLAPI Uint32 mcbspTxIntFlag;
CSLAPI Uint32 mcbspRxIntFlag;
CSLAPI Uint32 timerIntCount[TIMER_DEVICE_CNT];
CSLAPI Uint32 emifaSdramIntFlag;
CSLAPI Uint32 emifaDpramIntFlag;
CSLAPI Uint32 gpio5msFrameIntCount;
CSLAPI Uint32 gpio10msSlotReadyCount;
CSLAPI Uint32 hpiDspIntFlag;
CSLAPI EDMA_Handle edmaMcbspXHandle[MCBSP_PORT_CNT];
CSLAPI EDMA_Handle edmaMcbspRHandle[MCBSP_PORT_CNT];
CSLAPI EDMA_Handle edmaMcbspRLHandle1[MCBSP_PORT_CNT];
CSLAPI EDMA_Handle edmaMcbspRLHandle2[MCBSP_PORT_CNT];
CSLAPI EDMA_Handle edmaEmifaWDpramHandle,edmaEmifaRDpramHandle;
CSLAPI EDMA_Handle edmaEmifaWDpramCHandle1,edmaEmifaWDpramCHandle2;
CSLAPI EDMA_Handle edmaEmifaRDpramCHandle1,edmaEmifaRDpramCHandle2;
CSLAPI EDMA_Handle edmaEmifaWSdramHandle,edmaEmifaRSdramHandle;
/* GPIO Handle and GPIO LED pin mask */
CSLAPI GPIO_Handle *hCpbGpio;
CSLAPI Uint32 led1PinMask;
CSLAPI Uint32 led2PinMask;
CSLAPI Uint32 led3PinMask;
CSLAPI Uint32 led4PinMask;
/*----------------------------------------------------------------------------*/
/******************************************************************************\
* POST Function Declarations
\******************************************************************************/
CSLAPI Sint32 POST_coreTest(void);
CSLAPI Sint32 POST_gpioTest(void);
CSLAPI Sint32 POST_l2memTest(void);
CSLAPI Sint32 POST_emifaDpramTest(void);
CSLAPI Sint32 POST_emifaSdramTest(void);
CSLAPI void POST_blockBitR(Uint32 *buffer, Uint32 bufLength);
CSLAPI Sint32 POST_blockTest(Uint32 *buffer1, Uint32 *buffer2, Uint32 bufLength, Uint32 *memErrPosition);
CSLAPI Sint32 POST_mcbspTest(Sint32 portNum);
CSLAPI Sint32 POST_timerTest(Sint32 timerNum);
CSLAPI Sint32 POST_5msFrameTest(void);
CSLAPI Sint32 POST_10msSlotReadyTest(void);
CSLAPI void POST_errorHandle(void);
CSLAPI Sint32 POST_hpiReport(void);
/******************************************************************************\
* POST Function Definitions
\******************************************************************************/
/*******************************************************************************
* 函数名称: POST_coreTest *
* 函数描述: Test the Chip's variable Instructions and chip versions *
* 相关文档: *
* 参数描述: 无 *
* *
* 返回值: 0 -- POST_OK, -1 -- POST_ERROR *
* 说明: *
*******************************************************************************/
CSLAPI Sint32 POST_coreTest(void)
{
Uint32 cpuId,revId,siliconRevId,deviceType,endianMode;
Uint32 errCode;
cpuId = CHIP_getCpuId();
postTestResult.cpuId = cpuId;
if(cpuId != CHIP_CSR_CPUID_C64X)
{
postTestResult.errorCode = POST_CHIP_CPUID_ERROR;
return POST_ERROR;
}
revId = CHIP_getRevId();
postTestResult.revId = revId;
if(revId != CHIP_CSR_REVID_640011)
{
postTestResult.errorCode = POST_CHIP_REVID_ERROR;
return POST_ERROR;
}
siliconRevId = CHIP_getSiliconRevId();
postTestResult.siliconRevId = siliconRevId;
if((siliconRevId != DEVICE_REVID_110) && (siliconRevId != DEVICE_REVID_200))
{
postTestResult.errorCode = POST_CHIP_SILICONREVID_ERROR;
return POST_ERROR;
}
deviceType = CHIP_getDeviceType();
postTestResult.deviceType = deviceType;
if((deviceType != DEVICE_TYPE_6416) && (deviceType != DEVICE_TYPE_6414))
{
postTestResult.errorCode = POST_CHIP_DEVICETYPE_ERROR;
return POST_ERROR;
}
endianMode = CHIP_getEndian();
postTestResult.endianMode = endianMode;
if(endianMode != CHIP_ENDIAN_BIG)
{
postTestResult.errorCode = POST_CHIP_ENDIANMODE_ERROR;
return POST_ERROR;
}
CSR1=(cpuId<<24)|(revId<<16)|(endianMode<<8); //SAT=0 in CSR;
CSR2=CSR1|(0x00000200); //SAT=1 IN CSR
errCode = Inst_Test();
if(errCode != 0)
{
postTestResult.errorCode = POST_CHIP_CORE_ERROR + errCode;
return POST_ERROR;
}
return POST_OK;
}
/*----------------------------------------------------------------------------*/
/*******************************************************************************
* 函数名称: POST_gpioTest *
* 函数描述: GPIO Port Test *
* 相关文档: *
* 参数描述: 无 *
* *
* 返回值: 0 -- POST_OK, -1 -- POST_ERROR *
* 说明: *
*******************************************************************************/
CSLAPI Sint32 POST_gpioTest(void)
{
Uint32 dspId;
/* initilizing the GPIO device */
hCpbGpio = (GPIO_Handle *)GPIO_init();
if (hCpbGpio == GPIO_HINV)
{
postTestResult.errorCode = POST_GPIO_INIT_ERROR;
return POST_ERROR;
}
/* get DSP ID */
dspId = GPIO_getDspId(hCpbGpio);
postTestResult.dspId = dspId;
if((dspId != CCDSP_ID) && (dspId != RXDSP1_ID) && (dspId != RXDSP2_ID) && \
(dspId != RXDSP3_ID) && (dspId != SCDSP_ID) && (dspId != TXDSP_ID))
{
postTestResult.errorCode = POST_GPIO_DSPID_ERROR;
return POST_ERROR;
}
/* ligh on DSP's led */
switch (dspId)
{
case CCDSP_ID: led1PinMask = CCDSP_HL12;
led2PinMask = CCDSP_HL13;
led3PinMask = CCDSP_HL14;
led4PinMask = CCDSP_HL15;
break;
case RXDSP1_ID: led1PinMask = RXDSP1_HL20;
led2PinMask = RXDSP1_HL21;
led3PinMask = RXDSP1_HL22;
led4PinMask = RXDSP1_HL23;
break;
case RXDSP2_ID: led1PinMask = RXDSP2_HL28;
led2PinMask = RXDSP2_HL29;
led3PinMask = RXDSP2_HL30;
led4PinMask = RXDSP2_HL31;
break;
case RXDSP3_ID: led1PinMask = RXDSP3_HL24;
led2PinMask = RXDSP3_HL25;
led3PinMask = RXDSP3_HL26;
led4PinMask = RXDSP3_HL27;
break;
case SCDSP_ID: led1PinMask = SCDSP_HL16;
led2PinMask = SCDSP_HL17;
led3PinMask = SCDSP_HL18;
led4PinMask = SCDSP_HL19;
break;
case TXDSP_ID: led1PinMask = TXDSP_HL8;
led2PinMask = TXDSP_HL9;
led3PinMask = TXDSP_HL10;
led4PinMask = TXDSP_HL11;
break;
}
GPIO_setLedOn(hCpbGpio,led1PinMask | led2PinMask | led3PinMask | led4PinMask);
/* set DSP Ready signal */
GPIO_setDspReady(hCpbGpio,DSP_READY);
return POST_OK;
}
/*----------------------------------------------------------------------------*/
/*******************************************************************************
* 函数名称: POST_l2memTest *
* 函数描述: L2 SRAM memory Test *
* 相关文档: *
* 参数描述: 无 *
* *
* 返回值: 0 -- POST_OK, -1 -- POST_ERROR *
* 说明: *
*******************************************************************************/
CSLAPI Sint32 POST_l2memTest(void)
{
EDMA_ParaConfig qdmaConfig;
Uint32 *blockPointer;
Uint32 l2memErrPosition;
Uint32 i;
/* Test memory reserved block */
POST_blockBitR(ResBuf,(Uint32)L2MEM_RESERVE_SIZE);
if (POST_blockTest(ResBuf, ResBuf, (Uint32)L2MEM_RESERVE_SIZE, \
(Uint32*)&l2memErrPosition)== POST_ERROR)
{
postTestResult.errorCode = POST_L2MEM_ERR;
postTestResult.l2memPosition = l2memErrPosition;
return POST_ERROR;
}
POST_blockBitR((Uint32*)L2MEM_BITR_BLOCK_ADD, (Uint32)L2MEM_BLOCK_SIZE);
EDMA_intDisable(EDMA_TCC_QDMA);
/* Test memory data block */
qdmaConfig.opt = 0x213F6001; /* EDMA_TCC_QDMA is 63 */
qdmaConfig.idx = 0;
qdmaConfig.rld = 0;
blockPointer = (Uint32*)L2MEM_TEST_START_ADD;
for (i=0;i<L2MEM_MAX_BLOCK_NUM;i++)
{
/* Read data from data mem block to backup block */
qdmaConfig.src = (Uint32)blockPointer;
qdmaConfig.dst = (Uint32)L2MEM_BACKUP_BLOCK_ADD;
qdmaConfig.cnt = (Uint32)(L2MEM_BLOCK_SIZE >> 2);
QDMA_config(qdmaConfig);
while (EDMA_intStatus(EDMA_TCC_QDMA) == 0);
EDMA_intClear(EDMA_TCC_QDMA);
/* Write bit reserve block to data mem block */
qdmaConfig.src = (Uint32)L2MEM_BITR_BLOCK_ADD;
qdmaConfig.dst = (Uint32)blockPointer;
qdmaConfig.cnt = (Uint32)(L2MEM_BLOCK_SIZE >> 2);
QDMA_config(qdmaConfig);
while (EDMA_intStatus(EDMA_TCC_QDMA) == 0);
EDMA_intClear(EDMA_TCC_QDMA);
/* Read data from data mem block to image block */
qdmaConfig.src = (Uint32)blockPointer;
qdmaConfig.dst = (Uint32)L2MEM_IMAGE_BLOCK_ADD;
qdmaConfig.cnt = (Uint32)(L2MEM_BLOCK_SIZE >> 2);
QDMA_config(qdmaConfig);
while (EDMA_intStatus(EDMA_TCC_QDMA) == 0);
EDMA_intClear(EDMA_TCC_QDMA);
/* write backup data to data mem block */
qdmaConfig.src = (Uint32)L2MEM_BACKUP_BLOCK_ADD;
qdmaConfig.dst = (Uint32)blockPointer;
qdmaConfig.cnt = (Uint32)(L2MEM_BLOCK_SIZE >> 2);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -