|
@@ -122,6 +122,7 @@ static const u16 bnxt_async_events_arr[] = {
|
|
HWRM_ASYNC_EVENT_CMPL_EVENT_ID_LINK_STATUS_CHANGE,
|
|
HWRM_ASYNC_EVENT_CMPL_EVENT_ID_LINK_STATUS_CHANGE,
|
|
HWRM_ASYNC_EVENT_CMPL_EVENT_ID_PF_DRVR_UNLOAD,
|
|
HWRM_ASYNC_EVENT_CMPL_EVENT_ID_PF_DRVR_UNLOAD,
|
|
HWRM_ASYNC_EVENT_CMPL_EVENT_ID_PORT_CONN_NOT_ALLOWED,
|
|
HWRM_ASYNC_EVENT_CMPL_EVENT_ID_PORT_CONN_NOT_ALLOWED,
|
|
|
|
+ HWRM_ASYNC_EVENT_CMPL_EVENT_ID_LINK_SPEED_CFG_CHANGE,
|
|
};
|
|
};
|
|
|
|
|
|
static bool bnxt_vf_pciid(enum board_idx idx)
|
|
static bool bnxt_vf_pciid(enum board_idx idx)
|
|
@@ -1257,6 +1258,21 @@ static int bnxt_async_event_process(struct bnxt *bp,
|
|
|
|
|
|
/* TODO CHIMP_FW: Define event id's for link change, error etc */
|
|
/* TODO CHIMP_FW: Define event id's for link change, error etc */
|
|
switch (event_id) {
|
|
switch (event_id) {
|
|
|
|
+ case HWRM_ASYNC_EVENT_CMPL_EVENT_ID_LINK_SPEED_CFG_CHANGE: {
|
|
|
|
+ u32 data1 = le32_to_cpu(cmpl->event_data1);
|
|
|
|
+ struct bnxt_link_info *link_info = &bp->link_info;
|
|
|
|
+
|
|
|
|
+ if (BNXT_VF(bp))
|
|
|
|
+ goto async_event_process_exit;
|
|
|
|
+ if (data1 & 0x20000) {
|
|
|
|
+ u16 fw_speed = link_info->force_link_speed;
|
|
|
|
+ u32 speed = bnxt_fw_to_ethtool_speed(fw_speed);
|
|
|
|
+
|
|
|
|
+ netdev_warn(bp->dev, "Link speed %d no longer supported\n",
|
|
|
|
+ speed);
|
|
|
|
+ }
|
|
|
|
+ /* fall thru */
|
|
|
|
+ }
|
|
case HWRM_ASYNC_EVENT_CMPL_EVENT_ID_LINK_STATUS_CHANGE:
|
|
case HWRM_ASYNC_EVENT_CMPL_EVENT_ID_LINK_STATUS_CHANGE:
|
|
set_bit(BNXT_LINK_CHNG_SP_EVENT, &bp->sp_event);
|
|
set_bit(BNXT_LINK_CHNG_SP_EVENT, &bp->sp_event);
|
|
break;
|
|
break;
|