From patchwork Thu Oct 28 14:34:56 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ruud Bos X-Patchwork-Id: 12590373 X-Patchwork-Delegate: kuba@kernel.org Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 2FB06C433F5 for ; Thu, 28 Oct 2021 14:38:00 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 114E6610FF for ; Thu, 28 Oct 2021 14:38:00 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231184AbhJ1OkZ (ORCPT ); Thu, 28 Oct 2021 10:40:25 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:33754 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231132AbhJ1OkY (ORCPT ); Thu, 28 Oct 2021 10:40:24 -0400 Received: from mail-ed1-x52a.google.com (mail-ed1-x52a.google.com [IPv6:2a00:1450:4864:20::52a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3723BC061745 for ; Thu, 28 Oct 2021 07:37:57 -0700 (PDT) Received: by mail-ed1-x52a.google.com with SMTP id h7so26298752ede.8 for ; Thu, 28 Oct 2021 07:37:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=kaLOI5pYECzKvo/+urqxhhg9PYPQu4oDJi6rLd02fk8=; b=IQj8LxZyvOCURsCt4XI4Uell0chqwPh5nCOspgWJlJZGvzIHjJ3pxLbi7yWZ9SZmwq zwByaev4ety2VWcVO885idO++vT3cLO8jEfn5XOUklswu29JSovc5PrOFD/xl2zhX7y5 4qZ3QcgC3olamUrrEFep4eMAOdnkwy3vsXeSzlxQAMeEX/U9oMmJrDRi25APKJMFUPQJ 7I8uyKnGeDTX+jEHiv9AtbPEaZLe9FCCuqioN+maZmWbTIR0dau5mZQT3b2I2vwZm2Hd koJPRfvJbTVNH/3unIgVNvRNKyRbVXgGEeFTOX53zvbLWUziKZ3mAVkTjU672n3JwSxb m12A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=kaLOI5pYECzKvo/+urqxhhg9PYPQu4oDJi6rLd02fk8=; b=atu32CkZti1nWfevi7DbT5BLUNzAh1Q21/SFv2SZrRARR7bLN2bNzyq4nowlJnldUG ZEriVoeUn45KdmiUeT7XObEN9rCl+2MGEfhvabQoJ/9DPvDuivgHP5R+5XUYab1AK6Ml y2mfi2wsUUO/82A+Wn6VBDdbiGCeIyID8KHwHt4IAPUeju0dhfJcAQw00gQdQuSdyjGQ nQuFHQwQ3iCgUSIdH1ZY+hKa3IIw5BM6MLHCvBGUHPpIaAww0e7ErIQ/R744oU4HFbox /bPdaPpPLFG/ZjAdhjW0BjoYo+Nv/egjWmhpeYZRB+zf/H/YFl3tQ8UoMSxLd0eCKPV4 hEOA== X-Gm-Message-State: AOAM532ctk8pmQZ7F2yklxWY5HX4vrhZgk3XNjS5NK6vXT0ScSTRdV0J us4orf/MjWgn1ytQUhItEcnOKIiNWjE= X-Google-Smtp-Source: ABdhPJz8lFRb/ojGG8pVeHunZek/PGq+OrMC+uvSiiDMz7LHBUhKKl+dM3G8tImDm2dIhppEHcbMCg== X-Received: by 2002:a05:6402:1511:: with SMTP id f17mr6628020edw.68.1635431875857; Thu, 28 Oct 2021 07:37:55 -0700 (PDT) Received: from localhost.localdomain (84-104-224-163.cable.dynamic.v4.ziggo.nl. [84.104.224.163]) by smtp.gmail.com with ESMTPSA id di12sm1514501ejc.3.2021.10.28.07.37.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 28 Oct 2021 07:37:55 -0700 (PDT) From: Ruud Bos To: jesse.brandeburg@intel.com, anthony.l.nguyen@intel.com, intel-wired-lan@lists.osuosl.org Cc: netdev@vger.kernel.org, richardcochran@gmail.com, davem@davemloft.net, kuba@kernel.org, Ruud Bos Subject: [PATCH net-next v2 1/4] igb: move SDP config initialization to separate function Date: Thu, 28 Oct 2021 16:34:56 +0200 Message-Id: <20211028143459.903439-2-kernel.hbk@gmail.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20211028143459.903439-1-kernel.hbk@gmail.com> References: <20211028143459.903439-1-kernel.hbk@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org X-Patchwork-Delegate: kuba@kernel.org Allow reuse of SDP config struct initialization by moving it to a separate function. Signed-off-by: Ruud Bos Tested-by: Gurucharan G (A Contingent worker at Intel) --- drivers/net/ethernet/intel/igb/igb_ptp.c | 27 +++++++++++++++++------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/drivers/net/ethernet/intel/igb/igb_ptp.c b/drivers/net/ethernet/intel/igb/igb_ptp.c index 0011b15e678c..c78d0c2a5341 100644 --- a/drivers/net/ethernet/intel/igb/igb_ptp.c +++ b/drivers/net/ethernet/intel/igb/igb_ptp.c @@ -69,6 +69,7 @@ #define IGB_NBITS_82580 40 static void igb_ptp_tx_hwtstamp(struct igb_adapter *adapter); +static void igb_ptp_sdp_init(struct igb_adapter *adapter); /* SYSTIM read access for the 82576 */ static u64 igb_ptp_read_82576(const struct cyclecounter *cc) @@ -1192,7 +1193,6 @@ void igb_ptp_init(struct igb_adapter *adapter) { struct e1000_hw *hw = &adapter->hw; struct net_device *netdev = adapter->netdev; - int i; switch (hw->mac.type) { case e1000_82576: @@ -1233,13 +1233,7 @@ void igb_ptp_init(struct igb_adapter *adapter) break; case e1000_i210: case e1000_i211: - for (i = 0; i < IGB_N_SDP; i++) { - struct ptp_pin_desc *ppd = &adapter->sdp_config[i]; - - snprintf(ppd->name, sizeof(ppd->name), "SDP%d", i); - ppd->index = i; - ppd->func = PTP_PF_NONE; - } + igb_ptp_sdp_init(adapter); snprintf(adapter->ptp_caps.name, 16, "%pm", netdev->dev_addr); adapter->ptp_caps.owner = THIS_MODULE; adapter->ptp_caps.max_adj = 62499999; @@ -1284,6 +1278,23 @@ void igb_ptp_init(struct igb_adapter *adapter) } } +/** + * igb_ptp_sdp_init - utility function which inits the SDP config structs + * @adapter: Board private structure. + **/ +void igb_ptp_sdp_init(struct igb_adapter *adapter) +{ + int i; + + for (i = 0; i < IGB_N_SDP; i++) { + struct ptp_pin_desc *ppd = &adapter->sdp_config[i]; + + snprintf(ppd->name, sizeof(ppd->name), "SDP%d", i); + ppd->index = i; + ppd->func = PTP_PF_NONE; + } +} + /** * igb_ptp_suspend - Disable PTP work items and prepare for suspend * @adapter: Board private structure From patchwork Thu Oct 28 14:34:57 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ruud Bos X-Patchwork-Id: 12590375 X-Patchwork-Delegate: kuba@kernel.org Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 2DA2DC433FE for ; Thu, 28 Oct 2021 14:38:01 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 0D35A610FC for ; Thu, 28 Oct 2021 14:38:01 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230480AbhJ1Ok1 (ORCPT ); Thu, 28 Oct 2021 10:40:27 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:33760 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231182AbhJ1OkZ (ORCPT ); Thu, 28 Oct 2021 10:40:25 -0400 Received: from mail-ed1-x52f.google.com (mail-ed1-x52f.google.com [IPv6:2a00:1450:4864:20::52f]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 07115C061570 for ; Thu, 28 Oct 2021 07:37:58 -0700 (PDT) Received: by mail-ed1-x52f.google.com with SMTP id w1so6901093edd.0 for ; Thu, 28 Oct 2021 07:37:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=GmWmAMPPRjU0VuEUMI/mil0HhHd4P2g2fDKlZXPWyuI=; b=Rg6pbGXfLuqJmxs/PrXrNUUQt/9xsB1ppQ9v3DtZnWBo4ILD2OfDljUBJVtpeMokH/ LeXsqP8H9cC24SDpT+OXV2yHoUAE7vAlDnf37+yzzi68KB4LbuOWeaAxgipeE5cWiQI3 A5ptTUa0f4QZ/HPpsFxBYvRiDUk0BoVUKP2LsgHLsTwL9w2SVKCi14s3h19312roSOQX 14BrV+Dm9OLo13PnKe9qfJYH3iDRSf9mK9CzJYLqGZqi9wMl6UuqK9Zm22rr6tJq+r6E as7h1GRysPWifOCeX8ruWUYoSNJSokENQ1asLH0htxSLVyh+OAuOWLnD4qUlbSH7FIkl YXGw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=GmWmAMPPRjU0VuEUMI/mil0HhHd4P2g2fDKlZXPWyuI=; b=WQonbU6VzTQgKviTk6+miYKjQUcJe9Zl/hfdcPXBiP0MCOCldvyz+7b0XUflg8lRDh 3kFnZq2u4fA84Q7wUHdhrS+NNBNdNSyeRTXFpoQfSs3a1i9QwaFVaczJL6MrSzBcEz5A Rc9pADsh24ShCwr/ruSTwxr6pOa1BXXnkvDpRxZIb0Js6qCt7wL7kzLG7mS4QfcsOoK1 LKczaFmeyyYpI/2anjekKX/ajr0eeMneZXT4dh2z0MyLsOaAM0a6fj7Qg5q8cDZBKyzo Vend8GlRRhnEkhdbELzKx8Lh2M6VUTiMU38DMFTLYb6ePwkeayQfSJT26576rIzK5mMg UOxA== X-Gm-Message-State: AOAM5306lYkQgYooLxIfZWOCA3y0Pnw52ov5TSLyP7ly95oFZP+yDWms WvAj+lVNiWKuzUBAB+YVyXY= X-Google-Smtp-Source: ABdhPJwflg9LAg5JKqjdfzmR8dng3mU/MIA78py9B/roaP12a1QRh02TQGuJM5vD6PcDtPB227gMlQ== X-Received: by 2002:a17:906:a986:: with SMTP id jr6mr5887921ejb.520.1635431876440; Thu, 28 Oct 2021 07:37:56 -0700 (PDT) Received: from localhost.localdomain (84-104-224-163.cable.dynamic.v4.ziggo.nl. [84.104.224.163]) by smtp.gmail.com with ESMTPSA id di12sm1514501ejc.3.2021.10.28.07.37.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 28 Oct 2021 07:37:56 -0700 (PDT) From: Ruud Bos To: jesse.brandeburg@intel.com, anthony.l.nguyen@intel.com, intel-wired-lan@lists.osuosl.org Cc: netdev@vger.kernel.org, richardcochran@gmail.com, davem@davemloft.net, kuba@kernel.org, Ruud Bos Subject: [PATCH net-next v2 2/4] igb: move PEROUT and EXTTS isr logic to separate functions Date: Thu, 28 Oct 2021 16:34:57 +0200 Message-Id: <20211028143459.903439-3-kernel.hbk@gmail.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20211028143459.903439-1-kernel.hbk@gmail.com> References: <20211028143459.903439-1-kernel.hbk@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org X-Patchwork-Delegate: kuba@kernel.org Remove code duplication in the tsync interrupt handler function by moving this logic to separate functions. This keeps the interrupt handler readable and allows the new functions to be extended for adapter types other than i210. Signed-off-by: Ruud Bos Tested-by: Gurucharan G (A Contingent worker at Intel) --- drivers/net/ethernet/intel/igb/igb_main.c | 81 +++++++++++++---------- 1 file changed, 46 insertions(+), 35 deletions(-) diff --git a/drivers/net/ethernet/intel/igb/igb_main.c b/drivers/net/ethernet/intel/igb/igb_main.c index e67a71c3f141..c603f17e50be 100644 --- a/drivers/net/ethernet/intel/igb/igb_main.c +++ b/drivers/net/ethernet/intel/igb/igb_main.c @@ -6732,12 +6732,52 @@ void igb_update_stats(struct igb_adapter *adapter) } } +static void igb_perout(struct igb_adapter *adapter, int tsintr_tt) +{ + struct e1000_hw *hw = &adapter->hw; + struct timespec64 ts; + u32 tsauxc; + int pin = ptp_find_pin(adapter->ptp_clock, PTP_PF_PEROUT, tsintr_tt); + + if (pin < 0 || pin >= IGB_N_PEROUT) + return; + + spin_lock(&adapter->tmreg_lock); + ts = timespec64_add(adapter->perout[pin].start, + adapter->perout[pin].period); + /* u32 conversion of tv_sec is safe until y2106 */ + wr32((tsintr_tt == 1) ? E1000_TRGTTIML1 : E1000_TRGTTIML0, ts.tv_nsec); + wr32((tsintr_tt == 1) ? E1000_TRGTTIMH1 : E1000_TRGTTIMH0, (u32)ts.tv_sec); + tsauxc = rd32(E1000_TSAUXC); + tsauxc |= TSAUXC_EN_TT0; + wr32(E1000_TSAUXC, tsauxc); + adapter->perout[pin].start = ts; + spin_unlock(&adapter->tmreg_lock); +} + +static void igb_extts(struct igb_adapter *adapter, int tsintr_tt) +{ + struct e1000_hw *hw = &adapter->hw; + u32 sec, nsec; + struct ptp_clock_event event; + int pin = ptp_find_pin(adapter->ptp_clock, PTP_PF_EXTTS, tsintr_tt); + + if (pin < 0 || pin >= IGB_N_EXTTS) + return; + + nsec = rd32((tsintr_tt == 1) ? E1000_AUXSTMPL1 : E1000_AUXSTMPL0); + sec = rd32((tsintr_tt == 1) ? E1000_AUXSTMPH1 : E1000_AUXSTMPH0); + event.type = PTP_CLOCK_EXTTS; + event.index = tsintr_tt; + event.timestamp = sec * 1000000000ULL + nsec; + ptp_clock_event(adapter->ptp_clock, &event); +} + static void igb_tsync_interrupt(struct igb_adapter *adapter) { struct e1000_hw *hw = &adapter->hw; struct ptp_clock_event event; - struct timespec64 ts; - u32 ack = 0, tsauxc, sec, nsec, tsicr = rd32(E1000_TSICR); + u32 ack = 0, tsicr = rd32(E1000_TSICR); if (tsicr & TSINTR_SYS_WRAP) { event.type = PTP_CLOCK_PPS; @@ -6753,51 +6793,22 @@ static void igb_tsync_interrupt(struct igb_adapter *adapter) } if (tsicr & TSINTR_TT0) { - spin_lock(&adapter->tmreg_lock); - ts = timespec64_add(adapter->perout[0].start, - adapter->perout[0].period); - /* u32 conversion of tv_sec is safe until y2106 */ - wr32(E1000_TRGTTIML0, ts.tv_nsec); - wr32(E1000_TRGTTIMH0, (u32)ts.tv_sec); - tsauxc = rd32(E1000_TSAUXC); - tsauxc |= TSAUXC_EN_TT0; - wr32(E1000_TSAUXC, tsauxc); - adapter->perout[0].start = ts; - spin_unlock(&adapter->tmreg_lock); + igb_perout(adapter, 0); ack |= TSINTR_TT0; } if (tsicr & TSINTR_TT1) { - spin_lock(&adapter->tmreg_lock); - ts = timespec64_add(adapter->perout[1].start, - adapter->perout[1].period); - wr32(E1000_TRGTTIML1, ts.tv_nsec); - wr32(E1000_TRGTTIMH1, (u32)ts.tv_sec); - tsauxc = rd32(E1000_TSAUXC); - tsauxc |= TSAUXC_EN_TT1; - wr32(E1000_TSAUXC, tsauxc); - adapter->perout[1].start = ts; - spin_unlock(&adapter->tmreg_lock); + igb_perout(adapter, 1); ack |= TSINTR_TT1; } if (tsicr & TSINTR_AUTT0) { - nsec = rd32(E1000_AUXSTMPL0); - sec = rd32(E1000_AUXSTMPH0); - event.type = PTP_CLOCK_EXTTS; - event.index = 0; - event.timestamp = sec * 1000000000ULL + nsec; - ptp_clock_event(adapter->ptp_clock, &event); + igb_extts(adapter, 0); ack |= TSINTR_AUTT0; } if (tsicr & TSINTR_AUTT1) { - nsec = rd32(E1000_AUXSTMPL1); - sec = rd32(E1000_AUXSTMPH1); - event.type = PTP_CLOCK_EXTTS; - event.index = 1; - event.timestamp = sec * 1000000000ULL + nsec; - ptp_clock_event(adapter->ptp_clock, &event); + igb_extts(adapter, 1); ack |= TSINTR_AUTT1; } From patchwork Thu Oct 28 14:34:58 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ruud Bos X-Patchwork-Id: 12590377 X-Patchwork-Delegate: kuba@kernel.org Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 936C1C4332F for ; Thu, 28 Oct 2021 14:38:01 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 7DCE760F9B for ; Thu, 28 Oct 2021 14:38:01 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231267AbhJ1Ok1 (ORCPT ); Thu, 28 Oct 2021 10:40:27 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:33762 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231211AbhJ1OkZ (ORCPT ); Thu, 28 Oct 2021 10:40:25 -0400 Received: from mail-ed1-x533.google.com (mail-ed1-x533.google.com [IPv6:2a00:1450:4864:20::533]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8781DC061745 for ; Thu, 28 Oct 2021 07:37:58 -0700 (PDT) Received: by mail-ed1-x533.google.com with SMTP id h7so26299072ede.8 for ; Thu, 28 Oct 2021 07:37:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=dDjGGORSEIsb4zYLztnO4jBFVWgZ2Mb+2hRouijLf5c=; b=ZtwyXZyR53xC3Zw72ANqj2wUXkslH10/PD0i3mX0sbHywvTuuqplt+msO2uTzPfKY7 bWnogZlMxl+iB8ZHzhxPmZ09TIKIXdQ4pl0DWNSOVUekvLbqExEa0DQhd8TNK+QCl3Wd jja5jc+Mdhzmm+1+61t0h+C950L/jSjlImGfaPYLOngoZBtO1cNyXIajn3PWV3ijs/XP QghggkOs2FKX/CXNNyHjMojb7z0DAVqzMwpfZd7Y+wmyf/DNuiRw+RYBcCYSumZ4bN0r SShC6si3TEYkAT0kp/sYVrdacCBnrGN7nhxbRxznJAhn5k/VRGRWEhKCsTbCQcejltZ5 rBSA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=dDjGGORSEIsb4zYLztnO4jBFVWgZ2Mb+2hRouijLf5c=; b=E0ADV59QaOLG5yPsj9giNjE76+yRgfdzESwnzuJh1M5i4qNv504DZ1UMT3g1cuAlZP ab70Kzxt/7kzLtsod9hebOsCcmX/Fc3TwZ2HF1iCrfz+tXp2L6WNNvIPi8L+hUa+MqCg RwuYgRLweCp2/wO/ZStMu+yuknVypAfnDDof4mNcGIEzypAIZVi3UbBTBddsNGU4GIDI +95AyfvtrbGyaWoVnzGU5scrawW/qk22yKuXytq8Mgm/HVATLw0QAN+Cwy2vGNVJYEaH HWMJyOJUWgYpbAaq5/5L2ywPN0ySJJQfAjXOjZRrtJBhA3p+4NVQZnSUQQo6dzDDNzSO SfKA== X-Gm-Message-State: AOAM530G/tIS/EcvHeZpWHOW083f99FJ10zkza0ZCM0/wevq7OQjjqqF 4nJGYYVgs+x9+XMcPEDB+H4= X-Google-Smtp-Source: ABdhPJzXAhOTwkCE5pjDu58TABWgIQ19pNWkdEYyQiF/fHT+0g8PnOyGs50wpanhwNLuR/AVXMEPNQ== X-Received: by 2002:a17:906:4788:: with SMTP id cw8mr5794344ejc.97.1635431877074; Thu, 28 Oct 2021 07:37:57 -0700 (PDT) Received: from localhost.localdomain (84-104-224-163.cable.dynamic.v4.ziggo.nl. [84.104.224.163]) by smtp.gmail.com with ESMTPSA id di12sm1514501ejc.3.2021.10.28.07.37.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 28 Oct 2021 07:37:56 -0700 (PDT) From: Ruud Bos To: jesse.brandeburg@intel.com, anthony.l.nguyen@intel.com, intel-wired-lan@lists.osuosl.org Cc: netdev@vger.kernel.org, richardcochran@gmail.com, davem@davemloft.net, kuba@kernel.org, Ruud Bos Subject: [PATCH net-next v2 3/4] igb: support PEROUT on 82580/i354/i350 Date: Thu, 28 Oct 2021 16:34:58 +0200 Message-Id: <20211028143459.903439-4-kernel.hbk@gmail.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20211028143459.903439-1-kernel.hbk@gmail.com> References: <20211028143459.903439-1-kernel.hbk@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org X-Patchwork-Delegate: kuba@kernel.org Support for the PEROUT PTP pin function on 82580/i354/i350 based adapters. Because the time registers of these adapters do not have the nice split in second rollovers as the i210 has, the implementation is slightly more complex compared to the i210 implementation. Signed-off-by: Ruud Bos Tested-by: Gurucharan G (A Contingent worker at Intel) --- drivers/net/ethernet/intel/igb/igb_main.c | 59 +++++++++- drivers/net/ethernet/intel/igb/igb_ptp.c | 127 +++++++++++++++++++++- 2 files changed, 182 insertions(+), 4 deletions(-) diff --git a/drivers/net/ethernet/intel/igb/igb_main.c b/drivers/net/ethernet/intel/igb/igb_main.c index c603f17e50be..715302377b1a 100644 --- a/drivers/net/ethernet/intel/igb/igb_main.c +++ b/drivers/net/ethernet/intel/igb/igb_main.c @@ -6743,8 +6743,62 @@ static void igb_perout(struct igb_adapter *adapter, int tsintr_tt) return; spin_lock(&adapter->tmreg_lock); - ts = timespec64_add(adapter->perout[pin].start, - adapter->perout[pin].period); + + if ((hw->mac.type == e1000_82580) || + (hw->mac.type == e1000_i354) || + (hw->mac.type == e1000_i350)) { + u32 systiml, systimh, level_mask, level, rem; + u64 systim, now; + s64 ns = timespec64_to_ns(&adapter->perout[pin].period); + + /* read systim registers in sequence */ + rd32(E1000_SYSTIMR); + systiml = rd32(E1000_SYSTIML); + systimh = rd32(E1000_SYSTIMH); + systim = (((u64)(systimh & 0xFF)) << 32) | ((u64)systiml); + now = timecounter_cyc2time(&adapter->tc, systim); + + if (pin < 2) { + level_mask = (tsintr_tt == 1) ? 0x80000 : 0x40000; + level = (rd32(E1000_CTRL) & level_mask) ? 1 : 0; + } else { + level_mask = (tsintr_tt == 1) ? 0x80 : 0x40; + level = (rd32(E1000_CTRL_EXT) & level_mask) ? 1 : 0; + } + + div_u64_rem(now, ns, &rem); + systim = systim + (ns - rem); + + /* synchronize pin level with rising/falling edges */ + div_u64_rem(now, ns << 1, &rem); + if (rem < ns) { + /* first half of period */ + if (level == 0) { + /* output is already low, skip this period */ + systim += ns; + pr_notice("igb: periodic output on %s missed falling edge\n", + adapter->sdp_config[pin].name); + } + } else { + /* second half of period */ + if (level == 1) { + /* output is already high, skip this period */ + systim += ns; + pr_notice("igb: periodic output on %s missed rising edge\n", + adapter->sdp_config[pin].name); + } + } + + /* for this chip family tv_sec is the upper part of the binary value, + * so not seconds + */ + ts.tv_nsec = (u32)systim; + ts.tv_sec = ((u32)(systim >> 32)) & 0xFF; + } else { + ts = timespec64_add(adapter->perout[pin].start, + adapter->perout[pin].period); + } + /* u32 conversion of tv_sec is safe until y2106 */ wr32((tsintr_tt == 1) ? E1000_TRGTTIML1 : E1000_TRGTTIML0, ts.tv_nsec); wr32((tsintr_tt == 1) ? E1000_TRGTTIMH1 : E1000_TRGTTIMH0, (u32)ts.tv_sec); @@ -6752,6 +6806,7 @@ static void igb_perout(struct igb_adapter *adapter, int tsintr_tt) tsauxc |= TSAUXC_EN_TT0; wr32(E1000_TSAUXC, tsauxc); adapter->perout[pin].start = ts; + spin_unlock(&adapter->tmreg_lock); } diff --git a/drivers/net/ethernet/intel/igb/igb_ptp.c b/drivers/net/ethernet/intel/igb/igb_ptp.c index c78d0c2a5341..57af8db73be6 100644 --- a/drivers/net/ethernet/intel/igb/igb_ptp.c +++ b/drivers/net/ethernet/intel/igb/igb_ptp.c @@ -508,6 +508,124 @@ static void igb_pin_perout(struct igb_adapter *igb, int chan, int pin, int freq) wr32(E1000_CTRL_EXT, ctrl_ext); } +static int igb_ptp_feature_enable_82580(struct ptp_clock_info *ptp, + struct ptp_clock_request *rq, int on) +{ + struct igb_adapter *igb = + container_of(ptp, struct igb_adapter, ptp_caps); + struct e1000_hw *hw = &igb->hw; + u32 tsauxc, tsim, tsauxc_mask, tsim_mask, trgttiml, trgttimh, systiml, + systimh, level_mask, level, rem; + unsigned long flags; + struct timespec64 ts, start; + int pin = -1; + s64 ns; + u64 systim, now; + + switch (rq->type) { + case PTP_CLK_REQ_EXTTS: + return -EOPNOTSUPP; + + case PTP_CLK_REQ_PEROUT: + /* Reject requests with unsupported flags */ + if (rq->perout.flags) + return -EOPNOTSUPP; + + if (on) { + pin = ptp_find_pin(igb->ptp_clock, PTP_PF_PEROUT, + rq->perout.index); + if (pin < 0) + return -EBUSY; + } + ts.tv_sec = rq->perout.period.sec; + ts.tv_nsec = rq->perout.period.nsec; + ns = timespec64_to_ns(&ts); + ns = ns >> 1; + if (on && (ns < 8LL)) + return -EINVAL; + ts = ns_to_timespec64(ns); + if (rq->perout.index == 1) { + tsauxc_mask = TSAUXC_EN_TT1; + tsim_mask = TSINTR_TT1; + trgttiml = E1000_TRGTTIML1; + trgttimh = E1000_TRGTTIMH1; + } else { + tsauxc_mask = TSAUXC_EN_TT0; + tsim_mask = TSINTR_TT0; + trgttiml = E1000_TRGTTIML0; + trgttimh = E1000_TRGTTIMH0; + } + spin_lock_irqsave(&igb->tmreg_lock, flags); + tsauxc = rd32(E1000_TSAUXC); + tsim = rd32(E1000_TSIM); + if (rq->perout.index == 1) { + tsauxc &= ~(TSAUXC_EN_TT1 | TSAUXC_EN_CLK1 | TSAUXC_ST1); + tsim &= ~TSINTR_TT1; + } else { + tsauxc &= ~(TSAUXC_EN_TT0 | TSAUXC_EN_CLK0 | TSAUXC_ST0); + tsim &= ~TSINTR_TT0; + } + if (on) { + int i = rq->perout.index; + + /* read systim registers in sequence */ + rd32(E1000_SYSTIMR); + systiml = rd32(E1000_SYSTIML); + systimh = rd32(E1000_SYSTIMH); + systim = (((u64)(systimh & 0xFF)) << 32) | ((u64)systiml); + now = timecounter_cyc2time(&igb->tc, systim); + + if (pin < 2) { + level_mask = (i == 1) ? 0x80000 : 0x40000; + level = (rd32(E1000_CTRL) & level_mask) ? 1 : 0; + } else { + level_mask = (i == 1) ? 0x80 : 0x40; + level = (rd32(E1000_CTRL_EXT) & level_mask) ? 1 : 0; + } + + div_u64_rem(now, ns, &rem); + systim = systim + (ns - rem); + + /* synchronize pin level with rising/falling edges */ + div_u64_rem(now, ns << 1, &rem); + if (rem < ns) { + /* first half of period */ + if (level == 0) { + /* output is already low, skip this period */ + systim += ns; + } + } else { + /* second half of period */ + if (level == 1) { + /* output is already high, skip this period */ + systim += ns; + } + } + + start = ns_to_timespec64(systim + (ns - rem)); + igb_pin_perout(igb, i, pin, 0); + igb->perout[i].start.tv_sec = start.tv_sec; + igb->perout[i].start.tv_nsec = start.tv_nsec; + igb->perout[i].period.tv_sec = ts.tv_sec; + igb->perout[i].period.tv_nsec = ts.tv_nsec; + + wr32(trgttiml, (u32)systim); + wr32(trgttimh, ((u32)(systim >> 32)) & 0xFF); + tsauxc |= tsauxc_mask; + tsim |= tsim_mask; + } + wr32(E1000_TSAUXC, tsauxc); + wr32(E1000_TSIM, tsim); + spin_unlock_irqrestore(&igb->tmreg_lock, flags); + return 0; + + case PTP_CLK_REQ_PPS: + return -EOPNOTSUPP; + } + + return -EOPNOTSUPP; +} + static int igb_ptp_feature_enable_i210(struct ptp_clock_info *ptp, struct ptp_clock_request *rq, int on) { @@ -1215,16 +1333,21 @@ void igb_ptp_init(struct igb_adapter *adapter) case e1000_82580: case e1000_i354: case e1000_i350: + igb_ptp_sdp_init(adapter); snprintf(adapter->ptp_caps.name, 16, "%pm", netdev->dev_addr); adapter->ptp_caps.owner = THIS_MODULE; adapter->ptp_caps.max_adj = 62499999; - adapter->ptp_caps.n_ext_ts = 0; + adapter->ptp_caps.n_ext_ts = IGB_N_EXTTS; + adapter->ptp_caps.n_per_out = IGB_N_PEROUT; + adapter->ptp_caps.n_pins = IGB_N_SDP; adapter->ptp_caps.pps = 0; + adapter->ptp_caps.pin_config = adapter->sdp_config; adapter->ptp_caps.adjfine = igb_ptp_adjfine_82580; adapter->ptp_caps.adjtime = igb_ptp_adjtime_82576; adapter->ptp_caps.gettimex64 = igb_ptp_gettimex_82580; adapter->ptp_caps.settime64 = igb_ptp_settime_82576; - adapter->ptp_caps.enable = igb_ptp_feature_enable; + adapter->ptp_caps.enable = igb_ptp_feature_enable_82580; + adapter->ptp_caps.verify = igb_ptp_verify_pin; adapter->cc.read = igb_ptp_read_82580; adapter->cc.mask = CYCLECOUNTER_MASK(IGB_NBITS_82580); adapter->cc.mult = 1; From patchwork Thu Oct 28 14:34:59 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ruud Bos X-Patchwork-Id: 12590379 X-Patchwork-Delegate: kuba@kernel.org Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id B81C5C433EF for ; Thu, 28 Oct 2021 14:38:03 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 8C7576108F for ; Thu, 28 Oct 2021 14:38:03 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231298AbhJ1Ok2 (ORCPT ); Thu, 28 Oct 2021 10:40:28 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:33772 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231258AbhJ1Ok1 (ORCPT ); Thu, 28 Oct 2021 10:40:27 -0400 Received: from mail-ed1-x533.google.com (mail-ed1-x533.google.com [IPv6:2a00:1450:4864:20::533]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 261E3C061570 for ; Thu, 28 Oct 2021 07:38:00 -0700 (PDT) Received: by mail-ed1-x533.google.com with SMTP id ee16so12775656edb.10 for ; Thu, 28 Oct 2021 07:38:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=CQLc+Bb9g6jSO8h73swFJnMyQM+VpvaPbenLUuNW4bs=; b=bIL2iz/w0TGFdEcjDN4SQF/msvOjLF1A6tGqzQZgFUVPO2FEuS0GcZB3tSHfR30oa1 QN1V22pyd0nRS8bf+zQh8O7bwBYy/mas9mg9sFmDD1Hmw/v9tTIA+t+2uhJ9/+4MT9gz sTyH+kQ3+liMzYnkHRp65ftZMJQiYybRsTJyx9a9tcL9SJux5Q7z+RZ9FP5Y6WSyxzqj cLQmJ7RRHwFDQqqAF7ZHKsrd1SIvN1ktM4Wkrog6MYK8G44keR/i/5+I64tp09hJIuuu PYaxC+sNRnFz1F+XMKGZ1lkPp3Y1xnBTyL7w7TeeUOWTEelBJLoNYDZXiXjFilFJYICX eV/g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=CQLc+Bb9g6jSO8h73swFJnMyQM+VpvaPbenLUuNW4bs=; b=UQQu+aDjW99lCdBwuUY8KupEtKB9SR6Ao1Kigegm/5bmuIuGZvqIXZ+xU0iGVcLquN UUCataDjWnCHmPepap8mEEFNHf+pu/7el4WBKYh+VDuYz+A0fJ/lQsza/+A7a/oZ6CLp hRHoJLz8poufJQeqI8Zwy6xPN4mKjJ2hQSjjNcOMft4VsBP3T8kxhREyc/uMhLk2OaEV hyUqPuxgJnTGLW34GFZAz2FAvu1x2DMF0WoZqf7apt/YvWEdEuNQugqeyKK1m7LRmeHY cdKBSR73PUe4ZNDUdIxEcfzLPY2caq7+DTd0mY9PnItHRfjubLuNT6WHUn07VfS5t7sO YyCA== X-Gm-Message-State: AOAM533TYjGtid2zB5K9+pepO0OhPS398FTUJ5oLEBP4yDF0cbuLrIvo uy/NfmN6KuwtJzKfg4PXiJI= X-Google-Smtp-Source: ABdhPJwhFBIIf0TSZyBl+J2Ly84sBbg1jXpBYXTyFG31lhjT7BMQVTVrsdFrpVD2sM9wWH2V0+eAVg== X-Received: by 2002:aa7:cd99:: with SMTP id x25mr6575697edv.266.1635431877754; Thu, 28 Oct 2021 07:37:57 -0700 (PDT) Received: from localhost.localdomain (84-104-224-163.cable.dynamic.v4.ziggo.nl. [84.104.224.163]) by smtp.gmail.com with ESMTPSA id di12sm1514501ejc.3.2021.10.28.07.37.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 28 Oct 2021 07:37:57 -0700 (PDT) From: Ruud Bos To: jesse.brandeburg@intel.com, anthony.l.nguyen@intel.com, intel-wired-lan@lists.osuosl.org Cc: netdev@vger.kernel.org, richardcochran@gmail.com, davem@davemloft.net, kuba@kernel.org, Ruud Bos Subject: [PATCH net-next v2 4/4] igb: support EXTTS on 82580/i354/i350 Date: Thu, 28 Oct 2021 16:34:59 +0200 Message-Id: <20211028143459.903439-5-kernel.hbk@gmail.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20211028143459.903439-1-kernel.hbk@gmail.com> References: <20211028143459.903439-1-kernel.hbk@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org X-Patchwork-Delegate: kuba@kernel.org Support for the PTP pin function on 82580/i354/i350 based adapters. Because the time registers of these adapters do not have the nice split in second rollovers as the i210 has, the implementation is slightly more complex compared to the i210 implementation. Signed-off-by: Ruud Bos Tested-by: Gurucharan G (A Contingent worker at Intel) --- drivers/net/ethernet/intel/igb/igb_main.c | 20 ++++++++++--- drivers/net/ethernet/intel/igb/igb_ptp.c | 36 ++++++++++++++++++++++- 2 files changed, 51 insertions(+), 5 deletions(-) diff --git a/drivers/net/ethernet/intel/igb/igb_main.c b/drivers/net/ethernet/intel/igb/igb_main.c index 715302377b1a..13b0c1bb26f0 100644 --- a/drivers/net/ethernet/intel/igb/igb_main.c +++ b/drivers/net/ethernet/intel/igb/igb_main.c @@ -6813,18 +6813,30 @@ static void igb_perout(struct igb_adapter *adapter, int tsintr_tt) static void igb_extts(struct igb_adapter *adapter, int tsintr_tt) { struct e1000_hw *hw = &adapter->hw; - u32 sec, nsec; + int auxstmpl = (tsintr_tt == 1) ? E1000_AUXSTMPL1 : E1000_AUXSTMPL0; + int auxstmph = (tsintr_tt == 1) ? E1000_AUXSTMPH1 : E1000_AUXSTMPH0; + struct timespec64 ts; struct ptp_clock_event event; int pin = ptp_find_pin(adapter->ptp_clock, PTP_PF_EXTTS, tsintr_tt); if (pin < 0 || pin >= IGB_N_EXTTS) return; - nsec = rd32((tsintr_tt == 1) ? E1000_AUXSTMPL1 : E1000_AUXSTMPL0); - sec = rd32((tsintr_tt == 1) ? E1000_AUXSTMPH1 : E1000_AUXSTMPH0); + if ((hw->mac.type == e1000_82580) || + (hw->mac.type == e1000_i354) || + (hw->mac.type == e1000_i350)) { + s64 ns = rd32(auxstmpl); + + ns += ((s64)(rd32(auxstmph) & 0xFF)) << 32; + ts = ns_to_timespec64(ns); + } else { + ts.tv_nsec = rd32(auxstmpl); + ts.tv_sec = rd32(auxstmph); + } + event.type = PTP_CLOCK_EXTTS; event.index = tsintr_tt; - event.timestamp = sec * 1000000000ULL + nsec; + event.timestamp = ts.tv_sec * 1000000000ULL + ts.tv_nsec; ptp_clock_event(adapter->ptp_clock, &event); } diff --git a/drivers/net/ethernet/intel/igb/igb_ptp.c b/drivers/net/ethernet/intel/igb/igb_ptp.c index 57af8db73be6..6d59847f5097 100644 --- a/drivers/net/ethernet/intel/igb/igb_ptp.c +++ b/drivers/net/ethernet/intel/igb/igb_ptp.c @@ -524,7 +524,41 @@ static int igb_ptp_feature_enable_82580(struct ptp_clock_info *ptp, switch (rq->type) { case PTP_CLK_REQ_EXTTS: - return -EOPNOTSUPP; + /* Reject requests with unsupported flags */ + if (rq->extts.flags & ~(PTP_ENABLE_FEATURE | + PTP_RISING_EDGE | + PTP_FALLING_EDGE | + PTP_STRICT_FLAGS)) + return -EOPNOTSUPP; + + if (on) { + pin = ptp_find_pin(igb->ptp_clock, PTP_PF_EXTTS, + rq->extts.index); + if (pin < 0) + return -EBUSY; + } + if (rq->extts.index == 1) { + tsauxc_mask = TSAUXC_EN_TS1; + tsim_mask = TSINTR_AUTT1; + } else { + tsauxc_mask = TSAUXC_EN_TS0; + tsim_mask = TSINTR_AUTT0; + } + spin_lock_irqsave(&igb->tmreg_lock, flags); + tsauxc = rd32(E1000_TSAUXC); + tsim = rd32(E1000_TSIM); + if (on) { + igb_pin_extts(igb, rq->extts.index, pin); + tsauxc |= tsauxc_mask; + tsim |= tsim_mask; + } else { + tsauxc &= ~tsauxc_mask; + tsim &= ~tsim_mask; + } + wr32(E1000_TSAUXC, tsauxc); + wr32(E1000_TSIM, tsim); + spin_unlock_irqrestore(&igb->tmreg_lock, flags); + return 0; case PTP_CLK_REQ_PEROUT: /* Reject requests with unsupported flags */