> -----Original Message-----
> From: dan.street...@canonical.com
> [mailto:dan.street...@canonical.com]
> Sent: Monday, October 26, 2015 5:20 PM
> To: Kirsher, Jeffrey T
> Cc: Brandeburg, Jesse; Nelson, Shannon; Wyborny, Carolyn; Skidmore,
> Donald C; Vick, Matthew; Ronciak, John; Williams, Mitch A; intel-wired-
> l...@lists.osuosl.org; netdev@vger.kernel.org; linux-ker...@vger.kernel.org;
> Dan Streetman; Dan Streetman
> Subject: [PATCH] ixgbe: check Master Disable bit after setting
> 
> From: Dan Streetman <dan.street...@canonical.com>
> 
> Spec section 8.2.4.1.1 notes that after setting the PCIe Master Disable bit, 
> it
> must be read to verify it was set before polling the Master Enable status bit.
> 
> This adds the check to verify the Master Disable bit was set.
> 
> This also corrects the spec section number reference - the Master Disable
> section is 5.2.4.3.2, not 5.2.5.3.2.
> 
> Signed-off-by: Dan Streetman <dan.street...@canonical.com>
> Signed-off-by: Dan Streetman <ddstr...@ieee.org>
> ---
>  drivers/net/ethernet/intel/ixgbe/ixgbe_common.c | 13 ++++++++++++-
>  1 file changed, 12 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_common.c
> b/drivers/net/ethernet/intel/ixgbe/ixgbe_common.c
> index 3f56a80..abfada7 100644
> --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_common.c
> +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_common.c
> @@ -2453,6 +2453,16 @@ static s32 ixgbe_disable_pcie_master(struct
> ixgbe_hw *hw)
>       /* Always set this bit to ensure any future transactions are blocked */
>       IXGBE_WRITE_REG(hw, IXGBE_CTRL, IXGBE_CTRL_GIO_DIS);
> 
> +     /* Spec sec 8.2.4.1.1, Master Disable bit :
> +      * "After doing any change to this bit the host must read that
> +      *  the bit has been modified as expected before reading
> +      *  STATUS.PCIe Master Enable Status bit."
> +      */
> +     if (!(IXGBE_READ_REG(hw, IXGBE_CTRL) & IXGBE_CTRL_GIO_DIS)) {
> +             hw_err(hw, "GIO Master Disable bit didn't set\n");
> +             goto gio_dis_fail;
> +     }
> +
>       /* Exit if master requests are blocked */
>       if (!(IXGBE_READ_REG(hw, IXGBE_STATUS) & IXGBE_STATUS_GIO) ||
>           ixgbe_removed(hw->hw_addr))
> @@ -2467,13 +2477,14 @@ static s32 ixgbe_disable_pcie_master(struct
> ixgbe_hw *hw)
> 
>       /*
>        * Two consecutive resets are required via CTRL.RST per datasheet
> -      * 5.2.5.3.2 Master Disable.  We set a flag to inform the reset routine
> +      * 5.2.4.3.2 Master Disable.  We set a flag to inform the reset
> +routine
>        * of this need.  The first reset prevents new master requests from
>        * being issued by our device.  We then must wait 1usec or more for
> any
>        * remaining completions from the PCIe bus to trickle in, and then
> reset
>        * again to clear out any effects they may have had on our device.
>        */
>       hw_dbg(hw, "GIO Master Disable bit didn't clear - requesting
> resets\n");
> +gio_dis_fail:
>       hw->mac.flags |= IXGBE_FLAGS_DOUBLE_RESET_REQUIRED;
> 
>       /*
> --
> 2.5.0

Is this patch correcting some issue you're running in to?
I ask as I don't believe this check is necessary, since right below setting 
CTLR. PCIE_MASTER_DISABLE we loop waiting for  STATUS. 
PCIE_MASTER_ENABLE_STATUS to clear.   This should have the same effect as 
verify that the write to CTLR. PCIE_MASTER_DISABLE has cleared.

Thanks,
Don Skidmore <donald.c.skidm...@intel.com>

--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to