11bf6746eSJerin Jacob /* SPDX-License-Identifier: BSD-3-Clause 21bf6746eSJerin Jacob * Copyright(C) 2021 Marvell. 31bf6746eSJerin Jacob */ 41bf6746eSJerin Jacob 51bf6746eSJerin Jacob #include "roc_api.h" 61bf6746eSJerin Jacob #include "roc_priv.h" 71bf6746eSJerin Jacob 81bf6746eSJerin Jacob void 91bf6746eSJerin Jacob roc_nix_rss_key_default_fill(struct roc_nix *roc_nix, 101bf6746eSJerin Jacob uint8_t key[ROC_NIX_RSS_KEY_LEN]) 111bf6746eSJerin Jacob { 121bf6746eSJerin Jacob PLT_SET_USED(roc_nix); 131bf6746eSJerin Jacob const uint8_t default_key[ROC_NIX_RSS_KEY_LEN] = { 141bf6746eSJerin Jacob 0xFE, 0xED, 0x0B, 0xAD, 0xFE, 0xED, 0x0B, 0xAD, 0xFE, 0xED, 151bf6746eSJerin Jacob 0x0B, 0xAD, 0xFE, 0xED, 0x0B, 0xAD, 0xFE, 0xED, 0x0B, 0xAD, 161bf6746eSJerin Jacob 0xFE, 0xED, 0x0B, 0xAD, 0xFE, 0xED, 0x0B, 0xAD, 0xFE, 0xED, 171bf6746eSJerin Jacob 0x0B, 0xAD, 0xFE, 0xED, 0x0B, 0xAD, 0xFE, 0xED, 0x0B, 0xAD, 181bf6746eSJerin Jacob 0xFE, 0xED, 0x0B, 0xAD, 0xFE, 0xED, 0x0B, 0xAD}; 191bf6746eSJerin Jacob 201bf6746eSJerin Jacob memcpy(key, default_key, ROC_NIX_RSS_KEY_LEN); 211bf6746eSJerin Jacob } 221bf6746eSJerin Jacob 231bf6746eSJerin Jacob void 241bf6746eSJerin Jacob roc_nix_rss_key_set(struct roc_nix *roc_nix, 251bf6746eSJerin Jacob const uint8_t key[ROC_NIX_RSS_KEY_LEN]) 261bf6746eSJerin Jacob { 271bf6746eSJerin Jacob struct nix *nix = roc_nix_to_nix_priv(roc_nix); 281bf6746eSJerin Jacob const uint64_t *keyptr; 291bf6746eSJerin Jacob uint64_t val; 301bf6746eSJerin Jacob uint32_t idx; 311bf6746eSJerin Jacob 321bf6746eSJerin Jacob keyptr = (const uint64_t *)key; 331bf6746eSJerin Jacob for (idx = 0; idx < (ROC_NIX_RSS_KEY_LEN >> 3); idx++) { 341bf6746eSJerin Jacob val = plt_cpu_to_be_64(keyptr[idx]); 351bf6746eSJerin Jacob plt_write64(val, nix->base + NIX_LF_RX_SECRETX(idx)); 361bf6746eSJerin Jacob } 371bf6746eSJerin Jacob } 381bf6746eSJerin Jacob 391bf6746eSJerin Jacob void 401bf6746eSJerin Jacob roc_nix_rss_key_get(struct roc_nix *roc_nix, uint8_t key[ROC_NIX_RSS_KEY_LEN]) 411bf6746eSJerin Jacob { 421bf6746eSJerin Jacob struct nix *nix = roc_nix_to_nix_priv(roc_nix); 431bf6746eSJerin Jacob uint64_t *keyptr = (uint64_t *)key; 441bf6746eSJerin Jacob uint64_t val; 451bf6746eSJerin Jacob uint32_t idx; 461bf6746eSJerin Jacob 471bf6746eSJerin Jacob for (idx = 0; idx < (ROC_NIX_RSS_KEY_LEN >> 3); idx++) { 481bf6746eSJerin Jacob val = plt_read64(nix->base + NIX_LF_RX_SECRETX(idx)); 491bf6746eSJerin Jacob keyptr[idx] = plt_be_to_cpu_64(val); 501bf6746eSJerin Jacob } 511bf6746eSJerin Jacob } 521bf6746eSJerin Jacob 531bf6746eSJerin Jacob static int 541bf6746eSJerin Jacob nix_cn9k_rss_reta_set(struct nix *nix, uint8_t group, 556b7fcb7aSSatha Rao uint16_t reta[ROC_NIX_RSS_RETA_MAX], uint8_t lock_rx_ctx) 561bf6746eSJerin Jacob { 5744a9307cSRakesh Kudurumalla struct mbox *mbox = mbox_get((&nix->dev)->mbox); 581bf6746eSJerin Jacob struct nix_aq_enq_req *req; 591bf6746eSJerin Jacob uint16_t idx; 601bf6746eSJerin Jacob int rc; 611bf6746eSJerin Jacob 621bf6746eSJerin Jacob for (idx = 0; idx < nix->reta_sz; idx++) { 631bf6746eSJerin Jacob req = mbox_alloc_msg_nix_aq_enq(mbox); 641bf6746eSJerin Jacob if (!req) { 651bf6746eSJerin Jacob /* The shared memory buffer can be full. 661bf6746eSJerin Jacob * Flush it and retry 671bf6746eSJerin Jacob */ 681bf6746eSJerin Jacob rc = mbox_process(mbox); 691bf6746eSJerin Jacob if (rc < 0) 7044a9307cSRakesh Kudurumalla goto exit; 711bf6746eSJerin Jacob req = mbox_alloc_msg_nix_aq_enq(mbox); 7244a9307cSRakesh Kudurumalla if (!req) { 7344a9307cSRakesh Kudurumalla rc = NIX_ERR_NO_MEM; 7444a9307cSRakesh Kudurumalla goto exit; 7544a9307cSRakesh Kudurumalla } 761bf6746eSJerin Jacob } 771bf6746eSJerin Jacob req->rss.rq = reta[idx]; 781bf6746eSJerin Jacob /* Fill AQ info */ 791bf6746eSJerin Jacob req->qidx = (group * nix->reta_sz) + idx; 801bf6746eSJerin Jacob req->ctype = NIX_AQ_CTYPE_RSS; 811bf6746eSJerin Jacob req->op = NIX_AQ_INSTOP_INIT; 826b7fcb7aSSatha Rao 836b7fcb7aSSatha Rao if (!lock_rx_ctx) 846b7fcb7aSSatha Rao continue; 856b7fcb7aSSatha Rao 866b7fcb7aSSatha Rao req = mbox_alloc_msg_nix_aq_enq(mbox); 876b7fcb7aSSatha Rao if (!req) { 886b7fcb7aSSatha Rao /* The shared memory buffer can be full. 896b7fcb7aSSatha Rao * Flush it and retry 906b7fcb7aSSatha Rao */ 916b7fcb7aSSatha Rao rc = mbox_process(mbox); 926b7fcb7aSSatha Rao if (rc < 0) 9344a9307cSRakesh Kudurumalla goto exit; 946b7fcb7aSSatha Rao req = mbox_alloc_msg_nix_aq_enq(mbox); 9544a9307cSRakesh Kudurumalla if (!req) { 9644a9307cSRakesh Kudurumalla rc = NIX_ERR_NO_MEM; 9744a9307cSRakesh Kudurumalla goto exit; 9844a9307cSRakesh Kudurumalla } 996b7fcb7aSSatha Rao } 1006b7fcb7aSSatha Rao req->rss.rq = reta[idx]; 1016b7fcb7aSSatha Rao /* Fill AQ info */ 1026b7fcb7aSSatha Rao req->qidx = (group * nix->reta_sz) + idx; 1036b7fcb7aSSatha Rao req->ctype = NIX_AQ_CTYPE_RSS; 1046b7fcb7aSSatha Rao req->op = NIX_AQ_INSTOP_LOCK; 1051bf6746eSJerin Jacob } 1061bf6746eSJerin Jacob 1071bf6746eSJerin Jacob rc = mbox_process(mbox); 1081bf6746eSJerin Jacob if (rc < 0) 10944a9307cSRakesh Kudurumalla goto exit; 1101bf6746eSJerin Jacob 11144a9307cSRakesh Kudurumalla rc = 0; 11244a9307cSRakesh Kudurumalla exit: 11344a9307cSRakesh Kudurumalla mbox_put(mbox); 11444a9307cSRakesh Kudurumalla return rc; 1151bf6746eSJerin Jacob } 1161bf6746eSJerin Jacob 1171bf6746eSJerin Jacob static int 11886667e89SSatha Rao nix_cn10k_rss_reta_set(struct nix *nix, uint8_t group, uint16_t reta[ROC_NIX_RSS_RETA_MAX], 119*29a8df5cSHarman Kalra uint8_t lock_rx_ctx, uint16_t pf_func) 1201bf6746eSJerin Jacob { 12144a9307cSRakesh Kudurumalla struct mbox *mbox = mbox_get((&nix->dev)->mbox); 1221bf6746eSJerin Jacob struct nix_cn10k_aq_enq_req *req; 1231bf6746eSJerin Jacob uint16_t idx; 1241bf6746eSJerin Jacob int rc; 1251bf6746eSJerin Jacob 1261bf6746eSJerin Jacob for (idx = 0; idx < nix->reta_sz; idx++) { 1271bf6746eSJerin Jacob req = mbox_alloc_msg_nix_cn10k_aq_enq(mbox); 1281bf6746eSJerin Jacob if (!req) { 1291bf6746eSJerin Jacob /* The shared memory buffer can be full. 1301bf6746eSJerin Jacob * Flush it and retry 1311bf6746eSJerin Jacob */ 1321bf6746eSJerin Jacob rc = mbox_process(mbox); 1331bf6746eSJerin Jacob if (rc < 0) 13444a9307cSRakesh Kudurumalla goto exit; 1351bf6746eSJerin Jacob req = mbox_alloc_msg_nix_cn10k_aq_enq(mbox); 13644a9307cSRakesh Kudurumalla if (!req) { 13744a9307cSRakesh Kudurumalla rc = NIX_ERR_NO_MEM; 13844a9307cSRakesh Kudurumalla goto exit; 13944a9307cSRakesh Kudurumalla } 1401bf6746eSJerin Jacob } 141*29a8df5cSHarman Kalra if (pf_func) 142*29a8df5cSHarman Kalra req->hdr.pcifunc = pf_func; 143*29a8df5cSHarman Kalra 1441bf6746eSJerin Jacob req->rss.rq = reta[idx]; 1451bf6746eSJerin Jacob /* Fill AQ info */ 1461bf6746eSJerin Jacob req->qidx = (group * nix->reta_sz) + idx; 1471bf6746eSJerin Jacob req->ctype = NIX_AQ_CTYPE_RSS; 1481bf6746eSJerin Jacob req->op = NIX_AQ_INSTOP_INIT; 1496b7fcb7aSSatha Rao 1506b7fcb7aSSatha Rao if (!lock_rx_ctx) 1516b7fcb7aSSatha Rao continue; 1526b7fcb7aSSatha Rao 1536b7fcb7aSSatha Rao req = mbox_alloc_msg_nix_cn10k_aq_enq(mbox); 1546b7fcb7aSSatha Rao if (!req) { 1556b7fcb7aSSatha Rao /* The shared memory buffer can be full. 1566b7fcb7aSSatha Rao * Flush it and retry 1576b7fcb7aSSatha Rao */ 1586b7fcb7aSSatha Rao rc = mbox_process(mbox); 1596b7fcb7aSSatha Rao if (rc < 0) 16044a9307cSRakesh Kudurumalla goto exit; 1616b7fcb7aSSatha Rao req = mbox_alloc_msg_nix_cn10k_aq_enq(mbox); 16244a9307cSRakesh Kudurumalla if (!req) { 16344a9307cSRakesh Kudurumalla rc = NIX_ERR_NO_MEM; 16444a9307cSRakesh Kudurumalla goto exit; 16544a9307cSRakesh Kudurumalla } 1666b7fcb7aSSatha Rao } 167*29a8df5cSHarman Kalra if (pf_func) 168*29a8df5cSHarman Kalra req->hdr.pcifunc = pf_func; 1696b7fcb7aSSatha Rao req->rss.rq = reta[idx]; 1706b7fcb7aSSatha Rao /* Fill AQ info */ 1716b7fcb7aSSatha Rao req->qidx = (group * nix->reta_sz) + idx; 1726b7fcb7aSSatha Rao req->ctype = NIX_AQ_CTYPE_RSS; 1736b7fcb7aSSatha Rao req->op = NIX_AQ_INSTOP_LOCK; 1741bf6746eSJerin Jacob } 1751bf6746eSJerin Jacob 1761bf6746eSJerin Jacob rc = mbox_process(mbox); 1771bf6746eSJerin Jacob if (rc < 0) 17844a9307cSRakesh Kudurumalla goto exit; 1791bf6746eSJerin Jacob 18044a9307cSRakesh Kudurumalla rc = 0; 18144a9307cSRakesh Kudurumalla exit: 18244a9307cSRakesh Kudurumalla mbox_put(mbox); 18344a9307cSRakesh Kudurumalla return rc; 1841bf6746eSJerin Jacob } 1851bf6746eSJerin Jacob 18686667e89SSatha Rao static int 18786667e89SSatha Rao nix_rss_reta_set(struct nix *nix, uint8_t group, uint16_t reta[ROC_NIX_RSS_RETA_MAX], 188*29a8df5cSHarman Kalra uint8_t lock_rx_ctx, uint16_t pf_func) 18986667e89SSatha Rao { 19086667e89SSatha Rao struct mbox *mbox = mbox_get((&nix->dev)->mbox); 19186667e89SSatha Rao struct nix_cn20k_aq_enq_req *req; 19286667e89SSatha Rao uint16_t idx; 19386667e89SSatha Rao int rc; 19486667e89SSatha Rao 19586667e89SSatha Rao for (idx = 0; idx < nix->reta_sz; idx++) { 19686667e89SSatha Rao req = mbox_alloc_msg_nix_cn20k_aq_enq(mbox); 19786667e89SSatha Rao if (!req) { 19886667e89SSatha Rao /* The shared memory buffer can be full. 19986667e89SSatha Rao * Flush it and retry 20086667e89SSatha Rao */ 20186667e89SSatha Rao rc = mbox_process(mbox); 20286667e89SSatha Rao if (rc < 0) 20386667e89SSatha Rao goto exit; 20486667e89SSatha Rao req = mbox_alloc_msg_nix_cn20k_aq_enq(mbox); 20586667e89SSatha Rao if (!req) { 20686667e89SSatha Rao rc = NIX_ERR_NO_MEM; 20786667e89SSatha Rao goto exit; 20886667e89SSatha Rao } 20986667e89SSatha Rao } 21086667e89SSatha Rao req->rss.rq = reta[idx]; 21186667e89SSatha Rao /* Fill AQ info */ 21286667e89SSatha Rao req->qidx = (group * nix->reta_sz) + idx; 21386667e89SSatha Rao req->ctype = NIX_AQ_CTYPE_RSS; 21486667e89SSatha Rao req->op = NIX_AQ_INSTOP_INIT; 21586667e89SSatha Rao 21686667e89SSatha Rao if (!lock_rx_ctx) 21786667e89SSatha Rao continue; 21886667e89SSatha Rao 21986667e89SSatha Rao req = mbox_alloc_msg_nix_cn20k_aq_enq(mbox); 22086667e89SSatha Rao if (!req) { 22186667e89SSatha Rao /* The shared memory buffer can be full. 22286667e89SSatha Rao * Flush it and retry 22386667e89SSatha Rao */ 22486667e89SSatha Rao rc = mbox_process(mbox); 22586667e89SSatha Rao if (rc < 0) 22686667e89SSatha Rao goto exit; 22786667e89SSatha Rao req = mbox_alloc_msg_nix_cn20k_aq_enq(mbox); 22886667e89SSatha Rao if (!req) { 22986667e89SSatha Rao rc = NIX_ERR_NO_MEM; 23086667e89SSatha Rao goto exit; 23186667e89SSatha Rao } 23286667e89SSatha Rao } 233*29a8df5cSHarman Kalra if (pf_func) 234*29a8df5cSHarman Kalra req->hdr.pcifunc = pf_func; 23586667e89SSatha Rao req->rss.rq = reta[idx]; 23686667e89SSatha Rao /* Fill AQ info */ 23786667e89SSatha Rao req->qidx = (group * nix->reta_sz) + idx; 23886667e89SSatha Rao req->ctype = NIX_AQ_CTYPE_RSS; 23986667e89SSatha Rao req->op = NIX_AQ_INSTOP_LOCK; 24086667e89SSatha Rao } 24186667e89SSatha Rao 24286667e89SSatha Rao rc = mbox_process(mbox); 24386667e89SSatha Rao if (rc < 0) 24486667e89SSatha Rao goto exit; 24586667e89SSatha Rao 24686667e89SSatha Rao rc = 0; 24786667e89SSatha Rao exit: 24886667e89SSatha Rao mbox_put(mbox); 24986667e89SSatha Rao return rc; 25086667e89SSatha Rao } 25186667e89SSatha Rao 2521bf6746eSJerin Jacob int 253*29a8df5cSHarman Kalra nix_rss_reta_pffunc_set(struct roc_nix *roc_nix, uint8_t group, uint16_t reta[ROC_NIX_RSS_RETA_MAX], 254*29a8df5cSHarman Kalra uint16_t pf_func) 2551bf6746eSJerin Jacob { 2561bf6746eSJerin Jacob struct nix *nix = roc_nix_to_nix_priv(roc_nix); 2571bf6746eSJerin Jacob int rc; 2581bf6746eSJerin Jacob 2591bf6746eSJerin Jacob if (group >= ROC_NIX_RSS_GRPS) 2601bf6746eSJerin Jacob return NIX_ERR_PARAM; 2611bf6746eSJerin Jacob 2621bf6746eSJerin Jacob if (roc_model_is_cn9k()) 263*29a8df5cSHarman Kalra rc = nix_cn9k_rss_reta_set(nix, group, reta, roc_nix->lock_rx_ctx); 26486667e89SSatha Rao else if (roc_model_is_cn10k()) 265*29a8df5cSHarman Kalra rc = nix_cn10k_rss_reta_set(nix, group, reta, roc_nix->lock_rx_ctx, pf_func); 2661bf6746eSJerin Jacob else 267*29a8df5cSHarman Kalra rc = nix_rss_reta_set(nix, group, reta, roc_nix->lock_rx_ctx, pf_func); 2681bf6746eSJerin Jacob if (rc) 2691bf6746eSJerin Jacob return rc; 2701bf6746eSJerin Jacob 271dce7f0c2SKommula Shiva Shankar memcpy(&nix->reta[group], reta, sizeof(uint16_t) * ROC_NIX_RSS_RETA_MAX); 2721bf6746eSJerin Jacob return 0; 2731bf6746eSJerin Jacob } 2741bf6746eSJerin Jacob 2751bf6746eSJerin Jacob int 276*29a8df5cSHarman Kalra roc_nix_rss_reta_set(struct roc_nix *roc_nix, uint8_t group, uint16_t reta[ROC_NIX_RSS_RETA_MAX]) 277*29a8df5cSHarman Kalra { 278*29a8df5cSHarman Kalra return nix_rss_reta_pffunc_set(roc_nix, group, reta, 0); 279*29a8df5cSHarman Kalra } 280*29a8df5cSHarman Kalra 281*29a8df5cSHarman Kalra int 282*29a8df5cSHarman Kalra roc_nix_rss_reta_get(struct roc_nix *roc_nix, uint8_t group, uint16_t reta[ROC_NIX_RSS_RETA_MAX]) 2831bf6746eSJerin Jacob { 2841bf6746eSJerin Jacob struct nix *nix = roc_nix_to_nix_priv(roc_nix); 2851bf6746eSJerin Jacob 2861bf6746eSJerin Jacob if (group >= ROC_NIX_RSS_GRPS) 2871bf6746eSJerin Jacob return NIX_ERR_PARAM; 2881bf6746eSJerin Jacob 289dce7f0c2SKommula Shiva Shankar memcpy(reta, &nix->reta[group], sizeof(uint16_t) * ROC_NIX_RSS_RETA_MAX); 2901bf6746eSJerin Jacob return 0; 2911bf6746eSJerin Jacob } 2921bf6746eSJerin Jacob 2931bf6746eSJerin Jacob int 294*29a8df5cSHarman Kalra nix_rss_flowkey_pffunc_set(struct roc_nix *roc_nix, uint8_t *alg_idx, uint32_t flowkey, 295*29a8df5cSHarman Kalra uint8_t group, int mcam_index, uint16_t pf_func) 2961bf6746eSJerin Jacob { 2971bf6746eSJerin Jacob struct nix *nix = roc_nix_to_nix_priv(roc_nix); 2981bf6746eSJerin Jacob struct nix_rss_flowkey_cfg_rsp *rss_rsp; 29944a9307cSRakesh Kudurumalla struct mbox *mbox = mbox_get((&nix->dev)->mbox); 3001bf6746eSJerin Jacob struct nix_rss_flowkey_cfg *cfg; 3011bf6746eSJerin Jacob int rc = -ENOSPC; 3021bf6746eSJerin Jacob 30344a9307cSRakesh Kudurumalla if (group >= ROC_NIX_RSS_GRPS) { 30444a9307cSRakesh Kudurumalla rc = NIX_ERR_PARAM; 30544a9307cSRakesh Kudurumalla goto exit; 30644a9307cSRakesh Kudurumalla } 3071bf6746eSJerin Jacob 3081bf6746eSJerin Jacob cfg = mbox_alloc_msg_nix_rss_flowkey_cfg(mbox); 3091bf6746eSJerin Jacob if (cfg == NULL) 31044a9307cSRakesh Kudurumalla goto exit; 311*29a8df5cSHarman Kalra if (pf_func) 312*29a8df5cSHarman Kalra cfg->hdr.pcifunc = pf_func; 313*29a8df5cSHarman Kalra 3141bf6746eSJerin Jacob cfg->flowkey_cfg = flowkey; 3151bf6746eSJerin Jacob cfg->mcam_index = mcam_index; /* -1 indicates default group */ 3161bf6746eSJerin Jacob cfg->group = group; /* 0 is default group */ 3171bf6746eSJerin Jacob rc = mbox_process_msg(mbox, (void *)&rss_rsp); 3181bf6746eSJerin Jacob if (rc) 31944a9307cSRakesh Kudurumalla goto exit; 3201bf6746eSJerin Jacob if (alg_idx) 3211bf6746eSJerin Jacob *alg_idx = rss_rsp->alg_idx; 3221bf6746eSJerin Jacob 32344a9307cSRakesh Kudurumalla exit: 32444a9307cSRakesh Kudurumalla mbox_put(mbox); 3251bf6746eSJerin Jacob return rc; 3261bf6746eSJerin Jacob } 3271bf6746eSJerin Jacob 3281bf6746eSJerin Jacob int 329*29a8df5cSHarman Kalra roc_nix_rss_flowkey_set(struct roc_nix *roc_nix, uint8_t *alg_idx, uint32_t flowkey, uint8_t group, 330*29a8df5cSHarman Kalra int mcam_index) 331*29a8df5cSHarman Kalra { 332*29a8df5cSHarman Kalra return nix_rss_flowkey_pffunc_set(roc_nix, alg_idx, flowkey, group, mcam_index, 0); 333*29a8df5cSHarman Kalra } 334*29a8df5cSHarman Kalra 335*29a8df5cSHarman Kalra int 3361bf6746eSJerin Jacob roc_nix_rss_default_setup(struct roc_nix *roc_nix, uint32_t flowkey) 3371bf6746eSJerin Jacob { 3381bf6746eSJerin Jacob struct nix *nix = roc_nix_to_nix_priv(roc_nix); 3391bf6746eSJerin Jacob uint16_t idx, qcnt = nix->nb_rx_queues; 3401bf6746eSJerin Jacob uint16_t reta[ROC_NIX_RSS_RETA_MAX]; 3411bf6746eSJerin Jacob uint8_t key[ROC_NIX_RSS_KEY_LEN]; 3421bf6746eSJerin Jacob uint8_t alg_idx; 3431bf6746eSJerin Jacob int rc; 3441bf6746eSJerin Jacob 3451bf6746eSJerin Jacob roc_nix_rss_key_default_fill(roc_nix, key); 3461bf6746eSJerin Jacob roc_nix_rss_key_set(roc_nix, key); 3471bf6746eSJerin Jacob 3481bf6746eSJerin Jacob /* Update default RSS RETA */ 3491bf6746eSJerin Jacob for (idx = 0; idx < nix->reta_sz; idx++) 3501bf6746eSJerin Jacob reta[idx] = idx % qcnt; 3511bf6746eSJerin Jacob rc = roc_nix_rss_reta_set(roc_nix, 0, reta); 3521bf6746eSJerin Jacob if (rc) { 3531bf6746eSJerin Jacob plt_err("Failed to set RSS reta table rc=%d", rc); 3541bf6746eSJerin Jacob goto fail; 3551bf6746eSJerin Jacob } 3561bf6746eSJerin Jacob 3571bf6746eSJerin Jacob /* Update the default flowkey */ 3581bf6746eSJerin Jacob rc = roc_nix_rss_flowkey_set(roc_nix, &alg_idx, flowkey, 3591bf6746eSJerin Jacob ROC_NIX_RSS_GROUP_DEFAULT, -1); 3601bf6746eSJerin Jacob if (rc) { 3611bf6746eSJerin Jacob plt_err("Failed to set RSS flowkey rc=%d", rc); 3621bf6746eSJerin Jacob goto fail; 3631bf6746eSJerin Jacob } 3641bf6746eSJerin Jacob 3651bf6746eSJerin Jacob nix->rss_alg_idx = alg_idx; 3661bf6746eSJerin Jacob fail: 3671bf6746eSJerin Jacob return rc; 3681bf6746eSJerin Jacob } 369