From 842d1d638d2edff455ea6a48d851f14524f24c37 Mon Sep 17 00:00:00 2001 From: "yonglin.gui" Date: Sat, 9 Sep 2023 10:10:39 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=A0=E9=99=A4=E4=BA=86ul=E6=96=B9=E5=90=91?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=8C=85=E6=98=AF=E5=90=A6=E5=8F=8A=E6=97=B6?= =?UTF-8?q?=E8=A2=ABRC=E8=AF=BB=E5=8F=96=E7=9A=84=E5=88=A4=E6=96=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../driver/src/ucp_pcie_traffic.s.c | 77 +++++++++++-------- 1 file changed, 43 insertions(+), 34 deletions(-) diff --git a/public/pet_rfm_spu0/driver/src/ucp_pcie_traffic.s.c b/public/pet_rfm_spu0/driver/src/ucp_pcie_traffic.s.c index 18378b6..daa0362 100644 --- a/public/pet_rfm_spu0/driver/src/ucp_pcie_traffic.s.c +++ b/public/pet_rfm_spu0/driver/src/ucp_pcie_traffic.s.c @@ -176,11 +176,12 @@ static inline int32_t ucp_pcie_dl_worker(uint32_t inst_id) } } - uint32_t extInc, intInc; - uint32_t t_idx; + uint32_t extInc = 0; + uint32_t intInc = 0; + uint32_t t_idx = 0; uint32_t i = 0; - UcpPcieDmaThread_t* pDmaThread; - UcpPcieDmaComplete_t* pCmplt; + UcpPcieDmaThread_t* pDmaThread = NULL; + UcpPcieDmaComplete_t* pCmplt = NULL; uint32_t num_rx_queues = MAX_Q_NUM_DL_TRAFFIC;//跟业务queue对应,共6个queue //按照传输队列判断,是否有队列已经传输完成,传输队列一共有6个 for(i = 0; i < MAX_INSTANCE_NUM; i++) @@ -222,19 +223,21 @@ static inline int32_t ucp_pcie_dl_worker(uint32_t inst_id) } } //uint32_t dma_idx; - uint32_t n, N; + uint32_t n =0; + uint32_t N = 0; //uint32_t ext_size; - uint32_t freed; - uint32_t ext_idx; + uint32_t freed = 0; + uint32_t ext_idx = 0; //int8_t desc_idx; - uint32_t pcieOffset; - uint32_t H, L; - uint64_t dst_addr; - UcpExtTraffic_t* ext_ch; - PcieTrafficDescriptor_t *desc_hdr; - PcieTrafficDescriptor_t *desc; - MsgMemBufAttr_t* attr; - DwPcieEpDmaChDesc_t rdma_desc_ch[MAX_CH_NUM_UCP_DMA]; + uint32_t pcieOffset = 0; + uint32_t H = 0; + uint32_t L = 0; + uint64_t dst_addr = 0; + UcpExtTraffic_t* ext_ch = NULL; + PcieTrafficDescriptor_t *desc_hdr = NULL; + PcieTrafficDescriptor_t *desc = NULL; + MsgMemBufAttr_t* attr = NULL; + DwPcieEpDmaChDesc_t rdma_desc_ch[MAX_CH_NUM_UCP_DMA] = {0}; //判断是否有业务队列需要接收数据包,如果有需要接收的数据,则寻找一个空闲DMA读通道进行接收 for (k = 0; k < num_rx_queues; k++) { ext_ch = pUcpPcieMemInfo->pExtDlTraffic[inst_id][k]; @@ -411,10 +414,11 @@ static inline int32_t ucp_pcie_ul_worker(uint32_t inst_id) } } - uint32_t extInc, intInc; - uint32_t t_idx; - UcpPcieDmaThread_t* pDmaThread; - UcpPcieDmaComplete_t* pCmplt; + uint32_t extInc = 0; + uint32_t intInc = 0; + uint32_t t_idx = 0; + UcpPcieDmaThread_t* pDmaThread = NULL; + UcpPcieDmaComplete_t* pCmplt = NULL; uint32_t num_tx_queues = MAX_Q_NUM_UL_TRAFFIC; uint32_t i = 0; for(i = 0; i < MAX_INSTANCE_NUM; i++) @@ -464,22 +468,24 @@ static inline int32_t ucp_pcie_ul_worker(uint32_t inst_id) } } //uint32_t dma_idx; - uint32_t n, N; - uint32_t int_num, ext_num; + uint32_t n = 0; + uint32_t N = 0; + uint32_t int_num, ext_num = 0; //uint32_t ext_size; - uint32_t freed; - uint32_t ext_idx; + uint32_t freed = 0; + uint32_t ext_idx = 0; //uint32_t desc_idx; //int8_t buf_idx; - uint32_t pcieOffset; - uint32_t H, L; - uint64_t src_addr; - UcpExtTraffic_t* ext_ch; - MsgQueueLocalInfo_t* int_ch; - PcieTrafficDescriptor_t *desc_hdr; - PcieTrafficDescriptor_t *desc; - MsgMemBufAttr_t* attr; - DwPcieEpDmaChDesc_t wdma_desc_ch[MAX_CH_NUM_UCP_DMA]; + uint32_t pcieOffset = 0; + uint32_t H = 0; + uint32_t L = 0; + uint64_t src_addr = 0; + UcpExtTraffic_t* ext_ch = NULL; + MsgQueueLocalInfo_t* int_ch = NULL; + PcieTrafficDescriptor_t *desc_hdr = NULL; + PcieTrafficDescriptor_t *desc = NULL; + MsgMemBufAttr_t* attr = NULL; + DwPcieEpDmaChDesc_t wdma_desc_ch[MAX_CH_NUM_UCP_DMA] = {0}; //检查是否有通道需要有数据发送,一共6个queue,逐个通道检查 for (k = 0; k < num_tx_queues; k++, N = 0) { //ucp_queue_ul_update_in(k); @@ -489,7 +495,7 @@ static inline int32_t ucp_pcie_ul_worker(uint32_t inst_id) int_num = int_ch->in - int_ch->out;//本次要传输的数据包的个数 if(0 == int_num) { - PCIE_DEBUG_LOG("UL no pkt need send! TRCCNT[[%d][%d] = %d epcntIng = %d\n", inst_id, k, pCnt->dlTxCounter[inst_id][k], ext_ch->epCntIng); + PCIE_DEBUG_LOG("UL no pkt need send! TRCCNT[[%d][%d] = %d epcntIng = %d\n", inst_id, k, pCnt->ulTxCounter[inst_id][k], ext_ch->epCntIng); continue; } if(int_num > pCnt->ulDescNum[inst_id][k])//MAX_THREAD_NUM_UCP_DMA) @@ -502,7 +508,9 @@ static inline int32_t ucp_pcie_ul_worker(uint32_t inst_id) } PCIE_DEBUG_LOG("UL localUlQueue[%d][%d] int_ch->in=%d int_ch->out=%d int_num= %d \n", inst_id, k, int_ch->in, int_ch->out, int_num); PCIE_DEBUG_LOG("UL pCnt->ulDescNum[%d][%d] = %d ext_ch->epCntIng=%d pCnt->ulRxCounter[%d][%d]=%d \n", - inst_id, k, pCnt->ulDescNum[inst_id][k], ext_ch->epCntIng, inst_id, k, pCnt->ulRxCounter[inst_id][k]); + inst_id, k, pCnt->ulDescNum[inst_id][k], ext_ch->epCntIng, inst_id, k, pCnt->ulRxCounter[inst_id][k]); + N = int_num; + #if 0 ext_num = pCnt->ulDescNum[inst_id][k] - ((ext_ch->epCntIng - pCnt->ulRxCounter[inst_id][k]) & pCnt->ulDescNum[inst_id][k]); //此处需要对描述符取模,否则如果一直发送,但是没有接收,则会导致DMA无法启动 N = (int_num < ext_num) ? int_num : ext_num; //此处是判断Bar空间上的传输描述符个数是否够本次传输,取出本次传输的数据包的个数 if (0 == N) @@ -510,6 +518,7 @@ static inline int32_t ucp_pcie_ul_worker(uint32_t inst_id) PCIE_DEBUG_LOG("UL not free bar desc N = %d\n", N); continue; } + #endif PCIE_DEBUG_LOG("UL INT_CH[%d][%d] = 0x%x N = %d in = %d out = %d ext_num = %d \n", inst_id, k, (uint32_t)int_ch, N, int_ch->in, int_ch->out, ext_num); PCIE_DEBUG_LOG("UL pCnt->ulRxCounter[%d][%d]= %d pCnt->ulTxCounter[%d][%d] = %d\n", inst_id, k, pCnt->ulRxCounter[inst_id][k], inst_id, k, pCnt->ulTxCounter[inst_id][k]);