common/cnxk: avoid using stashing option of stype
authorAshwin Sekhar T K <asekhar@marvell.com>
Fri, 17 Sep 2021 09:34:37 +0000 (15:04 +0530)
committerJerin Jacob <jerinj@marvell.com>
Mon, 20 Sep 2021 08:47:01 +0000 (10:47 +0200)
Avoid using stashing option of stype in NPA in cn10k-a0 stepping.

This is a workaround for a HW Errata due to which NPA stashing operations
will never result in writing the data into L2 cache. But instead, it will
be written into LLC.

Signed-off-by: Ashwin Sekhar T K <asekhar@marvell.com>
Acked-by: Jerin Jacob <jerinj@marvell.com>
drivers/common/cnxk/roc_nix_queue.c
drivers/common/cnxk/roc_nix_tm_ops.c
drivers/common/cnxk/roc_npa.h

index 7e2f86e..76e439e 100644 (file)
@@ -585,6 +585,10 @@ sqb_pool_populate(struct roc_nix *roc_nix, struct roc_nix_sq *sq)
 
        memset(&aura, 0, sizeof(aura));
        aura.fc_ena = 1;
+       if (roc_model_is_cn9k() || roc_model_is_cn10ka_a0())
+               aura.fc_stype = 0x0; /* STF */
+       else
+               aura.fc_stype = 0x3; /* STSTP */
        aura.fc_addr = (uint64_t)sq->fc;
        aura.fc_hyst_bits = 0; /* Store count on all updates */
        rc = roc_npa_pool_create(&sq->aura_handle, blk_sz, NIX_MAX_SQB, &aura,
index ed244d4..f2173c9 100644 (file)
@@ -38,6 +38,13 @@ roc_nix_tm_sq_aura_fc(struct roc_nix_sq *sq, bool enable)
 
        req->aura.fc_ena = enable;
        req->aura_mask.fc_ena = 1;
+       if (roc_model_is_cn9k() || roc_model_is_cn10ka_a0()) {
+               req->aura.fc_stype = 0x0;      /* STF */
+               req->aura_mask.fc_stype = 0x0; /* STF */
+       } else {
+               req->aura.fc_stype = 0x3;      /* STSTP */
+               req->aura_mask.fc_stype = 0x3; /* STSTP */
+       }
 
        rc = mbox_process(mbox);
        if (rc)
index 3fc6192..1cf50e5 100644 (file)
@@ -214,7 +214,7 @@ roc_npa_aura_batch_alloc_issue(uint64_t aura_handle, uint64_t *buf,
        cmp.u = 0;
        cmp.compare_s.aura = roc_npa_aura_handle_to_aura(aura_handle);
        cmp.compare_s.drop = drop;
-       cmp.compare_s.stype = ALLOC_STYPE_STSTP;
+       cmp.compare_s.stype = ALLOC_STYPE_STF;
        cmp.compare_s.dis_wait = dis_wait;
        cmp.compare_s.count = num;