/***************************************************************************** * 函 数 名 : BSP_IPF_SetControlFLagForCcoreReset * * 功能描述 : ccore复位时,设置IPF标志,用于控制IPF上行 * * 输入参数 : IPF_FORRESET_CONTROL_E flagvalue,0:允许;1:不允许上行 * 输出参数 : 无 * 返 回 值 : IPF_SUCCESS 初始化成功 * IPF_ERROR 初始化失败 * * 修改记录 :2013年4月19日 卢彦胜 创建 * 1.修改日期 :2013年9月12 * 修改作者 :周珊 * 修改记录 :添加入参检查、forbidden之后等待idle *****************************************************************************/ void BSP_IPF_SetControlFLagForCcoreReset(IPF_FORRESET_CONTROL_E flagvalue) { unsigned int u32UlState = 0; unsigned int u32DlState = 0; unsigned int u32Cnt = 0; /* 入参检查 */ if(IPF_FORRESET_CONTROL_MAX <= flagvalue) { IPF_PRINT_ERROR("parameter is error\n"); } /* 设置当前IPF状态 */ g_forCcore_reset_Up_flag = flagvalue; if(IPF_FORRESET_CONTROL_FORBID == flagvalue) { /* 等待IPF进入idle态(不释放CPU但加入等待超时),如果无法进入idle,则等待时间后确保IPF不再处理数据为止 */ do{ IPF_REG_READ(SOC_IPF_CH0_STATE_ADDR(IPF_REGBASE_ADR), u32UlState); IPF_REG_READ(SOC_IPF_CH1_STATE_ADDR(IPF_REGBASE_ADR), u32DlState); msleep(10); u32Cnt++; }while(((u32UlState != IPF_CH_IDLE) || (u32DlState != IPF_CH_IDLE)) && (u32Cnt <= IPF_IDLE_TIMEOUT_NUM)); if(u32UlState != IPF_CH_IDLE) { IPF_PRINT_ERROR("ul is not idle\n"); } if(u32DlState != IPF_CH_IDLE) { IPF_PRINT_ERROR("ul is not idle\n"); } } }
BSP_S32 BSP_IPF_CHInfo(IPF_CHANNEL_TYPE_E eChnType) { BSP_U32 u32ChanCtrlInfo = 0; BSP_U32 u32ChanStateInfo = 0; BSP_U32 u32BdqBaseAddr = 0; BSP_U32 u32BdqDepth = 0; BSP_U32 u32BdqWptr = 0; BSP_U32 u32BdqRptr = 0; BSP_U32 u32BdqWaddr = 0; BSP_U32 u32BdqRaddr = 0; BSP_U32 u32RdqBaseAddr = 0; BSP_U32 u32RdqDepth = 0; BSP_U32 u32RdqRptr = 0; BSP_U32 u32RdqWptr = 0; BSP_U32 u32RdqWaddr = 0; BSP_U32 u32RdqRaddr = 0; BSP_U32 u32Depth = 0; BSP_U32 u32AdqCtrlInfo = 0; BSP_U32 u32Adq0BaseAddr = 0; BSP_U32 u32Adq0StateInfo = 0; BSP_U32 u32Adq0Wptr = 0; BSP_U32 u32Adq0Rptr = 0; BSP_U32 u32Adq1BaseAddr = 0; BSP_U32 u32Adq1StateInfo = 0; BSP_U32 u32Adq1Wptr = 0; BSP_U32 u32Adq1Rptr = 0; switch (eChnType) { case IPF_CHANNEL_UP: IPF_REG_READ(SOC_IPF_CH0_CTRL_ADDR(IPF_REGBASE_ADR), u32ChanCtrlInfo); IPF_REG_READ(SOC_IPF_CH0_STATE_ADDR(IPF_REGBASE_ADR), u32ChanStateInfo); IPF_REG_READ(SOC_IPF_CH0_BDQ_BADDR_ADDR(IPF_REGBASE_ADR), u32BdqBaseAddr); IPF_REG_READ(SOC_IPF_CH0_BDQ_SIZE_ADDR(IPF_REGBASE_ADR), u32BdqDepth); IPF_REG_READ(SOC_IPF_CH0_BDQ_WPTR_ADDR(IPF_REGBASE_ADR), u32BdqWptr); IPF_REG_READ(SOC_IPF_CH0_BDQ_RPTR_ADDR(IPF_REGBASE_ADR), u32BdqRptr); IPF_REG_READ(SOC_IPF_CH0_BDQ_WADDR_ADDR(IPF_REGBASE_ADR), u32BdqWaddr); IPF_REG_READ(SOC_IPF_CH0_BDQ_RADDR_ADDR(IPF_REGBASE_ADR), u32BdqRaddr); IPF_REG_READ(SOC_IPF_CH0_RDQ_BADDR_ADDR(IPF_REGBASE_ADR), u32RdqBaseAddr); IPF_REG_READ(SOC_IPF_CH0_RDQ_SIZE_ADDR(IPF_REGBASE_ADR), u32RdqDepth); IPF_REG_READ(SOC_IPF_CH0_RDQ_RPTR_ADDR(IPF_REGBASE_ADR), u32RdqRptr); IPF_REG_READ(SOC_IPF_CH0_RDQ_WPTR_ADDR(IPF_REGBASE_ADR), u32RdqWptr); IPF_REG_READ(SOC_IPF_CH0_RDQ_WADDR_ADDR(IPF_REGBASE_ADR), u32RdqWaddr); IPF_REG_READ(SOC_IPF_CH0_RDQ_RADDR_ADDR(IPF_REGBASE_ADR), u32RdqRaddr); IPF_REG_READ(SOC_IPF_CH0_DQ_DEPTH_ADDR(IPF_REGBASE_ADR), u32Depth); IPF_REG_READ(SOC_IPF_CH0_ADQ_CTRL_ADDR(IPF_REGBASE_ADR), u32AdqCtrlInfo); IPF_REG_READ(SOC_IPF_CH0_ADQ0_BASE_ADDR(IPF_REGBASE_ADR), u32Adq0BaseAddr); IPF_REG_READ(SOC_IPF_CH0_ADQ0_STAT_ADDR(IPF_REGBASE_ADR), u32Adq0StateInfo); IPF_REG_READ(SOC_IPF_CH0_ADQ0_WPTR_ADDR(IPF_REGBASE_ADR), u32Adq0Wptr); IPF_REG_READ(SOC_IPF_CH0_ADQ0_RPTR_ADDR(IPF_REGBASE_ADR), u32Adq0Rptr); IPF_REG_READ(SOC_IPF_CH0_ADQ1_BASE_ADDR(IPF_REGBASE_ADR), u32Adq1BaseAddr); IPF_REG_READ(SOC_IPF_CH0_ADQ1_STAT_ADDR(IPF_REGBASE_ADR), u32Adq1StateInfo); IPF_REG_READ(SOC_IPF_CH0_ADQ1_WPTR_ADDR(IPF_REGBASE_ADR), u32Adq1Wptr); IPF_REG_READ(SOC_IPF_CH0_ADQ1_RPTR_ADDR(IPF_REGBASE_ADR), u32Adq1Rptr); break; case IPF_CHANNEL_DOWN: IPF_REG_READ(SOC_IPF_CH1_CTRL_ADDR(IPF_REGBASE_ADR), u32ChanCtrlInfo); IPF_REG_READ(SOC_IPF_CH1_STATE_ADDR(IPF_REGBASE_ADR), u32ChanStateInfo); IPF_REG_READ(SOC_IPF_CH1_BDQ_BADDR_ADDR(IPF_REGBASE_ADR), u32BdqBaseAddr); IPF_REG_READ(SOC_IPF_CH1_BDQ_SIZE_ADDR(IPF_REGBASE_ADR), u32BdqDepth); IPF_REG_READ(SOC_IPF_CH1_BDQ_WPTR_ADDR(IPF_REGBASE_ADR), u32BdqWptr); IPF_REG_READ(SOC_IPF_CH1_BDQ_RPTR_ADDR(IPF_REGBASE_ADR), u32BdqRptr); IPF_REG_READ(SOC_IPF_CH1_BDQ_WADDR_ADDR(IPF_REGBASE_ADR), u32BdqWaddr); IPF_REG_READ(SOC_IPF_CH1_BDQ_RADDR_ADDR(IPF_REGBASE_ADR), u32BdqRaddr); IPF_REG_READ(SOC_IPF_CH1_RDQ_BADDR_ADDR(IPF_REGBASE_ADR), u32RdqBaseAddr); IPF_REG_READ(SOC_IPF_CH1_RDQ_SIZE_ADDR(IPF_REGBASE_ADR), u32RdqDepth); IPF_REG_READ(SOC_IPF_CH1_RDQ_RPTR_ADDR(IPF_REGBASE_ADR), u32RdqRptr); IPF_REG_READ(SOC_IPF_CH1_RDQ_WPTR_ADDR(IPF_REGBASE_ADR), u32RdqWptr); IPF_REG_READ(SOC_IPF_CH1_RDQ_WADDR_ADDR(IPF_REGBASE_ADR), u32RdqWaddr); IPF_REG_READ(SOC_IPF_CH1_RDQ_RADDR_ADDR(IPF_REGBASE_ADR), u32RdqRaddr); IPF_REG_READ(SOC_IPF_CH1_DQ_DEPTH_ADDR(IPF_REGBASE_ADR), u32Depth); IPF_REG_READ(SOC_IPF_CH1_ADQ_CTRL_ADDR(IPF_REGBASE_ADR), u32AdqCtrlInfo); IPF_REG_READ(SOC_IPF_CH1_ADQ0_BASE_ADDR(IPF_REGBASE_ADR), u32Adq0BaseAddr); IPF_REG_READ(SOC_IPF_CH1_ADQ0_STAT_ADDR(IPF_REGBASE_ADR), u32Adq0StateInfo); IPF_REG_READ(SOC_IPF_CH1_ADQ0_WPTR_ADDR(IPF_REGBASE_ADR), u32Adq0Wptr); IPF_REG_READ(SOC_IPF_CH1_ADQ0_RPTR_ADDR(IPF_REGBASE_ADR), u32Adq0Rptr); IPF_REG_READ(SOC_IPF_CH1_ADQ1_BASE_ADDR(IPF_REGBASE_ADR), u32Adq1BaseAddr); IPF_REG_READ(SOC_IPF_CH1_ADQ1_STAT_ADDR(IPF_REGBASE_ADR), u32Adq1StateInfo); IPF_REG_READ(SOC_IPF_CH1_ADQ1_WPTR_ADDR(IPF_REGBASE_ADR), u32Adq1Wptr); IPF_REG_READ(SOC_IPF_CH1_ADQ1_RPTR_ADDR(IPF_REGBASE_ADR), u32Adq1Rptr); break; default: IPF_PRINT("invalidable channel type \n"); break; } IPF_PRINT("============BEGIN===========\n"); IPF_PRINT("通道控制寄存器: 0x%x\n", u32ChanCtrlInfo); IPF_PRINT("通道状态寄存器: 0x%x\n", u32ChanStateInfo); IPF_PRINT("BD 基地址: 0x%x\n", u32BdqBaseAddr); IPF_PRINT("BD 深度: 0x%x\n", u32BdqDepth); IPF_PRINT("BD 写指针: 0x%x\n", u32BdqWptr); IPF_PRINT("BD 读指针: 0x%x\n", u32BdqRptr); IPF_PRINT("BD 写地址: 0x%x\n", u32BdqWaddr); IPF_PRINT("BD 读地址: 0x%x\n", u32BdqRaddr); IPF_PRINT("RD 基地址: 0x%x\n", u32RdqBaseAddr); IPF_PRINT("RD 深度: 0x%x\n", u32RdqDepth); IPF_PRINT("RD 读指针: 0x%x\n", u32RdqRptr); IPF_PRINT("RD 写指针: 0x%x\n", u32RdqWptr); IPF_PRINT("RD 读地址: 0x%x\n", u32RdqRaddr); IPF_PRINT("RD 写地址: 0x%x\n", u32RdqWaddr); IPF_PRINT("通道深度寄存器: 0x%x\n", u32Depth); IPF_PRINT("ADQ控制寄存器: 0x%x\n", u32AdqCtrlInfo); IPF_PRINT("ADQ0 基地址: 0x%x\n", u32Adq0BaseAddr); IPF_PRINT("ADQ0 状态寄存器: 0x%x\n", u32Adq0StateInfo); IPF_PRINT("ADQ0 写指针: 0x%x\n", u32Adq0Wptr); IPF_PRINT("ADQ0 读指针: 0x%x\n", u32Adq0Rptr); IPF_PRINT("ADQ1 基地址: 0x%x\n", u32Adq1BaseAddr); IPF_PRINT("ADQ1 状态寄存器: 0x%x\n", u32Adq1StateInfo); IPF_PRINT("ADQ1 写指针: 0x%x\n", u32Adq1Wptr); IPF_PRINT("ADQ1 读指针: 0x%x\n", u32Adq1Rptr); IPF_PRINT("=============END============\n"); return 0; }