]> git.baikalelectronics.ru Git - kernel.git/commitdiff
Revert "dpaa2-eth: configure the cache stashing amount on a queue"
authorIoana Radulescu <ruxandra.radulescu@nxp.com>
Thu, 23 May 2019 14:38:22 +0000 (17:38 +0300)
committerDavid S. Miller <davem@davemloft.net>
Thu, 23 May 2019 16:37:22 +0000 (09:37 -0700)
This reverts commit 143aea80b005a0241f1035aaaebba4e2f1492e64.

The reverted change instructed the QMan hardware block to fetch
RX frame annotation and beginning of frame data to cache before
the core would read them.

It turns out that in rare cases, it's possible that a QMan
stashing transaction is delayed long enough such that, by the time
it gets executed, the frame in question had already been dequeued
by the core and software processing began on it. If the core
manages to unmap the frame buffer _before_ the stashing transaction
is executed, an SMMU exception will be raised.

Unfortunately there is no easy way to work around this while keeping
the performance advantages brought by QMan stashing, so disable
it altogether.

Signed-off-by: Ioana Radulescu <ruxandra.radulescu@nxp.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c

index 63b1ecc18c26f7833988394835ee482a844ff6b8..28a6faa6d47eb267cdd200eddb4edd820d363839 100644 (file)
@@ -2479,14 +2479,9 @@ static int setup_rx_flow(struct dpaa2_eth_priv *priv,
        queue.destination.type = DPNI_DEST_DPCON;
        queue.destination.priority = 1;
        queue.user_context = (u64)(uintptr_t)fq;
-       queue.flc.stash_control = 1;
-       queue.flc.value &= 0xFFFFFFFFFFFFFFC0;
-       /* 01 01 00 - data, annotation, flow context */
-       queue.flc.value |= 0x14;
        err = dpni_set_queue(priv->mc_io, 0, priv->mc_token,
                             DPNI_QUEUE_RX, 0, fq->flowid,
-                            DPNI_QUEUE_OPT_USER_CTX | DPNI_QUEUE_OPT_DEST |
-                            DPNI_QUEUE_OPT_FLC,
+                            DPNI_QUEUE_OPT_USER_CTX | DPNI_QUEUE_OPT_DEST,
                             &queue);
        if (err) {
                dev_err(dev, "dpni_set_queue(RX) failed\n");