net/bnxt: fix allocation of LED config info
[dpdk.git] / drivers / net / bnxt / bnxt_hwrm.c
index ebf73e4..1480009 100644 (file)
@@ -164,8 +164,9 @@ static int bnxt_hwrm_send_message(struct bnxt *bp, void *msg,
                    rte_cpu_to_le_16(req->req_type) == HWRM_VER_GET)
                        return -ETIMEDOUT;
 
-               PMD_DRV_LOG(ERR, "Error(timeout) sending msg 0x%04x\n",
-                           req->req_type);
+               PMD_DRV_LOG(ERR,
+                           "Error(timeout) sending msg 0x%04x, seq_id %d\n",
+                           req->req_type, req->seq_id);
                return -ETIMEDOUT;
        }
        return 0;
@@ -2476,13 +2477,6 @@ void bnxt_free_hwrm_rx_ring(struct bnxt *bp, int queue_index)
                if (BNXT_HAS_RING_GRPS(bp))
                        bp->grp_info[queue_index].rx_fw_ring_id =
                                                        INVALID_HW_RING_ID;
-               memset(rxr->rx_desc_ring, 0,
-                      rxr->rx_ring_struct->ring_size *
-                      sizeof(*rxr->rx_desc_ring));
-               memset(rxr->rx_buf_ring, 0,
-                      rxr->rx_ring_struct->ring_size *
-                      sizeof(*rxr->rx_buf_ring));
-               rxr->rx_prod = 0;
        }
        ring = rxr->ag_ring_struct;
        if (ring->fw_ring_id != INVALID_HW_RING_ID) {
@@ -2490,11 +2484,6 @@ void bnxt_free_hwrm_rx_ring(struct bnxt *bp, int queue_index)
                                    BNXT_CHIP_THOR(bp) ?
                                    HWRM_RING_FREE_INPUT_RING_TYPE_RX_AGG :
                                    HWRM_RING_FREE_INPUT_RING_TYPE_RX);
-               ring->fw_ring_id = INVALID_HW_RING_ID;
-               memset(rxr->ag_buf_ring, 0,
-                      rxr->ag_ring_struct->ring_size *
-                      sizeof(*rxr->ag_buf_ring));
-               rxr->ag_prod = 0;
                if (BNXT_HAS_RING_GRPS(bp))
                        bp->grp_info[queue_index].ag_fw_ring_id =
                                                        INVALID_HW_RING_ID;
@@ -2774,6 +2763,10 @@ static uint16_t bnxt_parse_eth_link_speed(uint32_t conf_link_speed)
                eth_link_speed =
                        HWRM_PORT_PHY_CFG_INPUT_FORCE_LINK_SPEED_100GB;
                break;
+       case ETH_LINK_SPEED_200G:
+               eth_link_speed =
+                       HWRM_PORT_PHY_CFG_INPUT_FORCE_LINK_SPEED_200GB;
+               break;
        default:
                PMD_DRV_LOG(ERR,
                        "Unsupported link speed %d; default to AUTO\n",
@@ -2786,7 +2779,8 @@ static uint16_t bnxt_parse_eth_link_speed(uint32_t conf_link_speed)
 #define BNXT_SUPPORTED_SPEEDS (ETH_LINK_SPEED_100M | ETH_LINK_SPEED_100M_HD | \
                ETH_LINK_SPEED_1G | ETH_LINK_SPEED_2_5G | \
                ETH_LINK_SPEED_10G | ETH_LINK_SPEED_20G | ETH_LINK_SPEED_25G | \
-               ETH_LINK_SPEED_40G | ETH_LINK_SPEED_50G | ETH_LINK_SPEED_100G)
+               ETH_LINK_SPEED_40G | ETH_LINK_SPEED_50G | \
+               ETH_LINK_SPEED_100G | ETH_LINK_SPEED_200G)
 
 static int bnxt_valid_link_speed(uint32_t link_speed, uint16_t port_id)
 {
@@ -2852,6 +2846,8 @@ bnxt_parse_eth_link_speed_mask(struct bnxt *bp, uint32_t link_speed)
                ret |= HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_SPEED_MASK_50GB;
        if (link_speed & ETH_LINK_SPEED_100G)
                ret |= HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_SPEED_MASK_100GB;
+       if (link_speed & ETH_LINK_SPEED_200G)
+               ret |= HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_SPEED_MASK_200GB;
        return ret;
 }
 
@@ -2887,6 +2883,9 @@ static uint32_t bnxt_parse_hw_link_speed(uint16_t hw_link_speed)
        case HWRM_PORT_PHY_QCFG_OUTPUT_LINK_SPEED_100GB:
                eth_link_speed = ETH_SPEED_NUM_100G;
                break;
