From ae5dbad4c049b3a6c120ec21efc0e5c11266dd35 Mon Sep 17 00:00:00 2001 From: erj Date: Thu, 12 May 2016 18:20:59 +0000 Subject: [PATCH] ixl: Update to 1.4.13-k. Changes: Shannon Nelson i40e-shared: set shared bit for multicast filters Piotr Raczynski i40e-shared: Bump AQ minor version for FVL/FPK Eric Joyner ixl: Remove call to i40e_aq_set_mac_config() in init path. Eric Joyner ixl: Always add interface mac address to driver+hw filter list. Eric Joyner ixl: Edit comments. Eric Joyner ixl: Add more descriptive sysctl help messages. Eric Joyner ixl: Report more info in link_status sysctl. Eric Joyner ixl: Flip set_aq_phy_int_mask mask bits. Differential Revision: https://reviews.freebsd.org/D6211 Reviewed by: sbruno, kmacy, jeffrey.e.pieper@intel.com MFC after: 2 weeks Sponsored by: Intel Corporation --- sys/dev/ixl/i40e_common.c | 7 ++++++- sys/dev/ixl/i40e_type.h | 2 +- sys/dev/ixl/if_ixl.c | 44 +++++++++++++++++++-------------------- sys/dev/ixl/ixl_pf.h | 31 +++++++++++++++++++-------- 4 files changed, 51 insertions(+), 33 deletions(-) diff --git a/sys/dev/ixl/i40e_common.c b/sys/dev/ixl/i40e_common.c index 5538450455a5..826b777aba09 100644 --- a/sys/dev/ixl/i40e_common.c +++ b/sys/dev/ixl/i40e_common.c @@ -2564,6 +2564,7 @@ enum i40e_status_code i40e_aq_add_macvlan(struct i40e_hw *hw, u16 seid, (struct i40e_aqc_macvlan *)&desc.params.raw; enum i40e_status_code status; u16 buf_size; + int i; if (count == 0 || !mv_list || !hw) return I40E_ERR_PARAM; @@ -2577,12 +2578,16 @@ enum i40e_status_code i40e_aq_add_macvlan(struct i40e_hw *hw, u16 seid, cmd->seid[1] = 0; cmd->seid[2] = 0; + for (i = 0; i < count; i++) + if (I40E_IS_MULTICAST(mv_list[i].mac_addr)) + mv_list[i].flags |= I40E_AQC_MACVLAN_ADD_USE_SHARED_MAC; + desc.flags |= CPU_TO_LE16((u16)(I40E_AQ_FLAG_BUF | I40E_AQ_FLAG_RD)); if (buf_size > I40E_AQ_LARGE_BUF) desc.flags |= CPU_TO_LE16((u16)I40E_AQ_FLAG_LB); status = i40e_asq_send_command(hw, &desc, mv_list, buf_size, - cmd_details); + cmd_details); return status; } diff --git a/sys/dev/ixl/i40e_type.h b/sys/dev/ixl/i40e_type.h index 038e01ca902f..c0151e1092b5 100644 --- a/sys/dev/ixl/i40e_type.h +++ b/sys/dev/ixl/i40e_type.h @@ -162,7 +162,7 @@ enum i40e_memcpy_type { }; -#define I40E_FW_API_VERSION_MINOR_X710 0x0004 +#define I40E_FW_API_VERSION_MINOR_X710 0x0005 /* These are structs for managing the hardware information and the operations. diff --git a/sys/dev/ixl/if_ixl.c b/sys/dev/ixl/if_ixl.c index 2ae906c43672..44de2ad5792b 100644 --- a/sys/dev/ixl/if_ixl.c +++ b/sys/dev/ixl/if_ixl.c @@ -48,7 +48,7 @@ /********************************************************************* * Driver version *********************************************************************/ -char ixl_driver_version[] = "1.4.12-k"; +char ixl_driver_version[] = "1.4.13-k"; /********************************************************************* * PCI Device ID Table @@ -1086,10 +1086,11 @@ ixl_init_locked(struct ixl_pf *pf) "change failed!!\n"); return; } else { - ixl_add_filter(vsi, hw->mac.addr, IXL_VLAN_ANY); } } + ixl_add_filter(vsi, hw->mac.addr, IXL_VLAN_ANY); + /* Set the various hardware offload abilities */ ifp->if_hwassist = 0; if (ifp->if_capenable & IFCAP_TSO) @@ -1138,14 +1139,6 @@ ixl_init_locked(struct ixl_pf *pf) ixl_reconfigure_filters(vsi); - /* Set MTU in hardware*/ - int aq_error = i40e_aq_set_mac_config(hw, vsi->max_frame_size, - TRUE, 0, NULL); - if (aq_error) - device_printf(vsi->dev, - "aq_set_mac_config in init error, code %d\n", - aq_error); - /* And now turn on interrupts */ ixl_enable_intr(vsi); @@ -1163,7 +1156,6 @@ ixl_init_locked(struct ixl_pf *pf) return; } -// XXX: super experimental stuff static int ixl_teardown_hw_structs(struct ixl_pf *pf) { @@ -1918,6 +1910,8 @@ ixl_del_multi(struct ixl_vsi *vsi) * This routine checks for link status,updates statistics, * and runs the watchdog check. * + * Only runs when the driver is configured UP and RUNNING. + * **********************************************************************/ static void @@ -4835,12 +4829,12 @@ ixl_add_device_sysctls(struct ixl_pf *pf) SYSCTL_ADD_PROC(device_get_sysctl_ctx(dev), SYSCTL_CHILDREN(device_get_sysctl_tree(dev)), OID_AUTO, "fc", CTLTYPE_INT | CTLFLAG_RW, - pf, 0, ixl_set_flowcntl, "I", "Flow Control"); + pf, 0, ixl_set_flowcntl, "I", IXL_SYSCTL_HELP_FC); SYSCTL_ADD_PROC(device_get_sysctl_ctx(dev), SYSCTL_CHILDREN(device_get_sysctl_tree(dev)), OID_AUTO, "advertise_speed", CTLTYPE_INT | CTLFLAG_RW, - pf, 0, ixl_set_advertise, "I", "Advertised Speed"); + pf, 0, ixl_set_advertise, "I", IXL_SYSCTL_HELP_SET_ADVERTISE); SYSCTL_ADD_PROC(device_get_sysctl_ctx(dev), SYSCTL_CHILDREN(device_get_sysctl_tree(dev)), @@ -4878,21 +4872,16 @@ ixl_add_device_sysctls(struct ixl_pf *pf) OID_AUTO, "debug", CTLTYPE_INT|CTLFLAG_RW, pf, 0, ixl_debug_info, "I", "Debug Information"); - /* Debug shared-code message level */ + /* Shared-code debug message level */ SYSCTL_ADD_UINT(device_get_sysctl_ctx(dev), SYSCTL_CHILDREN(device_get_sysctl_tree(dev)), OID_AUTO, "debug_mask", CTLFLAG_RW, &pf->hw.debug_mask, 0, "Debug Message Level"); - SYSCTL_ADD_UINT(device_get_sysctl_ctx(dev), - SYSCTL_CHILDREN(device_get_sysctl_tree(dev)), - OID_AUTO, "vc_debug_level", CTLFLAG_RW, &pf->vc_debug_lvl, - 0, "PF/VF Virtual Channel debug level"); - SYSCTL_ADD_PROC(device_get_sysctl_ctx(dev), SYSCTL_CHILDREN(device_get_sysctl_tree(dev)), OID_AUTO, "link_status", CTLTYPE_STRING | CTLFLAG_RD, - pf, 0, ixl_sysctl_link_status, "A", "Current Link Status"); + pf, 0, ixl_sysctl_link_status, "A", IXL_SYSCTL_HELP_LINK_STATUS); SYSCTL_ADD_PROC(device_get_sysctl_ctx(dev), SYSCTL_CHILDREN(device_get_sysctl_tree(dev)), @@ -4913,6 +4902,13 @@ ixl_add_device_sysctls(struct ixl_pf *pf) SYSCTL_CHILDREN(device_get_sysctl_tree(dev)), OID_AUTO, "switch_config", CTLTYPE_STRING | CTLFLAG_RD, pf, 0, ixl_sysctl_switch_config, "A", "HW Switch Configuration"); + +#ifdef PCI_IOV + SYSCTL_ADD_UINT(device_get_sysctl_ctx(dev), + SYSCTL_CHILDREN(device_get_sysctl_tree(dev)), + OID_AUTO, "vc_debug_level", CTLFLAG_RW, &pf->vc_debug_lvl, + 0, "PF/VF Virtual Channel debug level"); +#endif #endif } @@ -5325,10 +5321,13 @@ ixl_sysctl_link_status(SYSCTL_HANDLER_ARGS) "Speed : %#04x\n" "Link info: %#04x\n" "AN info : %#04x\n" - "Ext info : %#04x", + "Ext info : %#04x\n" + "Max Frame: %d\n" + "Pacing : %#04x", link_status.phy_type, link_status.link_speed, link_status.link_info, link_status.an_info, - link_status.ext_info); + link_status.ext_info, link_status.max_frame_size, + link_status.pacing); return (sysctl_handle_string(oidp, buf, strlen(buf), req)); } @@ -5683,6 +5682,7 @@ ixl_vf_alloc_vsi(struct ixl_pf *pf, struct ixl_vf *vf) if (vf->vf_flags & VF_FLAG_MAC_ANTI_SPOOF) vsi_ctx.info.sec_flags |= I40E_AQ_VSI_SEC_FLAG_ENABLE_MAC_CHK; + /* TODO: If a port VLAN is set, then this needs to be changed */ vsi_ctx.info.valid_sections |= htole16(I40E_AQ_VSI_PROP_VLAN_VALID); vsi_ctx.info.port_vlan_flags = I40E_AQ_VSI_PVLAN_MODE_ALL | I40E_AQ_VSI_PVLAN_EMOD_NOTHING; diff --git a/sys/dev/ixl/ixl_pf.h b/sys/dev/ixl/ixl_pf.h index 3859d90763f5..e02988422f65 100644 --- a/sys/dev/ixl/ixl_pf.h +++ b/sys/dev/ixl/ixl_pf.h @@ -122,16 +122,29 @@ struct ixl_pf { (((((((('E' << 4) + '1') << 4) + 'K') << 4) + 'G') << 4) | 5) #define IXL_DEFAULT_PHY_INT_MASK \ - (I40E_AQ_EVENT_LINK_UPDOWN | I40E_AQ_EVENT_MODULE_QUAL_FAIL) + ((~(I40E_AQ_EVENT_LINK_UPDOWN | I40E_AQ_EVENT_MODULE_QUAL_FAIL \ + | I40E_AQ_EVENT_MEDIA_NA)) & 0x3FF) -#define IXL_SET_ADVERTISE_HELP \ -"Control link advertise speed:\n" \ -"\tFlags:\n" \ -"\t\t0x1 - advertise 100 Mb\n" \ -"\t\t0x2 - advertise 1G\n" \ -"\t\t0x4 - advertise 10G\n" \ -"\t\t0x8 - advertise 20G\n\n" \ -"\tDoes not work on 40G devices." +/* Sysctl help messages; displayed with "sysctl -d" */ +#define IXL_SYSCTL_HELP_SET_ADVERTISE \ +"\nControl advertised link speed.\n" \ +"Flags:\n" \ +"\t0x1 - advertise 100M\n" \ +"\t0x2 - advertise 1G\n" \ +"\t0x4 - advertise 10G\n" \ +"\t0x8 - advertise 20G\n\n" \ +"Operation not supported on 40G devices." + +#define IXL_SYSCTL_HELP_FC \ +"\nSet flow control mode using the values below.\n" \ +"\t0 - off\n" \ +"\t1 - rx pause\n" \ +"\t2 - tx pause\n" \ +"\t3 - tx and rx pause" + +#define IXL_SYSCTL_HELP_LINK_STATUS \ +"\nExecutes a \"Get Link Status\" command on the Admin Queue, and displays" \ +" the response." \ #define I40E_VC_DEBUG(pf, level, ...) \ do { \