From: "Wang, Xiao W" <xiao.w.wang@intel.com>
To: "Yigit, Ferruh" <ferruh.yigit@intel.com>,
"Lu, Wenzhuo" <wenzhuo.lu@intel.com>
Cc: "dev@dpdk.org" <dev@dpdk.org>
Subject: Re: [dpdk-dev] [PATCH 35/39] net/ixgbe/base: hold semaphore for shadow RAM access
Date: Fri, 23 Sep 2016 08:06:25 +0000 [thread overview]
Message-ID: <B7F2E978279D1D49A3034B7786DACF406C21FAF6@SHSMSX101.ccr.corp.intel.com> (raw)
In-Reply-To: <8b69e0e1-f080-a0fc-a302-744e12e78745@intel.com>
Hi Ferruh,
> -----Original Message-----
> From: Yigit, Ferruh
> Sent: Tuesday, September 20, 2016 1:08 AM
> To: Wang, Xiao W <xiao.w.wang@intel.com>; Lu, Wenzhuo
> <wenzhuo.lu@intel.com>
> Cc: dev@dpdk.org
> Subject: Re: [dpdk-dev] [PATCH 35/39] net/ixgbe/base: hold semaphore for
> shadow RAM access
>
> On 8/27/2016 4:48 PM, Xiao Wang wrote:
> > The semaphore is not being held for complete shadow RAM accesses
> > which could result in corruption. Refactor the code so that it is
> > possible to hold the semaphore around ixgbe_host_interface_command
> > by introducing an unlocked form. This patch also eliminates the
> > function ixgbe_read_ee_hostif_data_X550 in favor of the function
> > ixgbe_read_ee_hostif_X550 and it now gets both semaphore bits
> > at once instead of nesting them. The new arrangement is able to
> > get both the management interface and the EEPROM semaphores at the
> > same time instead of separately.
> >
> > Signed-off-by: Xiao Wang <xiao.w.wang@intel.com>
> > ---
> > drivers/net/ixgbe/base/ixgbe_common.c | 106 ++++++++++++++++++++++---
> ---------
> > drivers/net/ixgbe/base/ixgbe_common.h | 3 +-
> > drivers/net/ixgbe/base/ixgbe_x550.c | 57 +++++-------------
> > drivers/net/ixgbe/base/ixgbe_x550.h | 2 -
> > 4 files changed, 88 insertions(+), 80 deletions(-)
> >
> > diff --git a/drivers/net/ixgbe/base/ixgbe_common.c
> b/drivers/net/ixgbe/base/ixgbe_common.c
> > index 9776ab9..d31fb81 100644
> > --- a/drivers/net/ixgbe/base/ixgbe_common.c
> > +++ b/drivers/net/ixgbe/base/ixgbe_common.c
> > @@ -1066,7 +1066,7 @@ void ixgbe_set_lan_id_multi_port_pcie(struct
> ixgbe_hw *hw)
> > if (hw->device_id == IXGBE_DEV_ID_X550EM_A_SFP) {
> > hw->eeprom.ops.read(hw, IXGBE_EEPROM_CTRL_4,
> &ee_ctrl_4);
> > bus->instance_id = (ee_ctrl_4 & IXGBE_EE_CTRL_4_INST_ID) >>
> > - IXGBE_EE_CTRL_4_INST_ID_SHIFT;
> > + IXGBE_EE_CTRL_4_INST_ID_SHIFT;
> > }
> > }
> >
> > @@ -2877,7 +2877,7 @@ out:
> > * advertised settings
> > **/
> > s32 ixgbe_negotiate_fc(struct ixgbe_hw *hw, u32 adv_reg, u32 lp_reg,
> > - u32 adv_sym, u32 adv_asm, u32 lp_sym, u32
> lp_asm)
> > + u32 adv_sym, u32 adv_asm, u32 lp_sym, u32 lp_asm)
> > {
> > if ((!(adv_reg)) || (!(lp_reg))) {
> > ERROR_REPORT3(IXGBE_ERROR_UNSUPPORTED,
> > @@ -3920,7 +3920,8 @@ s32 ixgbe_set_vfta_generic(struct ixgbe_hw *hw,
> u32 vlan, u32 vind,
> > vfta_delta = 1 << (vlan % 32);
> > vfta = IXGBE_READ_REG(hw, IXGBE_VFTA(regidx));
> >
> > - /* vfta_delta represents the difference between the current value
> > + /*
> > + * vfta_delta represents the difference between the current value
>
> These whitespace fixes not belong to this patch.
> It is good to make cleanups, but these are making noise for real patch,
> there are a few more of these in previous patches, perhaps all can be
> merged into a cleanup patch?
>
Yes, will merge them into a cleanup patch.
> > * of vfta and the value we want in the register. Since the diff
> > * is an XOR mask we can just update the vfta using an XOR
> > */
> > @@ -3953,7 +3954,7 @@ vfta_update:
> > * @vind: VMDq output index that maps queue to VLAN id in VLVFB
> > * @vlan_on: boolean flag to turn on/off VLAN in VLVF
> > * @vfta_delta: pointer to the difference between the current value of VFTA
> > - * and the desired value
> > + * and the desired value
> > * @vfta: the desired value of the VFTA
> > * @vlvf_bypass: boolean flag indicating updating default pool is okay
> > *
> > @@ -3980,6 +3981,7 @@ s32 ixgbe_set_vlvf_generic(struct ixgbe_hw *hw,
> u32 vlan, u32 vind,
> > */
> > if (!(IXGBE_READ_REG(hw, IXGBE_VT_CTL) &
> IXGBE_VT_CTL_VT_ENABLE))
> > return IXGBE_SUCCESS;
> > +
> > vlvf_index = ixgbe_find_vlvf_slot(hw, vlan, vlvf_bypass);
> > if (vlvf_index < 0)
> > return vlvf_index;
> > @@ -4009,6 +4011,7 @@ s32 ixgbe_set_vlvf_generic(struct ixgbe_hw *hw,
> u32 vlan, u32 vind,
> >
> > return IXGBE_SUCCESS;
> > }
> > +
> > /* If there are still bits set in the VLVFB registers
> > * for the VLAN ID indicated we need to see if the
> > * caller is requesting that we clear the VFTA entry bit.
> > @@ -4413,43 +4416,31 @@ u8 ixgbe_calculate_checksum(u8 *buffer, u32
> length)
> > }
> >
> > /**
> > - * ixgbe_host_interface_command - Issue command to manageability block
> > + * ixgbe_hic_unlocked - Issue command to manageability block unlocked
> > * @hw: pointer to the HW structure
> > - * @buffer: contains the command to write and where the return status will
> > - * be placed
> > + * @buffer: command to write and where the return status will be placed
> > * @length: length of buffer, must be multiple of 4 bytes
> > * @timeout: time in ms to wait for command completion
> > - * @return_data: read and return data from the buffer (true) or not (false)
> > - * Needed because FW structures are big endian and decoding of
> > - * these fields can be 8 bit or 16 bit based on command. Decoding
> > - * is not easily understood without making a table of commands.
> > - * So we will leave this up to the caller to read back the data
> > - * in these cases.
> > *
> > * Communicates with the manageability block. On success return
> IXGBE_SUCCESS
> > * else returns semaphore error when encountering an error acquiring
> > * semaphore or IXGBE_ERR_HOST_INTERFACE_COMMAND when
> command fails.
> > + *
> > + * This function assumes that the IXGBE_GSSR_SW_MNG_SM semaphore is
> held
> > + * by the caller.
> > **/
> > -s32 ixgbe_host_interface_command(struct ixgbe_hw *hw, u32 *buffer,
> > - u32 length, u32 timeout, bool return_data)
> > +s32 ixgbe_hic_unlocked(struct ixgbe_hw *hw, u32 *buffer, u32 length,
> > + u32 timeout)
> > {
> > - u32 hicr, i, bi, fwsts;
> > - u32 hdr_size = sizeof(struct ixgbe_hic_hdr);
> > - u16 buf_len;
> > + u32 hicr, i, fwsts;
> > u16 dword_len;
> > - s32 status;
> >
> > - DEBUGFUNC("ixgbe_host_interface_command");
> > + DEBUGFUNC("ixgbe_hic_unlocked");
> >
> > - if (length == 0 || length > IXGBE_HI_MAX_BLOCK_BYTE_LENGTH) {
> > + if (!length || length > IXGBE_HI_MAX_BLOCK_BYTE_LENGTH) {
> > DEBUGOUT1("Buffer length failure buffersize=%d.\n", length);
> > return IXGBE_ERR_HOST_INTERFACE_COMMAND;
> > }
> > - /* Take management host interface semaphore */
> > - status = hw->mac.ops.acquire_swfw_sync(hw,
> IXGBE_GSSR_SW_MNG_SM);
> > -
> > - if (status)
> > - return status;
> >
> > /* Set bit 9 of FWSTS clearing FW reset indication */
> > fwsts = IXGBE_READ_REG(hw, IXGBE_FWSTS);
> > @@ -4457,17 +4448,15 @@ s32 ixgbe_host_interface_command(struct
> ixgbe_hw *hw, u32 *buffer,
> >
> > /* Check that the host interface is enabled. */
> > hicr = IXGBE_READ_REG(hw, IXGBE_HICR);
> > - if ((hicr & IXGBE_HICR_EN) == 0) {
> > + if (!(hicr & IXGBE_HICR_EN)) {
> > DEBUGOUT("IXGBE_HOST_EN bit disabled.\n");
> > - status = IXGBE_ERR_HOST_INTERFACE_COMMAND;
> > - goto rel_out;
> > + return IXGBE_ERR_HOST_INTERFACE_COMMAND;
> > }
> >
> > /* Calculate length in DWORDs. We must be DWORD aligned */
> > - if ((length % (sizeof(u32))) != 0) {
> > + if (length % sizeof(u32)) {
> > DEBUGOUT("Buffer length failure, not aligned to dword");
> > - status = IXGBE_ERR_INVALID_ARGUMENT;
> > - goto rel_out;
> > + return IXGBE_ERR_INVALID_ARGUMENT;
> > }
> >
> > dword_len = length >> 2;
> > @@ -4490,14 +4479,59 @@ s32 ixgbe_host_interface_command(struct
> ixgbe_hw *hw, u32 *buffer,
> > }
> >
> > /* Check command completion */
> > - if ((timeout != 0 && i == timeout) ||
> > + if ((timeout && i == timeout) ||
> > !(IXGBE_READ_REG(hw, IXGBE_HICR) & IXGBE_HICR_SV)) {
> > ERROR_REPORT1(IXGBE_ERROR_CAUTION,
> > "Command has failed with no status valid.\n");
> > - status = IXGBE_ERR_HOST_INTERFACE_COMMAND;
> > - goto rel_out;
> > + return IXGBE_ERR_HOST_INTERFACE_COMMAND;
> > + }
> > +
> > + return IXGBE_SUCCESS;
> > +}
> > +
> > +/**
> > + * ixgbe_host_interface_command - Issue command to manageability block
> > + * @hw: pointer to the HW structure
> > + * @buffer: contains the command to write and where the return status will
> > + * be placed
> > + * @length: length of buffer, must be multiple of 4 bytes
> > + * @timeout: time in ms to wait for command completion
> > + * @return_data: read and return data from the buffer (true) or not (false)
> > + * Needed because FW structures are big endian and decoding of
> > + * these fields can be 8 bit or 16 bit based on command. Decoding
> > + * is not easily understood without making a table of commands.
> > + * So we will leave this up to the caller to read back the data
> > + * in these cases.
> > + *
> > + * Communicates with the manageability block. On success return
> IXGBE_SUCCESS
> > + * else returns semaphore error when encountering an error acquiring
> > + * semaphore or IXGBE_ERR_HOST_INTERFACE_COMMAND when
> command fails.
> > + **/
> > +s32 ixgbe_host_interface_command(struct ixgbe_hw *hw, u32 *buffer,
> > + u32 length, u32 timeout, bool return_data)
> > +{
> > + u32 hdr_size = sizeof(struct ixgbe_hic_hdr);
> > + u16 dword_len;
> > + u16 buf_len;
> > + s32 status;
> > + u32 bi;
> > +
> > + DEBUGFUNC("ixgbe_host_interface_command");
> > +
> > + if (length == 0 || length > IXGBE_HI_MAX_BLOCK_BYTE_LENGTH) {
> > + DEBUGOUT1("Buffer length failure buffersize=%d.\n", length);
> > + return IXGBE_ERR_HOST_INTERFACE_COMMAND;
> > }
> >
> > + /* Take management host interface semaphore */
> > + status = hw->mac.ops.acquire_swfw_sync(hw,
> IXGBE_GSSR_SW_MNG_SM);
> > + if (status)
> > + return status;
> > +
> > + status = ixgbe_hic_unlocked(hw, buffer, length, timeout);
> > + if (status)
> > + goto rel_out;
> > +
> > if (!return_data)
> > goto rel_out;
> >
> > @@ -4512,7 +4546,7 @@ s32 ixgbe_host_interface_command(struct
> ixgbe_hw *hw, u32 *buffer,
> >
> > /* If there is any thing in data position pull it in */
> > buf_len = ((struct ixgbe_hic_hdr *)buffer)->buf_len;
> > - if (buf_len == 0)
> > + if (!buf_len)
> > goto rel_out;
> >
> > if (length < buf_len + hdr_size) {
> > diff --git a/drivers/net/ixgbe/base/ixgbe_common.h
> b/drivers/net/ixgbe/base/ixgbe_common.h
> > index 0545f85..66dd565 100644
> > --- a/drivers/net/ixgbe/base/ixgbe_common.h
> > +++ b/drivers/net/ixgbe/base/ixgbe_common.h
> > @@ -133,7 +133,7 @@ s32 ixgbe_clear_vmdq_generic(struct ixgbe_hw *hw,
> u32 rar, u32 vmdq);
> > s32 ixgbe_insert_mac_addr_generic(struct ixgbe_hw *hw, u8 *addr, u32
> vmdq);
> > s32 ixgbe_init_uta_tables_generic(struct ixgbe_hw *hw);
> > s32 ixgbe_set_vfta_generic(struct ixgbe_hw *hw, u32 vlan,
> > - u32 vind, bool vlan_on, bool vlvf_bypass);
> > + u32 vind, bool vlan_on, bool vlvf_bypass);
> > s32 ixgbe_set_vlvf_generic(struct ixgbe_hw *hw, u32 vlan, u32 vind,
> > bool vlan_on, u32 *vfta_delta, u32 vfta,
> > bool vlvf_bypass);
> > @@ -159,6 +159,7 @@ s32 ixgbe_set_fw_drv_ver_generic(struct ixgbe_hw
> *hw, u8 maj, u8 min,
> > u8 ixgbe_calculate_checksum(u8 *buffer, u32 length);
> > s32 ixgbe_host_interface_command(struct ixgbe_hw *hw, u32 *buffer,
> > u32 length, u32 timeout, bool return_data);
> > +s32 ixgbe_hic_unlocked(struct ixgbe_hw *, u32 *buffer, u32 length, u32
> timeout);
> >
> > void ixgbe_clear_tx_pending(struct ixgbe_hw *hw);
> >
> > diff --git a/drivers/net/ixgbe/base/ixgbe_x550.c
> b/drivers/net/ixgbe/base/ixgbe_x550.c
> > index 0cc7a3f..6f4dfd9 100644
> > --- a/drivers/net/ixgbe/base/ixgbe_x550.c
> > +++ b/drivers/net/ixgbe/base/ixgbe_x550.c
> > @@ -3192,13 +3192,13 @@ s32 ixgbe_setup_phy_loopback_x550em(struct
> ixgbe_hw *hw)
> > *
> > * Reads a 16 bit word from the EEPROM using the hostif.
> > **/
> > -s32 ixgbe_read_ee_hostif_data_X550(struct ixgbe_hw *hw, u16 offset,
> > - u16 *data)
> > +s32 ixgbe_read_ee_hostif_X550(struct ixgbe_hw *hw, u16 offset, u16 *data)
> > {
> > - s32 status;
> > + const u32 mask = IXGBE_GSSR_SW_MNG_SM | IXGBE_GSSR_EEP_SM;
> > struct ixgbe_hic_read_shadow_ram buffer;
> > + s32 status;
> >
> > - DEBUGFUNC("ixgbe_read_ee_hostif_data_X550");
> > + DEBUGFUNC("ixgbe_read_ee_hostif_X550");
> > buffer.hdr.req.cmd = FW_READ_SHADOW_RAM_CMD;
> > buffer.hdr.req.buf_lenh = 0;
> > buffer.hdr.req.buf_lenl = FW_READ_SHADOW_RAM_LEN;
> > @@ -3209,42 +3209,18 @@ s32 ixgbe_read_ee_hostif_data_X550(struct
> ixgbe_hw *hw, u16 offset,
> > /* one word */
> > buffer.length = IXGBE_CPU_TO_BE16(sizeof(u16));
> >
> > - status = ixgbe_host_interface_command(hw, (u32 *)&buffer,
> > - sizeof(buffer),
> > - IXGBE_HI_COMMAND_TIMEOUT,
> false);
> > -
> > + status = hw->mac.ops.acquire_swfw_sync(hw, mask);
> > if (status)
> > return status;
> >
> > - *data = (u16)IXGBE_READ_REG_ARRAY(hw, IXGBE_FLEX_MNG,
> > - FW_NVM_DATA_OFFSET);
> > -
> > - return 0;
> > -}
> > -
> > -/**
> > - * ixgbe_read_ee_hostif_X550 - Read EEPROM word using a host interface
> command
> > - * @hw: pointer to hardware structure
> > - * @offset: offset of word in the EEPROM to read
> > - * @data: word read from the EEPROM
> > - *
> > - * Reads a 16 bit word from the EEPROM using the hostif.
> > - **/
> > -s32 ixgbe_read_ee_hostif_X550(struct ixgbe_hw *hw, u16 offset,
> > - u16 *data)
> > -{
> > - s32 status = IXGBE_SUCCESS;
> > -
> > - DEBUGFUNC("ixgbe_read_ee_hostif_X550");
> > -
> > - if (hw->mac.ops.acquire_swfw_sync(hw, IXGBE_GSSR_EEP_SM) ==
> > - IXGBE_SUCCESS) {
> > - status = ixgbe_read_ee_hostif_data_X550(hw, offset, data);
> > - hw->mac.ops.release_swfw_sync(hw, IXGBE_GSSR_EEP_SM);
> > - } else {
> > - status = IXGBE_ERR_SWFW_SYNC;
> > + status = ixgbe_hic_unlocked(hw, (u32 *)&buffer, sizeof(buffer),
> > + IXGBE_HI_COMMAND_TIMEOUT);
> > + if (!status) {
> > + *data = (u16)IXGBE_READ_REG_ARRAY(hw, IXGBE_FLEX_MNG,
> > + FW_NVM_DATA_OFFSET);
> > }
> >
> > + hw->mac.ops.release_swfw_sync(hw, mask);
> > return status;
> > }
> >
> > @@ -3260,6 +3236,7 @@ s32 ixgbe_read_ee_hostif_X550(struct ixgbe_hw
> *hw, u16 offset,
> > s32 ixgbe_read_ee_hostif_buffer_X550(struct ixgbe_hw *hw,
> > u16 offset, u16 words, u16 *data)
> > {
> > + const u32 mask = IXGBE_GSSR_SW_MNG_SM | IXGBE_GSSR_EEP_SM;
> > struct ixgbe_hic_read_shadow_ram buffer;
> > u32 current_word = 0;
> > u16 words_to_read;
> > @@ -3269,7 +3246,7 @@ s32 ixgbe_read_ee_hostif_buffer_X550(struct
> ixgbe_hw *hw,
> > DEBUGFUNC("ixgbe_read_ee_hostif_buffer_X550");
> >
> > /* Take semaphore for the entire operation. */
> > - status = hw->mac.ops.acquire_swfw_sync(hw, IXGBE_GSSR_EEP_SM);
> > + status = hw->mac.ops.acquire_swfw_sync(hw, mask);
> > if (status) {
> > DEBUGOUT("EEPROM read buffer - semaphore failed\n");
> > return status;
> > @@ -3289,10 +3266,8 @@ s32 ixgbe_read_ee_hostif_buffer_X550(struct
> ixgbe_hw *hw,
> > buffer.address = IXGBE_CPU_TO_BE32((offset + current_word)
> * 2);
> > buffer.length = IXGBE_CPU_TO_BE16(words_to_read * 2);
> >
> > - status = ixgbe_host_interface_command(hw, (u32 *)&buffer,
> > - sizeof(buffer),
> > -
> IXGBE_HI_COMMAND_TIMEOUT,
> > - false);
> > + status = ixgbe_hic_unlocked(hw, (u32 *)&buffer, sizeof(buffer),
> > + IXGBE_HI_COMMAND_TIMEOUT);
> >
> > if (status) {
> > DEBUGOUT("Host interface command failed\n");
> > @@ -3317,7 +3292,7 @@ s32 ixgbe_read_ee_hostif_buffer_X550(struct
> ixgbe_hw *hw,
> > }
> >
> > out:
> > - hw->mac.ops.release_swfw_sync(hw, IXGBE_GSSR_EEP_SM);
> > + hw->mac.ops.release_swfw_sync(hw, mask);
> > return status;
> > }
> >
> > diff --git a/drivers/net/ixgbe/base/ixgbe_x550.h
> b/drivers/net/ixgbe/base/ixgbe_x550.h
> > index c7253f0..36b36f6 100644
> > --- a/drivers/net/ixgbe/base/ixgbe_x550.h
> > +++ b/drivers/net/ixgbe/base/ixgbe_x550.h
> > @@ -55,8 +55,6 @@ s32 ixgbe_read_ee_hostif_buffer_X550(struct ixgbe_hw
> *hw,
> > u16 offset, u16 words, u16 *data);
> > s32 ixgbe_read_ee_hostif_X550(struct ixgbe_hw *hw, u16 offset,
> > u16 *data);
> > -s32 ixgbe_read_ee_hostif_data_X550(struct ixgbe_hw *hw, u16 offset,
> > - u16 *data);
> > s32 ixgbe_write_ee_hostif_data_X550(struct ixgbe_hw *hw, u16 offset,
> > u16 data);
> > s32 ixgbe_set_eee_X550(struct ixgbe_hw *hw, bool enable_eee);
> >
>
next prev parent reply other threads:[~2016-09-23 8:06 UTC|newest]
Thread overview: 107+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-08-27 15:47 [dpdk-dev] [PATCH 00/39] net/ixgbe: base code update Xiao Wang
2016-08-27 15:47 ` [dpdk-dev] [PATCH 01/39] net/ixgbe/base: fix delta check for setting VFTA Xiao Wang
2016-09-19 17:00 ` Ferruh Yigit
2016-09-22 15:58 ` Wang, Xiao W
2016-09-25 8:59 ` [dpdk-dev] [PATCH v2 00/40] net/ixgbe: base code update Xiao Wang
2016-09-25 8:59 ` [dpdk-dev] [PATCH v2 01/40] net/ixgbe/base: fix delta check for setting VFTA Xiao Wang
2016-09-25 8:59 ` [dpdk-dev] [PATCH v2 02/40] net/ixgbe/base: remove X550em SFP iXFI setup Xiao Wang
2016-09-25 8:59 ` [dpdk-dev] [PATCH v2 03/40] net/ixgbe/base: change endianness of PHY data Xiao Wang
2016-09-25 8:59 ` [dpdk-dev] [PATCH v2 04/40] net/ixgbe/base: add X550em_a 10G PHY support Xiao Wang
2016-09-25 8:59 ` [dpdk-dev] [PATCH v2 05/40] net/ixgbe/base: move vf_update_xcast_mode to base code Xiao Wang
2016-09-25 8:59 ` [dpdk-dev] [PATCH v2 06/40] net/ixgbe/base: introduce new ops init functions Xiao Wang
2016-09-25 8:59 ` [dpdk-dev] [PATCH v2 07/40] net/ixgbe/base: separate PHY probe code Xiao Wang
2016-09-25 8:59 ` [dpdk-dev] [PATCH v2 08/40] net/ixgbe/base: fully initialize X550em_a 1G PHYs Xiao Wang
2016-09-25 8:59 ` [dpdk-dev] [PATCH v2 09/40] net/ixgbe/base: add macros for VF promiscuous mode Xiao Wang
2016-09-25 8:59 ` [dpdk-dev] [PATCH v2 10/40] net/ixgbe/base: add FC setup for X550em_a fiber Xiao Wang
2016-09-25 8:59 ` [dpdk-dev] [PATCH v2 11/40] net/ixgbe/base: add FC autoneg " Xiao Wang
2016-09-25 8:59 ` [dpdk-dev] [PATCH v2 12/40] net/ixgbe/base: clear page register in error path Xiao Wang
2016-09-25 8:59 ` [dpdk-dev] [PATCH v2 13/40] net/ixgbe/base: configure DMAC for 10Mb operation Xiao Wang
2016-09-25 8:59 ` [dpdk-dev] [PATCH v2 14/40] net/ixgbe/base: fix function comments about X550 Xiao Wang
2016-09-25 8:59 ` [dpdk-dev] [PATCH v2 15/40] net/ixgbe/base: report setting LPE register error Xiao Wang
2016-09-25 8:59 ` [dpdk-dev] [PATCH v2 16/40] net/ixgbe/base: bump mailbox version Xiao Wang
2016-09-25 8:59 ` [dpdk-dev] [PATCH v2 17/40] net/ixgbe/base: access IOSF by host interface Xiao Wang
2016-09-25 8:59 ` [dpdk-dev] [PATCH v2 18/40] net/ixgbe/base: fix check on NACK Xiao Wang
2016-09-25 8:59 ` [dpdk-dev] [PATCH v2 19/40] net/ixgbe/base: define X550 PCIe serial MAC addr Xiao Wang
2016-09-25 8:59 ` [dpdk-dev] [PATCH v2 20/40] net/ixgbe/base: bypass checking link for crosstalk Xiao Wang
2016-09-25 8:59 ` [dpdk-dev] [PATCH v2 21/40] net/ixgbe/base: support X550em_a SGMII FC autoneg Xiao Wang
2016-09-25 8:59 ` [dpdk-dev] [PATCH v2 22/40] net/ixgbe/base: add macros for GENEVE UDP port Xiao Wang
2016-09-25 9:00 ` [dpdk-dev] [PATCH v2 23/40] net/ixgbe/base: add bound check in LED functions Xiao Wang
2016-09-25 9:00 ` [dpdk-dev] [PATCH v2 24/40] net/ixgbe/base: use default check link function Xiao Wang
2016-09-25 9:00 ` [dpdk-dev] [PATCH v2 25/40] net/ixgbe/base: set default autoneg speed at reset Xiao Wang
2016-09-25 9:00 ` [dpdk-dev] [PATCH v2 26/40] net/ixgbe/base: add missing FDIRSCTPM mask setting Xiao Wang
2016-09-25 9:00 ` [dpdk-dev] [PATCH v2 27/40] net/ixgbe/base: commonize mailbox write and read Xiao Wang
2016-09-25 9:00 ` [dpdk-dev] [PATCH v2 28/40] net/ixgbe/base: reduce delay for SWFW semaphore Xiao Wang
2016-09-25 9:00 ` [dpdk-dev] [PATCH v2 29/40] net/ixgbe/base: report autoneg supported for X550 Xiao Wang
2016-09-25 9:00 ` [dpdk-dev] [PATCH v2 30/40] net/ixgbe/base: remove X550em_a 100Mbps support Xiao Wang
2016-09-25 9:00 ` [dpdk-dev] [PATCH v2 31/40] net/ixgbe/base: unify link speed value Xiao Wang
2016-09-25 9:00 ` [dpdk-dev] [PATCH v2 32/40] net/ixgbe/base: separate ops init from PHY init Xiao Wang
2016-09-25 9:00 ` [dpdk-dev] [PATCH v2 33/40] net/ixgbe/base: add X550em_a FW ALEF support Xiao Wang
2016-09-25 9:00 ` [dpdk-dev] [PATCH v2 34/40] net/ixgbe/base: add two MAC ops for Hyper-V Xiao Wang
2016-09-25 9:00 ` [dpdk-dev] [PATCH v2 35/40] net/ixgbe/base: hold semaphore for shadow RAM access Xiao Wang
2016-09-25 9:00 ` [dpdk-dev] [PATCH v2 36/40] net/ixgbe/base: update X550em_a backplane speed Xiao Wang
2016-09-25 9:00 ` [dpdk-dev] [PATCH v2 37/40] net/ixgbe/base: clean code of flow control autoneg Xiao Wang
2016-09-25 9:00 ` [dpdk-dev] [PATCH v2 38/40] net/ixgbe/base: do not skip PHY configuration Xiao Wang
2016-09-25 9:00 ` [dpdk-dev] [PATCH v2 39/40] net/ixgbe/base: clean up Xiao Wang
2016-09-25 9:00 ` [dpdk-dev] [PATCH v2 40/40] net/ixgbe/base: add base driver update brief Xiao Wang
2016-09-26 2:06 ` [dpdk-dev] [PATCH v2 00/40] net/ixgbe: base code update Lu, Wenzhuo
2016-09-28 15:31 ` Bruce Richardson
2016-08-27 15:47 ` [dpdk-dev] [PATCH 02/39] net/ixgbe/base: remove X550em SFP iXFI setup Xiao Wang
2016-09-19 17:01 ` Ferruh Yigit
2016-08-27 15:47 ` [dpdk-dev] [PATCH 03/39] net/ixgbe/base: change endianness of PHY data Xiao Wang
2016-09-19 17:01 ` Ferruh Yigit
2016-09-25 0:36 ` Wang, Xiao W
2016-08-27 15:47 ` [dpdk-dev] [PATCH 04/39] net/ixgbe/base: add X550em_a 10G PHY support Xiao Wang
2016-08-27 15:47 ` [dpdk-dev] [PATCH 05/39] net/ixgbe/base: support VF multicast promiscuous Xiao Wang
2016-09-19 17:05 ` Ferruh Yigit
2016-09-23 3:35 ` Wang, Xiao W
2016-08-27 15:47 ` [dpdk-dev] [PATCH 06/39] net/ixgbe/base: introduce new ops init functions Xiao Wang
2016-08-27 15:47 ` [dpdk-dev] [PATCH 07/39] net/ixgbe/base: separate PHY probe code Xiao Wang
2016-08-27 15:47 ` [dpdk-dev] [PATCH 08/39] net/ixgbe/base: fully initialize X550em_a 1G PHYs Xiao Wang
2016-08-27 15:47 ` [dpdk-dev] [PATCH 09/39] net/ixgbe/base: add macros for VF promiscuous mode Xiao Wang
2016-08-27 15:47 ` [dpdk-dev] [PATCH 10/39] net/ixgbe/base: add FC setup for X550em_a fiber Xiao Wang
2016-08-27 15:47 ` [dpdk-dev] [PATCH 11/39] net/ixgbe/base: add FC autoneg " Xiao Wang
2016-08-27 15:47 ` [dpdk-dev] [PATCH 12/39] net/ixgbe/base: clear page register in error path Xiao Wang
2016-08-27 15:47 ` [dpdk-dev] [PATCH 13/39] net/ixgbe/base: configure DMAC for 10Mb operation Xiao Wang
2016-08-27 15:47 ` [dpdk-dev] [PATCH 14/39] net/ixgbe/base: fix function comments about X550 Xiao Wang
2016-08-27 15:47 ` [dpdk-dev] [PATCH 15/39] net/ixgbe/base: report setting LPE register error Xiao Wang
2016-08-27 15:47 ` [dpdk-dev] [PATCH 16/39] net/ixgbe/base: bump mailbox version Xiao Wang
2016-09-19 17:03 ` Ferruh Yigit
2016-09-23 3:50 ` Wang, Xiao W
2016-08-27 15:48 ` [dpdk-dev] [PATCH 17/39] net/ixgbe/base: access IOSF by host interface Xiao Wang
2016-09-19 17:04 ` Ferruh Yigit
2016-09-23 5:16 ` Wang, Xiao W
2016-08-27 15:48 ` [dpdk-dev] [PATCH 18/39] net/ixgbe/base: fix check on NACK Xiao Wang
2016-09-19 17:07 ` Ferruh Yigit
2016-09-23 6:05 ` Wang, Xiao W
2016-08-27 15:48 ` [dpdk-dev] [PATCH 19/39] net/ixgbe/base: define X550 PCIe serial MAC addr Xiao Wang
2016-08-27 15:48 ` [dpdk-dev] [PATCH 20/39] net/ixgbe/base: bypass checking link for crosstalk Xiao Wang
2016-08-27 15:48 ` [dpdk-dev] [PATCH 21/39] net/ixgbe/base: support X550em_a SGMII FC autoneg Xiao Wang
2016-08-27 15:48 ` [dpdk-dev] [PATCH 22/39] net/ixgbe/base: add macros for GENEVE UDP port Xiao Wang
2016-08-27 15:48 ` [dpdk-dev] [PATCH 23/39] net/ixgbe/base: add bound check in LED functions Xiao Wang
2016-09-19 17:06 ` Ferruh Yigit
2016-09-22 16:08 ` Wang, Xiao W
2016-08-27 15:48 ` [dpdk-dev] [PATCH 24/39] net/ixgbe/base: use default check link function Xiao Wang
2016-08-27 15:48 ` [dpdk-dev] [PATCH 25/39] net/ixgbe/base: set default autoneg speed at reset Xiao Wang
2016-08-27 15:48 ` [dpdk-dev] [PATCH 26/39] net/ixgbe/base: add missing FDIRSCTPM mask setting Xiao Wang
2016-08-27 15:48 ` [dpdk-dev] [PATCH 27/39] net/ixgbe/base: commonize mailbox write and read Xiao Wang
2016-08-27 15:48 ` [dpdk-dev] [PATCH 28/39] net/ixgbe/base: reduce delay for SWFW semaphore Xiao Wang
2016-08-27 15:48 ` [dpdk-dev] [PATCH 29/39] net/ixgbe/base: report autoneg supported for X550 Xiao Wang
2016-09-19 17:07 ` Ferruh Yigit
2016-09-23 0:59 ` Wang, Xiao W
2016-08-27 15:48 ` [dpdk-dev] [PATCH 30/39] net/ixgbe/base: remove X550em_a 100Mbps support Xiao Wang
2016-08-27 15:48 ` [dpdk-dev] [PATCH 31/39] net/ixgbe/base: unify link speed value Xiao Wang
2016-08-27 15:48 ` [dpdk-dev] [PATCH 32/39] net/ixgbe/base: separate ops init from PHY init Xiao Wang
2016-08-27 15:48 ` [dpdk-dev] [PATCH 33/39] net/ixgbe/base: add X550em_a FW ALEF support Xiao Wang
2016-09-19 17:07 ` Ferruh Yigit
2016-09-22 2:56 ` Lu, Wenzhuo
2016-09-23 6:47 ` Wang, Xiao W
2016-08-27 15:48 ` [dpdk-dev] [PATCH 34/39] net/ixgbe/base: add two MAC ops for Hyper-V Xiao Wang
2016-08-27 15:48 ` [dpdk-dev] [PATCH 35/39] net/ixgbe/base: hold semaphore for shadow RAM access Xiao Wang
2016-09-19 17:08 ` Ferruh Yigit
2016-09-23 8:06 ` Wang, Xiao W [this message]
2016-08-27 15:48 ` [dpdk-dev] [PATCH 36/39] net/ixgbe/base: update X550em_a backplane speed Xiao Wang
2016-08-27 15:48 ` [dpdk-dev] [PATCH 37/39] net/ixgbe/base: clean code of flow control autoneg Xiao Wang
2016-08-27 15:48 ` [dpdk-dev] [PATCH 38/39] net/ixgbe/base: do not skip PHY configuration Xiao Wang
2016-08-27 15:48 ` [dpdk-dev] [PATCH 39/39] net/ixgbe/base: add base driver update brief Xiao Wang
2016-09-19 17:08 ` Ferruh Yigit
2016-09-22 2:55 ` Lu, Wenzhuo
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=B7F2E978279D1D49A3034B7786DACF406C21FAF6@SHSMSX101.ccr.corp.intel.com \
--to=xiao.w.wang@intel.com \
--cc=dev@dpdk.org \
--cc=ferruh.yigit@intel.com \
--cc=wenzhuo.lu@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).