+       case HWRM_PORT_PHY_QCFG_OUTPUT_LINK_SPEED_200GB:
+               eth_link_speed = ETH_SPEED_NUM_200G;
+               break;
        case HWRM_PORT_PHY_QCFG_OUTPUT_LINK_SPEED_2GB:
        default:
                PMD_DRV_LOG(ERR, "HWRM link speed %d not defined\n",
@@ -3901,17 +3900,17 @@ int bnxt_hwrm_port_led_qcaps(struct bnxt *bp)
        if (resp->num_leds > 0 && resp->num_leds < BNXT_MAX_LED) {
                unsigned int i;
 
-               bp->num_leds = resp->num_leds;
+               bp->leds->num_leds = resp->num_leds;
                memcpy(bp->leds, &resp->led0_id,
-                       sizeof(bp->leds[0]) * bp->num_leds);
-               for (i = 0; i < bp->num_leds; i++) {
+                       sizeof(bp->leds[0]) * bp->leds->num_leds);
+               for (i = 0; i < bp->leds->num_leds; i++) {
                        struct bnxt_led_info *led = &bp->leds[i];
 
                        uint16_t caps = led->led_state_caps;
 
                        if (!led->led_group_id ||
                                !BNXT_LED_ALT_BLINK_CAP(caps)) {
-                               bp->num_leds = 0;
+                               bp->leds->num_leds = 0;
                                break;
                        }
                }
@@ -3931,7 +3930,7 @@ int bnxt_hwrm_port_led_cfg(struct bnxt *bp, bool led_on)
        uint16_t duration = 0;
        int rc, i;
 
-       if (!bp->num_leds || BNXT_VF(bp))
+       if (!bp->leds->num_leds || BNXT_VF(bp))
                return -EOPNOTSUPP;
 
        HWRM_PREP(&req, HWRM_PORT_LED_CFG, BNXT_USE_CHIMP_MB);
@@ -3941,9 +3940,9 @@ int bnxt_hwrm_port_led_cfg(struct bnxt *bp, bool led_on)
                duration = rte_cpu_to_le_16(500);
        }
        req.port_id = bp->pf.port_id;
-       req.num_leds = bp->num_leds;
+       req.num_leds = bp->leds->num_leds;
        led_cfg = (struct bnxt_led_cfg *)&req.led0_id;
-       for (i = 0; i < bp->num_leds; i++, led_cfg++) {
+       for (i = 0; i < bp->leds->num_leds; i++, led_cfg++) {
                req.enables |= BNXT_LED_DFLT_ENABLES(i);
                led_cfg->led_id = bp->leds[i].led_id;
                led_cfg->led_state = led_state;
@@ -4706,7 +4705,7 @@ int bnxt_hwrm_func_backing_store_qcaps(struct bnxt *bp)
        struct bnxt_ctx_pg_info *ctx_pg;
        struct bnxt_ctx_mem_info *ctx;
        int total_alloc_len;
-       int rc, i;
+       int rc, i, tqm_rings;
 
        if (!BNXT_CHIP_THOR(bp) ||
            bp->hwrm_spec_code < HWRM_VERSION_1_9_2 ||
@@ -4726,17 +4725,6 @@ int bnxt_hwrm_func_backing_store_qcaps(struct bnxt *bp)
                goto ctx_err;
        }
 
-       ctx_pg = rte_malloc("bnxt_ctx_pg_mem",
-                           sizeof(*ctx_pg) * BNXT_MAX_Q,
-                           RTE_CACHE_LINE_SIZE);
-       if (!ctx_pg) {
-               rc = -ENOMEM;
-               goto ctx_err;
-       }
-       for (i = 0; i < BNXT_MAX_Q; i++, ctx_pg++)
-               ctx->tqm_mem[i] = ctx_pg;
-
-       bp->ctx = ctx;
        ctx->qp_max_entries = rte_le_to_cpu_32(resp->qp_max_entries);
        ctx->qp_min_qp1_entries =
                rte_le_to_cpu_16(resp->qp_min_qp1_entries);
@@ -4772,6 +4760,24 @@ int bnxt_hwrm_func_backing_store_qcaps(struct bnxt *bp)
        ctx->mrav_entry_size = rte_le_to_cpu_16(resp->mrav_entry_size);
        ctx->tim_entry_size = rte_le_to_cpu_16(resp->tim_entry_size);
        ctx->tim_max_entries = rte_le_to_cpu_32(resp->tim_max_entries);
+       ctx->tqm_fp_rings_count = resp->tqm_fp_rings_count;
+
+       if (!ctx->tqm_fp_rings_count)
+               ctx->tqm_fp_rings_count = bp->max_q;
+
+       tqm_rings = ctx->tqm_fp_rings_count + 1;
+
+       ctx_pg = rte_malloc("bnxt_ctx_pg_mem",
+                           sizeof(*ctx_pg) * tqm_rings,
+                           RTE_CACHE_LINE_SIZE);
+       if (!ctx_pg) {
+               rc = -ENOMEM;
+               goto ctx_err;
+       }
+       for (i = 0; i < tqm_rings; i++, ctx_pg++)
+               ctx->tqm_mem[i] = ctx_pg;
+
+       bp->ctx = ctx;
 ctx_err:
        HWRM_UNLOCK();
        return rc;