* [Intel-wired-lan] [next PATCH S29 01/14] i40e: Add functions to blink led on 10GBaseT PHY
2016-02-18 0:12 [Intel-wired-lan] [next PATCH S29 00/14] i40e/i40evf updates Avinash Dayanand
@ 2016-02-18 0:12 ` Avinash Dayanand
2016-02-18 17:18 ` Bowers, AndrewX
2016-02-18 0:12 ` [Intel-wired-lan] [next PATCH S29 02/14] i40e: Fix led blink capability for " Avinash Dayanand
` (12 subsequent siblings)
13 siblings, 1 reply; 32+ messages in thread
From: Avinash Dayanand @ 2016-02-18 0:12 UTC (permalink / raw)
To: intel-wired-lan
From: Carolyn Wyborny <carolyn.wyborny@intel.com>
This patch adds functions to blink led on devices using
10GBaseT PHY since MAC registers used in other designs
do not work in this device configuration.
Signed-off-by: Carolyn Wyborny <carolyn.wyborny@intel.com>
Change-ID: Id4b88c93c649fd2b88073a00b42867a77c761ca3
---
drivers/net/ethernet/intel/i40e/i40e_common.c | 329 +++++++++++++++++++++
drivers/net/ethernet/intel/i40e/i40e_prototype.h | 13 +
drivers/net/ethernet/intel/i40e/i40e_type.h | 16 +
drivers/net/ethernet/intel/i40evf/i40e_prototype.h | 7 +
4 files changed, 365 insertions(+)
diff --git a/drivers/net/ethernet/intel/i40e/i40e_common.c b/drivers/net/ethernet/intel/i40e/i40e_common.c
index f923933..447729f 100644
--- a/drivers/net/ethernet/intel/i40e/i40e_common.c
+++ b/drivers/net/ethernet/intel/i40e/i40e_common.c
@@ -4214,3 +4214,332 @@ i40e_status i40e_aq_configure_partition_bw(struct i40e_hw *hw,
return status;
}
+
+/**
+ * i40e_read_phy_register
+ * @hw: pointer to the HW structure
+ * @page: registers page number
+ * @reg: register address in the page
+ * @phy_adr: PHY address on MDIO interface
+ * @value: PHY register value
+ *
+ * Reads specified PHY register value
+ **/
+i40e_status i40e_read_phy_register(struct i40e_hw *hw,
+ u8 page, u16 reg, u8 phy_addr,
+ u16 *value)
+{
+ i40e_status status = I40E_ERR_TIMEOUT;
+ u32 command = 0;
+ u16 retry = 1000;
+ u8 port_num = hw->func_caps.mdio_port_num;
+
+ command = (reg << I40E_GLGEN_MSCA_MDIADD_SHIFT) |
+ (page << I40E_GLGEN_MSCA_DEVADD_SHIFT) |
+ (phy_addr << I40E_GLGEN_MSCA_PHYADD_SHIFT) |
+ (I40E_MDIO_OPCODE_ADDRESS) |
+ (I40E_MDIO_STCODE) |
+ (I40E_GLGEN_MSCA_MDICMD_MASK) |
+ (I40E_GLGEN_MSCA_MDIINPROGEN_MASK);
+ wr32(hw, I40E_GLGEN_MSCA(port_num), command);
+ do {
+ command = rd32(hw, I40E_GLGEN_MSCA(port_num));
+ if (!(command & I40E_GLGEN_MSCA_MDICMD_MASK)) {
+ status = 0;
+ break;
+ }
+ usleep_range(10, 20);
+ retry--;
+ } while (retry);
+
+ if (status) {
+ i40e_debug(hw, I40E_DEBUG_PHY,
+ "PHY: Can't write command to external PHY.\n");
+ goto phy_read_end;
+ }
+
+ command = (page << I40E_GLGEN_MSCA_DEVADD_SHIFT) |
+ (phy_addr << I40E_GLGEN_MSCA_PHYADD_SHIFT) |
+ (I40E_MDIO_OPCODE_READ) |
+ (I40E_MDIO_STCODE) |
+ (I40E_GLGEN_MSCA_MDICMD_MASK) |
+ (I40E_GLGEN_MSCA_MDIINPROGEN_MASK);
+ status = I40E_ERR_TIMEOUT;
+ retry = 1000;
+ wr32(hw, I40E_GLGEN_MSCA(port_num), command);
+ do {
+ command = rd32(hw, I40E_GLGEN_MSCA(port_num));
+ if (!(command & I40E_GLGEN_MSCA_MDICMD_MASK)) {
+ status = 0;
+ break;
+ }
+ usleep_range(10, 20);
+ retry--;
+ } while (retry);
+
+ if (!status) {
+ command = rd32(hw, I40E_GLGEN_MSRWD(port_num));
+ *value = (command & I40E_GLGEN_MSRWD_MDIRDDATA_MASK) >>
+ I40E_GLGEN_MSRWD_MDIRDDATA_SHIFT;
+ } else {
+ i40e_debug(hw, I40E_DEBUG_PHY,
+ "PHY: Can't read register value from external PHY.\n");
+ }
+
+phy_read_end:
+ return status;
+}
+
+/**
+ * i40e_write_phy_register
+ * @hw: pointer to the HW structure
+ * @page: registers page number
+ * @reg: register address in the page
+ * @phy_adr: PHY address on MDIO interface
+ * @value: PHY register value
+ *
+ * Writes value to specified PHY register
+ **/
+i40e_status i40e_write_phy_register(struct i40e_hw *hw,
+ u8 page, u16 reg, u8 phy_addr,
+ u16 value)
+{
+ i40e_status status = I40E_ERR_TIMEOUT;
+ u32 command = 0;
+ u16 retry = 1000;
+ u8 port_num = hw->func_caps.mdio_port_num;
+
+ command = (reg << I40E_GLGEN_MSCA_MDIADD_SHIFT) |
+ (page << I40E_GLGEN_MSCA_DEVADD_SHIFT) |
+ (phy_addr << I40E_GLGEN_MSCA_PHYADD_SHIFT) |
+ (I40E_MDIO_OPCODE_ADDRESS) |
+ (I40E_MDIO_STCODE) |
+ (I40E_GLGEN_MSCA_MDICMD_MASK) |
+ (I40E_GLGEN_MSCA_MDIINPROGEN_MASK);
+ wr32(hw, I40E_GLGEN_MSCA(port_num), command);
+ do {
+ command = rd32(hw, I40E_GLGEN_MSCA(port_num));
+ if (!(command & I40E_GLGEN_MSCA_MDICMD_MASK)) {
+ status = 0;
+ break;
+ }
+ usleep_range(10, 20);
+ retry--;
+ } while (retry);
+ if (status) {
+ i40e_debug(hw, I40E_DEBUG_PHY,
+ "PHY: Can't write command to external PHY.\n");
+ goto phy_write_end;
+ }
+
+ command = value << I40E_GLGEN_MSRWD_MDIWRDATA_SHIFT;
+ wr32(hw, I40E_GLGEN_MSRWD(port_num), command);
+
+ command = (page << I40E_GLGEN_MSCA_DEVADD_SHIFT) |
+ (phy_addr << I40E_GLGEN_MSCA_PHYADD_SHIFT) |
+ (I40E_MDIO_OPCODE_WRITE) |
+ (I40E_MDIO_STCODE) |
+ (I40E_GLGEN_MSCA_MDICMD_MASK) |
+ (I40E_GLGEN_MSCA_MDIINPROGEN_MASK);
+ status = I40E_ERR_TIMEOUT;
+ retry = 1000;
+ wr32(hw, I40E_GLGEN_MSCA(port_num), command);
+ do {
+ command = rd32(hw, I40E_GLGEN_MSCA(port_num));
+ if (!(command & I40E_GLGEN_MSCA_MDICMD_MASK)) {
+ status = 0;
+ break;
+ }
+ usleep_range(10, 20);
+ retry--;
+ } while (retry);
+
+phy_write_end:
+ return status;
+}
+
+/**
+ * i40e_get_phy_address
+ * @hw: pointer to the HW structure
+ * @dev_num: PHY port num that address we want
+ * @phy_addr: Returned PHY address
+ *
+ * Gets PHY address for current port
+ **/
+u8 i40e_get_phy_address(struct i40e_hw *hw, u8 dev_num)
+{
+ u8 port_num = hw->func_caps.mdio_port_num;
+ u32 reg_val = rd32(hw, I40E_GLGEN_MDIO_I2C_SEL(port_num));
+
+ return (u8)(reg_val >> ((dev_num + 1) * 5)) & 0x1f;
+}
+
+/**
+ * i40e_blink_phy_led
+ * @hw: pointer to the HW structure
+ * @time: time how long led will blinks in secs
+ * @interval: gap between LED on and off in msecs
+ *
+ * Blinks PHY link LED
+ **/
+i40e_status i40e_blink_phy_link_led(struct i40e_hw *hw,
+ u32 time, u32 interval)
+{
+ i40e_status status = 0;
+ u32 i;
+ u16 led_ctl;
+ u16 gpio_led_port;
+ u16 led_reg;
+ u16 led_addr = I40E_PHY_LED_PROV_REG_1;
+ u8 phy_addr = 0;
+ u8 port_num;
+
+ i = rd32(hw, I40E_PFGEN_PORTNUM);
+ port_num = (u8)(i & I40E_PFGEN_PORTNUM_PORT_NUM_MASK);
+ phy_addr = i40e_get_phy_address(hw, port_num);
+
+ for (gpio_led_port = 0; gpio_led_port < 3; gpio_led_port++,
+ led_addr++) {
+ status = i40e_read_phy_register(hw, I40E_PHY_COM_REG_PAGE,
+ led_addr, phy_addr, &led_reg);
+ if (status)
+ goto phy_blinking_end;
+ led_ctl = led_reg;
+ if (led_reg & I40E_PHY_LED_LINK_MODE_MASK) {
+ led_reg = 0;
+ status = i40e_write_phy_register(hw,
+ I40E_PHY_COM_REG_PAGE,
+ led_addr, phy_addr,
+ led_reg);
+ if (status)
+ goto phy_blinking_end;
+ break;
+ }
+ }
+
+ if (time > 0 && interval > 0) {
+ for (i = 0; i < time * 1000; i += interval) {
+ status = i40e_read_phy_register(hw,
+ I40E_PHY_COM_REG_PAGE,
+ led_addr, phy_addr,
+ &led_reg);
+ if (status)
+ goto restore_config;
+ if (led_reg & I40E_PHY_LED_MANUAL_ON)
+ led_reg = 0;
+ else
+ led_reg = I40E_PHY_LED_MANUAL_ON;
+ status = i40e_write_phy_register(hw,
+ I40E_PHY_COM_REG_PAGE,
+ led_addr, phy_addr,
+ led_reg);
+ if (status)
+ goto restore_config;
+ msleep(interval);
+ }
+ }
+
+restore_config:
+ status = i40e_write_phy_register(hw, I40E_PHY_COM_REG_PAGE, led_addr,
+ phy_addr, led_ctl);
+
+phy_blinking_end:
+ return status;
+}
+
+/**
+ * i40e_led_get_phy - return current on/off mode
+ * @hw: pointer to the hw struct
+ * @led_addr: address of led register to use
+ * @val: original value of register to use
+ *
+ **/
+i40e_status i40e_led_get_phy(struct i40e_hw *hw, u16 *led_addr,
+ u16 *val)
+{
+ i40e_status status = 0;
+ u16 gpio_led_port;
+ u8 phy_addr = 0;
+ u16 reg_val;
+ u16 temp_addr;
+ u8 port_num;
+ u32 i;
+
+ temp_addr = I40E_PHY_LED_PROV_REG_1;
+ i = rd32(hw, I40E_PFGEN_PORTNUM);
+ port_num = (u8)(i & I40E_PFGEN_PORTNUM_PORT_NUM_MASK);
+ phy_addr = i40e_get_phy_address(hw, port_num);
+
+ for (gpio_led_port = 0; gpio_led_port < 3; gpio_led_port++,
+ temp_addr++) {
+ status = i40e_read_phy_register(hw, I40E_PHY_COM_REG_PAGE,
+ temp_addr, phy_addr, ®_val);
+ if (status)
+ return status;
+ *val = reg_val;
+ if (reg_val & I40E_PHY_LED_LINK_MODE_MASK) {
+ *led_addr = temp_addr;
+ break;
+ }
+ }
+ return status;
+}
+
+/**
+ * i40e_led_set_phy
+ * @hw: pointer to the HW structure
+ * @on: true or false
+ * @mode: original val plus bit for set or ignore
+ * Set led's on or off when controlled by the PHY
+ *
+ **/
+i40e_status i40e_led_set_phy(struct i40e_hw *hw, bool on,
+ u16 led_addr, u32 mode)
+{
+ i40e_status status = 0;
+ u16 led_ctl = 0;
+ u16 led_reg = 0;
+ u8 phy_addr = 0;
+ u8 port_num;
+ u32 i;
+
+ i = rd32(hw, I40E_PFGEN_PORTNUM);
+ port_num = (u8)(i & I40E_PFGEN_PORTNUM_PORT_NUM_MASK);
+ phy_addr = i40e_get_phy_address(hw, port_num);
+
+ status = i40e_read_phy_register(hw, I40E_PHY_COM_REG_PAGE, led_addr,
+ phy_addr, &led_reg);
+ if (status)
+ return status;
+ led_ctl = led_reg;
+ if (led_reg & I40E_PHY_LED_LINK_MODE_MASK) {
+ led_reg = 0;
+ status = i40e_write_phy_register(hw, I40E_PHY_COM_REG_PAGE,
+ led_addr, phy_addr, led_reg);
+ if (status)
+ return status;
+ }
+ status = i40e_read_phy_register(hw, I40E_PHY_COM_REG_PAGE,
+ led_addr, phy_addr, &led_reg);
+ if (status)
+ goto restore_config;
+ if (on)
+ led_reg = I40E_PHY_LED_MANUAL_ON;
+ else
+ led_reg = 0;
+ status = i40e_write_phy_register(hw, I40E_PHY_COM_REG_PAGE,
+ led_addr, phy_addr, led_reg);
+ if (status)
+ goto restore_config;
+ if (mode & I40E_PHY_LED_MODE_ORIG) {
+ led_ctl = (mode & I40E_PHY_LED_MODE_MASK);
+ status = i40e_write_phy_register(hw,
+ I40E_PHY_COM_REG_PAGE,
+ led_addr, phy_addr, led_ctl);
+ }
+ return status;
+restore_config:
+ status = i40e_write_phy_register(hw, I40E_PHY_COM_REG_PAGE, led_addr,
+ phy_addr, led_ctl);
+ return status;
+}
diff --git a/drivers/net/ethernet/intel/i40e/i40e_prototype.h b/drivers/net/ethernet/intel/i40e/i40e_prototype.h
index e8deabd..ca2f7ac 100644
--- a/drivers/net/ethernet/intel/i40e/i40e_prototype.h
+++ b/drivers/net/ethernet/intel/i40e/i40e_prototype.h
@@ -74,6 +74,12 @@ i40e_status i40e_aq_set_rss_key(struct i40e_hw *hw,
u32 i40e_led_get(struct i40e_hw *hw);
void i40e_led_set(struct i40e_hw *hw, u32 mode, bool blink);
+i40e_status i40e_led_set_phy(struct i40e_hw *hw, bool on,
+ u16 led_addr, u32 mode);
+i40e_status i40e_led_get_phy(struct i40e_hw *hw, u16 *led_addr,
+ u16 *val);
+i40e_status i40e_blink_phy_link_led(struct i40e_hw *hw,
+ u32 time, u32 interval);
/* admin send queue commands */
@@ -336,4 +342,11 @@ i40e_status i40e_aq_debug_dump(struct i40e_hw *hw, u8 cluster_id,
struct i40e_asq_cmd_details *cmd_details);
void i40e_add_filter_to_drop_tx_flow_control_frames(struct i40e_hw *hw,
u16 vsi_seid);
+i40e_status i40e_read_phy_register(struct i40e_hw *hw, u8 page,
+ u16 reg, u8 phy_addr, u16 *value);
+i40e_status i40e_write_phy_register(struct i40e_hw *hw, u8 page,
+ u16 reg, u8 phy_addr, u16 value);
+u8 i40e_get_phy_address(struct i40e_hw *hw, u8 dev_num);
+i40e_status i40e_blink_phy_link_led(struct i40e_hw *hw,
+ u32 time, u32 interval);
#endif /* _I40E_PROTOTYPE_H_ */
diff --git a/drivers/net/ethernet/intel/i40e/i40e_type.h b/drivers/net/ethernet/intel/i40e/i40e_type.h
index b59a021..0a0baf7 100644
--- a/drivers/net/ethernet/intel/i40e/i40e_type.h
+++ b/drivers/net/ethernet/intel/i40e/i40e_type.h
@@ -90,6 +90,22 @@ enum i40e_debug_mask {
I40E_DEBUG_ALL = 0xFFFFFFFF
};
+#define I40E_MDIO_STCODE 0
+#define I40E_MDIO_OPCODE_ADDRESS 0
+#define I40E_MDIO_OPCODE_WRITE I40E_MASK(1, \
+ I40E_GLGEN_MSCA_OPCODE_SHIFT)
+#define I40E_MDIO_OPCODE_READ_INC_ADDR I40E_MASK(2, \
+ I40E_GLGEN_MSCA_OPCODE_SHIFT)
+#define I40E_MDIO_OPCODE_READ I40E_MASK(3, \
+ I40E_GLGEN_MSCA_OPCODE_SHIFT)
+
+#define I40E_PHY_COM_REG_PAGE 0x1E
+#define I40E_PHY_LED_LINK_MODE_MASK 0xF0
+#define I40E_PHY_LED_MANUAL_ON 0x100
+#define I40E_PHY_LED_PROV_REG_1 0xC430
+#define I40E_PHY_LED_MODE_MASK 0xFFFF
+#define I40E_PHY_LED_MODE_ORIG 0x80000000
+
/* These are structs for managing the hardware information and the operations.
* The structures of function pointers are filled out@init time when we
* know for sure exactly which hardware we're working with. This gives us the
diff --git a/drivers/net/ethernet/intel/i40evf/i40e_prototype.h b/drivers/net/ethernet/intel/i40evf/i40e_prototype.h
index cbd9a1b..fa34d85 100644
--- a/drivers/net/ethernet/intel/i40evf/i40e_prototype.h
+++ b/drivers/net/ethernet/intel/i40evf/i40e_prototype.h
@@ -103,4 +103,11 @@ i40e_status i40e_aq_add_rem_control_packet_filter(struct i40e_hw *hw,
struct i40e_asq_cmd_details *cmd_details);
void i40e_add_filter_to_drop_tx_flow_control_frames(struct i40e_hw *hw,
u16 vsi_seid);
+i40e_status i40e_read_phy_register(struct i40e_hw *hw, u8 page,
+ u16 reg, u8 phy_addr, u16 *value);
+i40e_status i40e_write_phy_register(struct i40e_hw *hw, u8 page,
+ u16 reg, u8 phy_addr, u16 value);
+u8 i40e_get_phy_address(struct i40e_hw *hw, u8 dev_num);
+i40e_status i40e_blink_phy_link_led(struct i40e_hw *hw,
+ u32 time, u32 interval);
#endif /* _I40E_PROTOTYPE_H_ */
--
2.1.0
^ permalink raw reply related [flat|nested] 32+ messages in thread* [Intel-wired-lan] [next PATCH S29 01/14] i40e: Add functions to blink led on 10GBaseT PHY
2016-02-18 0:12 ` [Intel-wired-lan] [next PATCH S29 01/14] i40e: Add functions to blink led on 10GBaseT PHY Avinash Dayanand
@ 2016-02-18 17:18 ` Bowers, AndrewX
0 siblings, 0 replies; 32+ messages in thread
From: Bowers, AndrewX @ 2016-02-18 17:18 UTC (permalink / raw)
To: intel-wired-lan
> -----Original Message-----
> From: Intel-wired-lan [mailto:intel-wired-lan-bounces at lists.osuosl.org] On
> Behalf Of Avinash Dayanand
> Sent: Wednesday, February 17, 2016 4:12 PM
> To: intel-wired-lan at lists.osuosl.org
> Subject: [Intel-wired-lan] [next PATCH S29 01/14] i40e: Add functions to blink
> led on 10GBaseT PHY
>
> From: Carolyn Wyborny <carolyn.wyborny@intel.com>
>
> This patch adds functions to blink led on devices using 10GBaseT PHY since
> MAC registers used in other designs do not work in this device configuration.
>
> Signed-off-by: Carolyn Wyborny <carolyn.wyborny@intel.com>
> Change-ID: Id4b88c93c649fd2b88073a00b42867a77c761ca3
> ---
> drivers/net/ethernet/intel/i40e/i40e_common.c | 329
> +++++++++++++++++++++
> drivers/net/ethernet/intel/i40e/i40e_prototype.h | 13 +
> drivers/net/ethernet/intel/i40e/i40e_type.h | 16 +
> drivers/net/ethernet/intel/i40evf/i40e_prototype.h | 7 +
> 4 files changed, 365 insertions(+)
Tested-by: Andrew Bowers <andrewx.bowers@intel.com>
Adaptor LED blink functionality works properly on 10GBaseT PHY
^ permalink raw reply [flat|nested] 32+ messages in thread
* [Intel-wired-lan] [next PATCH S29 02/14] i40e: Fix led blink capability for 10GBaseT PHY
2016-02-18 0:12 [Intel-wired-lan] [next PATCH S29 00/14] i40e/i40evf updates Avinash Dayanand
2016-02-18 0:12 ` [Intel-wired-lan] [next PATCH S29 01/14] i40e: Add functions to blink led on 10GBaseT PHY Avinash Dayanand
@ 2016-02-18 0:12 ` Avinash Dayanand
2016-02-18 17:19 ` Bowers, AndrewX
2016-02-18 0:12 ` [Intel-wired-lan] [next PATCH S29 03/14] i40e: Increase timeout when checking GLGEN_RSTAT_DEVSTATE bit Avinash Dayanand
` (11 subsequent siblings)
13 siblings, 1 reply; 32+ messages in thread
From: Avinash Dayanand @ 2016-02-18 0:12 UTC (permalink / raw)
To: intel-wired-lan
From: Carolyn Wyborny <carolyn.wyborny@intel.com>
This patch fixes a problem where the ethtool identify adapter
functionality did not work for some copper PHY's. Without this
patch, the blink led functionality fails on some parts. This
patch adds PHY write code to blink led's on parts where this
functionality is contained in the PHY rather than the MAC.
Signed-off-by: Carolyn Wyborny <carolyn.wyborny@intel.com>
Change-ID: Iee7b3453f61d5ffd0b3d03f720ee4f17f919fcc2
---
drivers/net/ethernet/intel/i40e/i40e.h | 3 +++
drivers/net/ethernet/intel/i40e/i40e_common.c | 26 +++++++++++++++++++
drivers/net/ethernet/intel/i40e/i40e_ethtool.c | 36 +++++++++++++++++++++-----
drivers/net/ethernet/intel/i40e/i40e_main.c | 4 +++
4 files changed, 63 insertions(+), 6 deletions(-)
diff --git a/drivers/net/ethernet/intel/i40e/i40e.h b/drivers/net/ethernet/intel/i40e/i40e.h
index a0ca94d..e7fcb81 100644
--- a/drivers/net/ethernet/intel/i40e/i40e.h
+++ b/drivers/net/ethernet/intel/i40e/i40e.h
@@ -111,6 +111,7 @@
#define I40E_OEM_VER_PATCH_MASK 0xff
#define I40E_OEM_VER_BUILD_SHIFT 8
#define I40E_OEM_VER_SHIFT 24
+#define I40E_PHY_DEBUG_PORT BIT(4)
/* The values in here are decimal coded as hex as is the case in the NVM map*/
#define I40E_CURRENT_NVM_VERSION_HI 0x2
@@ -355,6 +356,7 @@ struct i40e_pf {
#define I40E_FLAG_NO_DCB_SUPPORT BIT_ULL(45)
#define I40E_FLAG_USE_SET_LLDP_MIB BIT_ULL(46)
#define I40E_FLAG_STOP_FW_LLDP BIT_ULL(47)
+#define I40E_FLAG_HAVE_10GBASET_PHY BIT_ULL(48)
#define I40E_FLAG_PF_MAC BIT_ULL(50)
/* tracks features that get auto disabled by errors */
@@ -440,6 +442,7 @@ struct i40e_pf {
u32 ioremap_len;
u32 fd_inv;
+ u16 phy_led_val;
};
struct i40e_mac_filter {
diff --git a/drivers/net/ethernet/intel/i40e/i40e_common.c b/drivers/net/ethernet/intel/i40e/i40e_common.c
index 447729f..d417193 100644
--- a/drivers/net/ethernet/intel/i40e/i40e_common.c
+++ b/drivers/net/ethernet/intel/i40e/i40e_common.c
@@ -1888,6 +1888,32 @@ i40e_status i40e_aq_set_phy_int_mask(struct i40e_hw *hw,
}
/**
+ * i40e_aq_set_phy_debug
+ * @hw: pointer to the hw struct
+ * @cmd_flags: debug command flags
+ * @cmd_details: pointer to command details structure or NULL
+ *
+ * Reset the external PHY.
+ **/
+enum i40e_status_code i40e_aq_set_phy_debug(struct i40e_hw *hw, u8 cmd_flags,
+ struct i40e_asq_cmd_details *cmd_details)
+{
+ struct i40e_aq_desc desc;
+ struct i40e_aqc_set_phy_debug *cmd =
+ (struct i40e_aqc_set_phy_debug *)&desc.params.raw;
+ enum i40e_status_code status;
+
+ i40e_fill_default_direct_cmd_desc(&desc,
+ i40e_aqc_opc_set_phy_debug);
+
+ cmd->command_flags = cmd_flags;
+
+ status = i40e_asq_send_command(hw, &desc, NULL, 0, cmd_details);
+
+ return status;
+}
+
+/**
* i40e_aq_add_vsi
* @hw: pointer to the hw struct
* @vsi_ctx: pointer to a vsi context struct
diff --git a/drivers/net/ethernet/intel/i40e/i40e_ethtool.c b/drivers/net/ethernet/intel/i40e/i40e_ethtool.c
index 58a23d9..86765d4 100644
--- a/drivers/net/ethernet/intel/i40e/i40e_ethtool.c
+++ b/drivers/net/ethernet/intel/i40e/i40e_ethtool.c
@@ -1826,28 +1826,52 @@ static int i40e_set_phys_id(struct net_device *netdev,
enum ethtool_phys_id_state state)
{
struct i40e_netdev_priv *np = netdev_priv(netdev);
+ i40e_status ret = 0;
struct i40e_pf *pf = np->vsi->back;
struct i40e_hw *hw = &pf->hw;
int blink_freq = 2;
+ u16 temp_status;
switch (state) {
case ETHTOOL_ID_ACTIVE:
- pf->led_status = i40e_led_get(hw);
+ if (!(pf->flags & I40E_FLAG_HAVE_10GBASET_PHY)) {
+ pf->led_status = i40e_led_get(hw);
+ } else {
+ i40e_aq_set_phy_debug(hw, I40E_PHY_DEBUG_PORT, NULL);
+ ret = i40e_led_get_phy(hw, &temp_status,
+ &pf->phy_led_val);
+ pf->led_status = temp_status;
+ }
return blink_freq;
case ETHTOOL_ID_ON:
- i40e_led_set(hw, 0xF, false);
+ if (!(pf->flags & I40E_FLAG_HAVE_10GBASET_PHY))
+ i40e_led_set(hw, 0xf, false);
+ else
+ ret = i40e_led_set_phy(hw, true, pf->led_status, 0);
break;
case ETHTOOL_ID_OFF:
- i40e_led_set(hw, 0x0, false);
+ if (!(pf->flags & I40E_FLAG_HAVE_10GBASET_PHY))
+ i40e_led_set(hw, 0x0, false);
+ else
+ ret = i40e_led_set_phy(hw, false, pf->led_status, 0);
break;
case ETHTOOL_ID_INACTIVE:
- i40e_led_set(hw, pf->led_status, false);
+ if (!(pf->flags & I40E_FLAG_HAVE_10GBASET_PHY)) {
+ i40e_led_set(hw, false, pf->led_status);
+ } else {
+ ret = i40e_led_set_phy(hw, false, pf->led_status,
+ (pf->phy_led_val |
+ I40E_PHY_LED_MODE_ORIG));
+ i40e_aq_set_phy_debug(hw, 0, NULL);
+ }
break;
default:
break;
}
-
- return 0;
+ if (ret)
+ return -ENOENT;
+ else
+ return 0;
}
/* NOTE: i40e hardware uses a conversion factor of 2 for Interrupt
diff --git a/drivers/net/ethernet/intel/i40e/i40e_main.c b/drivers/net/ethernet/intel/i40e/i40e_main.c
index fcef5cb..8919dc7 100644
--- a/drivers/net/ethernet/intel/i40e/i40e_main.c
+++ b/drivers/net/ethernet/intel/i40e/i40e_main.c
@@ -11126,6 +11126,10 @@ static int i40e_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
i40e_add_filter_to_drop_tx_flow_control_frames(&pf->hw,
pf->main_vsi_seid);
+ if ((pf->hw.device_id == I40E_DEV_ID_10G_BASE_T) ||
+ (pf->hw.device_id == I40E_DEV_ID_10G_BASE_T4))
+ pf->flags |= I40E_FLAG_HAVE_10GBASET_PHY;
+
/* print a string summarizing features */
i40e_print_features(pf);
--
2.1.0
^ permalink raw reply related [flat|nested] 32+ messages in thread* [Intel-wired-lan] [next PATCH S29 02/14] i40e: Fix led blink capability for 10GBaseT PHY
2016-02-18 0:12 ` [Intel-wired-lan] [next PATCH S29 02/14] i40e: Fix led blink capability for " Avinash Dayanand
@ 2016-02-18 17:19 ` Bowers, AndrewX
0 siblings, 0 replies; 32+ messages in thread
From: Bowers, AndrewX @ 2016-02-18 17:19 UTC (permalink / raw)
To: intel-wired-lan
> -----Original Message-----
> From: Intel-wired-lan [mailto:intel-wired-lan-bounces at lists.osuosl.org] On
> Behalf Of Avinash Dayanand
> Sent: Wednesday, February 17, 2016 4:12 PM
> To: intel-wired-lan at lists.osuosl.org
> Subject: [Intel-wired-lan] [next PATCH S29 02/14] i40e: Fix led blink capability
> for 10GBaseT PHY
>
> From: Carolyn Wyborny <carolyn.wyborny@intel.com>
>
> This patch fixes a problem where the ethtool identify adapter functionality
> did not work for some copper PHY's. Without this patch, the blink led
> functionality fails on some parts. This patch adds PHY write code to blink led's
> on parts where this functionality is contained in the PHY rather than the
> MAC.
>
> Signed-off-by: Carolyn Wyborny <carolyn.wyborny@intel.com>
> Change-ID: Iee7b3453f61d5ffd0b3d03f720ee4f17f919fcc2
> ---
> drivers/net/ethernet/intel/i40e/i40e.h | 3 +++
> drivers/net/ethernet/intel/i40e/i40e_common.c | 26
> +++++++++++++++++++ drivers/net/ethernet/intel/i40e/i40e_ethtool.c |
> 36 +++++++++++++++++++++-----
> drivers/net/ethernet/intel/i40e/i40e_main.c | 4 +++
> 4 files changed, 63 insertions(+), 6 deletions(-)
Tested-by: Andrew Bowers <andrewx.bowers@intel.com>
Adaptor LED blink functionality works properly on 10GBaseT PHY
^ permalink raw reply [flat|nested] 32+ messages in thread
* [Intel-wired-lan] [next PATCH S29 03/14] i40e: Increase timeout when checking GLGEN_RSTAT_DEVSTATE bit
2016-02-18 0:12 [Intel-wired-lan] [next PATCH S29 00/14] i40e/i40evf updates Avinash Dayanand
2016-02-18 0:12 ` [Intel-wired-lan] [next PATCH S29 01/14] i40e: Add functions to blink led on 10GBaseT PHY Avinash Dayanand
2016-02-18 0:12 ` [Intel-wired-lan] [next PATCH S29 02/14] i40e: Fix led blink capability for " Avinash Dayanand
@ 2016-02-18 0:12 ` Avinash Dayanand
2016-02-18 18:22 ` Bowers, AndrewX
2016-02-18 0:12 ` [Intel-wired-lan] [next PATCH S29 04/14] i40e: Add a client definition of I40E_MAX_USER_PRIORITY Avinash Dayanand
` (10 subsequent siblings)
13 siblings, 1 reply; 32+ messages in thread
From: Avinash Dayanand @ 2016-02-18 0:12 UTC (permalink / raw)
To: intel-wired-lan
From: Kevin Scott <kevin.c.scott@intel.com>
When linking with particular PHY types (ex: copper PHY), the amount of
time it takes for the GLGEN_RSTAT_DEVSTATE to be set increases greatly,
which can lead to a timeout and failure to load the driver.
Signed-off-by: Kevin Scott <kevin.c.scott@intel.com>
Change-ID: If02be0dfcd7c57fdde2d5c81cd63651260cd2029
---
drivers/net/ethernet/intel/i40e/i40e_common.c | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/drivers/net/ethernet/intel/i40e/i40e_common.c b/drivers/net/ethernet/intel/i40e/i40e_common.c
index d417193..3a57e59 100644
--- a/drivers/net/ethernet/intel/i40e/i40e_common.c
+++ b/drivers/net/ethernet/intel/i40e/i40e_common.c
@@ -1239,7 +1239,13 @@ i40e_status i40e_pf_reset(struct i40e_hw *hw)
grst_del = (rd32(hw, I40E_GLGEN_RSTCTL) &
I40E_GLGEN_RSTCTL_GRSTDEL_MASK) >>
I40E_GLGEN_RSTCTL_GRSTDEL_SHIFT;
- for (cnt = 0; cnt < grst_del + 10; cnt++) {
+
+ /* It can take upto 15 secs for GRST steady state.
+ * Bump it to 16 secs max to be safe.
+ */
+ grst_del = grst_del * 20;
+
+ for (cnt = 0; cnt < grst_del; cnt++) {
reg = rd32(hw, I40E_GLGEN_RSTAT);
if (!(reg & I40E_GLGEN_RSTAT_DEVSTATE_MASK))
break;
--
2.1.0
^ permalink raw reply related [flat|nested] 32+ messages in thread* [Intel-wired-lan] [next PATCH S29 03/14] i40e: Increase timeout when checking GLGEN_RSTAT_DEVSTATE bit
2016-02-18 0:12 ` [Intel-wired-lan] [next PATCH S29 03/14] i40e: Increase timeout when checking GLGEN_RSTAT_DEVSTATE bit Avinash Dayanand
@ 2016-02-18 18:22 ` Bowers, AndrewX
0 siblings, 0 replies; 32+ messages in thread
From: Bowers, AndrewX @ 2016-02-18 18:22 UTC (permalink / raw)
To: intel-wired-lan
> -----Original Message-----
> From: Intel-wired-lan [mailto:intel-wired-lan-bounces at lists.osuosl.org] On
> Behalf Of Avinash Dayanand
> Sent: Wednesday, February 17, 2016 4:12 PM
> To: intel-wired-lan at lists.osuosl.org
> Subject: [Intel-wired-lan] [next PATCH S29 03/14] i40e: Increase timeout
> when checking GLGEN_RSTAT_DEVSTATE bit
>
> From: Kevin Scott <kevin.c.scott@intel.com>
>
> When linking with particular PHY types (ex: copper PHY), the amount of time
> it takes for the GLGEN_RSTAT_DEVSTATE to be set increases greatly, which
> can lead to a timeout and failure to load the driver.
>
> Signed-off-by: Kevin Scott <kevin.c.scott@intel.com>
> Change-ID: If02be0dfcd7c57fdde2d5c81cd63651260cd2029
> ---
> drivers/net/ethernet/intel/i40e/i40e_common.c | 8 +++++++-
> 1 file changed, 7 insertions(+), 1 deletion(-)
Tested-by: Andrew Bowers <andrewx.bowers@intel.com>
Driver loads correctly, driver and device properly recover from resets with link
^ permalink raw reply [flat|nested] 32+ messages in thread
* [Intel-wired-lan] [next PATCH S29 04/14] i40e: Add a client definition of I40E_MAX_USER_PRIORITY
2016-02-18 0:12 [Intel-wired-lan] [next PATCH S29 00/14] i40e/i40evf updates Avinash Dayanand
` (2 preceding siblings ...)
2016-02-18 0:12 ` [Intel-wired-lan] [next PATCH S29 03/14] i40e: Increase timeout when checking GLGEN_RSTAT_DEVSTATE bit Avinash Dayanand
@ 2016-02-18 0:12 ` Avinash Dayanand
2016-02-18 18:24 ` Bowers, AndrewX
2016-02-19 6:38 ` Jeff Kirsher
2016-02-18 0:12 ` [Intel-wired-lan] [next PATCH S29 05/14] i40e: Do not wait for Rx queue disable in DCB reconfig Avinash Dayanand
` (9 subsequent siblings)
13 siblings, 2 replies; 32+ messages in thread
From: Avinash Dayanand @ 2016-02-18 0:12 UTC (permalink / raw)
To: intel-wired-lan
From: Catherine Sullivan <catherine.sullivan@intel.com>
IWARP uses I40E_MAX_USER_PRIORITY in i40e_client.h but it is not defined
there so add a I40E_CLIENT_MAX_USER_PRIORITY definition to i40e_client.h
and a comment to i40e.h that we need to keep the two definitions synced.
Signed-off-by: Catherine Sullivan <catherine.sullivan@intel.com>
Change-ID: I0fc8868c2b090f54914ab738ec52b48ae4f523e2
---
Testing Hints: Make sure it compiles.
drivers/net/ethernet/intel/i40e/i40e.h | 3 +++
1 file changed, 3 insertions(+)
diff --git a/drivers/net/ethernet/intel/i40e/i40e.h b/drivers/net/ethernet/intel/i40e/i40e.h
index e7fcb81..44ec1f7 100644
--- a/drivers/net/ethernet/intel/i40e/i40e.h
+++ b/drivers/net/ethernet/intel/i40e/i40e.h
@@ -90,6 +90,9 @@
#define I40E_MAX_AQ_BUF_SIZE 4096
#define I40E_AQ_LEN 256
#define I40E_AQ_WORK_LIMIT 66 /* max number of VFs + a little */
+/* If I40E_MAX_USER_PRIORITY is updated please also update
+ * I40E_CLIENT_MAX_USER_PRIORITY in i40e_client.h
+ */
#define I40E_MAX_USER_PRIORITY 8
#define I40E_DEFAULT_MSG_ENABLE 4
#define I40E_QUEUE_WAIT_RETRY_LIMIT 10
--
2.1.0
^ permalink raw reply related [flat|nested] 32+ messages in thread* [Intel-wired-lan] [next PATCH S29 04/14] i40e: Add a client definition of I40E_MAX_USER_PRIORITY
2016-02-18 0:12 ` [Intel-wired-lan] [next PATCH S29 04/14] i40e: Add a client definition of I40E_MAX_USER_PRIORITY Avinash Dayanand
@ 2016-02-18 18:24 ` Bowers, AndrewX
2016-02-19 6:38 ` Jeff Kirsher
1 sibling, 0 replies; 32+ messages in thread
From: Bowers, AndrewX @ 2016-02-18 18:24 UTC (permalink / raw)
To: intel-wired-lan
> -----Original Message-----
> From: Intel-wired-lan [mailto:intel-wired-lan-bounces at lists.osuosl.org] On
> Behalf Of Avinash Dayanand
> Sent: Wednesday, February 17, 2016 4:12 PM
> To: intel-wired-lan at lists.osuosl.org
> Subject: [Intel-wired-lan] [next PATCH S29 04/14] i40e: Add a client definition
> of I40E_MAX_USER_PRIORITY
>
> From: Catherine Sullivan <catherine.sullivan@intel.com>
>
> IWARP uses I40E_MAX_USER_PRIORITY in i40e_client.h but it is not defined
> there so add a I40E_CLIENT_MAX_USER_PRIORITY definition to i40e_client.h
> and a comment to i40e.h that we need to keep the two definitions synced.
>
>
> Signed-off-by: Catherine Sullivan <catherine.sullivan@intel.com>
> Change-ID: I0fc8868c2b090f54914ab738ec52b48ae4f523e2
> ---
> Testing Hints: Make sure it compiles.
>
> drivers/net/ethernet/intel/i40e/i40e.h | 3 +++
> 1 file changed, 3 insertions(+)
Tested-by: Andrew Bowers <andrewx.bowers@intel.com>
Code changes properly applied
^ permalink raw reply [flat|nested] 32+ messages in thread
* [Intel-wired-lan] [next PATCH S29 04/14] i40e: Add a client definition of I40E_MAX_USER_PRIORITY
2016-02-18 0:12 ` [Intel-wired-lan] [next PATCH S29 04/14] i40e: Add a client definition of I40E_MAX_USER_PRIORITY Avinash Dayanand
2016-02-18 18:24 ` Bowers, AndrewX
@ 2016-02-19 6:38 ` Jeff Kirsher
1 sibling, 0 replies; 32+ messages in thread
From: Jeff Kirsher @ 2016-02-19 6:38 UTC (permalink / raw)
To: intel-wired-lan
On Wed, 2016-02-17 at 16:12 -0800, Avinash Dayanand wrote:
> From: Catherine Sullivan <catherine.sullivan@intel.com>
>
> IWARP uses I40E_MAX_USER_PRIORITY in i40e_client.h but it is not
> defined
> there so add a I40E_CLIENT_MAX_USER_PRIORITY definition to
> i40e_client.h
> and a comment to i40e.h that we need to keep the two definitions
> synced.
>
>
> Signed-off-by: Catherine Sullivan <catherine.sullivan@intel.com>
> Change-ID: I0fc8868c2b090f54914ab738ec52b48ae4f523e2
> ---
> Testing Hints: Make sure it compiles.
>
> ?drivers/net/ethernet/intel/i40e/i40e.h | 3 +++
> ?1 file changed, 3 insertions(+)
Not sure how this got through review, but this should not be pushed
upstream. ?First the patch description (and code comment) refer to
i40e_client.h which does not exist in the Linux kernel AND this patch
is clearly iWARP related, so I am dropping this patch from the series.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: This is a digitally signed message part
URL: <http://lists.osuosl.org/pipermail/intel-wired-lan/attachments/20160218/19f05950/attachment.asc>
^ permalink raw reply [flat|nested] 32+ messages in thread
* [Intel-wired-lan] [next PATCH S29 05/14] i40e: Do not wait for Rx queue disable in DCB reconfig
2016-02-18 0:12 [Intel-wired-lan] [next PATCH S29 00/14] i40e/i40evf updates Avinash Dayanand
` (3 preceding siblings ...)
2016-02-18 0:12 ` [Intel-wired-lan] [next PATCH S29 04/14] i40e: Add a client definition of I40E_MAX_USER_PRIORITY Avinash Dayanand
@ 2016-02-18 0:12 ` Avinash Dayanand
2016-02-18 19:00 ` Bowers, AndrewX
2016-02-18 0:12 ` [Intel-wired-lan] [next PATCH S29 06/14] i40e: Fix for unexpected messaging Avinash Dayanand
` (8 subsequent siblings)
13 siblings, 1 reply; 32+ messages in thread
From: Avinash Dayanand @ 2016-02-18 0:12 UTC (permalink / raw)
To: intel-wired-lan
From: Neerav Parikh <neerav.parikh@intel.com>
Just like Tx queues don't wait for Rx queues to be disabled before
DCB has been reconfigured.
Check the queues are disabled only after the DCB configuration has
been applied to the VSI(s) managed by the PF driver.
In case of any timeout issue a PF reset to recover.
Signed-off-by: Neerav Parikh <neerav.parikh@intel.com>
Change-ID: Ic51e94c25baf9a5480cee983f35d15575a88642c
---
drivers/net/ethernet/intel/i40e/i40e_main.c | 33 +++++++++++++++++++++--------
1 file changed, 24 insertions(+), 9 deletions(-)
diff --git a/drivers/net/ethernet/intel/i40e/i40e_main.c b/drivers/net/ethernet/intel/i40e/i40e_main.c
index 8919dc7..3c658a29 100644
--- a/drivers/net/ethernet/intel/i40e/i40e_main.c
+++ b/drivers/net/ethernet/intel/i40e/i40e_main.c
@@ -3929,6 +3929,9 @@ static int i40e_vsi_control_rx(struct i40e_vsi *vsi, bool enable)
else
rx_reg &= ~I40E_QRX_ENA_QENA_REQ_MASK;
wr32(hw, I40E_QRX_ENA(pf_q), rx_reg);
+ /* No waiting for the Tx queue to disable */
+ if (!enable && test_bit(__I40E_PORT_TX_SUSPENDED, &pf->state))
+ continue;
/* wait for the change to finish */
ret = i40e_pf_rxq_wait(pf, pf_q, enable);
@@ -4287,12 +4290,12 @@ static void i40e_pf_unquiesce_all_vsi(struct i40e_pf *pf)
#ifdef CONFIG_I40E_DCB
/**
- * i40e_vsi_wait_txq_disabled - Wait for VSI's queues to be disabled
+ * i40e_vsi_wait_queues_disabled - Wait for VSI's queues to be disabled
* @vsi: the VSI being configured
*
- * This function waits for the given VSI's Tx queues to be disabled.
+ * This function waits for the given VSI's queues to be disabled.
**/
-static int i40e_vsi_wait_txq_disabled(struct i40e_vsi *vsi)
+static int i40e_vsi_wait_queues_disabled(struct i40e_vsi *vsi)
{
struct i40e_pf *pf = vsi->back;
int i, pf_q, ret;
@@ -4309,24 +4312,36 @@ static int i40e_vsi_wait_txq_disabled(struct i40e_vsi *vsi)
}
}
+ pf_q = vsi->base_queue;
+ for (i = 0; i < vsi->num_queue_pairs; i++, pf_q++) {
+ /* Check and wait for the disable status of the queue */
+ ret = i40e_pf_rxq_wait(pf, pf_q, false);
+ if (ret) {
+ dev_info(&pf->pdev->dev,
+ "VSI seid %d Rx ring %d disable timeout\n",
+ vsi->seid, pf_q);
+ return ret;
+ }
+ }
+
return 0;
}
/**
- * i40e_pf_wait_txq_disabled - Wait for all queues of PF VSIs to be disabled
+ * i40e_pf_wait_queues_disabled - Wait for all queues of PF VSIs to be disabled
* @pf: the PF
*
- * This function waits for the Tx queues to be in disabled state for all the
+ * This function waits for the queues to be in disabled state for all the
* VSIs that are managed by this PF.
**/
-static int i40e_pf_wait_txq_disabled(struct i40e_pf *pf)
+static int i40e_pf_wait_queues_disabled(struct i40e_pf *pf)
{
int v, ret = 0;
for (v = 0; v < pf->hw.func_caps.num_vsis; v++) {
/* No need to wait for FCoE VSI queues */
if (pf->vsi[v] && pf->vsi[v]->type != I40E_VSI_FCOE) {
- ret = i40e_vsi_wait_txq_disabled(pf->vsi[v]);
+ ret = i40e_vsi_wait_queues_disabled(pf->vsi[v]);
if (ret)
break;
}
@@ -5722,8 +5737,8 @@ static int i40e_handle_lldp_event(struct i40e_pf *pf,
if (ret)
goto exit;
- /* Wait for the PF's Tx queues to be disabled */
- ret = i40e_pf_wait_txq_disabled(pf);
+ /* Wait for the PF's queues to be disabled */
+ ret = i40e_pf_wait_queues_disabled(pf);
if (ret) {
/* Schedule PF reset to recover */
set_bit(__I40E_PF_RESET_REQUESTED, &pf->state);
--
2.1.0
^ permalink raw reply related [flat|nested] 32+ messages in thread* [Intel-wired-lan] [next PATCH S29 05/14] i40e: Do not wait for Rx queue disable in DCB reconfig
2016-02-18 0:12 ` [Intel-wired-lan] [next PATCH S29 05/14] i40e: Do not wait for Rx queue disable in DCB reconfig Avinash Dayanand
@ 2016-02-18 19:00 ` Bowers, AndrewX
0 siblings, 0 replies; 32+ messages in thread
From: Bowers, AndrewX @ 2016-02-18 19:00 UTC (permalink / raw)
To: intel-wired-lan
> -----Original Message-----
> From: Intel-wired-lan [mailto:intel-wired-lan-bounces at lists.osuosl.org] On
> Behalf Of Avinash Dayanand
> Sent: Wednesday, February 17, 2016 4:12 PM
> To: intel-wired-lan at lists.osuosl.org
> Subject: [Intel-wired-lan] [next PATCH S29 05/14] i40e: Do not wait for Rx
> queue disable in DCB reconfig
>
> From: Neerav Parikh <neerav.parikh@intel.com>
>
> Just like Tx queues don't wait for Rx queues to be disabled before DCB has
> been reconfigured.
> Check the queues are disabled only after the DCB configuration has been
> applied to the VSI(s) managed by the PF driver.
>
> In case of any timeout issue a PF reset to recover.
>
> Signed-off-by: Neerav Parikh <neerav.parikh@intel.com>
> Change-ID: Ic51e94c25baf9a5480cee983f35d15575a88642c
> ---
> drivers/net/ethernet/intel/i40e/i40e_main.c | 33
> +++++++++++++++++++++--------
> 1 file changed, 24 insertions(+), 9 deletions(-)
Tested-by: Andrew Bowers <andrewx.bowers@intel.com>
Code changes properly applied, does not break base driver.
^ permalink raw reply [flat|nested] 32+ messages in thread
* [Intel-wired-lan] [next PATCH S29 06/14] i40e: Fix for unexpected messaging
2016-02-18 0:12 [Intel-wired-lan] [next PATCH S29 00/14] i40e/i40evf updates Avinash Dayanand
` (4 preceding siblings ...)
2016-02-18 0:12 ` [Intel-wired-lan] [next PATCH S29 05/14] i40e: Do not wait for Rx queue disable in DCB reconfig Avinash Dayanand
@ 2016-02-18 0:12 ` Avinash Dayanand
2016-02-18 19:04 ` Bowers, AndrewX
2016-02-18 0:12 ` [Intel-wired-lan] [next PATCH S29 07/14] i40e: Expose some registers to program parser, FD and RSS logic Avinash Dayanand
` (7 subsequent siblings)
13 siblings, 1 reply; 32+ messages in thread
From: Avinash Dayanand @ 2016-02-18 0:12 UTC (permalink / raw)
To: intel-wired-lan
From: Carolyn Wyborny <carolyn.wyborny@intel.com>
This fixes an issue where a previously removed message
has returned. Changing the message type to dev_dbg
leaves the info, if desired, but takes it out of normal
everyday usage. Also changed call to only provide port
data when its valid and not when its not (delete case).
Signed-off-by: Carolyn Wyborny <carolyn.wyborny@intel.com>
Change-ID: Ief6f33b915f6364c24fa8e5789c2fc3168b5e2ed
---
drivers/net/ethernet/intel/i40e/i40e_main.c | 13 +++++++------
1 file changed, 7 insertions(+), 6 deletions(-)
diff --git a/drivers/net/ethernet/intel/i40e/i40e_main.c b/drivers/net/ethernet/intel/i40e/i40e_main.c
index 3c658a29..2a02f93 100644
--- a/drivers/net/ethernet/intel/i40e/i40e_main.c
+++ b/drivers/net/ethernet/intel/i40e/i40e_main.c
@@ -7105,12 +7105,13 @@ static void i40e_sync_udp_filters_subtask(struct i40e_pf *pf)
ret = i40e_aq_del_udp_tunnel(hw, i, NULL);
if (ret) {
- dev_info(&pf->pdev->dev,
- "%s vxlan port %d, index %d failed, err %s aq_err %s\n",
- port ? "add" : "delete",
- ntohs(port), i,
- i40e_stat_str(&pf->hw, ret),
- i40e_aq_str(&pf->hw,
+ dev_dbg(&pf->pdev->dev,
+ "%s %s port %d, index %d failed, err %s aq_err %s\n",
+ pf->udp_ports[i].type ? "vxlan" : "geneve",
+ port ? "add" : "delete",
+ ntohs(port), i,
+ i40e_stat_str(&pf->hw, ret),
+ i40e_aq_str(&pf->hw,
pf->hw.aq.asq_last_status));
pf->udp_ports[i].index = 0;
}
--
2.1.0
^ permalink raw reply related [flat|nested] 32+ messages in thread* [Intel-wired-lan] [next PATCH S29 06/14] i40e: Fix for unexpected messaging
2016-02-18 0:12 ` [Intel-wired-lan] [next PATCH S29 06/14] i40e: Fix for unexpected messaging Avinash Dayanand
@ 2016-02-18 19:04 ` Bowers, AndrewX
0 siblings, 0 replies; 32+ messages in thread
From: Bowers, AndrewX @ 2016-02-18 19:04 UTC (permalink / raw)
To: intel-wired-lan
> -----Original Message-----
> From: Intel-wired-lan [mailto:intel-wired-lan-bounces at lists.osuosl.org] On
> Behalf Of Avinash Dayanand
> Sent: Wednesday, February 17, 2016 4:12 PM
> To: intel-wired-lan at lists.osuosl.org
> Subject: [Intel-wired-lan] [next PATCH S29 06/14] i40e: Fix for unexpected
> messaging
>
> From: Carolyn Wyborny <carolyn.wyborny@intel.com>
>
> This fixes an issue where a previously removed message has returned.
> Changing the message type to dev_dbg leaves the info, if desired, but takes
> it out of normal everyday usage. Also changed call to only provide port data
> when its valid and not when its not (delete case).
>
> Signed-off-by: Carolyn Wyborny <carolyn.wyborny@intel.com>
> Change-ID: Ief6f33b915f6364c24fa8e5789c2fc3168b5e2ed
> ---
> drivers/net/ethernet/intel/i40e/i40e_main.c | 13 +++++++------
> 1 file changed, 7 insertions(+), 6 deletions(-)
Tested-by: Andrew Bowers <andrewx.bowers@intel.com>
Code changes properly applied
^ permalink raw reply [flat|nested] 32+ messages in thread
* [Intel-wired-lan] [next PATCH S29 07/14] i40e: Expose some registers to program parser, FD and RSS logic
2016-02-18 0:12 [Intel-wired-lan] [next PATCH S29 00/14] i40e/i40evf updates Avinash Dayanand
` (5 preceding siblings ...)
2016-02-18 0:12 ` [Intel-wired-lan] [next PATCH S29 06/14] i40e: Fix for unexpected messaging Avinash Dayanand
@ 2016-02-18 0:12 ` Avinash Dayanand
2016-02-18 19:07 ` Bowers, AndrewX
2016-02-18 0:12 ` [Intel-wired-lan] [next PATCH S29 08/14] i40e: Fix PSOD's when npar enabled Avinash Dayanand
` (6 subsequent siblings)
13 siblings, 1 reply; 32+ messages in thread
From: Avinash Dayanand @ 2016-02-18 0:12 UTC (permalink / raw)
To: intel-wired-lan
From: Anjali Singhai Jain <anjali.singhai@intel.com>
This patch adds 7 new register definitions for programming the
parser, flow director and RSS blocks in the HW.
Signed-off-by: Anjali Singhai Jain <anjali.singhai@intel.com>
Change-ID: I31e76673125275f3c69a14c646361919d04dc987
---
drivers/net/ethernet/intel/i40e/i40e_register.h | 48 +++++++++++++++++++++++++
1 file changed, 48 insertions(+)
diff --git a/drivers/net/ethernet/intel/i40e/i40e_register.h b/drivers/net/ethernet/intel/i40e/i40e_register.h
index dc0402f..86ca27f 100644
--- a/drivers/net/ethernet/intel/i40e/i40e_register.h
+++ b/drivers/net/ethernet/intel/i40e/i40e_register.h
@@ -2045,6 +2045,14 @@
#define I40E_PRTPM_TLPIC 0x001E43C0 /* Reset: GLOBR */
#define I40E_PRTPM_TLPIC_ETLPIC_SHIFT 0
#define I40E_PRTPM_TLPIC_ETLPIC_MASK I40E_MASK(0xFFFFFFFF, I40E_PRTPM_TLPIC_ETLPIC_SHIFT)
+#define I40E_GL_PRS_FVBM(_i) (0x00269760 + ((_i) * 4)) /* _i=0...3 */ /* Reset: CORER */
+#define I40E_GL_PRS_FVBM_MAX_INDEX 3
+#define I40E_GL_PRS_FVBM_FV_BYTE_INDX_SHIFT 0
+#define I40E_GL_PRS_FVBM_FV_BYTE_INDX_MASK I40E_MASK(0x7F, I40E_GL_PRS_FVBM_FV_BYTE_INDX_SHIFT)
+#define I40E_GL_PRS_FVBM_RULE_BUS_INDX_SHIFT 8
+#define I40E_GL_PRS_FVBM_RULE_BUS_INDX_MASK I40E_MASK(0x3F, I40E_GL_PRS_FVBM_RULE_BUS_INDX_SHIFT)
+#define I40E_GL_PRS_FVBM_MSK_ENA_SHIFT 31
+#define I40E_GL_PRS_FVBM_MSK_ENA_MASK I40E_MASK(0x1, I40E_GL_PRS_FVBM_MSK_ENA_SHIFT)
#define I40E_GLRPB_DPSS 0x000AC828 /* Reset: CORER */
#define I40E_GLRPB_DPSS_DPS_TCN_SHIFT 0
#define I40E_GLRPB_DPSS_DPS_TCN_MASK I40E_MASK(0xFFFFF, I40E_GLRPB_DPSS_DPS_TCN_SHIFT)
@@ -2216,6 +2224,14 @@
#define I40E_PRTQF_FD_FLXINSET_MAX_INDEX 63
#define I40E_PRTQF_FD_FLXINSET_INSET_SHIFT 0
#define I40E_PRTQF_FD_FLXINSET_INSET_MASK I40E_MASK(0xFF, I40E_PRTQF_FD_FLXINSET_INSET_SHIFT)
+#define I40E_PRTQF_FD_INSET(_i, _j) (0x00250000 + ((_i) * 64 + (_j) * 32)) /* _i=0...63, _j=0...1 */ /* Reset: CORER */
+#define I40E_PRTQF_FD_INSET_MAX_INDEX 63
+#define I40E_PRTQF_FD_INSET_INSET_SHIFT 0
+#define I40E_PRTQF_FD_INSET_INSET_MASK I40E_MASK(0xFFFFFFFF, I40E_PRTQF_FD_INSET_INSET_SHIFT)
+#define I40E_PRTQF_FD_INSET(_i, _j) (0x00250000 + ((_i) * 64 + (_j) * 32)) /* _i=0...63, _j=0...1 */ /* Reset: CORER */
+#define I40E_PRTQF_FD_INSET_MAX_INDEX 63
+#define I40E_PRTQF_FD_INSET_INSET_SHIFT 0
+#define I40E_PRTQF_FD_INSET_INSET_MASK I40E_MASK(0xFFFFFFFF, I40E_PRTQF_FD_INSET_INSET_SHIFT)
#define I40E_PRTQF_FD_MSK(_i, _j) (0x00252000 + ((_i) * 64 + (_j) * 32)) /* _i=0...63, _j=0...1 */ /* Reset: CORER */
#define I40E_PRTQF_FD_MSK_MAX_INDEX 63
#define I40E_PRTQF_FD_MSK_MASK_SHIFT 0
@@ -5155,6 +5171,38 @@
#define I40E_GLQF_FD_PCTYPES_MAX_INDEX 63
#define I40E_GLQF_FD_PCTYPES_FD_PCTYPE_SHIFT 0
#define I40E_GLQF_FD_PCTYPES_FD_PCTYPE_MASK I40E_MASK(0x3F, I40E_GLQF_FD_PCTYPES_FD_PCTYPE_SHIFT)
+#define I40E_GLQF_FD_MSK(_i, _j) (0x00267200 + ((_i) * 4 + (_j) * 8)) /* _i=0...1, _j=0...63 */ /* Reset: CORER */
+#define I40E_GLQF_FD_MSK_MAX_INDEX 1
+#define I40E_GLQF_FD_MSK_MASK_SHIFT 0
+#define I40E_GLQF_FD_MSK_MASK_MASK I40E_MASK(0xFFFF, I40E_GLQF_FD_MSK_MASK_SHIFT)
+#define I40E_GLQF_FD_MSK_OFFSET_SHIFT 16
+#define I40E_GLQF_FD_MSK_OFFSET_MASK I40E_MASK(0x3F, I40E_GLQF_FD_MSK_OFFSET_SHIFT)
+#define I40E_GLQF_HASH_INSET(_i, _j) (0x00267600 + ((_i) * 4 + (_j) * 8)) /* _i=0...1, _j=0...63 */ /* Reset: CORER */
+#define I40E_GLQF_HASH_INSET_MAX_INDEX 1
+#define I40E_GLQF_HASH_INSET_INSET_SHIFT 0
+#define I40E_GLQF_HASH_INSET_INSET_MASK I40E_MASK(0xFFFFFFFF, I40E_GLQF_HASH_INSET_INSET_SHIFT)
+#define I40E_GLQF_HASH_MSK(_i, _j) (0x00267A00 + ((_i) * 4 + (_j) * 8)) /* _i=0...1, _j=0...63 */ /* Reset: CORER */
+#define I40E_GLQF_HASH_MSK_MAX_INDEX 1
+#define I40E_GLQF_HASH_MSK_MASK_SHIFT 0
+#define I40E_GLQF_HASH_MSK_MASK_MASK I40E_MASK(0xFFFF, I40E_GLQF_HASH_MSK_MASK_SHIFT)
+#define I40E_GLQF_HASH_MSK_OFFSET_SHIFT 16
+#define I40E_GLQF_HASH_MSK_OFFSET_MASK I40E_MASK(0x3F, I40E_GLQF_HASH_MSK_OFFSET_SHIFT)
+#define I40E_GLQF_ORT(_i) (0x00268900 + ((_i) * 4)) /* _i=0...63 */ /* Reset: CORER */
+#define I40E_GLQF_ORT_MAX_INDEX 63
+#define I40E_GLQF_ORT_PIT_INDX_SHIFT 0
+#define I40E_GLQF_ORT_PIT_INDX_MASK I40E_MASK(0x1F, I40E_GLQF_ORT_PIT_INDX_SHIFT)
+#define I40E_GLQF_ORT_FIELD_CNT_SHIFT 5
+#define I40E_GLQF_ORT_FIELD_CNT_MASK I40E_MASK(0x3, I40E_GLQF_ORT_FIELD_CNT_SHIFT)
+#define I40E_GLQF_ORT_FLX_PAYLOAD_SHIFT 7
+#define I40E_GLQF_ORT_FLX_PAYLOAD_MASK I40E_MASK(0x1, I40E_GLQF_ORT_FLX_PAYLOAD_SHIFT)
+#define I40E_GLQF_PIT(_i) (0x00268C80 + ((_i) * 4)) /* _i=0...23 */ /* Reset: CORER */
+#define I40E_GLQF_PIT_MAX_INDEX 23
+#define I40E_GLQF_PIT_SOURCE_OFF_SHIFT 0
+#define I40E_GLQF_PIT_SOURCE_OFF_MASK I40E_MASK(0x1F, I40E_GLQF_PIT_SOURCE_OFF_SHIFT)
+#define I40E_GLQF_PIT_FSIZE_SHIFT 5
+#define I40E_GLQF_PIT_FSIZE_MASK I40E_MASK(0x1F, I40E_GLQF_PIT_FSIZE_SHIFT)
+#define I40E_GLQF_PIT_DEST_OFF_SHIFT 10
+#define I40E_GLQF_PIT_DEST_OFF_MASK I40E_MASK(0x3F, I40E_GLQF_PIT_DEST_OFF_SHIFT)
#define I40E_GLQF_FDEVICTENA(_i) (0x00270384 + ((_i) * 4)) /* _i=0...1 */ /* Reset: CORER */
#define I40E_GLQF_FDEVICTENA_MAX_INDEX 1
#define I40E_GLQF_FDEVICTENA_GLQF_FDEVICTENA_SHIFT 0
--
2.1.0
^ permalink raw reply related [flat|nested] 32+ messages in thread* [Intel-wired-lan] [next PATCH S29 07/14] i40e: Expose some registers to program parser, FD and RSS logic
2016-02-18 0:12 ` [Intel-wired-lan] [next PATCH S29 07/14] i40e: Expose some registers to program parser, FD and RSS logic Avinash Dayanand
@ 2016-02-18 19:07 ` Bowers, AndrewX
0 siblings, 0 replies; 32+ messages in thread
From: Bowers, AndrewX @ 2016-02-18 19:07 UTC (permalink / raw)
To: intel-wired-lan
> -----Original Message-----
> From: Intel-wired-lan [mailto:intel-wired-lan-bounces at lists.osuosl.org] On
> Behalf Of Avinash Dayanand
> Sent: Wednesday, February 17, 2016 4:12 PM
> To: intel-wired-lan at lists.osuosl.org
> Subject: [Intel-wired-lan] [next PATCH S29 07/14] i40e: Expose some
> registers to program parser, FD and RSS logic
>
> From: Anjali Singhai Jain <anjali.singhai@intel.com>
>
> This patch adds 7 new register definitions for programming the parser, flow
> director and RSS blocks in the HW.
>
> Signed-off-by: Anjali Singhai Jain <anjali.singhai@intel.com>
> Change-ID: I31e76673125275f3c69a14c646361919d04dc987
> ---
> drivers/net/ethernet/intel/i40e/i40e_register.h | 48
> +++++++++++++++++++++++++
> 1 file changed, 48 insertions(+)
Tested-by: Andrew Bowers <andrewx.bowers@intel.com>
Code changes properly applied
^ permalink raw reply [flat|nested] 32+ messages in thread
* [Intel-wired-lan] [next PATCH S29 08/14] i40e: Fix PSOD's when npar enabled
2016-02-18 0:12 [Intel-wired-lan] [next PATCH S29 00/14] i40e/i40evf updates Avinash Dayanand
` (6 preceding siblings ...)
2016-02-18 0:12 ` [Intel-wired-lan] [next PATCH S29 07/14] i40e: Expose some registers to program parser, FD and RSS logic Avinash Dayanand
@ 2016-02-18 0:12 ` Avinash Dayanand
2016-02-18 0:35 ` Brandeburg, Jesse
2016-02-18 4:00 ` Jeff Kirsher
2016-02-18 0:12 ` [Intel-wired-lan] [next PATCH S29 09/14] i40e: add adminq commands for rx ctl registers Avinash Dayanand
` (5 subsequent siblings)
13 siblings, 2 replies; 32+ messages in thread
From: Avinash Dayanand @ 2016-02-18 0:12 UTC (permalink / raw)
To: intel-wired-lan
From: John Underwood <johnx.underwood@intel.com>
Return from i40e_vsi_reinit_setup() if vsi param is NULL.
This makes this code consistent with all the other code that
checks for NULL before using one of the VSI pointers accessed
with an indexed variable. (Indexed VSI pointers are
intentionally set to NULL in i40e_vsi_clear() and
i40e_remove().
Signed-off-by: John Underwood <johnx.underwood@intel.com>
Change-ID: I3bc8b909c70fd2439334eeae994d151f61480985
---
drivers/net/ethernet/intel/i40e/i40e_main.c | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/drivers/net/ethernet/intel/i40e/i40e_main.c b/drivers/net/ethernet/intel/i40e/i40e_main.c
index 2a02f93..3c910ef 100644
--- a/drivers/net/ethernet/intel/i40e/i40e_main.c
+++ b/drivers/net/ethernet/intel/i40e/i40e_main.c
@@ -9579,10 +9579,15 @@ vector_setup_out:
**/
static struct i40e_vsi *i40e_vsi_reinit_setup(struct i40e_vsi *vsi)
{
- struct i40e_pf *pf = vsi->back;
+ struct i40e_pf *pf;
u8 enabled_tc;
int ret;
+ if (!vsi)
+ return NULL;
+
+ pf = vsi->back;
+
i40e_put_lump(pf->qp_pile, vsi->base_queue, vsi->idx);
i40e_vsi_clear_rings(vsi);
--
2.1.0
^ permalink raw reply related [flat|nested] 32+ messages in thread* [Intel-wired-lan] [next PATCH S29 08/14] i40e: Fix PSOD's when npar enabled
2016-02-18 0:12 ` [Intel-wired-lan] [next PATCH S29 08/14] i40e: Fix PSOD's when npar enabled Avinash Dayanand
@ 2016-02-18 0:35 ` Brandeburg, Jesse
2016-02-18 4:00 ` Jeff Kirsher
1 sibling, 0 replies; 32+ messages in thread
From: Brandeburg, Jesse @ 2016-02-18 0:35 UTC (permalink / raw)
To: intel-wired-lan
The title of this patch must be fixed.
-----Original Message-----
From: Intel-wired-lan [mailto:intel-wired-lan-bounces at lists.osuosl.org] On Behalf Of Avinash Dayanand
Sent: Wednesday, February 17, 2016 4:12 PM
To: intel-wired-lan@lists.osuosl.org
Subject: [Intel-wired-lan] [next PATCH S29 08/14] i40e: Fix PSOD's when npar enabled
From: John Underwood <johnx.underwood@intel.com>
Return from i40e_vsi_reinit_setup() if vsi param is NULL.
This makes this code consistent with all the other code that
checks for NULL before using one of the VSI pointers accessed
with an indexed variable. (Indexed VSI pointers are
intentionally set to NULL in i40e_vsi_clear() and
i40e_remove().
Signed-off-by: John Underwood <johnx.underwood@intel.com>
Change-ID: I3bc8b909c70fd2439334eeae994d151f61480985
---
drivers/net/ethernet/intel/i40e/i40e_main.c | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
^ permalink raw reply [flat|nested] 32+ messages in thread
* [Intel-wired-lan] [next PATCH S29 08/14] i40e: Fix PSOD's when npar enabled
2016-02-18 0:12 ` [Intel-wired-lan] [next PATCH S29 08/14] i40e: Fix PSOD's when npar enabled Avinash Dayanand
2016-02-18 0:35 ` Brandeburg, Jesse
@ 2016-02-18 4:00 ` Jeff Kirsher
1 sibling, 0 replies; 32+ messages in thread
From: Jeff Kirsher @ 2016-02-18 4:00 UTC (permalink / raw)
To: intel-wired-lan
On Wed, 2016-02-17 at 16:12 -0800, Avinash Dayanand wrote:
> From: John Underwood <johnx.underwood@intel.com>
>
> Return from i40e_vsi_reinit_setup() if vsi param is NULL.
> This makes this code consistent with all the other code that
> checks for NULL before using one of the VSI pointers accessed
> with an indexed variable. (Indexed VSI pointers are
> intentionally set to NULL in i40e_vsi_clear() and
> i40e_remove().
>
> Signed-off-by: John Underwood <johnx.underwood@intel.com>
> Change-ID: I3bc8b909c70fd2439334eeae994d151f61480985
> ---
> ?drivers/net/ethernet/intel/i40e/i40e_main.c | 7 ++++++-
> ?1 file changed, 6 insertions(+), 1 deletion(-)
Please resend just this patch with the title fixed.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: This is a digitally signed message part
URL: <http://lists.osuosl.org/pipermail/intel-wired-lan/attachments/20160217/bb2abac8/attachment.asc>
^ permalink raw reply [flat|nested] 32+ messages in thread
* [Intel-wired-lan] [next PATCH S29 09/14] i40e: add adminq commands for rx ctl registers
2016-02-18 0:12 [Intel-wired-lan] [next PATCH S29 00/14] i40e/i40evf updates Avinash Dayanand
` (7 preceding siblings ...)
2016-02-18 0:12 ` [Intel-wired-lan] [next PATCH S29 08/14] i40e: Fix PSOD's when npar enabled Avinash Dayanand
@ 2016-02-18 0:12 ` Avinash Dayanand
2016-02-19 0:39 ` Bowers, AndrewX
2016-02-18 0:12 ` [Intel-wired-lan] [next PATCH S29 10/14] i40e: implement and use rx ctl helper functions Avinash Dayanand
` (4 subsequent siblings)
13 siblings, 1 reply; 32+ messages in thread
From: Avinash Dayanand @ 2016-02-18 0:12 UTC (permalink / raw)
To: intel-wired-lan
From: Shannon Nelson <shannon.nelson@intel.com>
Add the new opcodes and struct used for asking the firmware to update Rx
control registers that need extra care when being accessed while under
heavy traffic - e.g. sustained 64byte packets at line rate on all ports.
The firmware will take extra steps to be sure the register accesses
are successful.
The registers involved are:
PFQF_CTL_0
PFQF_HENA
PFQF_FDALLOC
PFQF_HREGION
PFLAN_QALLOC
VPQF_CTL
VFQF_HENA
VFQF_HREGION
VSIQF_CTL
VSILAN_QBASE
VSILAN_QTABLE
VSIQF_TCREGION
PFQF_HKEY
VFQF_HKEY
PRTQF_CTL_0
GLFCOE_RCTL
GLFCOE_RSOF
GLQF_CTL
GLQF_SWAP
GLQF_HASH_MSK
GLQF_HASH_INSET
GLQF_HSYM
GLQF_FC_MSK
GLQF_FC_INSET
GLQF_FD_MSK
PRTQF_FD_INSET
PRTQF_FD_FLXINSET
PRTQF_FD_MSK
Signed-off-by: Shannon Nelson <shannon.nelson@intel.com>
Change-ID: I56c8144000da66ad99f68948d8a184b2ec2aeb3e
---
drivers/net/ethernet/intel/i40e/i40e_adminq_cmd.h | 16 ++++++++++++++++
drivers/net/ethernet/intel/i40evf/i40e_adminq_cmd.h | 16 ++++++++++++++++
2 files changed, 32 insertions(+)
diff --git a/drivers/net/ethernet/intel/i40e/i40e_adminq_cmd.h b/drivers/net/ethernet/intel/i40e/i40e_adminq_cmd.h
index bb7ecbb..8d5c65a 100644
--- a/drivers/net/ethernet/intel/i40e/i40e_adminq_cmd.h
+++ b/drivers/net/ethernet/intel/i40e/i40e_adminq_cmd.h
@@ -146,6 +146,8 @@ enum i40e_admin_queue_opc {
i40e_aqc_opc_set_port_parameters = 0x0203,
i40e_aqc_opc_get_switch_resource_alloc = 0x0204,
i40e_aqc_opc_set_switch_config = 0x0205,
+ i40e_aqc_opc_rx_ctl_reg_read = 0x0206,
+ i40e_aqc_opc_rx_ctl_reg_write = 0x0207,
i40e_aqc_opc_add_vsi = 0x0210,
i40e_aqc_opc_update_vsi_parameters = 0x0211,
@@ -696,6 +698,20 @@ struct i40e_aqc_set_switch_config {
I40E_CHECK_CMD_LENGTH(i40e_aqc_set_switch_config);
+/* Read Receive control registers (direct 0x0206)
+ * Write Receive control registers (direct 0x0207)
+ * used for accessing Rx control registers that can be
+ * slow and need special handling when under high Rx load
+ */
+struct i40e_aqc_rx_ctl_reg_read_write {
+ __le32 reserved1;
+ __le32 address;
+ __le32 reserved2;
+ __le32 value;
+};
+
+I40E_CHECK_CMD_LENGTH(i40e_aqc_rx_ctl_reg_read_write);
+
/* Add VSI (indirect 0x0210)
* this indirect command uses struct i40e_aqc_vsi_properties_data
* as the indirect buffer (128 bytes)
diff --git a/drivers/net/ethernet/intel/i40evf/i40e_adminq_cmd.h b/drivers/net/ethernet/intel/i40evf/i40e_adminq_cmd.h
index 815e481..aad8d62 100644
--- a/drivers/net/ethernet/intel/i40evf/i40e_adminq_cmd.h
+++ b/drivers/net/ethernet/intel/i40evf/i40e_adminq_cmd.h
@@ -146,6 +146,8 @@ enum i40e_admin_queue_opc {
i40e_aqc_opc_set_port_parameters = 0x0203,
i40e_aqc_opc_get_switch_resource_alloc = 0x0204,
i40e_aqc_opc_set_switch_config = 0x0205,
+ i40e_aqc_opc_rx_ctl_reg_read = 0x0206,
+ i40e_aqc_opc_rx_ctl_reg_write = 0x0207,
i40e_aqc_opc_add_vsi = 0x0210,
i40e_aqc_opc_update_vsi_parameters = 0x0211,
@@ -693,6 +695,20 @@ struct i40e_aqc_set_switch_config {
I40E_CHECK_CMD_LENGTH(i40e_aqc_set_switch_config);
+/* Read Receive control registers (direct 0x0206)
+ * Write Receive control registers (direct 0x0207)
+ * used for accessing Rx control registers that can be
+ * slow and need special handling when under high Rx load
+ */
+struct i40e_aqc_rx_ctl_reg_read_write {
+ __le32 reserved1;
+ __le32 address;
+ __le32 reserved2;
+ __le32 value;
+};
+
+I40E_CHECK_CMD_LENGTH(i40e_aqc_rx_ctl_reg_read_write);
+
/* Add VSI (indirect 0x0210)
* this indirect command uses struct i40e_aqc_vsi_properties_data
* as the indirect buffer (128 bytes)
--
2.1.0
^ permalink raw reply related [flat|nested] 32+ messages in thread* [Intel-wired-lan] [next PATCH S29 09/14] i40e: add adminq commands for rx ctl registers
2016-02-18 0:12 ` [Intel-wired-lan] [next PATCH S29 09/14] i40e: add adminq commands for rx ctl registers Avinash Dayanand
@ 2016-02-19 0:39 ` Bowers, AndrewX
0 siblings, 0 replies; 32+ messages in thread
From: Bowers, AndrewX @ 2016-02-19 0:39 UTC (permalink / raw)
To: intel-wired-lan
> -----Original Message-----
> From: Intel-wired-lan [mailto:intel-wired-lan-bounces at lists.osuosl.org] On
> Behalf Of Avinash Dayanand
> Sent: Wednesday, February 17, 2016 4:12 PM
> To: intel-wired-lan at lists.osuosl.org
> Subject: [Intel-wired-lan] [next PATCH S29 09/14] i40e: add adminq
> commands for rx ctl registers
>
> From: Shannon Nelson <shannon.nelson@intel.com>
>
> Add the new opcodes and struct used for asking the firmware to update Rx
> control registers that need extra care when being accessed while under
> heavy traffic - e.g. sustained 64byte packets at line rate on all ports.
> The firmware will take extra steps to be sure the register accesses are
> successful.
>
> The registers involved are:
> PFQF_CTL_0
> PFQF_HENA
> PFQF_FDALLOC
> PFQF_HREGION
> PFLAN_QALLOC
> VPQF_CTL
> VFQF_HENA
> VFQF_HREGION
> VSIQF_CTL
> VSILAN_QBASE
> VSILAN_QTABLE
> VSIQF_TCREGION
> PFQF_HKEY
> VFQF_HKEY
> PRTQF_CTL_0
> GLFCOE_RCTL
> GLFCOE_RSOF
> GLQF_CTL
> GLQF_SWAP
> GLQF_HASH_MSK
> GLQF_HASH_INSET
> GLQF_HSYM
> GLQF_FC_MSK
> GLQF_FC_INSET
> GLQF_FD_MSK
> PRTQF_FD_INSET
> PRTQF_FD_FLXINSET
> PRTQF_FD_MSK
>
> Signed-off-by: Shannon Nelson <shannon.nelson@intel.com>
> Change-ID: I56c8144000da66ad99f68948d8a184b2ec2aeb3e
> ---
> drivers/net/ethernet/intel/i40e/i40e_adminq_cmd.h | 16
> ++++++++++++++++
> drivers/net/ethernet/intel/i40evf/i40e_adminq_cmd.h | 16
> ++++++++++++++++
> 2 files changed, 32 insertions(+)
Tested-by: Andrew Bowers <andrewx.bowers@intel.com>
AQ-RSS functions work properly and change under load without error
^ permalink raw reply [flat|nested] 32+ messages in thread
* [Intel-wired-lan] [next PATCH S29 10/14] i40e: implement and use rx ctl helper functions
2016-02-18 0:12 [Intel-wired-lan] [next PATCH S29 00/14] i40e/i40evf updates Avinash Dayanand
` (8 preceding siblings ...)
2016-02-18 0:12 ` [Intel-wired-lan] [next PATCH S29 09/14] i40e: add adminq commands for rx ctl registers Avinash Dayanand
@ 2016-02-18 0:12 ` Avinash Dayanand
2016-02-19 0:40 ` Bowers, AndrewX
2016-02-18 0:12 ` [Intel-wired-lan] [next PATCH S29 11/14] i40e: Use the new rx ctl register helpers. Don't use AQ calls from clear_hw Avinash Dayanand
` (3 subsequent siblings)
13 siblings, 1 reply; 32+ messages in thread
From: Avinash Dayanand @ 2016-02-18 0:12 UTC (permalink / raw)
To: intel-wired-lan
From: Shannon Nelson <shannon.nelson@intel.com>
Use the new AdminQ functions for safely accessing the Rx control
registers that may be affected by heavy small packet traffic.
Signed-off-by: Shannon Nelson <shannon.nelson@intel.com>
Change-ID: Ibb00983e8dcba71f4b760222a609a5fcaa726f18
---
drivers/net/ethernet/intel/i40e/i40e_common.c | 128 ++++++++++++++++++++-
drivers/net/ethernet/intel/i40e/i40e_prototype.h | 8 ++
drivers/net/ethernet/intel/i40evf/i40e_common.c | 125 ++++++++++++++++++++
drivers/net/ethernet/intel/i40evf/i40e_prototype.h | 8 ++
4 files changed, 266 insertions(+), 3 deletions(-)
diff --git a/drivers/net/ethernet/intel/i40e/i40e_common.c b/drivers/net/ethernet/intel/i40e/i40e_common.c
index 3a57e59..74d9599 100644
--- a/drivers/net/ethernet/intel/i40e/i40e_common.c
+++ b/drivers/net/ethernet/intel/i40e/i40e_common.c
@@ -1328,7 +1328,7 @@ void i40e_clear_hw(struct i40e_hw *hw)
num_vf_int = (val & I40E_GLPCI_CNF2_MSI_X_VF_N_MASK) >>
I40E_GLPCI_CNF2_MSI_X_VF_N_SHIFT;
- val = rd32(hw, I40E_PFLAN_QALLOC);
+ val = i40e_read_rx_ctl(hw, I40E_PFLAN_QALLOC);
base_queue = (val & I40E_PFLAN_QALLOC_FIRSTQ_MASK) >>
I40E_PFLAN_QALLOC_FIRSTQ_SHIFT;
j = (val & I40E_PFLAN_QALLOC_LASTQ_MASK) >>
@@ -3882,7 +3882,7 @@ i40e_status i40e_set_filter_control(struct i40e_hw *hw,
return ret;
/* Read the PF Queue Filter control register */
- val = rd32(hw, I40E_PFQF_CTL_0);
+ val = i40e_read_rx_ctl(hw, I40E_PFQF_CTL_0);
/* Program required PE hash buckets for the PF */
val &= ~I40E_PFQF_CTL_0_PEHSIZE_MASK;
@@ -3919,7 +3919,7 @@ i40e_status i40e_set_filter_control(struct i40e_hw *hw,
if (settings->enable_macvlan)
val |= I40E_PFQF_CTL_0_MACVLAN_ENA_MASK;
- wr32(hw, I40E_PFQF_CTL_0, val);
+ i40e_write_rx_ctl(hw, I40E_PFQF_CTL_0, val);
return 0;
}
@@ -4575,3 +4575,125 @@ restore_config:
phy_addr, led_ctl);
return status;
}
+
+/**
+ * i40e_aq_rx_ctl_read_register - use FW to read from an Rx control register
+ * @hw: pointer to the hw struct
+ * @reg_addr: register address
+ * @reg_val: ptr to register value
+ * @cmd_details: pointer to command details structure or NULL
+ *
+ * Use the firmware to read the Rx control register,
+ * especially useful if the Rx unit is under heavy pressure
+ **/
+i40e_status i40e_aq_rx_ctl_read_register(struct i40e_hw *hw,
+ u32 reg_addr, u32 *reg_val,
+ struct i40e_asq_cmd_details *cmd_details)
+{
+ struct i40e_aq_desc desc;
+ struct i40e_aqc_rx_ctl_reg_read_write *cmd_resp =
+ (struct i40e_aqc_rx_ctl_reg_read_write *)&desc.params.raw;
+ i40e_status status;
+
+ if (!reg_val)
+ return I40E_ERR_PARAM;
+
+ i40e_fill_default_direct_cmd_desc(&desc, i40e_aqc_opc_rx_ctl_reg_read);
+
+ cmd_resp->address = cpu_to_le32(reg_addr);
+
+ status = i40e_asq_send_command(hw, &desc, NULL, 0, cmd_details);
+
+ if (status == 0)
+ *reg_val = le32_to_cpu(cmd_resp->value);
+
+ return status;
+}
+
+/**
+ * i40e_read_rx_ctl - read from an Rx control register
+ * @hw: pointer to the hw struct
+ * @reg_addr: register address
+ **/
+u32 i40e_read_rx_ctl(struct i40e_hw *hw, u32 reg_addr)
+{
+ i40e_status status = 0;
+ bool use_register;
+ int retry = 5;
+ u32 val = 0;
+
+ use_register = (hw->aq.api_maj_ver == 1) && (hw->aq.api_min_ver < 5);
+ if (!use_register) {
+do_retry:
+ status = i40e_aq_rx_ctl_read_register(hw, reg_addr, &val, NULL);
+ if (hw->aq.asq_last_status == I40E_AQ_RC_EAGAIN && retry) {
+ usleep_range(1000, 2000);
+ retry--;
+ goto do_retry;
+ }
+ }
+
+ /* if the AQ access failed, try the old-fashioned way */
+ if (status || use_register)
+ val = rd32(hw, reg_addr);
+
+ return val;
+}
+
+/**
+ * i40e_aq_rx_ctl_write_register
+ * @hw: pointer to the hw struct
+ * @reg_addr: register address
+ * @reg_val: register value
+ * @cmd_details: pointer to command details structure or NULL
+ *
+ * Use the firmware to write to an Rx control register,
+ * especially useful if the Rx unit is under heavy pressure
+ **/
+i40e_status i40e_aq_rx_ctl_write_register(struct i40e_hw *hw,
+ u32 reg_addr, u32 reg_val,
+ struct i40e_asq_cmd_details *cmd_details)
+{
+ struct i40e_aq_desc desc;
+ struct i40e_aqc_rx_ctl_reg_read_write *cmd =
+ (struct i40e_aqc_rx_ctl_reg_read_write *)&desc.params.raw;
+ i40e_status status;
+
+ i40e_fill_default_direct_cmd_desc(&desc, i40e_aqc_opc_rx_ctl_reg_write);
+
+ cmd->address = cpu_to_le32(reg_addr);
+ cmd->value = cpu_to_le32(reg_val);
+
+ status = i40e_asq_send_command(hw, &desc, NULL, 0, cmd_details);
+
+ return status;
+}
+
+/**
+ * i40e_write_rx_ctl - write to an Rx control register
+ * @hw: pointer to the hw struct
+ * @reg_addr: register address
+ * @reg_val: register value
+ **/
+void i40e_write_rx_ctl(struct i40e_hw *hw, u32 reg_addr, u32 reg_val)
+{
+ i40e_status status = 0;
+ bool use_register;
+ int retry = 5;
+
+ use_register = (hw->aq.api_maj_ver == 1) && (hw->aq.api_min_ver < 5);
+ if (!use_register) {
+do_retry:
+ status = i40e_aq_rx_ctl_write_register(hw, reg_addr,
+ reg_val, NULL);
+ if (hw->aq.asq_last_status == I40E_AQ_RC_EAGAIN && retry) {
+ usleep_range(1000, 2000);
+ retry--;
+ goto do_retry;
+ }
+ }
+
+ /* if the AQ access failed, try the old-fashioned way */
+ if (status || use_register)
+ wr32(hw, reg_addr, reg_val);
+}
diff --git a/drivers/net/ethernet/intel/i40e/i40e_prototype.h b/drivers/net/ethernet/intel/i40e/i40e_prototype.h
index ca2f7ac..d51eee5 100644
--- a/drivers/net/ethernet/intel/i40e/i40e_prototype.h
+++ b/drivers/net/ethernet/intel/i40e/i40e_prototype.h
@@ -342,6 +342,14 @@ i40e_status i40e_aq_debug_dump(struct i40e_hw *hw, u8 cluster_id,
struct i40e_asq_cmd_details *cmd_details);
void i40e_add_filter_to_drop_tx_flow_control_frames(struct i40e_hw *hw,
u16 vsi_seid);
+i40e_status i40e_aq_rx_ctl_read_register(struct i40e_hw *hw,
+ u32 reg_addr, u32 *reg_val,
+ struct i40e_asq_cmd_details *cmd_details);
+u32 i40e_read_rx_ctl(struct i40e_hw *hw, u32 reg_addr);
+i40e_status i40e_aq_rx_ctl_write_register(struct i40e_hw *hw,
+ u32 reg_addr, u32 reg_val,
+ struct i40e_asq_cmd_details *cmd_details);
+void i40e_write_rx_ctl(struct i40e_hw *hw, u32 reg_addr, u32 reg_val);
i40e_status i40e_read_phy_register(struct i40e_hw *hw, u8 page,
u16 reg, u8 phy_addr, u16 *value);
i40e_status i40e_write_phy_register(struct i40e_hw *hw, u8 page,
diff --git a/drivers/net/ethernet/intel/i40evf/i40e_common.c b/drivers/net/ethernet/intel/i40evf/i40e_common.c
index 938783e..771ac6a 100644
--- a/drivers/net/ethernet/intel/i40evf/i40e_common.c
+++ b/drivers/net/ethernet/intel/i40evf/i40e_common.c
@@ -904,6 +904,131 @@ struct i40e_rx_ptype_decoded i40evf_ptype_lookup[] = {
};
/**
+ * i40evf_aq_rx_ctl_read_register - use FW to read from an Rx control register
+ * @hw: pointer to the hw struct
+ * @reg_addr: register address
+ * @reg_val: ptr to register value
+ * @cmd_details: pointer to command details structure or NULL
+ *
+ * Use the firmware to read the Rx control register,
+ * especially useful if the Rx unit is under heavy pressure
+ **/
+i40e_status i40evf_aq_rx_ctl_read_register(struct i40e_hw *hw,
+ u32 reg_addr, u32 *reg_val,
+ struct i40e_asq_cmd_details *cmd_details)
+{
+ struct i40e_aq_desc desc;
+ struct i40e_aqc_rx_ctl_reg_read_write *cmd_resp =
+ (struct i40e_aqc_rx_ctl_reg_read_write *)&desc.params.raw;
+ i40e_status status;
+
+ if (!reg_val)
+ return I40E_ERR_PARAM;
+
+ i40evf_fill_default_direct_cmd_desc(&desc,
+ i40e_aqc_opc_rx_ctl_reg_read);
+
+ cmd_resp->address = cpu_to_le32(reg_addr);
+
+ status = i40evf_asq_send_command(hw, &desc, NULL, 0, cmd_details);
+
+ if (status == 0)
+ *reg_val = le32_to_cpu(cmd_resp->value);
+
+ return status;
+}
+
+/**
+ * i40evf_read_rx_ctl - read from an Rx control register
+ * @hw: pointer to the hw struct
+ * @reg_addr: register address
+ **/
+u32 i40evf_read_rx_ctl(struct i40e_hw *hw, u32 reg_addr)
+{
+ i40e_status status = 0;
+ bool use_register;
+ int retry = 5;
+ u32 val = 0;
+
+ use_register = (hw->aq.api_maj_ver == 1) && (hw->aq.api_min_ver < 5);
+ if (!use_register) {
+do_retry:
+ status = i40evf_aq_rx_ctl_read_register(hw, reg_addr,
+ &val, NULL);
+ if (hw->aq.asq_last_status == I40E_AQ_RC_EAGAIN && retry) {
+ usleep_range(1000, 2000);
+ retry--;
+ goto do_retry;
+ }
+ }
+
+ /* if the AQ access failed, try the old-fashioned way */
+ if (status || use_register)
+ val = rd32(hw, reg_addr);
+
+ return val;
+}
+
+/**
+ * i40evf_aq_rx_ctl_write_register
+ * @hw: pointer to the hw struct
+ * @reg_addr: register address
+ * @reg_val: register value
+ * @cmd_details: pointer to command details structure or NULL
+ *
+ * Use the firmware to write to an Rx control register,
+ * especially useful if the Rx unit is under heavy pressure
+ **/
+i40e_status i40evf_aq_rx_ctl_write_register(struct i40e_hw *hw,
+ u32 reg_addr, u32 reg_val,
+ struct i40e_asq_cmd_details *cmd_details)
+{
+ struct i40e_aq_desc desc;
+ struct i40e_aqc_rx_ctl_reg_read_write *cmd =
+ (struct i40e_aqc_rx_ctl_reg_read_write *)&desc.params.raw;
+ i40e_status status;
+
+ i40evf_fill_default_direct_cmd_desc(&desc,
+ i40e_aqc_opc_rx_ctl_reg_write);
+
+ cmd->address = cpu_to_le32(reg_addr);
+ cmd->value = cpu_to_le32(reg_val);
+
+ status = i40evf_asq_send_command(hw, &desc, NULL, 0, cmd_details);
+
+ return status;
+}
+
+/**
+ * i40evf_write_rx_ctl - write to an Rx control register
+ * @hw: pointer to the hw struct
+ * @reg_addr: register address
+ * @reg_val: register value
+ **/
+void i40evf_write_rx_ctl(struct i40e_hw *hw, u32 reg_addr, u32 reg_val)
+{
+ i40e_status status = 0;
+ bool use_register;
+ int retry = 5;
+
+ use_register = (hw->aq.api_maj_ver == 1) && (hw->aq.api_min_ver < 5);
+ if (!use_register) {
+do_retry:
+ status = i40evf_aq_rx_ctl_write_register(hw, reg_addr,
+ reg_val, NULL);
+ if (hw->aq.asq_last_status == I40E_AQ_RC_EAGAIN && retry) {
+ usleep_range(1000, 2000);
+ retry--;
+ goto do_retry;
+ }
+ }
+
+ /* if the AQ access failed, try the old-fashioned way */
+ if (status || use_register)
+ wr32(hw, reg_addr, reg_val);
+}
+
+/**
* i40e_aq_send_msg_to_pf
* @hw: pointer to the hardware structure
* @v_opcode: opcodes for VF-PF communication
diff --git a/drivers/net/ethernet/intel/i40evf/i40e_prototype.h b/drivers/net/ethernet/intel/i40evf/i40e_prototype.h
index fa34d85..d89d521 100644
--- a/drivers/net/ethernet/intel/i40evf/i40e_prototype.h
+++ b/drivers/net/ethernet/intel/i40evf/i40e_prototype.h
@@ -103,6 +103,14 @@ i40e_status i40e_aq_add_rem_control_packet_filter(struct i40e_hw *hw,
struct i40e_asq_cmd_details *cmd_details);
void i40e_add_filter_to_drop_tx_flow_control_frames(struct i40e_hw *hw,
u16 vsi_seid);
+i40e_status i40evf_aq_rx_ctl_read_register(struct i40e_hw *hw,
+ u32 reg_addr, u32 *reg_val,
+ struct i40e_asq_cmd_details *cmd_details);
+u32 i40evf_read_rx_ctl(struct i40e_hw *hw, u32 reg_addr);
+i40e_status i40evf_aq_rx_ctl_write_register(struct i40e_hw *hw,
+ u32 reg_addr, u32 reg_val,
+ struct i40e_asq_cmd_details *cmd_details);
+void i40evf_write_rx_ctl(struct i40e_hw *hw, u32 reg_addr, u32 reg_val);
i40e_status i40e_read_phy_register(struct i40e_hw *hw, u8 page,
u16 reg, u8 phy_addr, u16 *value);
i40e_status i40e_write_phy_register(struct i40e_hw *hw, u8 page,
--
2.1.0
^ permalink raw reply related [flat|nested] 32+ messages in thread* [Intel-wired-lan] [next PATCH S29 10/14] i40e: implement and use rx ctl helper functions
2016-02-18 0:12 ` [Intel-wired-lan] [next PATCH S29 10/14] i40e: implement and use rx ctl helper functions Avinash Dayanand
@ 2016-02-19 0:40 ` Bowers, AndrewX
0 siblings, 0 replies; 32+ messages in thread
From: Bowers, AndrewX @ 2016-02-19 0:40 UTC (permalink / raw)
To: intel-wired-lan
> -----Original Message-----
> From: Intel-wired-lan [mailto:intel-wired-lan-bounces at lists.osuosl.org] On
> Behalf Of Avinash Dayanand
> Sent: Wednesday, February 17, 2016 4:12 PM
> To: intel-wired-lan at lists.osuosl.org
> Subject: [Intel-wired-lan] [next PATCH S29 10/14] i40e: implement and use rx
> ctl helper functions
>
> From: Shannon Nelson <shannon.nelson@intel.com>
>
> Use the new AdminQ functions for safely accessing the Rx control registers
> that may be affected by heavy small packet traffic.
>
> Signed-off-by: Shannon Nelson <shannon.nelson@intel.com>
> Change-ID: Ibb00983e8dcba71f4b760222a609a5fcaa726f18
> ---
> drivers/net/ethernet/intel/i40e/i40e_common.c | 128
> ++++++++++++++++++++-
> drivers/net/ethernet/intel/i40e/i40e_prototype.h | 8 ++
> drivers/net/ethernet/intel/i40evf/i40e_common.c | 125
> ++++++++++++++++++++
> drivers/net/ethernet/intel/i40evf/i40e_prototype.h | 8 ++
> 4 files changed, 266 insertions(+), 3 deletions(-)
Tested-by: Andrew Bowers <andrewx.bowers@intel.com>
AQ-RSS functions work properly and change under load without error
^ permalink raw reply [flat|nested] 32+ messages in thread
* [Intel-wired-lan] [next PATCH S29 11/14] i40e: Use the new rx ctl register helpers. Don't use AQ calls from clear_hw.
2016-02-18 0:12 [Intel-wired-lan] [next PATCH S29 00/14] i40e/i40evf updates Avinash Dayanand
` (9 preceding siblings ...)
2016-02-18 0:12 ` [Intel-wired-lan] [next PATCH S29 10/14] i40e: implement and use rx ctl helper functions Avinash Dayanand
@ 2016-02-18 0:12 ` Avinash Dayanand
2016-02-19 0:40 ` Bowers, AndrewX
2016-02-18 0:12 ` [Intel-wired-lan] [next PATCH S29 12/14] i40e: Fix for the NPAR PSOD issue Avinash Dayanand
` (2 subsequent siblings)
13 siblings, 1 reply; 32+ messages in thread
From: Avinash Dayanand @ 2016-02-18 0:12 UTC (permalink / raw)
To: intel-wired-lan
From: Shannon Nelson <shannon.nelson@intel.com>
Use the new AdminQ functions for safely accessing the Rx control
registers that may be affected by heavy small packet traffic.
We can't use AdminQ calls in i40e_clear_hw() because the HW is being
initialized and the AdminQ is not alive. We recently added an AQ
related replacement for reading PFLAN_QALLOC, and this patch puts
back the original register read.
Signed-off-by: Shannon Nelson <shannon.nelson@intel.com>
Change-ID: Ib027168c954a5733299aa3a4ce5f8218c6bb5636
---
Testing Hints:
Please be sure that flow director and RSS configuration changes
work as expected both with and without stress traffic.
Make sure the driver Loads.
drivers/net/ethernet/intel/i40e/i40e_common.c | 2 +-
drivers/net/ethernet/intel/i40e/i40e_ethtool.c | 8 ++++----
drivers/net/ethernet/intel/i40e/i40e_fcoe.c | 8 ++++----
drivers/net/ethernet/intel/i40e/i40e_main.c | 20 ++++++++++----------
drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c | 7 ++++---
5 files changed, 23 insertions(+), 22 deletions(-)
diff --git a/drivers/net/ethernet/intel/i40e/i40e_common.c b/drivers/net/ethernet/intel/i40e/i40e_common.c
index 74d9599..4596294 100644
--- a/drivers/net/ethernet/intel/i40e/i40e_common.c
+++ b/drivers/net/ethernet/intel/i40e/i40e_common.c
@@ -1328,7 +1328,7 @@ void i40e_clear_hw(struct i40e_hw *hw)
num_vf_int = (val & I40E_GLPCI_CNF2_MSI_X_VF_N_MASK) >>
I40E_GLPCI_CNF2_MSI_X_VF_N_SHIFT;
- val = i40e_read_rx_ctl(hw, I40E_PFLAN_QALLOC);
+ val = rd32(hw, I40E_PFLAN_QALLOC);
base_queue = (val & I40E_PFLAN_QALLOC_FIRSTQ_MASK) >>
I40E_PFLAN_QALLOC_FIRSTQ_SHIFT;
j = (val & I40E_PFLAN_QALLOC_LASTQ_MASK) >>
diff --git a/drivers/net/ethernet/intel/i40e/i40e_ethtool.c b/drivers/net/ethernet/intel/i40e/i40e_ethtool.c
index 86765d4..8705702 100644
--- a/drivers/net/ethernet/intel/i40e/i40e_ethtool.c
+++ b/drivers/net/ethernet/intel/i40e/i40e_ethtool.c
@@ -2181,8 +2181,8 @@ static int i40e_get_rxnfc(struct net_device *netdev, struct ethtool_rxnfc *cmd,
static int i40e_set_rss_hash_opt(struct i40e_pf *pf, struct ethtool_rxnfc *nfc)
{
struct i40e_hw *hw = &pf->hw;
- u64 hena = (u64)rd32(hw, I40E_PFQF_HENA(0)) |
- ((u64)rd32(hw, I40E_PFQF_HENA(1)) << 32);
+ u64 hena = (u64)i40e_read_rx_ctl(hw, I40E_PFQF_HENA(0)) |
+ ((u64)i40e_read_rx_ctl(hw, I40E_PFQF_HENA(1)) << 32);
/* RSS does not support anything other than hashing
* to queues on src and dst IPs and ports
@@ -2291,8 +2291,8 @@ static int i40e_set_rss_hash_opt(struct i40e_pf *pf, struct ethtool_rxnfc *nfc)
return -EINVAL;
}
- wr32(hw, I40E_PFQF_HENA(0), (u32)hena);
- wr32(hw, I40E_PFQF_HENA(1), (u32)(hena >> 32));
+ i40e_write_rx_ctl(hw, I40E_PFQF_HENA(0), (u32)hena);
+ i40e_write_rx_ctl(hw, I40E_PFQF_HENA(1), (u32)(hena >> 32));
i40e_flush(hw);
/* Save setting for future output/update */
diff --git a/drivers/net/ethernet/intel/i40e/i40e_fcoe.c b/drivers/net/ethernet/intel/i40e/i40e_fcoe.c
index 052df93..8ad162c 100644
--- a/drivers/net/ethernet/intel/i40e/i40e_fcoe.c
+++ b/drivers/net/ethernet/intel/i40e/i40e_fcoe.c
@@ -295,11 +295,11 @@ void i40e_init_pf_fcoe(struct i40e_pf *pf)
}
/* enable FCoE hash filter */
- val = rd32(hw, I40E_PFQF_HENA(1));
+ val = i40e_read_rx_ctl(hw, I40E_PFQF_HENA(1));
val |= BIT(I40E_FILTER_PCTYPE_FCOE_OX - 32);
val |= BIT(I40E_FILTER_PCTYPE_FCOE_RX - 32);
val &= I40E_PFQF_HENA_PTYPE_ENA_MASK;
- wr32(hw, I40E_PFQF_HENA(1), val);
+ i40e_write_rx_ctl(hw, I40E_PFQF_HENA(1), val);
/* enable flag */
pf->flags |= I40E_FLAG_FCOE_ENABLED;
@@ -317,11 +317,11 @@ void i40e_init_pf_fcoe(struct i40e_pf *pf)
pf->filter_settings.fcoe_cntx_num = I40E_DMA_CNTX_SIZE_4K;
/* Setup max frame with FCoE_MTU plus L2 overheads */
- val = rd32(hw, I40E_GLFCOE_RCTL);
+ val = i40e_read_rx_ctl(hw, I40E_GLFCOE_RCTL);
val &= ~I40E_GLFCOE_RCTL_MAX_SIZE_MASK;
val |= ((FCOE_MTU + ETH_HLEN + VLAN_HLEN + ETH_FCS_LEN)
<< I40E_GLFCOE_RCTL_MAX_SIZE_SHIFT);
- wr32(hw, I40E_GLFCOE_RCTL, val);
+ i40e_write_rx_ctl(hw, I40E_GLFCOE_RCTL, val);
dev_info(&pf->pdev->dev, "FCoE is supported.\n");
}
diff --git a/drivers/net/ethernet/intel/i40e/i40e_main.c b/drivers/net/ethernet/intel/i40e/i40e_main.c
index 3c910ef..7388c1a 100644
--- a/drivers/net/ethernet/intel/i40e/i40e_main.c
+++ b/drivers/net/ethernet/intel/i40e/i40e_main.c
@@ -8028,7 +8028,7 @@ static int i40e_config_rss_reg(struct i40e_vsi *vsi, const u8 *seed,
u32 *seed_dw = (u32 *)seed;
for (i = 0; i <= I40E_PFQF_HKEY_MAX_INDEX; i++)
- wr32(hw, I40E_PFQF_HKEY(i), seed_dw[i]);
+ i40e_write_rx_ctl(hw, I40E_PFQF_HKEY(i), seed_dw[i]);
}
if (lut) {
@@ -8065,7 +8065,7 @@ static int i40e_get_rss_reg(struct i40e_vsi *vsi, u8 *seed,
u32 *seed_dw = (u32 *)seed;
for (i = 0; i <= I40E_PFQF_HKEY_MAX_INDEX; i++)
- seed_dw[i] = rd32(hw, I40E_PFQF_HKEY(i));
+ seed_dw[i] = i40e_read_rx_ctl(hw, I40E_PFQF_HKEY(i));
}
if (lut) {
u32 *lut_dw = (u32 *)lut;
@@ -8148,19 +8148,19 @@ static int i40e_pf_config_rss(struct i40e_pf *pf)
int ret;
/* By default we enable TCP/UDP with IPv4/IPv6 ptypes */
- hena = (u64)rd32(hw, I40E_PFQF_HENA(0)) |
- ((u64)rd32(hw, I40E_PFQF_HENA(1)) << 32);
+ hena = (u64)i40e_read_rx_ctl(hw, I40E_PFQF_HENA(0)) |
+ ((u64)i40e_read_rx_ctl(hw, I40E_PFQF_HENA(1)) << 32);
hena |= i40e_pf_get_default_rss_hena(pf);
- wr32(hw, I40E_PFQF_HENA(0), (u32)hena);
- wr32(hw, I40E_PFQF_HENA(1), (u32)(hena >> 32));
+ i40e_write_rx_ctl(hw, I40E_PFQF_HENA(0), (u32)hena);
+ i40e_write_rx_ctl(hw, I40E_PFQF_HENA(1), (u32)(hena >> 32));
/* Determine the RSS table size based on the hardware capabilities */
- reg_val = rd32(hw, I40E_PFQF_CTL_0);
+ reg_val = i40e_read_rx_ctl(hw, I40E_PFQF_CTL_0);
reg_val = (pf->rss_table_size == 512) ?
(reg_val | I40E_PFQF_CTL_0_HASHLUTSIZE_512) :
(reg_val & ~I40E_PFQF_CTL_0_HASHLUTSIZE_512);
- wr32(hw, I40E_PFQF_CTL_0, reg_val);
+ i40e_write_rx_ctl(hw, I40E_PFQF_CTL_0, reg_val);
/* Determine the RSS size of the VSI */
if (!vsi->rss_size)
@@ -11207,8 +11207,8 @@ static void i40e_remove(struct pci_dev *pdev)
i40e_ptp_stop(pf);
/* Disable RSS in hw */
- wr32(hw, I40E_PFQF_HENA(0), 0);
- wr32(hw, I40E_PFQF_HENA(1), 0);
+ i40e_write_rx_ctl(hw, I40E_PFQF_HENA(0), 0);
+ i40e_write_rx_ctl(hw, I40E_PFQF_HENA(1), 0);
/* no more scheduling of any task */
set_bit(__I40E_DOWN, &pf->state);
diff --git a/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c b/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c
index 5dcd198..93d8d98 100644
--- a/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c
+++ b/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c
@@ -602,8 +602,8 @@ static void i40e_enable_vf_mappings(struct i40e_vf *vf)
* that VF queues be mapped using this method, even when they are
* contiguous in real life
*/
- wr32(hw, I40E_VSILAN_QBASE(vf->lan_vsi_id),
- I40E_VSILAN_QBASE_VSIQTABLE_ENA_MASK);
+ i40e_write_rx_ctl(hw, I40E_VSILAN_QBASE(vf->lan_vsi_id),
+ I40E_VSILAN_QBASE_VSIQTABLE_ENA_MASK);
/* enable VF vplan_qtable mappings */
reg = I40E_VPLAN_MAPENA_TXRX_ENA_MASK;
@@ -630,7 +630,8 @@ static void i40e_enable_vf_mappings(struct i40e_vf *vf)
(j * 2) + 1);
reg |= qid << 16;
}
- wr32(hw, I40E_VSILAN_QTABLE(j, vf->lan_vsi_id), reg);
+ i40e_write_rx_ctl(hw, I40E_VSILAN_QTABLE(j, vf->lan_vsi_id),
+ reg);
}
i40e_flush(hw);
--
2.1.0
^ permalink raw reply related [flat|nested] 32+ messages in thread* [Intel-wired-lan] [next PATCH S29 11/14] i40e: Use the new rx ctl register helpers. Don't use AQ calls from clear_hw.
2016-02-18 0:12 ` [Intel-wired-lan] [next PATCH S29 11/14] i40e: Use the new rx ctl register helpers. Don't use AQ calls from clear_hw Avinash Dayanand
@ 2016-02-19 0:40 ` Bowers, AndrewX
0 siblings, 0 replies; 32+ messages in thread
From: Bowers, AndrewX @ 2016-02-19 0:40 UTC (permalink / raw)
To: intel-wired-lan
> -----Original Message-----
> From: Intel-wired-lan [mailto:intel-wired-lan-bounces at lists.osuosl.org] On
> Behalf Of Avinash Dayanand
> Sent: Wednesday, February 17, 2016 4:12 PM
> To: intel-wired-lan at lists.osuosl.org
> Subject: [Intel-wired-lan] [next PATCH S29 11/14] i40e: Use the new rx ctl
> register helpers. Don't use AQ calls from clear_hw.
>
> From: Shannon Nelson <shannon.nelson@intel.com>
>
> Use the new AdminQ functions for safely accessing the Rx control registers
> that may be affected by heavy small packet traffic.
>
> We can't use AdminQ calls in i40e_clear_hw() because the HW is being
> initialized and the AdminQ is not alive. We recently added an AQ related
> replacement for reading PFLAN_QALLOC, and this patch puts back the
> original register read.
>
> Signed-off-by: Shannon Nelson <shannon.nelson@intel.com>
> Change-ID: Ib027168c954a5733299aa3a4ce5f8218c6bb5636
> ---
> Testing Hints:
> Please be sure that flow director and RSS configuration changes
> work as expected both with and without stress traffic.
> Make sure the driver Loads.
>
> drivers/net/ethernet/intel/i40e/i40e_common.c | 2 +-
> drivers/net/ethernet/intel/i40e/i40e_ethtool.c | 8 ++++----
> drivers/net/ethernet/intel/i40e/i40e_fcoe.c | 8 ++++----
> drivers/net/ethernet/intel/i40e/i40e_main.c | 20 ++++++++++----------
> drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c | 7 ++++---
> 5 files changed, 23 insertions(+), 22 deletions(-)
Tested-by: Andrew Bowers <andrewx.bowers@intel.com>
AQ-RSS functions work properly and change under load without error
^ permalink raw reply [flat|nested] 32+ messages in thread
* [Intel-wired-lan] [next PATCH S29 12/14] i40e: Fix for the NPAR PSOD issue
2016-02-18 0:12 [Intel-wired-lan] [next PATCH S29 00/14] i40e/i40evf updates Avinash Dayanand
` (10 preceding siblings ...)
2016-02-18 0:12 ` [Intel-wired-lan] [next PATCH S29 11/14] i40e: Use the new rx ctl register helpers. Don't use AQ calls from clear_hw Avinash Dayanand
@ 2016-02-18 0:12 ` Avinash Dayanand
2016-02-18 0:36 ` Brandeburg, Jesse
2016-02-18 4:01 ` Jeff Kirsher
2016-02-18 0:12 ` [Intel-wired-lan] [next PATCH S29 13/14] i40e: let go of the past Avinash Dayanand
2016-02-18 0:12 ` [Intel-wired-lan] [next PATCH S29 14/14] i40e/i40evf: Bump i40e to 1.4.25 and i40evf to 1.4.15 Avinash Dayanand
13 siblings, 2 replies; 32+ messages in thread
From: Avinash Dayanand @ 2016-02-18 0:12 UTC (permalink / raw)
To: intel-wired-lan
From: Pandi Kumar Maharajan <pandi.maharajan@intel.com>
We need to suspend scheduling or any pending service task during driver
unload process, so that new task will not be scheduled. This patch sets
the suspend flag bit during reload which avoids service task execution.
Signed-off-by: Pandi Kumar Maharajan <pandi.maharajan@intel.com>
Change-ID: I017c57b5d6656564556e3c5387da671369a572ac
---
drivers/net/ethernet/intel/i40e/i40e_main.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/net/ethernet/intel/i40e/i40e_main.c b/drivers/net/ethernet/intel/i40e/i40e_main.c
index 7388c1a..50c2c71 100644
--- a/drivers/net/ethernet/intel/i40e/i40e_main.c
+++ b/drivers/net/ethernet/intel/i40e/i40e_main.c
@@ -11211,6 +11211,7 @@ static void i40e_remove(struct pci_dev *pdev)
i40e_write_rx_ctl(hw, I40E_PFQF_HENA(1), 0);
/* no more scheduling of any task */
+ set_bit(__I40E_SUSPENDED, &pf->state);
set_bit(__I40E_DOWN, &pf->state);
del_timer_sync(&pf->service_timer);
cancel_work_sync(&pf->service_task);
--
2.1.0
^ permalink raw reply related [flat|nested] 32+ messages in thread* [Intel-wired-lan] [next PATCH S29 12/14] i40e: Fix for the NPAR PSOD issue
2016-02-18 0:12 ` [Intel-wired-lan] [next PATCH S29 12/14] i40e: Fix for the NPAR PSOD issue Avinash Dayanand
@ 2016-02-18 0:36 ` Brandeburg, Jesse
2016-02-18 4:01 ` Jeff Kirsher
1 sibling, 0 replies; 32+ messages in thread
From: Brandeburg, Jesse @ 2016-02-18 0:36 UTC (permalink / raw)
To: intel-wired-lan
The title of this patch must be fixed.
-----Original Message-----
From: Intel-wired-lan [mailto:intel-wired-lan-bounces at lists.osuosl.org] On Behalf Of Avinash Dayanand
Sent: Wednesday, February 17, 2016 4:12 PM
To: intel-wired-lan@lists.osuosl.org
Subject: [Intel-wired-lan] [next PATCH S29 12/14] i40e: Fix for the NPAR PSOD issue
From: Pandi Kumar Maharajan <pandi.maharajan@intel.com>
We need to suspend scheduling or any pending service task during driver
unload process, so that new task will not be scheduled. This patch sets
the suspend flag bit during reload which avoids service task execution.
Signed-off-by: Pandi Kumar Maharajan <pandi.maharajan@intel.com>
Change-ID: I017c57b5d6656564556e3c5387da671369a572ac
^ permalink raw reply [flat|nested] 32+ messages in thread
* [Intel-wired-lan] [next PATCH S29 12/14] i40e: Fix for the NPAR PSOD issue
2016-02-18 0:12 ` [Intel-wired-lan] [next PATCH S29 12/14] i40e: Fix for the NPAR PSOD issue Avinash Dayanand
2016-02-18 0:36 ` Brandeburg, Jesse
@ 2016-02-18 4:01 ` Jeff Kirsher
1 sibling, 0 replies; 32+ messages in thread
From: Jeff Kirsher @ 2016-02-18 4:01 UTC (permalink / raw)
To: intel-wired-lan
On Wed, 2016-02-17 at 16:12 -0800, Avinash Dayanand wrote:
> From: Pandi Kumar Maharajan <pandi.maharajan@intel.com>
>
> We need to suspend scheduling or any pending service task during
> driver
> unload process, so that new task will not be scheduled. This patch
> sets
> the suspend flag bit during reload which avoids service task
> execution.
>
> Signed-off-by: Pandi Kumar Maharajan <pandi.maharajan@intel.com>
> Change-ID: I017c57b5d6656564556e3c5387da671369a572ac
> ---
> ?drivers/net/ethernet/intel/i40e/i40e_main.c | 1 +
> ?1 file changed, 1 insertion(+)
Please resend just this patch with the title fixed.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: This is a digitally signed message part
URL: <http://lists.osuosl.org/pipermail/intel-wired-lan/attachments/20160217/cfedaed8/attachment.asc>
^ permalink raw reply [flat|nested] 32+ messages in thread
* [Intel-wired-lan] [next PATCH S29 13/14] i40e: let go of the past
2016-02-18 0:12 [Intel-wired-lan] [next PATCH S29 00/14] i40e/i40evf updates Avinash Dayanand
` (11 preceding siblings ...)
2016-02-18 0:12 ` [Intel-wired-lan] [next PATCH S29 12/14] i40e: Fix for the NPAR PSOD issue Avinash Dayanand
@ 2016-02-18 0:12 ` Avinash Dayanand
2016-02-18 23:10 ` Bowers, AndrewX
2016-02-18 0:12 ` [Intel-wired-lan] [next PATCH S29 14/14] i40e/i40evf: Bump i40e to 1.4.25 and i40evf to 1.4.15 Avinash Dayanand
13 siblings, 1 reply; 32+ messages in thread
From: Avinash Dayanand @ 2016-02-18 0:12 UTC (permalink / raw)
To: intel-wired-lan
From: Mitch Williams <mitch.a.williams@intel.com>
If we reset a VF, its VSI goes away, and it gets a new one. So don't
hang on to the now-stale local VSI pointer. It just leads to suffering
and kernel panics.
Signed-off-by: Mitch Williams <mitch.a.williams@intel.com>
Change-ID: Ia8823b4e85893e95e963acee284968022b29177a
---
drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c b/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c
index 93d8d98..acd2693 100644
--- a/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c
+++ b/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c
@@ -2203,6 +2203,8 @@ int i40e_ndo_set_vf_port_vlan(struct net_device *netdev,
* and then reloading the VF driver.
*/
i40e_vc_disable_vf(pf, vf);
+ /* During reset the VF got a new VSI, so refresh the pointer. */
+ vsi = pf->vsi[vf->lan_vsi_idx];
}
/* Check for condition where there was already a port VLAN ID
--
2.1.0
^ permalink raw reply related [flat|nested] 32+ messages in thread* [Intel-wired-lan] [next PATCH S29 13/14] i40e: let go of the past
2016-02-18 0:12 ` [Intel-wired-lan] [next PATCH S29 13/14] i40e: let go of the past Avinash Dayanand
@ 2016-02-18 23:10 ` Bowers, AndrewX
0 siblings, 0 replies; 32+ messages in thread
From: Bowers, AndrewX @ 2016-02-18 23:10 UTC (permalink / raw)
To: intel-wired-lan
> -----Original Message-----
> From: Intel-wired-lan [mailto:intel-wired-lan-bounces at lists.osuosl.org] On
> Behalf Of Avinash Dayanand
> Sent: Wednesday, February 17, 2016 4:12 PM
> To: intel-wired-lan at lists.osuosl.org
> Subject: [Intel-wired-lan] [next PATCH S29 13/14] i40e: let go of the past
>
> From: Mitch Williams <mitch.a.williams@intel.com>
>
> If we reset a VF, its VSI goes away, and it gets a new one. So don't hang on to
> the now-stale local VSI pointer. It just leads to suffering and kernel panics.
>
> Signed-off-by: Mitch Williams <mitch.a.williams@intel.com>
> Change-ID: Ia8823b4e85893e95e963acee284968022b29177a
> ---
> drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c | 2 ++
> 1 file changed, 2 insertions(+)
Tested-by: Andrew Bowers <andrewx.bowers@intel.com>
Code changes properly applied
^ permalink raw reply [flat|nested] 32+ messages in thread
* [Intel-wired-lan] [next PATCH S29 14/14] i40e/i40evf: Bump i40e to 1.4.25 and i40evf to 1.4.15
2016-02-18 0:12 [Intel-wired-lan] [next PATCH S29 00/14] i40e/i40evf updates Avinash Dayanand
` (12 preceding siblings ...)
2016-02-18 0:12 ` [Intel-wired-lan] [next PATCH S29 13/14] i40e: let go of the past Avinash Dayanand
@ 2016-02-18 0:12 ` Avinash Dayanand
2016-02-18 23:13 ` Bowers, AndrewX
13 siblings, 1 reply; 32+ messages in thread
From: Avinash Dayanand @ 2016-02-18 0:12 UTC (permalink / raw)
To: intel-wired-lan
From: Jesse Brandeburg <jesse.brandeburg@intel.com>
Bump.
Signed-off-by: Jesse Brandeburg <jesse.brandeburg@intel.com>
Change-ID: Ifa19aadaa892ad103f1b96fe2361fa690912c6a3
---
drivers/net/ethernet/intel/i40e/i40e_main.c | 2 +-
drivers/net/ethernet/intel/i40evf/i40evf_main.c | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/net/ethernet/intel/i40e/i40e_main.c b/drivers/net/ethernet/intel/i40e/i40e_main.c
index 50c2c71..beeaaa9 100644
--- a/drivers/net/ethernet/intel/i40e/i40e_main.c
+++ b/drivers/net/ethernet/intel/i40e/i40e_main.c
@@ -46,7 +46,7 @@ static const char i40e_driver_string[] =
#define DRV_VERSION_MAJOR 1
#define DRV_VERSION_MINOR 4
-#define DRV_VERSION_BUILD 15
+#define DRV_VERSION_BUILD 25
#define DRV_VERSION __stringify(DRV_VERSION_MAJOR) "." \
__stringify(DRV_VERSION_MINOR) "." \
__stringify(DRV_VERSION_BUILD) DRV_KERN
diff --git a/drivers/net/ethernet/intel/i40evf/i40evf_main.c b/drivers/net/ethernet/intel/i40evf/i40evf_main.c
index 3396fe3..4b70aae 100644
--- a/drivers/net/ethernet/intel/i40evf/i40evf_main.c
+++ b/drivers/net/ethernet/intel/i40evf/i40evf_main.c
@@ -38,7 +38,7 @@ static const char i40evf_driver_string[] =
#define DRV_VERSION_MAJOR 1
#define DRV_VERSION_MINOR 4
-#define DRV_VERSION_BUILD 11
+#define DRV_VERSION_BUILD 15
#define DRV_VERSION __stringify(DRV_VERSION_MAJOR) "." \
__stringify(DRV_VERSION_MINOR) "." \
__stringify(DRV_VERSION_BUILD) \
--
2.1.0
^ permalink raw reply related [flat|nested] 32+ messages in thread* [Intel-wired-lan] [next PATCH S29 14/14] i40e/i40evf: Bump i40e to 1.4.25 and i40evf to 1.4.15
2016-02-18 0:12 ` [Intel-wired-lan] [next PATCH S29 14/14] i40e/i40evf: Bump i40e to 1.4.25 and i40evf to 1.4.15 Avinash Dayanand
@ 2016-02-18 23:13 ` Bowers, AndrewX
0 siblings, 0 replies; 32+ messages in thread
From: Bowers, AndrewX @ 2016-02-18 23:13 UTC (permalink / raw)
To: intel-wired-lan
> -----Original Message-----
> From: Intel-wired-lan [mailto:intel-wired-lan-bounces at lists.osuosl.org] On
> Behalf Of Avinash Dayanand
> Sent: Wednesday, February 17, 2016 4:12 PM
> To: intel-wired-lan at lists.osuosl.org
> Subject: [Intel-wired-lan] [next PATCH S29 14/14] i40e/i40evf: Bump i40e to
> 1.4.25 and i40evf to 1.4.15
>
> From: Jesse Brandeburg <jesse.brandeburg@intel.com>
>
> Bump.
>
> Signed-off-by: Jesse Brandeburg <jesse.brandeburg@intel.com>
> Change-ID: Ifa19aadaa892ad103f1b96fe2361fa690912c6a3
> ---
> drivers/net/ethernet/intel/i40e/i40e_main.c | 2 +-
> drivers/net/ethernet/intel/i40evf/i40evf_main.c | 2 +-
> 2 files changed, 2 insertions(+), 2 deletions(-)
Tested-by: Andrew Bowers <andrewx.bowers@intel.com>
Code changes properly applied, driver and ethtool report updated version number
^ permalink raw reply [flat|nested] 32+ messages in thread