Re: [U-Boot] [PATCH 13/14][v2] driver/ldpaa_eth: Avoid TX conf frames

2015-06-25 Thread Joe Hershberger
Hi Prabhakar,

On Thu, Jun 11, 2015 at 4:03 AM, Prabhakar Kushwaha
prabha...@freescale.com wrote:
 Polling of TX conf frames is not a mandatory option.
 Packets can be transferred via WRIOP without TX conf frame.

 Configure ldpaa_eth driver to use TX path without confirmation frame

 Signed-off-by: Prabhakar Kushwaha prabha...@freescale.com
 ---

Acked-by: Joe Hershberger joe.hershber...@ni.com
___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot


[U-Boot] [PATCH 13/14][v2] driver/ldpaa_eth: Avoid TX conf frames

2015-06-11 Thread Prabhakar Kushwaha
Polling of TX conf frames is not a mandatory option.
Packets can be transferred via WRIOP without TX conf frame.

Configure ldpaa_eth driver to use TX path without confirmation frame

Signed-off-by: Prabhakar Kushwaha prabha...@freescale.com
---
 Changes for v2: Sending as it is for patchset

 drivers/net/ldpaa_eth/ldpaa_eth.c | 114 ++
 drivers/net/ldpaa_eth/ldpaa_eth.h |   1 -
 2 files changed, 4 insertions(+), 111 deletions(-)

diff --git a/drivers/net/ldpaa_eth/ldpaa_eth.c 
b/drivers/net/ldpaa_eth/ldpaa_eth.c
index adb964c..839e78a 100644
--- a/drivers/net/ldpaa_eth/ldpaa_eth.c
+++ b/drivers/net/ldpaa_eth/ldpaa_eth.c
@@ -112,7 +112,7 @@ static int ldpaa_eth_pull_dequeue_rx(struct eth_device *dev)
debug(No frame delivered\n);
 
qbman_swp_dqrr_consume(swp, dq);
-   break;
+   continue;
}
 
fd = ldpaa_dq_fd(dq);
@@ -131,98 +131,6 @@ static int ldpaa_eth_pull_dequeue_rx(struct eth_device 
*dev)
return err;
 }
 
-static void ldpaa_eth_tx_conf(struct ldpaa_eth_priv *priv,
- const struct dpaa_fd *fd)
-{
-   uint64_t fd_addr;
-   struct ldpaa_fas *fas;
-   uint32_t status, err;
-   struct qbman_release_desc releasedesc;
-   struct qbman_swp *swp = dflt_dpio-sw_portal;
-
-   fd_addr = ldpaa_fd_get_addr(fd);
-
-
-   debug(TX Conf frame:data addr=0x%p\n, (u64 *)fd_addr);
-
-   /* Check the status from the Frame Annotation */
-   if (fd-simple.frc  LDPAA_FD_FRC_FASV) {
-   fas = (struct ldpaa_fas *)
-   ((uint8_t *)(fd_addr) +
-   priv-buf_layout.private_data_size);
-   status = le32_to_cpu(fas-status);
-   if (status  LDPAA_ETH_TXCONF_ERR_MASK) {
-   printf(TxConf frame error(s): 0x%08x\n,
-  status  LDPAA_ETH_TXCONF_ERR_MASK);
-   }
-   }
-
-   flush_dcache_range(fd_addr, fd_addr + LDPAA_ETH_RX_BUFFER_SIZE);
-   qbman_release_desc_clear(releasedesc);
-   qbman_release_desc_set_bpid(releasedesc, dflt_dpbp-dpbp_attr.bpid);
-   do {
-   /* Release buffer into the QBMAN */
-   err = qbman_swp_release(swp, releasedesc, fd_addr, 1);
-   } while (err == -EBUSY);
-}
-
-static int ldpaa_eth_pull_dequeue_tx_conf(struct ldpaa_eth_priv *priv)
-{
-   const struct ldpaa_dq *dq;
-   const struct dpaa_fd *fd;
-   int err = 0;
-   int i = 5, status;
-   u32 timeo = (CONFIG_SYS_HZ * 10) / 1000;
-   u32 time_start;
-   static struct qbman_pull_desc pulldesc;
-   struct qbman_swp *swp = dflt_dpio-sw_portal;
-
-   while (--i) {
-   qbman_pull_desc_clear(pulldesc);
-   qbman_pull_desc_set_numframes(pulldesc, 1);
-   qbman_pull_desc_set_fq(pulldesc, priv-tx_conf_fqid);
-
-   err =  qbman_swp_pull(swp, pulldesc);
-   if (err  0) {
-   printf(Dequeue TX conf frames error:0x%08x\n, err);
-   continue;
-   }
-
-   time_start = get_timer(0);
-
-do {
-   dq = qbman_swp_dqrr_next(swp);
-   } while (get_timer(time_start)  timeo  !dq);
-
-   if (dq) {
-   /* Check for valid frame. If not sent a consume
-* confirmation to QBMAN otherwise give it to NADK
-* application and then send consume confirmation to
-* QBMAN.
-*/
-   status = (uint8_t)ldpaa_dq_flags(dq);
-   if ((status  LDPAA_DQ_STAT_VALIDFRAME) == 0) {
-   debug(Dequeue TX conf frames:);
-   debug(No frame is delivered\n);
-
-   qbman_swp_dqrr_consume(swp, dq);
-   break;
-   }
-   fd = ldpaa_dq_fd(dq);
-
-   ldpaa_eth_tx_conf(priv, fd);
-   qbman_swp_dqrr_consume(swp, dq);
-   break;
-   } else {
-   err = -1;
-   debug(No DQRR entries\n);
-   break;
-   }
-   }
-
-   return err;
-}
-
 static int ldpaa_eth_tx(struct eth_device *net_dev, void *buf, int len)
 {
struct ldpaa_eth_priv *priv = (struct ldpaa_eth_priv *)net_dev-priv;
@@ -282,12 +190,6 @@ static int ldpaa_eth_tx(struct eth_device *net_dev, void 
*buf, int len)
if (err  0)
goto error;
 
-   mdelay(1);
-
-   err = ldpaa_eth_pull_dequeue_tx_conf(priv);
-   if (err  0)
-   printf(error Tx Conf frame\n);
-
return err;
 
 error:
@@