BSP_VOID DRV_SOCP_ENABLE_LTE_BBP_DSP(BSP_U32 ulChanId) { if(0==(SOCP_REG_GETBITS(SOCP_REG_ENCSRC_BUFCFG1(ulChanId), 0, 1))) { SOCP_REG_SETBITS(SOCP_REG_ENCSRC_BUFCFG1(ulChanId), 0, 1, 1); } }
/***************************************************************************** * 函 数 名 : DRV_SOCP_DSPCHN_STOP * 功能描述 : disable DSP channel * 输入参数 : * 输出参数 : 无 * 返 回 值 : *****************************************************************************/ BSP_VOID DRV_SOCP_DSPCHN_STOP(BSP_VOID) { VOS_UINT32 IdleFlag; VOS_UINT32 j; if(SOCP_REG_GETBITS(SOCP_REG_ENCSRC_BUFCFG1(SOCP_DSPLOG_CHN), 0, 1)) { SOCP_REG_SETBITS(SOCP_REG_ENCSRC_BUFCFG1(SOCP_DSPLOG_CHN), 0, 1, 0); } /*lint -e525 -e746*/ for (j = 0; j < (SOCP_RESET_TIME*2); j++) { IdleFlag = SOCP_REG_GETBITS(SOCP_REG_ENCSTAT, SOCP_DSPLOG_CHN, 1); if (0 == IdleFlag) { break; } if ((SOCP_RESET_TIME - 1) == j) { vos_printf("bsp_socp_stop_dsp failed!\n"); return ; } } /*lint +e525 +e746*/ }
/***************************************************************************** * 函 数 名 : DRV_SOCP_DSPCHN_START * 功能描述 : enable DSP channel * 输入参数 : * 输出参数 : 无 * 返 回 值 : *****************************************************************************/ BSP_VOID DRV_SOCP_DSPCHN_START(BSP_VOID) { if(0==(SOCP_REG_GETBITS(SOCP_REG_ENCSRC_BUFCFG1(SOCP_DSPLOG_CHN), 0, 1))) { SOCP_REG_SETBITS(SOCP_REG_ENCSRC_BUFCFG1(SOCP_DSPLOG_CHN), 0, 1, 1); } }
/***************************************************************************** * 函 数 名 : bsp_socp_enable * * 功能描述 : 使能socp 通道,仅针对M3 上的两个通道 * * 输入参数 : * * 输出参数 : * * 返 回 值 : 操作完成与否的标识码 *****************************************************************************/ void bsp_socp_enable(u32 u32SrcChanId) { /**/ if((u32SrcChanId != SOCP_ENCSRC_LPM3_BASE) && (u32SrcChanId != SOCP_ENCSRC_IOM3_BASE)) { printk("socp_enable:wrong chan id %d\n",u32SrcChanId); return ; } if(!SOCP_REG_GETBITS(SOCP_REG_ENCSRC_BUFCFG1(u32SrcChanId), 0, 1)) { SOCP_REG_SETBITS(SOCP_REG_ENCSRC_BUFCFG1(u32SrcChanId), 0, 1, 1); } }
/***************************************************************************** * 函 数 名 : bsp_socp_backup_end * * 功能描述 : RSRACC 方式备份寄存器后的检查工作 * * 返 回 值 : 0 成功 * -1 失败 *****************************************************************************/ void bsp_socp_backup_end(rsr_acc_description *bd_descri) { u32 i = 0; for(i=0;i<SOCP_MAX_ENCSRC_CHN;i++) { SOCP_REG_SETBITS (SOCP_REG_ENCSRC_BUFCFG1(i), 0, 1, 0); } for(i=0;i<(SOCP_MAX_DECSRC_CHN);i++) { SOCP_REG_SETBITS (SOCP_REG_DECSRC_BUFCFG0(i), 30, 1,0); } return ; }
/***************************************************************************** * 函 数 名 : DRV_SOCP_INIT_LTE_BBP_DS * * 功能描述 : LTE BBP通道初始化函数 * * 输入参数 : 无 * * 输出参数 : 无 * * 返 回 值 : 释放成功与否的标识码 *****************************************************************************/ BSP_U32 DRV_SOCP_INIT_LTE_BBP_DS(BSP_U32 ulChanId,BSP_U32 ulPhyAddr,BSP_U32 ulSize) { SOCP_ENCSRC_FIXCHAN_S * pChan; SOCP_REG_WRITE(SOCP_REG_ENCSRC_BUFADDR(ulChanId),ulPhyAddr); SOCP_REG_WRITE(SOCP_REG_ENCSRC_BUFWPTR(ulChanId),ulPhyAddr); SOCP_REG_WRITE(SOCP_REG_ENCSRC_BUFRPTR(ulChanId),ulPhyAddr); /*配置SOCP 参数*/ SOCP_REG_SETBITS(SOCP_REG_ENCSRC_BUFCFG0(ulChanId), 0, 27, ulSize); SOCP_REG_SETBITS(SOCP_REG_ENCSRC_BUFCFG0(ulChanId), 27, 5, 0); SOCP_REG_SETBITS(SOCP_REG_ENCSRC_BUFCFG1(ulChanId), 1, 2, SOCP_ENCSRC_CHNMODE_FIXPACKET); SOCP_REG_SETBITS(SOCP_REG_ENCSRC_BUFCFG1(ulChanId), 4, 4, SOCP_BBPDS_DST_BUFID); SOCP_REG_SETBITS(SOCP_REG_ENCSRC_BUFCFG1(ulChanId), 8, 2, SOCP_CHAN_PRIORITY_0); SOCP_REG_SETBITS(SOCP_REG_ENCSRC_BUFCFG1(ulChanId), 10, 1, SOCP_ENCSRC_BYPASS_DISABLE); SOCP_REG_SETBITS(SOCP_REG_ENCSRC_BUFCFG1(ulChanId), 16, 8, SOCP_DATA_TYPE_0); SOCP_REG_SETBITS(SOCP_REG_ENCSRC_BUFCFG1(ulChanId), 11, 1, SOCP_DATA_TYPE_EN); SOCP_REG_SETBITS(SOCP_REG_ENCSRC_BUFCFG1(ulChanId), 31, 1, SOCP_ENC_DEBUG_DIS); /* 数采通道默认不打开,由上层打开 */ SOCP_REG_SETBITS(SOCP_REG_ENCSRC_BUFCFG1(ulChanId), 0, 1, 0); /* 打开数采通道的 中断*/ SOCP_REG_SETBITS(SOCP_REG_ENC_RAWINT1, ulChanId, 1, 1); SOCP_REG_SETBITS(SOCP_REG_APP_MASK1, ulChanId, 1, 0); /* 保存参数到全局变量*/ pChan = &g_stEncSrcFixChan[ulChanId]; pChan->u32ChanID = ulChanId; pChan->u32DestChanID = SOCP_BBPDS_DST_BUFID; pChan->eChnMode = SOCP_ENCSRC_CHNMODE_FIXPACKET; pChan->eDataType = SOCP_DATA_TYPE_0; pChan->ePriority = SOCP_CHAN_PRIORITY_0; pChan->sEncSrcBuf.u32Start = (BSP_U32)ulPhyAddr; pChan->sEncSrcBuf.u32Write = (BSP_U32)ulPhyAddr; pChan->sEncSrcBuf.u32Read = (BSP_U32)ulPhyAddr; pChan->sEncSrcBuf.u32End = (BSP_U32)(ulPhyAddr+ulSize); pChan->sEncSrcBuf.u32Length = (BSP_U32)ulSize; return BSP_OK; }
/***************************************************************************** * 函 数 名 : bsp_socp_drx_restore_reg * * 功能描述 : * * 返 回 值 : *****************************************************************************/ __ao_func void bsp_socp_drx_restore_reg(void) { u32 i = 0; u32 *g_pu32SocpDrxGlobal = (u32 *)(SOCP_DRX_BACKUP_DDR_ADDR); SOCP_DRX_ENCSRC_S *a_SocpDrxEncSrc; SOCP_DRX_ENCDST_S *a_SocpDrxEncDst; SOCP_DRX_DECSRC_S *a_SocpDrxDecSrc; SOCP_DRX_DECDST_S *a_SocpDrxDecDst; /* backup regs: global and int */ socp_memcpy((u32 *)SOCP_REG_ADDR_DRX(SOCP_REG_GBLRST), g_pu32SocpDrxGlobal, SOCP_DRX_REG_GBLRST_NUM); g_pu32SocpDrxGlobal += SOCP_DRX_REG_GBLRST_NUM; socp_memcpy((u32 *)SOCP_REG_ADDR_DRX(SOCP_REG_GBL_INTSTAT), g_pu32SocpDrxGlobal, SOCP_DRX_REG_ENCINT_NUM); g_pu32SocpDrxGlobal += SOCP_DRX_REG_ENCINT_NUM; socp_memcpy((u32 *)SOCP_REG_ADDR_DRX(SOCP_REG_DEC_CORE0MASK0), g_pu32SocpDrxGlobal, SOCP_DRX_REG_DECINT_NUM); g_pu32SocpDrxGlobal += SOCP_DRX_REG_DECINT_NUM;; /*lint -save -e740*/ /* resume regs: channel type */ for(i=0;i<SOCP_MAX_ENCDST_CHN;i++) { a_SocpDrxEncDst = (SOCP_DRX_ENCDST_S *)g_pu32SocpDrxGlobal; SOCP_REG_WRITE(SOCP_REG_ENCDEST_BUFADDR(i), a_SocpDrxEncDst->u32StartAddr); SOCP_REG_WRITE(SOCP_REG_ENCDEST_BUFRPTR(i), a_SocpDrxEncDst->u32ReadAddr); SOCP_REG_WRITE(SOCP_REG_ENCDEST_BUFWPTR(i), a_SocpDrxEncDst->u32WriteAddr); SOCP_REG_WRITE(SOCP_REG_ENCDEST_BUFCFG(i), a_SocpDrxEncDst->u32Config); SOCP_REG_WRITE(SOCP_REG_ENCDEST_BUFTHRH(i), a_SocpDrxEncDst->u32Thrh); SOCP_REG_WRITE(SOCP_REG_ENCDEST_BUFTHRESHOLD(i), a_SocpDrxEncDst->u32Threshold); /* clean buffer for encdst 1 */ g_pu32SocpDrxGlobal += (sizeof(SOCP_DRX_ENCDST_S)/sizeof(u32)); } for(i=0;i<SOCP_MAX_DECDST_CHN;i++) { a_SocpDrxDecDst = (SOCP_DRX_DECDST_S *)g_pu32SocpDrxGlobal; SOCP_REG_WRITE(SOCP_REG_DECDEST_BUFADDR(i), a_SocpDrxDecDst->u32StartAddr); SOCP_REG_WRITE(SOCP_REG_DECDEST_BUFRPTR(i), a_SocpDrxDecDst->u32ReadAddr); SOCP_REG_WRITE(SOCP_REG_DECDEST_BUFWPTR(i), a_SocpDrxDecDst->u32WriteAddr); SOCP_REG_WRITE(SOCP_REG_DECDEST_BUFCFG(i), a_SocpDrxDecDst->u32Config); g_pu32SocpDrxGlobal += (sizeof(SOCP_DRX_DECDST_S)/sizeof(u32)); } for(i=0;i<SOCP_MAX_ENCSRC_CHN;i++) { a_SocpDrxEncSrc= (SOCP_DRX_ENCSRC_S *)g_pu32SocpDrxGlobal; SOCP_REG_WRITE(SOCP_REG_ENCSRC_BUFADDR(i), a_SocpDrxEncSrc->u32StartAddr); SOCP_REG_WRITE(SOCP_REG_ENCSRC_BUFWPTR(i), a_SocpDrxEncSrc->u32WriteAddr); SOCP_REG_WRITE(SOCP_REG_ENCSRC_BUFRPTR(i), a_SocpDrxEncSrc->u32ReadAddr); SOCP_REG_WRITE(SOCP_REG_ENCSRC_BUFCFG0(i), a_SocpDrxEncSrc->u32Config0); SOCP_REG_WRITE(SOCP_REG_ENCSRC_RDQADDR(i), a_SocpDrxEncSrc->u32RDStartAddr); SOCP_REG_WRITE(SOCP_REG_ENCSRC_RDQRPTR(i), a_SocpDrxEncSrc->u32RDReadAddr); SOCP_REG_WRITE(SOCP_REG_ENCSRC_RDQWPTR(i), a_SocpDrxEncSrc->u32RDWriteAddr); SOCP_REG_WRITE(SOCP_REG_ENCSRC_RDQCFG(i), a_SocpDrxEncSrc->u32RDConfig); SOCP_REG_WRITE(SOCP_REG_ENCSRC_BUFCFG1(i), a_SocpDrxEncSrc->u32Config1); g_pu32SocpDrxGlobal += (sizeof(SOCP_DRX_ENCSRC_S)/sizeof(u32)); } for(i=0;i<SOCP_MAX_DECSRC_CHN;i++) { a_SocpDrxDecSrc = (SOCP_DRX_DECSRC_S *)g_pu32SocpDrxGlobal; SOCP_REG_WRITE(SOCP_REG_DECSRC_BUFADDR(i), a_SocpDrxDecSrc->u32StartAddr); SOCP_REG_WRITE(SOCP_REG_DECSRC_BUFWPTR(i), a_SocpDrxDecSrc->u32WriteAddr); SOCP_REG_WRITE(SOCP_REG_DECSRC_BUFRPTR(i), a_SocpDrxDecSrc->u32ReadAddr); SOCP_REG_WRITE(SOCP_REG_DECSRC_BUFCFG0(i), a_SocpDrxDecSrc->u32Config ); g_pu32SocpDrxGlobal += (sizeof(SOCP_DRX_DECSRC_S)/sizeof(u32)); } /*lint -restore*/ #ifdef CONFIG_DEFLATE (void)bsp_deflate_drx_restore_reg(); #endif return ; }
/***************************************************************************** * 函 数 名 : bsp_socp_drx_backup_reg * * 功能描述 : * * 返 回 值 : *****************************************************************************/ s32 bsp_socp_drx_backup_reg(void) { u32 i = 0; u32 *g_pu32SocpDrxGlobal = (u32 *)(SOCP_DRX_BACKUP_DDR_ADDR); /* judge state */ if(BSP_OK!=bsp_socp_get_drx_state()) { /* printk("bsp_socp_drx_backup_reg:socp state is not OK!\n"); */ return BSP_ERROR; } #ifdef CONFIG_DEFLATE if(DEFLATE_OK!=deflate_get_drx_state()) { return DEFLATE_ERROR; } (void)bsp_deflate_drx_backup_reg(); #endif /* backup regs: global and int */ socp_memcpy(g_pu32SocpDrxGlobal, (u32 *)SOCP_REG_ADDR_DRX(SOCP_REG_GBLRST), SOCP_DRX_REG_GBLRST_NUM); g_pu32SocpDrxGlobal += SOCP_DRX_REG_GBLRST_NUM; socp_memcpy(g_pu32SocpDrxGlobal, (u32 *)SOCP_REG_ADDR_DRX(SOCP_REG_GBL_INTSTAT), SOCP_DRX_REG_ENCINT_NUM); g_pu32SocpDrxGlobal +=SOCP_DRX_REG_ENCINT_NUM; socp_memcpy(g_pu32SocpDrxGlobal, (u32 *)SOCP_REG_ADDR_DRX(SOCP_REG_DEC_CORE0MASK0), SOCP_DRX_REG_DECINT_NUM); g_pu32SocpDrxGlobal +=SOCP_DRX_REG_DECINT_NUM; /* backup regs: channel type */ for(i=0;i<SOCP_MAX_ENCDST_CHN;i++) { socp_memcpy(g_pu32SocpDrxGlobal, (u32 *)SOCP_REG_ADDR_DRX(SOCP_REG_ENCDEST_BUFWPTR(i)), (sizeof(SOCP_DRX_ENCDST_S)/sizeof(u32))); g_pu32SocpDrxGlobal += (sizeof(SOCP_DRX_ENCDST_S)/sizeof(u32)); } for(i=0;i<SOCP_MAX_DECDST_CHN;i++) { socp_memcpy(g_pu32SocpDrxGlobal, (u32 *)SOCP_REG_ADDR_DRX(SOCP_REG_DECDEST_BUFWPTR(i)), (sizeof(SOCP_DRX_DECDST_S)/sizeof(u32))); g_pu32SocpDrxGlobal += (sizeof(SOCP_DRX_DECDST_S)/sizeof(u32)); } for(i=0;i<SOCP_MAX_ENCSRC_CHN;i++) { socp_memcpy(g_pu32SocpDrxGlobal, (u32 *)SOCP_REG_ADDR_DRX(SOCP_REG_ENCSRC_BUFWPTR(i)), (sizeof(SOCP_DRX_ENCSRC_S)/sizeof(u32))); g_pu32SocpDrxGlobal += (sizeof(SOCP_DRX_ENCSRC_S)/sizeof(u32)); } for(i=0;i<SOCP_MAX_DECSRC_CHN;i++) { socp_memcpy(g_pu32SocpDrxGlobal, (u32 *)SOCP_REG_ADDR_DRX(SOCP_REG_DECSRC_BUFWPTR(i)), (sizeof(SOCP_DRX_DECSRC_S)/sizeof(u32))); g_pu32SocpDrxGlobal += (sizeof(SOCP_DRX_DECSRC_S)/sizeof(u32)); } for(i=0;i<SOCP_MAX_ENCSRC_CHN;i++) { SOCP_REG_SETBITS (SOCP_REG_ENCSRC_BUFCFG1(i), 0, 1, 0); } for(i=0;i<(SOCP_MAX_DECSRC_CHN);i++) { SOCP_REG_SETBITS (SOCP_REG_DECSRC_BUFCFG0(i), 30, 1,0); } return BSP_OK ; }
/***************************************************************************** * 函 数 名 : socpInit * * 功能描述 : 模块初始化函数 * * 输入参数 : 无 * * 输出参数 : 无 * * 返 回 值 : 初始化成功的标识码 *****************************************************************************/ void socp_m3_init(void) { u32 i; u32 u32ResetValue = 0; u32 u32BufAddr = 0; struct device_node* dev = NULL; #ifdef CONFIG_DEFLATE struct device_node* dev1 = NULL; #endif u32 version; #if 1 s32 ret; #endif #if(FEATURE_SOCP_ON_DEMAND == FEATURE_ON) if(BSP_OK != socp_icc_chan_init()) { return; } #endif if (BSP_TRUE == g_strSocpStat.bInitFlag) { return ; } memset(&g_strSocpStat, 0, sizeof(SOCP_GBL_STATE)); dev = of_find_compatible_node(NULL,NULL,"hisilicon,socp_balong_lpm3"); if(NULL == dev) { return ; } g_strSocpStat.baseAddr = (u32)of_iomap(dev,0); printk("socp base addr :0x%x\n",g_strSocpStat.baseAddr); if(0 == g_strSocpStat.baseAddr) { return ; } #ifdef CONFIG_DEFLATE dev1 = of_find_compatible_node(NULL,NULL,"hisilicon,deflate_balong_lpm3"); if(NULL == dev1) { printk("Socpdeflate dev find failed!\n"); return ; } g_strDeflateStat.baseAddr = (u32)of_iomap(dev1,0); //printk("socp base addr :0x%x\n",g_strDeflateStat.baseAddr); if(0 == g_strDeflateStat.baseAddr) { printk("base addr is error!\n"); return ; } #endif /* 对全局寄存器进行复位 */ SOCP_REG_WRITE(SOCP_REG_GBLRST, 1); /* 等待通道复位状态自清 */ for(i=0; i<SOCP_RESET_TIME; i++) { SOCP_REG_READ(SOCP_REG_GBLRST, u32ResetValue); if(0 == u32ResetValue) { break; } if((SOCP_RESET_TIME -1) == i) { return ; } } /* 增加ram中寄存器的复位操作*/ for(i=0; i<SOCP_MAX_ENCSRC_CHN; i++) { SOCP_REG_WRITE(SOCP_REG_ENCSRC_BUFADDR(i),0); SOCP_REG_WRITE(SOCP_REG_ENCSRC_BUFCFG0(i),0); SOCP_REG_WRITE(SOCP_REG_ENCSRC_RDQWPTR(i),0); SOCP_REG_WRITE(SOCP_REG_ENCSRC_RDQRPTR(i),0); SOCP_REG_WRITE(SOCP_REG_ENCSRC_RDQADDR(i),0); SOCP_REG_WRITE(SOCP_REG_ENCSRC_RDQCFG(i),0); } for(i=0; i<SOCP_MAX_ENCDST_CHN; i++) { SOCP_REG_WRITE(SOCP_REG_ENCDEST_BUFADDR(i),0); } /* 配置传输中断超时时间和buffer溢出超时时间 */ SOCP_REG_WRITE(SOCP_REG_INTTIMEOUT, SOCP_TRANS_TIMEOUT_DEFAULT); SOCP_REG_SETBITS(SOCP_REG_BUFTIMEOUT, 31, 1, 0); SOCP_REG_SETBITS(SOCP_REG_BUFTIMEOUT, 0, 16, SOCP_OVERFLOW_TIMEOUT_DEFAULT); /* 配置解码通路包长度配置寄存器*/ SOCP_REG_SETBITS(SOCP_REG_DEC_PKTLEN, 0, 12, SOCP_DEC_PKTLGTH_MAX); SOCP_REG_SETBITS(SOCP_REG_DEC_PKTLEN, 12, 5, SOCP_DEC_PKTLGTH_MIN); /* 时钟门控,空闲时时钟自动关闭 */ writel(0xffffffff, SOCP_REG_BASEADDR + 0x14); /* 屏蔽中断 */ SOCP_REG_SETBITS(SOCP_REG_ENC_MASK0, 0, 7, 0x7f); SOCP_REG_WRITE(SOCP_REG_APP_MASK1, 0xffffffff); SOCP_REG_SETBITS(SOCP_REG_ENC_MASK2, 0, 7, 0x7f); SOCP_REG_SETBITS(SOCP_REG_ENC_MASK2, 16, 7, 0x7f); SOCP_REG_WRITE(SOCP_REG_APP_MASK3, 0xffffffff); SOCP_REG_SETBITS(SOCP_REG_DEC_CORE0MASK0, 0, 16, 0xffff); SOCP_REG_SETBITS(SOCP_REG_DEC_MASK1, 0, 24, 0xffffff); SOCP_REG_SETBITS(SOCP_REG_DEC_CORE0MASK2, 0, 16, 0xffff); for (i = 0; i < SOCP_ENCSRC_M3_NUM; i++) { u32BufAddr = SOCP_M3_LPM3_ENCSRC_ADDR + i*SOCP_M3_CHN_SIZE; SOCP_REG_WRITE(SOCP_REG_ENCSRC_BUFADDR((i + SOCP_ENCSRC_LPM3_BASE)), u32BufAddr); SOCP_REG_WRITE(SOCP_REG_ENCSRC_BUFWPTR((i + SOCP_ENCSRC_LPM3_BASE)), u32BufAddr); SOCP_REG_WRITE(SOCP_REG_ENCSRC_BUFRPTR((i + SOCP_ENCSRC_LPM3_BASE)), u32BufAddr); /*config0 */ SOCP_REG_SETBITS(SOCP_REG_ENCSRC_BUFCFG0((i + SOCP_ENCSRC_LPM3_BASE)), 0, 27, SOCP_M3_CHN_SIZE); SOCP_REG_SETBITS(SOCP_REG_ENCSRC_BUFCFG0((i + SOCP_ENCSRC_LPM3_BASE)), 27, 5, 0); /*配置SOCP 参数*/ SOCP_REG_SETBITS(SOCP_REG_ENCSRC_BUFCFG1((i + SOCP_ENCSRC_LPM3_BASE)), 0, 1, 0); SOCP_REG_SETBITS(SOCP_REG_ENCSRC_BUFCFG1((i + SOCP_ENCSRC_LPM3_BASE)), 1, 2, 1); SOCP_REG_SETBITS(SOCP_REG_ENCSRC_BUFCFG1((i + SOCP_ENCSRC_LPM3_BASE)), 4, 4, SOCP_CODER_DST_OM_IND); if(0==i) { SOCP_REG_SETBITS(SOCP_REG_ENCSRC_BUFCFG1((i + SOCP_ENCSRC_LPM3_BASE)), 8, 2, 1); } else { SOCP_REG_SETBITS(SOCP_REG_ENCSRC_BUFCFG1((i + SOCP_ENCSRC_LPM3_BASE)), 8, 2, 0); } SOCP_REG_SETBITS(SOCP_REG_ENCSRC_BUFCFG1((i + SOCP_ENCSRC_LPM3_BASE)), 10, 1, 0); SOCP_REG_SETBITS(SOCP_REG_ENCSRC_BUFCFG1((i + SOCP_ENCSRC_LPM3_BASE)), 11, 1, 0); SOCP_REG_SETBITS(SOCP_REG_ENCSRC_BUFCFG1((i + SOCP_ENCSRC_LPM3_BASE)), 16, 8, 0); SOCP_REG_SETBITS(SOCP_REG_ENCSRC_BUFCFG1((i + SOCP_ENCSRC_LPM3_BASE)), 31, 1, 0); /* 使能中断*/ SOCP_REG_SETBITS(SOCP_REG_ENC_RAWINT1, (SOCP_ENCSRC_LPM3_BASE + i), 1, 1); SOCP_REG_SETBITS(SOCP_REG_APP_MASK1, (SOCP_ENCSRC_LPM3_BASE + i), 1, 0); g_strSocpStat.u32IntEncDstTfr = 0; } SOCP_REG_READ(SOCP_REG_SOCP_VERSION, version); if(version >= SOCP_NEW_VERSION) { /*新逻辑统一配置编码源安全使能*/ /*0~3、10号通道为非安全通道,其它均为安全通道*/ SOCP_REG_WRITE(SOCP_REG_ENCDEST_SEC_CTRL, 0xffff7bf0); } g_socp_rsracc_device.reg_addr = (u32*)(g_strSocpStat.baseAddr); if (bsp_rsracc_support()) { printk("bsp_rsracc_register socp 0x%x.\n", (u32)g_socp_rsracc_device.reg_addr); ret = bsp_rsracc_register(&g_socp_rsracc_device, 1); if(ret) { printk("bsp_rsracc_register socp failed.\n"); } } /* 设置初始化状态 */ g_strSocpStat.bInitFlag = BSP_TRUE; return ; }