lkml.org 
[lkml]   [2021]   [Jul]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.13 219/266] i40e: fix PTP on 5Gb links
    Date
    From: Jesse Brandeburg <jesse.brandeburg@intel.com>

    commit 26b0ce8dd3dd704393dbace4dc416adfeffe531f upstream.

    As reported by Alex Sergeev, the i40e driver is incrementing the PTP
    clock at 40Gb speeds when linked at 5Gb. Fix this bug by making
    sure that the right multiplier is selected when linked at 5Gb.

    Fixes: 3dbdd6c2f70a ("i40e: Add support for 5Gbps cards")
    Cc: stable@vger.kernel.org
    Reported-by: Alex Sergeev <asergeev@carbonrobotics.com>
    Suggested-by: Alex Sergeev <asergeev@carbonrobotics.com>
    Signed-off-by: Jesse Brandeburg <jesse.brandeburg@intel.com>
    Tested-by: Tony Brelinski <tonyx.brelinski@intel.com>
    Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    drivers/net/ethernet/intel/i40e/i40e_ptp.c | 8 ++++++--
    1 file changed, 6 insertions(+), 2 deletions(-)

    --- a/drivers/net/ethernet/intel/i40e/i40e_ptp.c
    +++ b/drivers/net/ethernet/intel/i40e/i40e_ptp.c
    @@ -11,13 +11,14 @@
    * operate with the nanosecond field directly without fear of overflow.
    *
    * Much like the 82599, the update period is dependent upon the link speed:
    - * At 40Gb link or no link, the period is 1.6ns.
    - * At 10Gb link, the period is multiplied by 2. (3.2ns)
    + * At 40Gb, 25Gb, or no link, the period is 1.6ns.
    + * At 10Gb or 5Gb link, the period is multiplied by 2. (3.2ns)
    * At 1Gb link, the period is multiplied by 20. (32ns)
    * 1588 functionality is not supported at 100Mbps.
    */
    #define I40E_PTP_40GB_INCVAL 0x0199999999ULL
    #define I40E_PTP_10GB_INCVAL_MULT 2
    +#define I40E_PTP_5GB_INCVAL_MULT 2
    #define I40E_PTP_1GB_INCVAL_MULT 20

    #define I40E_PRTTSYN_CTL1_TSYNTYPE_V1 BIT(I40E_PRTTSYN_CTL1_TSYNTYPE_SHIFT)
    @@ -465,6 +466,9 @@ void i40e_ptp_set_increment(struct i40e_
    case I40E_LINK_SPEED_10GB:
    mult = I40E_PTP_10GB_INCVAL_MULT;
    break;
    + case I40E_LINK_SPEED_5GB:
    + mult = I40E_PTP_5GB_INCVAL_MULT;
    + break;
    case I40E_LINK_SPEED_1GB:
    mult = I40E_PTP_1GB_INCVAL_MULT;
    break;

    \
     
     \ /
      Last update: 2021-07-15 22:10    [W:4.146 / U:0.004 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site