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:
@@