From nobody Fri Dec 19 06:19:31 2025 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id EE933C4321E for ; Wed, 16 Nov 2022 20:54:15 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238812AbiKPUyO (ORCPT ); Wed, 16 Nov 2022 15:54:14 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35778 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233340AbiKPUxo (ORCPT ); Wed, 16 Nov 2022 15:53:44 -0500 Received: from mail-ej1-x634.google.com (mail-ej1-x634.google.com [IPv6:2a00:1450:4864:20::634]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B4C10D89 for ; Wed, 16 Nov 2022 12:53:25 -0800 (PST) Received: by mail-ej1-x634.google.com with SMTP id n20so98457ejh.0 for ; Wed, 16 Nov 2022 12:53:25 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20210112.gappssmtp.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=2rJ/wCekKfh+/zbab0KIF63OXyhft6t7a9cE754TRYE=; b=P2To7HYyeZgnQrgVSiKYZjY/MFYOIWjd/XCA+rlJONO4UE9NbuRNNXqh4OoyMZDMFD 8Jf5jjQg1yf4Vyr1mTAAW8m6RnMK0YsErEsVDcNgxGXty8Ezc6tEkn/cflJkqTKCAMtP GZ7exwXlAMjj1At6Tc/0RmiIDNSF1RMyZg3yIdEIJLGYXi1ucQ7ODKnL+s0di9XHxfaQ slvIwH/ocjac5SAAfER5A1IWBuhmNTJ+e/WhRYA/VeSeEWyGUUyumYgQbgc6gQMyylXG TOVZtkibuNn46tWev4OobR6gdDQVrGUxaw0tXDwxjwLTmKrHDf5404mUyxGyYeqnyRSa HUyw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=2rJ/wCekKfh+/zbab0KIF63OXyhft6t7a9cE754TRYE=; b=Oc62xkx8PN7ZMX42VHXAhrUkOD0PD2QXzNcovsQqIQRvv5YINLbL37GcNRfepS/XQY g5IcmZbQLRfFyvaknSzd8oegPITdGClcltjazgSwEUEc5eCz9/JvCJ7CrmQkaL05lQEY EfGVvqkAkaD7axdH/nTJ5ioJ0u27MZqa+CeNHTHiG/fMsrxNLIdaWaROriMP38BZAsWd w8HiYoltmX7YMXXA+7QCt0TTH5xQDa59uNuHH03QZiGSLahTB6GQC7wmEl9d9qhdUHVt v05sTdAGfn8cez7vSxlBmw/GXxyi3Chg9oSFlZEXiMp/dqqIKPl8i3ueuPSPHX0nDK9+ LSGQ== X-Gm-Message-State: ANoB5pmb8PlhRdQa1nBt1rxcsDyeN1VeXN/YWJDenC99Y8/j4dKz+K2L Wzm/fDGkM6r0wjSzdXyAIqSBkQ== X-Google-Smtp-Source: AA0mqf7gkUlgqdFMbhRGiQ4SNQC97BkRRTReNc1yfIImtknfhy+YxiIiJqYtvcTWGm8CTPGs3KmFqA== X-Received: by 2002:a17:906:1248:b0:7ad:f9da:8986 with SMTP id u8-20020a170906124800b007adf9da8986mr19202437eja.54.1668632004349; Wed, 16 Nov 2022 12:53:24 -0800 (PST) Received: from blmsp.fritz.box ([2001:4090:a244:804b:353b:565:addf:3aa7]) by smtp.gmail.com with ESMTPSA id kv17-20020a17090778d100b007aece68483csm6782828ejc.193.2022.11.16.12.53.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 16 Nov 2022 12:53:23 -0800 (PST) From: Markus Schneider-Pargmann To: Chandrasekar Ramakrishnan , Marc Kleine-Budde , Wolfgang Grandegger Cc: linux-can@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Markus Schneider-Pargmann Subject: [PATCH 01/15] can: m_can: Eliminate double read of TXFQS in tx_handler Date: Wed, 16 Nov 2022 21:52:54 +0100 Message-Id: <20221116205308.2996556-2-msp@baylibre.com> X-Mailer: git-send-email 2.38.1 In-Reply-To: <20221116205308.2996556-1-msp@baylibre.com> References: <20221116205308.2996556-1-msp@baylibre.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" The TXFQS register is read first to check if the fifo is full and then immediately again to get the putidx. This is unnecessary and adds significant overhead if read requests are done over a slow bus, for example SPI with tcan4x5x. Add a variable to store the value of the register. Split the m_can_tx_fifo_full function into two to avoid the hidden m_can_read call if not needed. Signed-off-by: Markus Schneider-Pargmann --- drivers/net/can/m_can/m_can.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/drivers/net/can/m_can/m_can.c b/drivers/net/can/m_can/m_can.c index 00d11e95fd98..2c01e3f7b23f 100644 --- a/drivers/net/can/m_can/m_can.c +++ b/drivers/net/can/m_can/m_can.c @@ -368,9 +368,14 @@ m_can_txe_fifo_read(struct m_can_classdev *cdev, u32 f= gi, u32 offset, u32 *val) return cdev->ops->read_fifo(cdev, addr_offset, val, 1); } =20 +static inline bool _m_can_tx_fifo_full(u32 txfqs) +{ + return !!(txfqs & TXFQS_TFQF); +} + static inline bool m_can_tx_fifo_full(struct m_can_classdev *cdev) { - return !!(m_can_read(cdev, M_CAN_TXFQS) & TXFQS_TFQF); + return _m_can_tx_fifo_full(m_can_read(cdev, M_CAN_TXFQS)); } =20 static void m_can_config_endisable(struct m_can_classdev *cdev, bool enabl= e) @@ -1585,6 +1590,7 @@ static netdev_tx_t m_can_tx_handler(struct m_can_clas= sdev *cdev) struct sk_buff *skb =3D cdev->tx_skb; struct id_and_dlc fifo_header; u32 cccr, fdflags; + u32 txfqs; int err; int putidx; =20 @@ -1641,8 +1647,10 @@ static netdev_tx_t m_can_tx_handler(struct m_can_cla= ssdev *cdev) } else { /* Transmit routine for version >=3D v3.1.x */ =20 + txfqs =3D m_can_read(cdev, M_CAN_TXFQS); + /* Check if FIFO full */ - if (m_can_tx_fifo_full(cdev)) { + if (_m_can_tx_fifo_full(txfqs)) { /* This shouldn't happen */ netif_stop_queue(dev); netdev_warn(dev, @@ -1658,8 +1666,7 @@ static netdev_tx_t m_can_tx_handler(struct m_can_clas= sdev *cdev) } =20 /* get put index for frame */ - putidx =3D FIELD_GET(TXFQS_TFQPI_MASK, - m_can_read(cdev, M_CAN_TXFQS)); + putidx =3D FIELD_GET(TXFQS_TFQPI_MASK, txfqs); =20 /* Construct DLC Field, with CAN-FD configuration. * Use the put index of the fifo as the message marker, --=20 2.38.1 From nobody Fri Dec 19 06:19:31 2025 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 88ED3C4332F for ; Wed, 16 Nov 2022 20:54:25 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234790AbiKPUyW (ORCPT ); Wed, 16 Nov 2022 15:54:22 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36302 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234040AbiKPUxq (ORCPT ); Wed, 16 Nov 2022 15:53:46 -0500 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 B5752E27 for ; Wed, 16 Nov 2022 12:53:27 -0800 (PST) Received: by mail-ed1-x52f.google.com with SMTP id z18so28438557edb.9 for ; Wed, 16 Nov 2022 12:53:26 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20210112.gappssmtp.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=ajsZbX3+twaGsWlZnthQH+DJqMTcB864bD+ktj1XJi8=; b=cGyV6iSyzBue0i5l97tQs1F/+bVMjgHav1MAY5Sp3ebIBKAF7rtEZUC/JmhiwCz45R rRQmwP4+vYFx1HAHkCDFG483CrsfEqHCo+WCCTFlJMKBWpByz9CHRlXEaEQXB15nQPg4 dVsPlUsn/h1qq8jjY1MBSrqbPNamW8aseozcmaPGAq5PLnSUxm1OYs1RIplM/W+npToS w+3jyD1we20/rAh/289ilWSbioDeGmbslRMCVMzHBoPyp6ZqDInmObMZhFFeJfhVg5b/ iuEhPle4TOpHkI0KN4kdg09gqWy6Y6GZf3f7H+fUL6eCG+EP6tv6oKJnBQ1vawL2Zg8+ FgpA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=ajsZbX3+twaGsWlZnthQH+DJqMTcB864bD+ktj1XJi8=; b=Iugrfh0fgXKug1UE6XoItx5uTaWQxWS8k+OXT+OjeOfbLTojaUwKLqBIXzFbEf8fk9 CjFLZuJnQ5wEtPqt55x9W2dCh3XFz6uBcoIKazI3VrdTT7uBOj3i57xmLG3/wJdimRuu KtJ/cMosNnT1kE5amh0lUxLFY4+z8tTt4vSZGj0bOB2LekioOI2ojG4lece9ArZENngF zwRHzkWWakr5JSariphkRQZ0D1Jfekl2i5/DyJNwoZUoFEB+ObjiCkXxZh5GR1vkQ0Ci l6eUPKJjCKVy1fMaOxIMXmcSZtITtDw5Y0/8lqjebNQe1jwabpFEUnGQiGe/2DFqSsA+ /oIg== X-Gm-Message-State: ANoB5pnEOtnatlGQWDmg1FL1pUl8DZIGT/DjXUQaXd5gEDF6dHWmAarL AKhUZHb+gQhEWhlBFobZmg1h9Q== X-Google-Smtp-Source: AA0mqf6Z3LMs4psPQJjOVF9nPXX0RertMMFOq9jkbzOnbJJVdAXVu48YNiJv8YDaS7aZAMMLs4tX4w== X-Received: by 2002:aa7:d6cb:0:b0:467:e2dd:b593 with SMTP id x11-20020aa7d6cb000000b00467e2ddb593mr12985138edr.378.1668632005445; Wed, 16 Nov 2022 12:53:25 -0800 (PST) Received: from blmsp.fritz.box ([2001:4090:a244:804b:353b:565:addf:3aa7]) by smtp.gmail.com with ESMTPSA id kv17-20020a17090778d100b007aece68483csm6782828ejc.193.2022.11.16.12.53.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 16 Nov 2022 12:53:24 -0800 (PST) From: Markus Schneider-Pargmann To: Chandrasekar Ramakrishnan , Marc Kleine-Budde , Wolfgang Grandegger Cc: linux-can@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Markus Schneider-Pargmann Subject: [PATCH 02/15] can: m_can: Wakeup net queue once tx was issued Date: Wed, 16 Nov 2022 21:52:55 +0100 Message-Id: <20221116205308.2996556-3-msp@baylibre.com> X-Mailer: git-send-email 2.38.1 In-Reply-To: <20221116205308.2996556-1-msp@baylibre.com> References: <20221116205308.2996556-1-msp@baylibre.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Currently the driver waits to wakeup the queue until the interrupt for the transmit event is received and acknowledged. If we want to use the hardware FIFO, this is too late. Instead release the queue as soon as the transmit was transferred into the hardware FIFO. We are then ready for the next transmit to be transferred. Signed-off-by: Markus Schneider-Pargmann --- drivers/net/can/m_can/m_can.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/drivers/net/can/m_can/m_can.c b/drivers/net/can/m_can/m_can.c index 2c01e3f7b23f..4adf03111782 100644 --- a/drivers/net/can/m_can/m_can.c +++ b/drivers/net/can/m_can/m_can.c @@ -1097,10 +1097,9 @@ static irqreturn_t m_can_isr(int irq, void *dev_id) /* New TX FIFO Element arrived */ if (m_can_echo_tx_event(dev) !=3D 0) goto out_fail; - - if (netif_queue_stopped(dev) && - !m_can_tx_fifo_full(cdev)) + if (!cdev->tx_skb && netif_queue_stopped(dev)) netif_wake_queue(dev); + } } =20 @@ -1705,6 +1704,8 @@ static netdev_tx_t m_can_tx_handler(struct m_can_clas= sdev *cdev) if (m_can_tx_fifo_full(cdev) || m_can_next_echo_skb_occupied(dev, putidx)) netif_stop_queue(dev); + else if (cdev->is_peripheral && !cdev->tx_skb && netif_queue_stopped(dev= )) + netif_wake_queue(dev); } =20 return NETDEV_TX_OK; --=20 2.38.1 From nobody Fri Dec 19 06:19:31 2025 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id EFE83C4332F for ; Wed, 16 Nov 2022 20:54:28 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238937AbiKPUy1 (ORCPT ); Wed, 16 Nov 2022 15:54:27 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36306 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234223AbiKPUxq (ORCPT ); Wed, 16 Nov 2022 15:53:46 -0500 Received: from mail-ej1-x62e.google.com (mail-ej1-x62e.google.com [IPv6:2a00:1450:4864:20::62e]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 44037E37 for ; Wed, 16 Nov 2022 12:53:27 -0800 (PST) Received: by mail-ej1-x62e.google.com with SMTP id ud5so47209917ejc.4 for ; Wed, 16 Nov 2022 12:53:27 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20210112.gappssmtp.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=ymKWfG3hBUHC+wOiiQxZhyFHyJiOcWTWeXnW4/XpvSQ=; b=uBIdtaeGMMK0etaJ10sYW6BxgNAyYojLXCGy0W42C+OfWLPOupay7/r0gtDdbrusfx UMGtFFUhGTNuo62g/z04us3xcWWsJylHgFAzaLUOKDz4nkF7I6lR5JYF1XR+1z9PCcMO SWZ5+W2N46uWnqy/y4Iec02er6vZlbge75TGJyzfM44ovW2lte7VHobLp4A7N+P1kHiE hSV2cRdrnkUqf3fhiHpB7Ya2OHa2borOYj/kxMXgVL392o4f21DoNWSwft4nNhJSLfM6 O54h8A2SVNF+4tTC6/YQnzgL/WfzCj9ZIJUkJ3wnyAi1hCo1xrSRnjhVaINTIrKp94SE Jm3g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=ymKWfG3hBUHC+wOiiQxZhyFHyJiOcWTWeXnW4/XpvSQ=; b=NK4SjOOtoAS/VfW8pLmgus5qW5eeliR10SOVxy2J0SHvWTMwYmiKL5nFoHBKJiqFzs ENyJ1+8xq11Z/vMGVrjE668sFxnNYzyWpM+A1tfrdf/xrJUtKFT17LGNgrZ4/Je6SNwI Rez9hfnCbk/0yKD3sLsuY1HUFeCPiJIgZEtaWib4+4iFfcGy7Or8JBKl6gdwWtXUjUFC GyaBtDLuCzHclTgcj6gCHAEymjQJ4KAKWBEQnG60p7bGwt68Q5pOwvZKxX8HSUgDMIO9 HTZOc0bhqKkJhYOHotT8LmDnI2voyfn67UQvHQPM15CJ41aZLzs4D8H9yxc9ZEYDlFEd /Frw== X-Gm-Message-State: ANoB5plv2nei1JTjp52HTFgXZ3CeWLmW/o/65ykqf3xFKL5n2e97RLVS nXU4Vp4iwCtRXaCmAMRa+1AlrBdZh11lbA== X-Google-Smtp-Source: AA0mqf5RtmC4SVdyOxL7UJ+lPNbAvIxVBnVYZ5yvegJySAd+TTMaVLm+yOWD7L+39PITwJrZLo3yag== X-Received: by 2002:a17:906:49c2:b0:79f:e0b3:3b9b with SMTP id w2-20020a17090649c200b0079fe0b33b9bmr18729246ejv.378.1668632006474; Wed, 16 Nov 2022 12:53:26 -0800 (PST) Received: from blmsp.fritz.box ([2001:4090:a244:804b:353b:565:addf:3aa7]) by smtp.gmail.com with ESMTPSA id kv17-20020a17090778d100b007aece68483csm6782828ejc.193.2022.11.16.12.53.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 16 Nov 2022 12:53:26 -0800 (PST) From: Markus Schneider-Pargmann To: Chandrasekar Ramakrishnan , Marc Kleine-Budde , Wolfgang Grandegger Cc: linux-can@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Markus Schneider-Pargmann Subject: [PATCH 03/15] can: m_can: Cache tx putidx and transmits in flight Date: Wed, 16 Nov 2022 21:52:56 +0100 Message-Id: <20221116205308.2996556-4-msp@baylibre.com> X-Mailer: git-send-email 2.38.1 In-Reply-To: <20221116205308.2996556-1-msp@baylibre.com> References: <20221116205308.2996556-1-msp@baylibre.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" On peripheral chips every read/write can be costly. Avoid reading easily trackable information and cache them internally. This saves multiple reads. Transmit FIFO put index is cached, this is increased for every time we enqueue a transmit request. The transmits in flight is cached as well. With each transmit request it is increased when reading the finished transmit event it is decreased. A submit limit is cached to avoid submitting too many transmits at once, either because the TX FIFO or the TXE FIFO is limited. This is currently done very conservatively as the minimum of the fifo sizes. This means we can reach FIFO full events but won't drop anything. Signed-off-by: Markus Schneider-Pargmann --- drivers/net/can/m_can/m_can.c | 21 +++++++++++++++------ drivers/net/can/m_can/m_can.h | 5 +++++ 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/drivers/net/can/m_can/m_can.c b/drivers/net/can/m_can/m_can.c index 4adf03111782..f5bba848bd56 100644 --- a/drivers/net/can/m_can/m_can.c +++ b/drivers/net/can/m_can/m_can.c @@ -1041,6 +1041,7 @@ static int m_can_echo_tx_event(struct net_device *dev) /* ack txe element */ m_can_write(cdev, M_CAN_TXEFA, FIELD_PREP(TXEFA_EFAI_MASK, fgi)); + --cdev->tx_fifo_in_flight; =20 /* update stats */ m_can_tx_update_stats(cdev, msg_mark, timestamp); @@ -1376,6 +1377,14 @@ static void m_can_start(struct net_device *dev) cdev->can.state =3D CAN_STATE_ERROR_ACTIVE; =20 m_can_enable_all_interrupts(cdev); + + if (cdev->version > 30) { + cdev->tx_fifo_putidx =3D FIELD_GET(TXFQS_TFQPI_MASK, + m_can_read(cdev, M_CAN_TXFQS)); + cdev->tx_fifo_in_flight =3D 0; + cdev->tx_fifo_submit_limit =3D min(cdev->mcfg[MRAM_TXE].num, + cdev->mcfg[MRAM_TXB].num); + } } =20 static int m_can_set_mode(struct net_device *dev, enum can_mode mode) @@ -1589,7 +1598,6 @@ static netdev_tx_t m_can_tx_handler(struct m_can_clas= sdev *cdev) struct sk_buff *skb =3D cdev->tx_skb; struct id_and_dlc fifo_header; u32 cccr, fdflags; - u32 txfqs; int err; int putidx; =20 @@ -1646,10 +1654,8 @@ static netdev_tx_t m_can_tx_handler(struct m_can_cla= ssdev *cdev) } else { /* Transmit routine for version >=3D v3.1.x */ =20 - txfqs =3D m_can_read(cdev, M_CAN_TXFQS); - /* Check if FIFO full */ - if (_m_can_tx_fifo_full(txfqs)) { + if (cdev->tx_fifo_in_flight >=3D cdev->tx_fifo_submit_limit) { /* This shouldn't happen */ netif_stop_queue(dev); netdev_warn(dev, @@ -1665,7 +1671,7 @@ static netdev_tx_t m_can_tx_handler(struct m_can_clas= sdev *cdev) } =20 /* get put index for frame */ - putidx =3D FIELD_GET(TXFQS_TFQPI_MASK, txfqs); + putidx =3D cdev->tx_fifo_putidx; =20 /* Construct DLC Field, with CAN-FD configuration. * Use the put index of the fifo as the message marker, @@ -1699,9 +1705,12 @@ static netdev_tx_t m_can_tx_handler(struct m_can_cla= ssdev *cdev) =20 /* Enable TX FIFO element to start transfer */ m_can_write(cdev, M_CAN_TXBAR, (1 << putidx)); + ++cdev->tx_fifo_in_flight; + cdev->tx_fifo_putidx =3D (++cdev->tx_fifo_putidx >=3D cdev->can.echo_skb= _max ? + 0 : cdev->tx_fifo_putidx); =20 /* stop network queue if fifo full */ - if (m_can_tx_fifo_full(cdev) || + if (cdev->tx_fifo_in_flight >=3D cdev->tx_fifo_submit_limit || m_can_next_echo_skb_occupied(dev, putidx)) netif_stop_queue(dev); else if (cdev->is_peripheral && !cdev->tx_skb && netif_queue_stopped(dev= )) diff --git a/drivers/net/can/m_can/m_can.h b/drivers/net/can/m_can/m_can.h index 4c0267f9f297..7464ce56753a 100644 --- a/drivers/net/can/m_can/m_can.h +++ b/drivers/net/can/m_can/m_can.h @@ -92,6 +92,11 @@ struct m_can_classdev { int pm_clock_support; int is_peripheral; =20 + // Store this internally to avoid fetch delays on peripheral chips + int tx_fifo_putidx; + int tx_fifo_in_flight; + int tx_fifo_submit_limit; + struct mram_cfg mcfg[MRAM_CFG_NUM]; }; =20 --=20 2.38.1 From nobody Fri Dec 19 06:19:31 2025 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 103A5C4332F for ; Wed, 16 Nov 2022 20:54:21 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238919AbiKPUyS (ORCPT ); Wed, 16 Nov 2022 15:54:18 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36356 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234379AbiKPUxr (ORCPT ); Wed, 16 Nov 2022 15:53:47 -0500 Received: from mail-ej1-x62a.google.com (mail-ej1-x62a.google.com [IPv6:2a00:1450:4864:20::62a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 13B2DF25 for ; Wed, 16 Nov 2022 12:53:28 -0800 (PST) Received: by mail-ej1-x62a.google.com with SMTP id t25so47115074ejb.8 for ; Wed, 16 Nov 2022 12:53:28 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20210112.gappssmtp.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=WAaUVMJZwNldvM6e6aFGn3ObvVWSf2L0v/SEyFHK/I4=; b=ltqQnT0EMFXwbpNbg9tdXI3avhCvHSr0oRUgU1tqw7+Unw0j+hl2GIavNu3ounoJDP nvNUC7Rd2dmnkcoByRgHQMhN2Jt4l1/KXgNv0sSJb+TiuAeuqfAnAJz5atJAXnGg99H8 UpdwG2F5AtucQXp6D8/Scz6aeCIdU8MXHn8EVGBz5ESYLLQRzTAbbP/gp6ksMxMJbCts Gs6tbhKZub13E96iZdU3qWuiP2WpqlcvYHSxlnDAJkidA4ULgmmj2hDHWbdq79H5FxsM g7iR8wYul79Lf08h1AekXk82Zcmmsk6LgHF6aSPOCqsOPbaSii3ag97VLOF4Qql2/YYp uN1A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=WAaUVMJZwNldvM6e6aFGn3ObvVWSf2L0v/SEyFHK/I4=; b=4Hj8FQgeoP6aly7cUz2CQd8ahT7sl6aqUbXIXmrHMp5JXllP6lGvqLLB1csBJ2ju91 0p9r3YaMSmJsks7KnlGz9ADiTr210vj+6TGIorj/IfC0+LdPFL1qQUuQ32hcXPFBE7Vu 7qq7CsSnlj9B96Dg3Z1XqjOdch9W9NC1UcZaz4DD4tSZdItZ6pVF11LROuPtfPPX3e2q J2rqRwCZjl9ZYUn2HNeVpw2iZRNUGiWmz8hZWwxx3DwcEnfTxqw9bogpldxiGCSV1JYR u2tUBUzinqFwsxF4EfNNf6uEcQiMI2MSpEK2r/vQxOeL3T0JuuTTNKnpjS7tfjo3VPPM 5udA== X-Gm-Message-State: ANoB5pmU/pLG/1lSqd5HQMJ/VQfjnGoJ5RI/tMxyXEuk2ViyXYep6sz/ kjwYvB/34Rn+6y7XeSVCLTBFQA== X-Google-Smtp-Source: AA0mqf7xLFzXunaORvAE8arlr2EHMF5IL/TxTAZ+Eb4AFkrbZOZnz+40iVztVdNYmE1kGgvIA1QyhQ== X-Received: by 2002:a17:906:33da:b0:78d:b046:aaae with SMTP id w26-20020a17090633da00b0078db046aaaemr18417533eja.218.1668632007251; Wed, 16 Nov 2022 12:53:27 -0800 (PST) Received: from blmsp.fritz.box ([2001:4090:a244:804b:353b:565:addf:3aa7]) by smtp.gmail.com with ESMTPSA id kv17-20020a17090778d100b007aece68483csm6782828ejc.193.2022.11.16.12.53.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 16 Nov 2022 12:53:26 -0800 (PST) From: Markus Schneider-Pargmann To: Chandrasekar Ramakrishnan , Marc Kleine-Budde , Wolfgang Grandegger Cc: linux-can@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Markus Schneider-Pargmann Subject: [PATCH 04/15] can: m_can: Use transmit event FIFO watermark level interrupt Date: Wed, 16 Nov 2022 21:52:57 +0100 Message-Id: <20221116205308.2996556-5-msp@baylibre.com> X-Mailer: git-send-email 2.38.1 In-Reply-To: <20221116205308.2996556-1-msp@baylibre.com> References: <20221116205308.2996556-1-msp@baylibre.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Currently the only mode of operation is an interrupt for every transmit event. This is inefficient for peripheral chips. Use the transmit FIFO event watermark interrupt instead if the FIFO size is more than 2. Use FIFOsize - 1 for the watermark so the interrupt is triggered early enough to not stop transmitting. Note that if the number of transmits is less than the watermark level, the transmit events will not be processed until there is any other interrupt. This will only affect statistic counters. Also there is an interrupt every time the timestamp wraps around. Signed-off-by: Markus Schneider-Pargmann --- drivers/net/can/m_can/m_can.c | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/drivers/net/can/m_can/m_can.c b/drivers/net/can/m_can/m_can.c index f5bba848bd56..4a6972c8bacd 100644 --- a/drivers/net/can/m_can/m_can.c +++ b/drivers/net/can/m_can/m_can.c @@ -254,6 +254,7 @@ enum m_can_reg { #define TXESC_TBDS_64B 0x7 =20 /* Tx Event FIFO Configuration (TXEFC) */ +#define TXEFC_EFWM_MASK GENMASK(29, 24) #define TXEFC_EFS_MASK GENMASK(21, 16) =20 /* Tx Event FIFO Status (TXEFS) */ @@ -1094,8 +1095,8 @@ static irqreturn_t m_can_isr(int irq, void *dev_id) netif_wake_queue(dev); } } else { - if (ir & IR_TEFN) { - /* New TX FIFO Element arrived */ + if (ir & (IR_TEFN | IR_TEFW)) { + /* New TX FIFO Element arrived or watermark reached */ if (m_can_echo_tx_event(dev) !=3D 0) goto out_fail; if (!cdev->tx_skb && netif_queue_stopped(dev)) @@ -1242,6 +1243,7 @@ static void m_can_chip_config(struct net_device *dev) { struct m_can_classdev *cdev =3D netdev_priv(dev); u32 cccr, test; + u32 interrupts =3D IR_ALL_INT; =20 m_can_config_endisable(cdev, true); =20 @@ -1276,11 +1278,20 @@ static void m_can_chip_config(struct net_device *de= v) FIELD_PREP(TXEFC_EFS_MASK, 1) | cdev->mcfg[MRAM_TXE].off); } else { + u32 txe_watermark; + + txe_watermark =3D cdev->mcfg[MRAM_TXE].num - 1; /* Full TX Event FIFO is used */ m_can_write(cdev, M_CAN_TXEFC, + FIELD_PREP(TXEFC_EFWM_MASK, + txe_watermark) | FIELD_PREP(TXEFC_EFS_MASK, cdev->mcfg[MRAM_TXE].num) | cdev->mcfg[MRAM_TXE].off); + + /* Watermark interrupt mode */ + if (txe_watermark) + interrupts &=3D ~IR_TEFN; } =20 /* rx fifo configuration, blocking mode, fifo size 1 */ @@ -1338,15 +1349,13 @@ static void m_can_chip_config(struct net_device *de= v) =20 /* Enable interrupts */ m_can_write(cdev, M_CAN_IR, IR_ALL_INT); - if (!(cdev->can.ctrlmode & CAN_CTRLMODE_BERR_REPORTING)) + if (!(cdev->can.ctrlmode & CAN_CTRLMODE_BERR_REPORTING)) { if (cdev->version =3D=3D 30) - m_can_write(cdev, M_CAN_IE, IR_ALL_INT & - ~(IR_ERR_LEC_30X)); + interrupts &=3D ~(IR_ERR_LEC_30X); else - m_can_write(cdev, M_CAN_IE, IR_ALL_INT & - ~(IR_ERR_LEC_31X)); - else - m_can_write(cdev, M_CAN_IE, IR_ALL_INT); + interrupts &=3D ~(IR_ERR_LEC_31X); + } + m_can_write(cdev, M_CAN_IE, interrupts); =20 /* route all interrupts to INT0 */ m_can_write(cdev, M_CAN_ILS, ILS_ALL_INT0); --=20 2.38.1 From nobody Fri Dec 19 06:19:31 2025 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id B96DFC4332F for ; Wed, 16 Nov 2022 20:54:33 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238948AbiKPUyb (ORCPT ); Wed, 16 Nov 2022 15:54:31 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36434 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234611AbiKPUxt (ORCPT ); Wed, 16 Nov 2022 15:53:49 -0500 Received: from mail-ed1-x52b.google.com (mail-ed1-x52b.google.com [IPv6:2a00:1450:4864:20::52b]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2634C100A for ; Wed, 16 Nov 2022 12:53:29 -0800 (PST) Received: by mail-ed1-x52b.google.com with SMTP id l11so28489119edb.4 for ; Wed, 16 Nov 2022 12:53:29 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20210112.gappssmtp.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=BQXrupsqnXF1GGI8XYdR6EHbywjzNEqXAWKw2mVWyKY=; b=q6Ppqc7SSiseRXuaUY5yOxkTlGSSXo+V1jekORDzSlvpc7FVSJiS4J/298QhA6gdjz vllNwMANVlC7mUEyI6DwHdG1EIQcbLUHu8+sCxeBC88/elFeyA3RCS5myrLVCzYGEHZH Tm51noOoIWVfOpl6H2VJVvINlzEJym4Ylb6cGFyjNQTWH0LG/UZ1ekr0gvJSEBocVGh9 HVA54xdOtt3L38zbcxMcKE5GmXopQXvkuNnNbmo5qezOs9EL8tfBMo0rAZZTlPDMp8ki aajesdEQKHBEdXLWnFidRTIhS4+QWm/ROAS/g9dp9zJSKjRuJqBCOOXEdTW+08lGpVy4 gA7A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=BQXrupsqnXF1GGI8XYdR6EHbywjzNEqXAWKw2mVWyKY=; b=oxyT+F2UAHyaVRt8gJvQZ/dNRlvejxFcALVbkH2k1db5bz1+mZOrGGVwmOG0yUFkhe lX8aX7D5Q2JXYPVDKSHP6Eu9ysC5u8lZS8nxp73+i3r/L9UQ/HyPBtIMGFs32Av9cTHl Xkd6n50YgGZwSdvQA0DXEmw4uXY2kSCyFOGCUDZ0XAIKDJbQWetfiLVzi6jDDrGCcN+b wMwUxogcE6N2fOW70hucbGBLdV5/+edHwIz0Y/r0uJE3jxkSSLYAizG+eyehwqjy3Cc/ xGZnFJzrDOM0eIjQqbn42ubkVr5rZVcP36FItG5P66mqPvIuyc+okMWzwffCvYMjsrdo nbow== X-Gm-Message-State: ANoB5pnQWK6hSgkvNqCYz9gAnQCpBb6ToPUtmjDjOG4hWTKQs3TyTJIb ScDLuyQMnIzoUQgnOtj9cLOmjQ== X-Google-Smtp-Source: AA0mqf6onr0UJGwx/YN3BsxIeBRS/DJyIIPckZ+9rcobZ6j1RQ51NtbUtHMVONk4UJxXyJVSzFjlow== X-Received: by 2002:a05:6402:2906:b0:461:c7bd:7da3 with SMTP id ee6-20020a056402290600b00461c7bd7da3mr21102534edb.218.1668632008075; Wed, 16 Nov 2022 12:53:28 -0800 (PST) Received: from blmsp.fritz.box ([2001:4090:a244:804b:353b:565:addf:3aa7]) by smtp.gmail.com with ESMTPSA id kv17-20020a17090778d100b007aece68483csm6782828ejc.193.2022.11.16.12.53.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 16 Nov 2022 12:53:27 -0800 (PST) From: Markus Schneider-Pargmann To: Chandrasekar Ramakrishnan , Marc Kleine-Budde , Wolfgang Grandegger Cc: linux-can@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Markus Schneider-Pargmann Subject: [PATCH 05/15] can: m_can: Disable unused interrupts Date: Wed, 16 Nov 2022 21:52:58 +0100 Message-Id: <20221116205308.2996556-6-msp@baylibre.com> X-Mailer: git-send-email 2.38.1 In-Reply-To: <20221116205308.2996556-1-msp@baylibre.com> References: <20221116205308.2996556-1-msp@baylibre.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" There are a number of interrupts that are not used by the driver at the moment. Disable all of these. Signed-off-by: Markus Schneider-Pargmann --- drivers/net/can/m_can/m_can.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/drivers/net/can/m_can/m_can.c b/drivers/net/can/m_can/m_can.c index 4a6972c8bacd..5c00c6162058 100644 --- a/drivers/net/can/m_can/m_can.c +++ b/drivers/net/can/m_can/m_can.c @@ -1245,6 +1245,11 @@ static void m_can_chip_config(struct net_device *dev) u32 cccr, test; u32 interrupts =3D IR_ALL_INT; =20 + /* Disable unused interrupts */ + interrupts &=3D ~(IR_ARA | IR_ELO | IR_DRX | IR_TEFF | IR_TFE | IR_TCF | + IR_HPM | IR_RF1F | IR_RF1W | IR_RF1N | IR_RF0F | + IR_RF0W); + m_can_config_endisable(cdev, true); =20 /* RX Buffer/FIFO Element Size 64 bytes data field */ --=20 2.38.1 From nobody Fri Dec 19 06:19:31 2025 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id CC662C4332F for ; Wed, 16 Nov 2022 20:54:37 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238967AbiKPUyg (ORCPT ); Wed, 16 Nov 2022 15:54:36 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36436 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234622AbiKPUxu (ORCPT ); Wed, 16 Nov 2022 15:53:50 -0500 Received: from mail-ej1-x631.google.com (mail-ej1-x631.google.com [IPv6:2a00:1450:4864:20::631]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id DCDE1115C for ; Wed, 16 Nov 2022 12:53:30 -0800 (PST) Received: by mail-ej1-x631.google.com with SMTP id n12so47099760eja.11 for ; Wed, 16 Nov 2022 12:53:30 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20210112.gappssmtp.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=bbjKmVvFBDrESxHm1md/sljGuNuz1laUujygzg6feGk=; b=B/KjXbxQuT9Gao+aqZROklxkKnU1p+JXxNuxzuhCtYHY1qTn69DbzDH9lQBT/eNtGu 4cvQiebMBzu2VeLwimrApbHF9QayhwvoyCWlOCRBn8/pI5cMT9/jVYr9FdPjS78n3BFG L1pif1BFc5E4V2kPh8B84h3XUMsGCRsYm5dOaNMhyLQo4J0WKRh/DlSE7T/JBJrD1n0z vvHzwckjHAiqraXNKoeG3vhOgwbAclMQU49UtaQb6AJAR6UYGVjv7SWDu6CwlttxVwQi VRcCrCalM2c6S0NuQeiqn9hJGg01DtEbjpSdHH1RqkJRZOnR6GXu/3esQC8fI16aIqDe Z6pg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=bbjKmVvFBDrESxHm1md/sljGuNuz1laUujygzg6feGk=; b=hTJMufPkGexfBONhLSl0r2ue0fwo1x2lo/43MXd/JdG2mSRDdZJ3JBVWKGQZFNMiP/ yIrBH659enRMb3tuBMbhA+WGGtTjiijcYuDzX39nhMLmyVohnkUIf/eLFJ0vygEhIj0A 4OMglAkA/XsbwQ4itwmfufNOvR73f2FM5ZgEq2WbHQChwOdIpKXyKrRPAuW46OUsx8rn wWFShQdHMvdqQST7E69bMlgbr8rTDyECGMgymSOeiX4IYaGd580ANjSWFukCT6n0928h P/Gf4jbBax05Fb2WNe1GqFJUzXEmOusXjBxXpKm8UmLCyWKXGFTZvFTpAs1CdsPI+V+y S+GA== X-Gm-Message-State: ANoB5pnCqUrSqwrYkeGcOThoM0v0Z20FRSJatN3IRi+IcoQpapLA++yJ O338rHtiLR85JdSkvPQtPCciIA== X-Google-Smtp-Source: AA0mqf5Nm+7E+pI2+mVyMKOZ+hhoiLffdy2qs4ZnZpOiqCStipKLy7DN1WH8OXWV5oL0hqD/qSZTuA== X-Received: by 2002:a17:906:141b:b0:78d:5176:c4d2 with SMTP id p27-20020a170906141b00b0078d5176c4d2mr18738240ejc.532.1668632008850; Wed, 16 Nov 2022 12:53:28 -0800 (PST) Received: from blmsp.fritz.box ([2001:4090:a244:804b:353b:565:addf:3aa7]) by smtp.gmail.com with ESMTPSA id kv17-20020a17090778d100b007aece68483csm6782828ejc.193.2022.11.16.12.53.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 16 Nov 2022 12:53:28 -0800 (PST) From: Markus Schneider-Pargmann To: Chandrasekar Ramakrishnan , Marc Kleine-Budde , Wolfgang Grandegger Cc: linux-can@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Markus Schneider-Pargmann Subject: [PATCH 06/15] can: m_can: Avoid reading irqstatus twice Date: Wed, 16 Nov 2022 21:52:59 +0100 Message-Id: <20221116205308.2996556-7-msp@baylibre.com> X-Mailer: git-send-email 2.38.1 In-Reply-To: <20221116205308.2996556-1-msp@baylibre.com> References: <20221116205308.2996556-1-msp@baylibre.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" For peripheral devices the m_can_rx_handler is called directly after setting cdev->irqstatus. This means we don't have to read the irqstatus again in m_can_rx_handler. Avoid this by adding a parameter that is false for direct calls. Signed-off-by: Markus Schneider-Pargmann --- drivers/net/can/m_can/m_can.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/drivers/net/can/m_can/m_can.c b/drivers/net/can/m_can/m_can.c index 5c00c6162058..0efa6dee0617 100644 --- a/drivers/net/can/m_can/m_can.c +++ b/drivers/net/can/m_can/m_can.c @@ -896,14 +896,13 @@ static int m_can_handle_bus_errors(struct net_device = *dev, u32 irqstatus, return work_done; } =20 -static int m_can_rx_handler(struct net_device *dev, int quota) +static int m_can_rx_handler(struct net_device *dev, int quota, u32 irqstat= us) { struct m_can_classdev *cdev =3D netdev_priv(dev); int rx_work_or_err; int work_done =3D 0; - u32 irqstatus, psr; + u32 psr; =20 - irqstatus =3D cdev->irqstatus | m_can_read(cdev, M_CAN_IR); if (!irqstatus) goto end; =20 @@ -947,12 +946,12 @@ static int m_can_rx_handler(struct net_device *dev, i= nt quota) return work_done; } =20 -static int m_can_rx_peripheral(struct net_device *dev) +static int m_can_rx_peripheral(struct net_device *dev, u32 irqstatus) { struct m_can_classdev *cdev =3D netdev_priv(dev); int work_done; =20 - work_done =3D m_can_rx_handler(dev, NAPI_POLL_WEIGHT); + work_done =3D m_can_rx_handler(dev, NAPI_POLL_WEIGHT, irqstatus); =20 /* Don't re-enable interrupts if the driver had a fatal error * (e.g., FIFO read failure). @@ -968,8 +967,11 @@ static int m_can_poll(struct napi_struct *napi, int qu= ota) struct net_device *dev =3D napi->dev; struct m_can_classdev *cdev =3D netdev_priv(dev); int work_done; + u32 irqstatus; + + irqstatus =3D cdev->irqstatus | m_can_read(cdev, M_CAN_IR); =20 - work_done =3D m_can_rx_handler(dev, quota); + work_done =3D m_can_rx_handler(dev, quota, irqstatus); =20 /* Don't re-enable interrupts if the driver had a fatal error * (e.g., FIFO read failure). @@ -1080,7 +1082,7 @@ static irqreturn_t m_can_isr(int irq, void *dev_id) m_can_disable_all_interrupts(cdev); if (!cdev->is_peripheral) napi_schedule(&cdev->napi); - else if (m_can_rx_peripheral(dev) < 0) + else if (m_can_rx_peripheral(dev, ir) < 0) goto out_fail; } =20 --=20 2.38.1 From nobody Fri Dec 19 06:19:31 2025 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 11CACC433FE for ; Wed, 16 Nov 2022 20:54:41 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238989AbiKPUyj (ORCPT ); Wed, 16 Nov 2022 15:54:39 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36452 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234639AbiKPUxu (ORCPT ); Wed, 16 Nov 2022 15:53:50 -0500 Received: from mail-ej1-x632.google.com (mail-ej1-x632.google.com [IPv6:2a00:1450:4864:20::632]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3DEBC26F6 for ; Wed, 16 Nov 2022 12:53:31 -0800 (PST) Received: by mail-ej1-x632.google.com with SMTP id bj12so47076715ejb.13 for ; Wed, 16 Nov 2022 12:53:30 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20210112.gappssmtp.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=qMp0tWmayQFDCuQozvTUDpU6JW1zD9b9gmw4AkF62cg=; b=DfeLSauoK/xGMIYKQS8dUtNF5Y18jC4Dz7wPaMBhY5Wz7+f37x4ilwFFQVnDpFTXSy RKqXurBocAzbyzMqPdiS6IFjDxXzj+E3RZZQepcFM0ml8inFXsUQmDvg0Hy2EsCOITDH JHZYC75OVUxxK1+3P2am1KYY0AVX41vaxmwed/okFMyJDFu0zoFRlpFGwsO6hKrIPbwS inW4U/bJrq78cR6BOJhNepOxNwuQ/Qzlt8apxkk1uMwSP5visMZepMGF+j0smMOFVL/n NTjVi45THe7cCOGS1X7kkLDZg9X3Ivh5BUibveo9ryklA21H8QR8Gt0Or4XILbIIvTJT 23jg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=qMp0tWmayQFDCuQozvTUDpU6JW1zD9b9gmw4AkF62cg=; b=fVLJ7ZIwwaDGE9XNG7ZgN/XDhpegPhS+zLbKU63FoXD2VS5sp6qcEWtVYxupU26UtD wH482xTjL8xHp2g5B3MXipLOoAFuytaYa/m/UEqRtGB8J+kqkIq5BxzTfK0Wi6PxWHp/ YClVCRUvoTRewjFiBfTJL7Ldxx9ulEBKPMyzoDpzKmtubWARjqlU9TVA/JdxSDKLbYuf F7lsAmEItCC7pBFztYhQdPdTn1n9qP/XLOhZ7MfcnTtA05WOk5NzSwU86Pupd1U7ikcD ZwdNzcrrS5mlQQ//cDbTVlcgDFQsqVOCRsq2eizaaMW1hAtRB55nNE7fojm7Vm3FTbvW 2MHg== X-Gm-Message-State: ANoB5plQ9K49PRId9PUeIBcE0oOhpx3v70tmNI/wetRONfeC72slgvjL 7P0K2E+zCjJIB01letWXMLWfsQ== X-Google-Smtp-Source: AA0mqf5UtYQOtXnOHStEcoyycrgqiCBoL8jfnYcxOSZJ0kartEU1g5NyzH2ae4zG0NlZQX+qHgcbWQ== X-Received: by 2002:a17:907:cc9d:b0:7ac:ef6b:1ef4 with SMTP id up29-20020a170907cc9d00b007acef6b1ef4mr20163923ejc.104.1668632009629; Wed, 16 Nov 2022 12:53:29 -0800 (PST) Received: from blmsp.fritz.box ([2001:4090:a244:804b:353b:565:addf:3aa7]) by smtp.gmail.com with ESMTPSA id kv17-20020a17090778d100b007aece68483csm6782828ejc.193.2022.11.16.12.53.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 16 Nov 2022 12:53:29 -0800 (PST) From: Markus Schneider-Pargmann To: Chandrasekar Ramakrishnan , Marc Kleine-Budde , Wolfgang Grandegger Cc: linux-can@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Markus Schneider-Pargmann Subject: [PATCH 07/15] can: m_can: Read register PSR only on error Date: Wed, 16 Nov 2022 21:53:00 +0100 Message-Id: <20221116205308.2996556-8-msp@baylibre.com> X-Mailer: git-send-email 2.38.1 In-Reply-To: <20221116205308.2996556-1-msp@baylibre.com> References: <20221116205308.2996556-1-msp@baylibre.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Only read register PSR if there is an error indicated in irqstatus. Signed-off-by: Markus Schneider-Pargmann --- drivers/net/can/m_can/m_can.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/drivers/net/can/m_can/m_can.c b/drivers/net/can/m_can/m_can.c index 0efa6dee0617..1d15beaea920 100644 --- a/drivers/net/can/m_can/m_can.c +++ b/drivers/net/can/m_can/m_can.c @@ -901,7 +901,6 @@ static int m_can_rx_handler(struct net_device *dev, int= quota, u32 irqstatus) struct m_can_classdev *cdev =3D netdev_priv(dev); int rx_work_or_err; int work_done =3D 0; - u32 psr; =20 if (!irqstatus) goto end; @@ -927,13 +926,13 @@ static int m_can_rx_handler(struct net_device *dev, i= nt quota, u32 irqstatus) } } =20 - psr =3D m_can_read(cdev, M_CAN_PSR); - if (irqstatus & IR_ERR_STATE) - work_done +=3D m_can_handle_state_errors(dev, psr); + work_done +=3D m_can_handle_state_errors(dev, + m_can_read(cdev, M_CAN_PSR)); =20 if (irqstatus & IR_ERR_BUS_30X) - work_done +=3D m_can_handle_bus_errors(dev, irqstatus, psr); + work_done +=3D m_can_handle_bus_errors(dev, irqstatus, + m_can_read(cdev, M_CAN_PSR)); =20 if (irqstatus & IR_RF0N) { rx_work_or_err =3D m_can_do_rx_poll(dev, (quota - work_done)); --=20 2.38.1 From nobody Fri Dec 19 06:19:31 2025 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 11445C43217 for ; Wed, 16 Nov 2022 20:54:47 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233932AbiKPUyn (ORCPT ); Wed, 16 Nov 2022 15:54:43 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36502 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237515AbiKPUxw (ORCPT ); Wed, 16 Nov 2022 15:53:52 -0500 Received: from mail-ej1-x62b.google.com (mail-ej1-x62b.google.com [IPv6:2a00:1450:4864:20::62b]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8B0856272 for ; Wed, 16 Nov 2022 12:53:31 -0800 (PST) Received: by mail-ej1-x62b.google.com with SMTP id n21so6410378ejb.9 for ; Wed, 16 Nov 2022 12:53:31 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20210112.gappssmtp.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=b1NW4yffam7J6Z66UeY98X/Lxzuu+uqNj1++GX3J7z0=; b=Fn+pjOi7VxZlwBiOMmabPiR+6IHaFVnPkFKbMENKhdrwfdApvpUQBK2DrzSm8UZ3l+ LBgLnkruBLVK5H9Tz3LtB/DxxziqVAKGYdy+2KAVIJ3tPxXMTLxirF7JOIUcPu3bk1s5 Ah2GESoKw9t04qJclb9ZKouemoIya66kpstWZwAR76Ni2A6BXsyOjIau71qtKm2twGCH OZewz/IsWr1KR9xbm3owiIWYvu9j4qJ6AWvx6bzdTD0OK/RnbkqCeFRwpg88Birnm2FI IBOaNk32rlVnzjgJDp+VA4edjSpYwHv/Iw52HlvRGfnLV14A4FTa8v7sbR1UtkAAbsVg JDqw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=b1NW4yffam7J6Z66UeY98X/Lxzuu+uqNj1++GX3J7z0=; b=4iQk7Pht3Mz38WKvyoPfJKAmO8CndG4atdxm/AzKNKdXmEw9JDomUUFyoAMqtKmiNO kAZERBT8ftsoMZ1CXBG32533AKnu0rfc4ug3C6+TJfUkye+cIirneQjffMsuyVjyq2BQ 9JUX0ySMGN9U4Peq9LrzWFVPQj2sEnEtvRDOgb/8QkC8IiaPrO3DPoVfggJuuMrRiAt3 6Ws8eYz7xEA5Yi6mpGn2jlF/TVH9GCaFb2uDO6Drvzh/OFvWrXBCqJhUku+TW/tix0Ik RIXd7fd3NPVAAjiMBnsaYm0w4hT62dXfeuq7hzl5/7mxq7xXqvCi7/07iTvhSnqw088n fp5Q== X-Gm-Message-State: ANoB5pnvmeM0zshXq4byabEsn5VsP/uulPvDm7O333cMPEVtnyH1ghYS FB6mF/+vO1/qeDzYNLRAjLMZlA== X-Google-Smtp-Source: AA0mqf5INbSS61YudtGvV7KRJAO/74+RHCAHzS3vYu3sIf8dRl8BpsQJ4HaUspFyOyKl/Ph09ENVdw== X-Received: by 2002:a17:906:489a:b0:7b2:73d0:4b9c with SMTP id v26-20020a170906489a00b007b273d04b9cmr6681647ejq.746.1668632010464; Wed, 16 Nov 2022 12:53:30 -0800 (PST) Received: from blmsp.fritz.box ([2001:4090:a244:804b:353b:565:addf:3aa7]) by smtp.gmail.com with ESMTPSA id kv17-20020a17090778d100b007aece68483csm6782828ejc.193.2022.11.16.12.53.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 16 Nov 2022 12:53:30 -0800 (PST) From: Markus Schneider-Pargmann To: Chandrasekar Ramakrishnan , Marc Kleine-Budde , Wolfgang Grandegger Cc: linux-can@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Markus Schneider-Pargmann Subject: [PATCH 08/15] can: m_can: Count TXE FIFO getidx in the driver Date: Wed, 16 Nov 2022 21:53:01 +0100 Message-Id: <20221116205308.2996556-9-msp@baylibre.com> X-Mailer: git-send-email 2.38.1 In-Reply-To: <20221116205308.2996556-1-msp@baylibre.com> References: <20221116205308.2996556-1-msp@baylibre.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" The getindex simply increases by one for every iteration. There is no need to get the current getidx every time from a register. Instead we can just count and wrap if necessary. Signed-off-by: Markus Schneider-Pargmann --- drivers/net/can/m_can/m_can.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/drivers/net/can/m_can/m_can.c b/drivers/net/can/m_can/m_can.c index 1d15beaea920..27095a7254dd 100644 --- a/drivers/net/can/m_can/m_can.c +++ b/drivers/net/can/m_can/m_can.c @@ -1021,15 +1021,13 @@ static int m_can_echo_tx_event(struct net_device *d= ev) =20 /* Get Tx Event fifo element count */ txe_count =3D FIELD_GET(TXEFS_EFFL_MASK, m_can_txefs); + fgi =3D FIELD_GET(TXEFS_EFGI_MASK, m_can_txefs); =20 /* Get and process all sent elements */ for (i =3D 0; i < txe_count; i++) { u32 txe, timestamp =3D 0; int err; =20 - /* retrieve get index */ - fgi =3D FIELD_GET(TXEFS_EFGI_MASK, m_can_read(cdev, M_CAN_TXEFS)); - /* get message marker, timestamp */ err =3D m_can_txe_fifo_read(cdev, fgi, 4, &txe); if (err) { @@ -1043,6 +1041,7 @@ static int m_can_echo_tx_event(struct net_device *dev) /* ack txe element */ m_can_write(cdev, M_CAN_TXEFA, FIELD_PREP(TXEFA_EFAI_MASK, fgi)); + fgi =3D (++fgi >=3D cdev->mcfg[MRAM_TXE].num ? 0 : fgi); --cdev->tx_fifo_in_flight; =20 /* update stats */ --=20 2.38.1 From nobody Fri Dec 19 06:19:31 2025 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id F0C67C43217 for ; Wed, 16 Nov 2022 20:54:52 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234471AbiKPUyv (ORCPT ); Wed, 16 Nov 2022 15:54:51 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35888 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238294AbiKPUx4 (ORCPT ); Wed, 16 Nov 2022 15:53:56 -0500 Received: from mail-ej1-x632.google.com (mail-ej1-x632.google.com [IPv6:2a00:1450:4864:20::632]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D53C26418 for ; Wed, 16 Nov 2022 12:53:32 -0800 (PST) Received: by mail-ej1-x632.google.com with SMTP id ft34so47068991ejc.12 for ; Wed, 16 Nov 2022 12:53:32 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20210112.gappssmtp.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=76EqNlpDreQF4PZmggfgrCfKC4hAP4lphiWDRZe7nMM=; b=uqThAUy/RKwtT1RRbAu8P5FOVTNwBorxorshelO+Gn57d4TcNitGks2jHG8VjQaJT5 TEavYIJSpNPGFpNDMMxKMRiDVcrerBSpI03qY1cHLpu4Pp4zoLW6+xH9aWJwIFdnkCAX 0ETvxF2Apny/2uqVTtLgkjN2UIHwXAqRhbGiOYQJD4Eb3rAUT61h0518k/ei4UTZiryA i2YbNLFvgObJVuHDg/QVg4DSJn1XczUQoYspgCNo6+FTr1x0glc82I6g7nZo6e/KVk/A 1qoiG9heuHqcuR4buQqWP6K0bkU2ZNU7Tn+yhL1XqlnQWFTTdgdp0FlqnVi6oiegV22Y tuJw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=76EqNlpDreQF4PZmggfgrCfKC4hAP4lphiWDRZe7nMM=; b=xFw7cVZ3OqW29N2pAWLMATtjcG+rjne+MxjX53leGhn2xXOQrIfJhJpRPVIVy24ISa x3U4Z4M67kn2GtBQowFza5XwXwqlE3qD0fXC+LF/HVnY+KhdcC4El5a5vsqTYfHDhTn1 foW4ADjdtO+wakwIn9woFnWwle8dc8euAAVfDLLH5CKxeJS//EEXLlntewZNg9HsDTWF HCJYIb9WDuK/S30XL+/w3wojc/jHJnSC0ZfIw6kLN8T97b2b7D4Uh/qTLQDYeB7elyC3 9Ex1ArYVltDI39x9FrRxzGKCq7yDktl1/CDjbT7thLv9dv6VExaFV043O7ddUEtsSAhn gUuw== X-Gm-Message-State: ANoB5pl/9QLVk5ZfUw6ykDVP6PtjR0xcBhlbPzJOVQhFz/zHKCwoLAXS yW4U6NMulyimLsIYWQLlGFGbXQ== X-Google-Smtp-Source: AA0mqf7MN/Xm4agt2Z305vGmVl+Fecn281QR6SF6xs4XZMbAZV+jPObReGYvCRgliq0mgWfkvUrvPQ== X-Received: by 2002:a17:906:2696:b0:7ae:4ed2:84f4 with SMTP id t22-20020a170906269600b007ae4ed284f4mr18752930ejc.429.1668632011225; Wed, 16 Nov 2022 12:53:31 -0800 (PST) Received: from blmsp.fritz.box ([2001:4090:a244:804b:353b:565:addf:3aa7]) by smtp.gmail.com with ESMTPSA id kv17-20020a17090778d100b007aece68483csm6782828ejc.193.2022.11.16.12.53.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 16 Nov 2022 12:53:30 -0800 (PST) From: Markus Schneider-Pargmann To: Chandrasekar Ramakrishnan , Marc Kleine-Budde , Wolfgang Grandegger Cc: linux-can@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Markus Schneider-Pargmann Subject: [PATCH 09/15] can: m_can: Count read getindex in the driver Date: Wed, 16 Nov 2022 21:53:02 +0100 Message-Id: <20221116205308.2996556-10-msp@baylibre.com> X-Mailer: git-send-email 2.38.1 In-Reply-To: <20221116205308.2996556-1-msp@baylibre.com> References: <20221116205308.2996556-1-msp@baylibre.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" The getindex gets increased by one every time. We can calculate the correct getindex in the driver and avoid the additional reads of rxfs. Signed-off-by: Markus Schneider-Pargmann --- drivers/net/can/m_can/m_can.c | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/drivers/net/can/m_can/m_can.c b/drivers/net/can/m_can/m_can.c index 27095a7254dd..02fd7fe4e9f8 100644 --- a/drivers/net/can/m_can/m_can.c +++ b/drivers/net/can/m_can/m_can.c @@ -477,19 +477,16 @@ static void m_can_receive_skb(struct m_can_classdev *= cdev, } } =20 -static int m_can_read_fifo(struct net_device *dev, u32 rxfs) +static int m_can_read_fifo(struct net_device *dev, u32 fgi) { struct net_device_stats *stats =3D &dev->stats; struct m_can_classdev *cdev =3D netdev_priv(dev); struct canfd_frame *cf; struct sk_buff *skb; struct id_and_dlc fifo_header; - u32 fgi; u32 timestamp =3D 0; int err; =20 - /* calculate the fifo get index for where to read data */ - fgi =3D FIELD_GET(RXFS_FGI_MASK, rxfs); err =3D m_can_fifo_read(cdev, fgi, M_CAN_FIFO_ID, &fifo_header, 2); if (err) goto out_fail; @@ -554,6 +551,9 @@ static int m_can_do_rx_poll(struct net_device *dev, int= quota) struct m_can_classdev *cdev =3D netdev_priv(dev); u32 pkts =3D 0; u32 rxfs; + u32 rx_count; + u32 fgi; + int i; int err; =20 rxfs =3D m_can_read(cdev, M_CAN_RXF0S); @@ -562,14 +562,17 @@ static int m_can_do_rx_poll(struct net_device *dev, i= nt quota) return 0; } =20 - while ((rxfs & RXFS_FFL_MASK) && (quota > 0)) { - err =3D m_can_read_fifo(dev, rxfs); + rx_count =3D FIELD_GET(RXFS_FFL_MASK, rxfs); + fgi =3D FIELD_GET(RXFS_FGI_MASK, rxfs); + + for (i =3D 0; i < rx_count && quota > 0; ++i) { + err =3D m_can_read_fifo(dev, fgi); if (err) return err; =20 quota--; pkts++; - rxfs =3D m_can_read(cdev, M_CAN_RXF0S); + fgi =3D (++fgi >=3D cdev->mcfg[MRAM_RXF0].num ? 0 : fgi); } =20 return pkts; --=20 2.38.1 From nobody Fri Dec 19 06:19:31 2025 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id CA5F3C4332F for ; Wed, 16 Nov 2022 20:54:55 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S239060AbiKPUyy (ORCPT ); Wed, 16 Nov 2022 15:54:54 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35914 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238422AbiKPUx4 (ORCPT ); Wed, 16 Nov 2022 15:53:56 -0500 Received: from mail-ej1-x631.google.com (mail-ej1-x631.google.com [IPv6:2a00:1450:4864:20::631]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id EC12A6478 for ; Wed, 16 Nov 2022 12:53:33 -0800 (PST) Received: by mail-ej1-x631.google.com with SMTP id n21so6410565ejb.9 for ; Wed, 16 Nov 2022 12:53:33 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20210112.gappssmtp.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=35Qy5T8b8nZe0+fVvuZXlmUhh51OUfHfDykDW4uao6I=; b=aNitAnr3LnNKd7Q5VxgwDVTqryOo8InS88hIhNw4Tb7wa4GDJxed7sbIf24+anq4l9 q75Js/1GYwp0hJcvNZkTAhj8RGqxK412V4pEGKnVo/d+10Y3oqGoHdJUIIvtzJJQrHfr rBL2myiZiFe/ZOusjxXo/+EAVDyAIr+Mh2eiH8yCdDy88lcjpKV87JePE/ondWp2B0ev uIUFFxsd/up3e5nTvGwZeRIoR59QxqDO7kVLH1BcORpYporP5mYi/uxrVsvBGNUb05IV JYlrYmwHf6bBuWaI/zaH52ZZX0SxFLQYkg4ghpknehpiYMJ7rYplySv0WsZpTswEt2FG ilIw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=35Qy5T8b8nZe0+fVvuZXlmUhh51OUfHfDykDW4uao6I=; b=YZNagk9wnau6rsURTmMlmJnaEkRWJoYZhZRwrFJjBVBuGkO/wvqbZJRhLAD0ZIw0SU 6w72r/SBgbyHf7U9EW1Hl8pqX6yO7JHv8gE6HigpvvfeeA1h4twcRigo6CjZs5ucuf/s jwO63CA6D3xhPaRP8CrbooOVB73g0byy3jx6es1Tb0+mgWRYgxUGUhhgzHqrLN51G2Y5 gqOxkbOb8ZnzrrDsPsFL2xLiq8dhxjYqu3popCJuTzSVvn15eJf0PjsOvn01AcLCNYvU jhg7s7pwFTWgSSuvytLq4ePGr1dFTszPUkg1xOz0iXbMCHV5JVNGrMy2qLvmqEEfL32t mMqQ== X-Gm-Message-State: ANoB5pmlM5wCMX31rs3FO63OyE2OOStufy2J1oSdNvdwtaXafQRTJ3Wi xGYNPEnxIVdUrql7CIzfxqxZvw== X-Google-Smtp-Source: AA0mqf7HY2USkPn+3T0jpTrYPnSr3gpyyheImn6zrscu4e9KMIjSwXBQbBlka7in7jHTRm4kWy7E2Q== X-Received: by 2002:a17:907:98b6:b0:7ad:c0ec:7ad4 with SMTP id ju22-20020a17090798b600b007adc0ec7ad4mr18535259ejc.585.1668632012051; Wed, 16 Nov 2022 12:53:32 -0800 (PST) Received: from blmsp.fritz.box ([2001:4090:a244:804b:353b:565:addf:3aa7]) by smtp.gmail.com with ESMTPSA id kv17-20020a17090778d100b007aece68483csm6782828ejc.193.2022.11.16.12.53.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 16 Nov 2022 12:53:31 -0800 (PST) From: Markus Schneider-Pargmann To: Chandrasekar Ramakrishnan , Marc Kleine-Budde , Wolfgang Grandegger Cc: linux-can@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Markus Schneider-Pargmann Subject: [PATCH 10/15] can: m_can: Batch acknowledge rx fifo Date: Wed, 16 Nov 2022 21:53:03 +0100 Message-Id: <20221116205308.2996556-11-msp@baylibre.com> X-Mailer: git-send-email 2.38.1 In-Reply-To: <20221116205308.2996556-1-msp@baylibre.com> References: <20221116205308.2996556-1-msp@baylibre.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Instead of acknowledging every item of the fifo, only acknowledge the last item read. This behavior is documented in the datasheet. The new getindex will be the acknowledged item + 1. Signed-off-by: Markus Schneider-Pargmann --- drivers/net/can/m_can/m_can.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/drivers/net/can/m_can/m_can.c b/drivers/net/can/m_can/m_can.c index 02fd7fe4e9f8..6179b9e815ed 100644 --- a/drivers/net/can/m_can/m_can.c +++ b/drivers/net/can/m_can/m_can.c @@ -530,9 +530,6 @@ static int m_can_read_fifo(struct net_device *dev, u32 = fgi) } stats->rx_packets++; =20 - /* acknowledge rx fifo 0 */ - m_can_write(cdev, M_CAN_RXF0A, fgi); - timestamp =3D FIELD_GET(RX_BUF_RXTS_MASK, fifo_header.dlc) << 16; =20 m_can_receive_skb(cdev, skb, timestamp); @@ -553,8 +550,9 @@ static int m_can_do_rx_poll(struct net_device *dev, int= quota) u32 rxfs; u32 rx_count; u32 fgi; + int ack_fgi =3D -1; int i; - int err; + int err =3D 0; =20 rxfs =3D m_can_read(cdev, M_CAN_RXF0S); if (!(rxfs & RXFS_FFL_MASK)) { @@ -568,13 +566,20 @@ static int m_can_do_rx_poll(struct net_device *dev, i= nt quota) for (i =3D 0; i < rx_count && quota > 0; ++i) { err =3D m_can_read_fifo(dev, fgi); if (err) - return err; + break; =20 quota--; pkts++; + ack_fgi =3D fgi; fgi =3D (++fgi >=3D cdev->mcfg[MRAM_RXF0].num ? 0 : fgi); } =20 + if (ack_fgi !=3D -1) + m_can_write(cdev, M_CAN_RXF0A, ack_fgi); + + if (err) + return err; + return pkts; } =20 --=20 2.38.1 From nobody Fri Dec 19 06:19:31 2025 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 1693BC433FE for ; Wed, 16 Nov 2022 20:54:59 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S239067AbiKPUy6 (ORCPT ); Wed, 16 Nov 2022 15:54:58 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35936 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233438AbiKPUx5 (ORCPT ); Wed, 16 Nov 2022 15:53:57 -0500 Received: from mail-ej1-x636.google.com (mail-ej1-x636.google.com [IPv6:2a00:1450:4864:20::636]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B60666558 for ; Wed, 16 Nov 2022 12:53:34 -0800 (PST) Received: by mail-ej1-x636.google.com with SMTP id bj12so47077093ejb.13 for ; Wed, 16 Nov 2022 12:53:34 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20210112.gappssmtp.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=63B61nbFxXevaqifM6unbv7DVTV+dONfI4xcJ7fYbEM=; b=XrxRLv0ioHvztchOOEylzwIXG5E6/NOIFrU0lDh3B+0C0zkoUMrAFpJRw5jxDREGEQ p6GpjhDPZ5pODwZZUQtgNoFhFAbLTCrl+H6achFwFFRrd/Zy5aTWNvi3Gr5fB7kk2UtA AVAQLiexAir2XBwRfZHloDmCAlDgzVrEK8mSWP+Mox+pGSLt2NJnziGicFxo06eyvGwi +nvJE09r0HP94yDjezRuisu3bCGIabGRbmxdPasO5vG2NO4bfHB6Qo/YcTBQIx+PEVJR SS3NhGa6W/yb9shUV8lZ13ZLOL8QC4CeWXtYPE1BrDK4+jsh/TVT7EjGFDmbzbuwrwFD V7yA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=63B61nbFxXevaqifM6unbv7DVTV+dONfI4xcJ7fYbEM=; b=D69MOBMV5h4EzsExUu18yZiz8Cts/ZW7XHUopUiVDCM1fOjGLAMMIofi8IhBsaldrt CcxyVzJf8Vbo4NSxMnflOoN142HShsecF8uF5P/KRSqLwEbfIUKXbCccXqe6ORzviZwm mifGl/aUpiWIapgNPfY0NgHZ1Ily+EgCd/29SBPX+rMmKXgc7c3F4IszYrX7AT+g/JTR EcMnahmGi0NGSFYaFlSow8Z4t5AOc/loTpbuC+w0AbOJS4acATK0GnTrQsE5L2VMpoY+ 6dVkTErraZarfVADDiUs8G/Pz//k4++k05nmo4lEnkR98EUyCCpijF9shpRF4bhh6Rt4 OPXA== X-Gm-Message-State: ANoB5pmkvFUFYgH+zxOvTbGSHYHoyXauXvWbFBKKW8zu6td0PtUxt3JS Ko+nouDEnty84BkqwK5sbq2lRg== X-Google-Smtp-Source: AA0mqf4VmKP/3sic4raGQLJBlVHPCDU/nX49+PnUbUwkmjRxB1AaE46QV5EDtvVgcKQkbAoKaefZsQ== X-Received: by 2002:a17:907:2b26:b0:7ae:c460:c65f with SMTP id gc38-20020a1709072b2600b007aec460c65fmr18733831ejc.226.1668632012845; Wed, 16 Nov 2022 12:53:32 -0800 (PST) Received: from blmsp.fritz.box ([2001:4090:a244:804b:353b:565:addf:3aa7]) by smtp.gmail.com with ESMTPSA id kv17-20020a17090778d100b007aece68483csm6782828ejc.193.2022.11.16.12.53.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 16 Nov 2022 12:53:32 -0800 (PST) From: Markus Schneider-Pargmann To: Chandrasekar Ramakrishnan , Marc Kleine-Budde , Wolfgang Grandegger Cc: linux-can@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Markus Schneider-Pargmann Subject: [PATCH 11/15] can: m_can: Batch acknowledge transmit events Date: Wed, 16 Nov 2022 21:53:04 +0100 Message-Id: <20221116205308.2996556-12-msp@baylibre.com> X-Mailer: git-send-email 2.38.1 In-Reply-To: <20221116205308.2996556-1-msp@baylibre.com> References: <20221116205308.2996556-1-msp@baylibre.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Transmit events from the txe fifo can be batch acknowledged by acknowledging the last read txe fifo item. This will save txe_count writes which is important for peripheral chips. Signed-off-by: Markus Schneider-Pargmann --- drivers/net/can/m_can/m_can.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/drivers/net/can/m_can/m_can.c b/drivers/net/can/m_can/m_can.c index 6179b9e815ed..347ba8e7d1b3 100644 --- a/drivers/net/can/m_can/m_can.c +++ b/drivers/net/can/m_can/m_can.c @@ -1019,7 +1019,9 @@ static int m_can_echo_tx_event(struct net_device *dev) u32 txe_count =3D 0; u32 m_can_txefs; u32 fgi =3D 0; + int ack_fgi =3D -1; int i =3D 0; + int err =3D 0; unsigned int msg_mark; =20 struct m_can_classdev *cdev =3D netdev_priv(dev); @@ -1034,21 +1036,18 @@ static int m_can_echo_tx_event(struct net_device *d= ev) /* Get and process all sent elements */ for (i =3D 0; i < txe_count; i++) { u32 txe, timestamp =3D 0; - int err; =20 /* get message marker, timestamp */ err =3D m_can_txe_fifo_read(cdev, fgi, 4, &txe); if (err) { netdev_err(dev, "TXE FIFO read returned %d\n", err); - return err; + break; } =20 msg_mark =3D FIELD_GET(TX_EVENT_MM_MASK, txe); timestamp =3D FIELD_GET(TX_EVENT_TXTS_MASK, txe) << 16; =20 - /* ack txe element */ - m_can_write(cdev, M_CAN_TXEFA, FIELD_PREP(TXEFA_EFAI_MASK, - fgi)); + ack_fgi =3D fgi; fgi =3D (++fgi >=3D cdev->mcfg[MRAM_TXE].num ? 0 : fgi); --cdev->tx_fifo_in_flight; =20 @@ -1056,7 +1055,11 @@ static int m_can_echo_tx_event(struct net_device *de= v) m_can_tx_update_stats(cdev, msg_mark, timestamp); } =20 - return 0; + if (ack_fgi !=3D -1) + m_can_write(cdev, M_CAN_TXEFA, FIELD_PREP(TXEFA_EFAI_MASK, + ack_fgi)); + + return err; } =20 static irqreturn_t m_can_isr(int irq, void *dev_id) --=20 2.38.1 From nobody Fri Dec 19 06:19:31 2025 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 74DC2C4332F for ; Wed, 16 Nov 2022 20:55:02 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S239079AbiKPUzA (ORCPT ); Wed, 16 Nov 2022 15:55:00 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35918 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238534AbiKPUx5 (ORCPT ); Wed, 16 Nov 2022 15:53:57 -0500 Received: from mail-ej1-x633.google.com (mail-ej1-x633.google.com [IPv6:2a00:1450:4864:20::633]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 26F366546 for ; Wed, 16 Nov 2022 12:53:34 -0800 (PST) Received: by mail-ej1-x633.google.com with SMTP id n20so99547ejh.0 for ; Wed, 16 Nov 2022 12:53:33 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20210112.gappssmtp.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=ah82tTOOObOFB3MDfuIM4J36KFmptfShWyxBMhuP5Xo=; b=FuFd7KEQ6d41KZBOZhhpBhnMjYXdxKD3gEK+faGWa/XfhW2EFx9CCnj4pbSYMac2Rg VIuXojA8qB/pnTAwSH/PmZxKpCmL2eAkLQyhE5BR42zG3IEDpWTJHKhUoMPbBlM0cwsa aoDXSsa8MbXs5ScTvpr0crbR+Zr5r66T3BoltNI3RObZ5w0EZWcatVi6Jt5ZsATEp/Dw jt8b+Zt2tr8/FhtYKWD6X46XX4b1PFmxtCddxq2uisW6m40miJnZawPupYuP4ofRL7OM qqYATmJca9f9feYgFHce3A/dYWupesj+8yaW4A7p+R4+b/3M0R4QMymOG5zlpIyc1L2s gTUQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=ah82tTOOObOFB3MDfuIM4J36KFmptfShWyxBMhuP5Xo=; b=jYylEn3XdlXg9e2zO4B7Dp4X2LqHlFos6Cq53QRkalDXbAH1mQrhho2WuX3R9YF9zD m/Kdtr3EcFiN5nwYGFbU5VjNNb7xLsRUIT4QCslI2cyIKKQNPfZNkxPr0afG4N4z2TjO p94dhoMJAJeKHm9DtSeP/i9X1OM8ia0KRaiP0tTT2B8PipyMK1wy9XZWwwtLNOV3hxtC BGtgITu/KpbWOmKVS/b8zCJILK6b7zjErZK7QYe7nUx41fHPERQ45mzY+I8qL1g0Q+vq c9dm7VWSG9s4f5b4SmpZoVJ/wFPAmaZON+Zw5/qAwgkTxoeu/I7F1Gz1CAhFjpJfuw4I mLmw== X-Gm-Message-State: ANoB5pkzt0857Xey6hrLumUWiibN4BLedLJ9XwWeNTFW1pf6tNeU6OUz sgjw50dHatzeaCZcJMn+mWAJ9g== X-Google-Smtp-Source: AA0mqf6TsBpIXovEdmEucl/l73gbKjxzP+VkiJgvsdH0sgJf+BVmPrCsGlJrR9tyIjg9pqj+KeInIA== X-Received: by 2002:a17:906:53cd:b0:78c:1f2f:233e with SMTP id p13-20020a17090653cd00b0078c1f2f233emr19534963ejo.307.1668632013651; Wed, 16 Nov 2022 12:53:33 -0800 (PST) Received: from blmsp.fritz.box ([2001:4090:a244:804b:353b:565:addf:3aa7]) by smtp.gmail.com with ESMTPSA id kv17-20020a17090778d100b007aece68483csm6782828ejc.193.2022.11.16.12.53.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 16 Nov 2022 12:53:33 -0800 (PST) From: Markus Schneider-Pargmann To: Chandrasekar Ramakrishnan , Marc Kleine-Budde , Wolfgang Grandegger Cc: linux-can@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Markus Schneider-Pargmann Subject: [PATCH 12/15] can: tcan4x5x: Remove invalid write in clear_interrupts Date: Wed, 16 Nov 2022 21:53:05 +0100 Message-Id: <20221116205308.2996556-13-msp@baylibre.com> X-Mailer: git-send-email 2.38.1 In-Reply-To: <20221116205308.2996556-1-msp@baylibre.com> References: <20221116205308.2996556-1-msp@baylibre.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Register 0x824 TCAN4X5X_MCAN_INT_REG is a read-only register. Any writes to this register do not have any effect. Remove this write. The m_can driver aldready clears the interrupts in m_can_isr() by writing to M_CAN_IR which is translated to register 0x1050 which is a writable version of this register. Signed-off-by: Markus Schneider-Pargmann --- drivers/net/can/m_can/tcan4x5x-core.c | 5 ----- 1 file changed, 5 deletions(-) diff --git a/drivers/net/can/m_can/tcan4x5x-core.c b/drivers/net/can/m_can/= tcan4x5x-core.c index 41645a24384c..1fec394b3517 100644 --- a/drivers/net/can/m_can/tcan4x5x-core.c +++ b/drivers/net/can/m_can/tcan4x5x-core.c @@ -204,11 +204,6 @@ static int tcan4x5x_clear_interrupts(struct m_can_clas= sdev *cdev) if (ret) return ret; =20 - ret =3D tcan4x5x_write_tcan_reg(cdev, TCAN4X5X_MCAN_INT_REG, - TCAN4X5X_ENABLE_MCAN_INT); - if (ret) - return ret; - ret =3D tcan4x5x_write_tcan_reg(cdev, TCAN4X5X_INT_FLAGS, TCAN4X5X_CLEAR_ALL_INT); if (ret) --=20 2.38.1 From nobody Fri Dec 19 06:19:31 2025 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id B2FD6C4332F for ; Wed, 16 Nov 2022 20:55:26 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234543AbiKPUzF (ORCPT ); Wed, 16 Nov 2022 15:55:05 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35192 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238523AbiKPUx7 (ORCPT ); Wed, 16 Nov 2022 15:53:59 -0500 Received: from mail-ej1-x62b.google.com (mail-ej1-x62b.google.com [IPv6:2a00:1450:4864:20::62b]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5D733659B for ; Wed, 16 Nov 2022 12:53:34 -0800 (PST) Received: by mail-ej1-x62b.google.com with SMTP id ft34so47069334ejc.12 for ; Wed, 16 Nov 2022 12:53:34 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20210112.gappssmtp.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=81I+3EQI2P3P+v8VM+hyFuPqC5NfWDfLreVqvTuq6Uc=; b=XGipdapc5eAZDNwW6fDCnAfCBr6vjHFnAILuue5kTPnrIATThKIRIsIhP+z2KZwAGM 6xUobtU2sa5lE10jjJuuGNMVisNd9drGLcSzv6wmClcvUclmWAmCV8h2h8ZRfZofPWkk EuEnru3SohqNWb7K9iS8av9HqIlHgNU2e25Giu//b4SVp9G8/OrJD+9wghG9ckRYwxtE X4eRS4eDvt6HAqph+8CzeaqjwtSLUZ5iJ15PYapHdGYS35arY+2biLqjbCfQZ9EXjLtu DWd4+/L/CNt5DvXwsWmmL929RLKDfwctrtrmB45Qp5SKPT2mizdg61T0XLQntWDtK1YX cZpA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=81I+3EQI2P3P+v8VM+hyFuPqC5NfWDfLreVqvTuq6Uc=; b=u4p+mzaJC5kmLIuJkQ5065Ir3M88YiK3D7RITPWAuJbr7fC4urTjrLqwrxLCivmqUT nyG6e7kfE0L/vUh2GfNShQ7LxmJdo2zOriJrJvFjt6ZVid1cN80EM1bqpN9KEol2BIBr tEIQRtgHk/gNJscD3BobytREE7CXAjbbQtvuO3MkQzb73IAnc1Xndh1YYAMYGQ4OrmxK BHXVg4ieXlNPMwRAUoOPhzcQkzvxkdUw4A/DUrY5lI1Us44C4IHUI/dcEiW1ZcyLj9Fp 5zIjjOwdn4Z+VgNR3NKps5AG1lorL9vZwUwjKvh6//N6nlSxrPml9T1gBS43UT/71JnT AThw== X-Gm-Message-State: ANoB5pkrd6bWtkLmUGxToQ7Ld2BqqcV7fnAaSHXRwbzN2bnb6NEbzz7C wNsvTUEjq+NaeUs7ygtw7V0ieA== X-Google-Smtp-Source: AA0mqf5gWZiTI+lorhmPiazyth1FJOvdr7rtTgE1xpct/bqYxkEIR1Skr1ITdAXzpk52b/fk0WKCEQ== X-Received: by 2002:a17:906:814:b0:78e:ebd:bf96 with SMTP id e20-20020a170906081400b0078e0ebdbf96mr19030638ejd.625.1668632014449; Wed, 16 Nov 2022 12:53:34 -0800 (PST) Received: from blmsp.fritz.box ([2001:4090:a244:804b:353b:565:addf:3aa7]) by smtp.gmail.com with ESMTPSA id kv17-20020a17090778d100b007aece68483csm6782828ejc.193.2022.11.16.12.53.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 16 Nov 2022 12:53:34 -0800 (PST) From: Markus Schneider-Pargmann To: Chandrasekar Ramakrishnan , Marc Kleine-Budde , Wolfgang Grandegger Cc: linux-can@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Markus Schneider-Pargmann Subject: [PATCH 13/15] can: tcan4x5x: Fix use of register error status mask Date: Wed, 16 Nov 2022 21:53:06 +0100 Message-Id: <20221116205308.2996556-14-msp@baylibre.com> X-Mailer: git-send-email 2.38.1 In-Reply-To: <20221116205308.2996556-1-msp@baylibre.com> References: <20221116205308.2996556-1-msp@baylibre.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" TCAN4X5X_ERROR_STATUS is not a status register that needs clearing during interrupt handling. Instead this is a masking register that masks error interrupts. Writing TCAN4X5X_CLEAR_ALL_INT to this register effectively masks everything. Rename the register and mask all error interrupts only once by writing to the register in tcan4x5x_init. Signed-off-by: Markus Schneider-Pargmann --- drivers/net/can/m_can/tcan4x5x-core.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/drivers/net/can/m_can/tcan4x5x-core.c b/drivers/net/can/m_can/= tcan4x5x-core.c index 1fec394b3517..efa2381bf85b 100644 --- a/drivers/net/can/m_can/tcan4x5x-core.c +++ b/drivers/net/can/m_can/tcan4x5x-core.c @@ -10,7 +10,7 @@ #define TCAN4X5X_DEV_ID1 0x04 #define TCAN4X5X_REV 0x08 #define TCAN4X5X_STATUS 0x0C -#define TCAN4X5X_ERROR_STATUS 0x10 +#define TCAN4X5X_ERROR_STATUS_MASK 0x10 #define TCAN4X5X_CONTROL 0x14 =20 #define TCAN4X5X_CONFIG 0x800 @@ -204,12 +204,7 @@ static int tcan4x5x_clear_interrupts(struct m_can_clas= sdev *cdev) if (ret) return ret; =20 - ret =3D tcan4x5x_write_tcan_reg(cdev, TCAN4X5X_INT_FLAGS, - TCAN4X5X_CLEAR_ALL_INT); - if (ret) - return ret; - - return tcan4x5x_write_tcan_reg(cdev, TCAN4X5X_ERROR_STATUS, + return tcan4x5x_write_tcan_reg(cdev, TCAN4X5X_INT_FLAGS, TCAN4X5X_CLEAR_ALL_INT); } =20 @@ -229,6 +224,11 @@ static int tcan4x5x_init(struct m_can_classdev *cdev) if (ret) return ret; =20 + ret =3D tcan4x5x_write_tcan_reg(cdev, TCAN4X5X_ERROR_STATUS_MASK, + TCAN4X5X_CLEAR_ALL_INT); + if (ret) + return ret; + /* Zero out the MCAN buffers */ ret =3D m_can_init_ram(cdev); if (ret) --=20 2.38.1 From nobody Fri Dec 19 06:19:31 2025 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id B2DCFC433FE for ; Wed, 16 Nov 2022 20:57:27 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234392AbiKPU5Y (ORCPT ); Wed, 16 Nov 2022 15:57:24 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35170 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238685AbiKPUyB (ORCPT ); Wed, 16 Nov 2022 15:54:01 -0500 Received: from mail-ej1-x632.google.com (mail-ej1-x632.google.com [IPv6:2a00:1450:4864:20::632]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 95E809FE5 for ; Wed, 16 Nov 2022 12:53:35 -0800 (PST) Received: by mail-ej1-x632.google.com with SMTP id ft34so47069415ejc.12 for ; Wed, 16 Nov 2022 12:53:35 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20210112.gappssmtp.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=YM61plGO68WaURjQUGMFYN3EyOhHGwttCZUHVzMzSmk=; b=Ai+PNsCF8RUwtUbnUOAUElOEHQCIBtfvFr4FFEPhc4TBV1LylFALavmdFCQF1QzYq/ qDLB9z/9yjs+tm0zJDPFsIHbvWfXxkuKo96Mw4ScW7PN57/EQlnKCQF3ks2yEEWGQS4M fOkPJMw5pzIgSHSJxAAN/m0vsKCwGMVMEeXP40tQCc2n8qnsGB+hhZa1DA4jL5zut82i 7bC2rKxw1gYmVP6CvdtAOEt2IjHSFaOJPPC4uXz5zk7Yf+apbdDgU6asT4dd1JJgsrsU hgu+opVs9duZiov5egbrN5iBHXVuLoqZhPNnLyLFx6oOgUWVE2t7GU+wFAKEtKmsFXq3 kPfA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=YM61plGO68WaURjQUGMFYN3EyOhHGwttCZUHVzMzSmk=; b=O1NKRm/zLJR1/GfQXrZFcyjwONuOCBJI80uRiM1kZkIs5guxIA3W1ukZJZ/E/UPxv9 TNXBDhA6MnWXGmUOKwfs3BKokPwwvvPxT/+gQAi8FX2WtwNygNeQx9GBd441myCvxQHy YUkLzUfS9dj+sSZMCp931OgUq3isw1wNiAjSxChXMdQNcqLXLh/B+/t4Qo/PG3kKRa5P A7Q0+iOlw3VpLlISvo9QllRalrAoBUWBz6o6NLOzStTUBr84L5oS9/yOol00E9ZQF0Vb 6Uj9jX5nu2jTUsMHRwb19x4ySwUUd0GOEylfwSPuk91/eHSf5514GK89sebT9GsfGNji yfCA== X-Gm-Message-State: ANoB5pkhlhp88yIYSAEZAQMghLyjp84sDKcukrW0VdA6C0aH2SuKx41m hai4ObDyhhCrEeWdyb8OO+UKo3uqHrN58A== X-Google-Smtp-Source: AA0mqf7VeG4VcKKp/7grTNCCfy6yeZuKVFMgRgRP2joVmv0aloO7Kuyi4aEcATQ/8m/x/shIVVm6OQ== X-Received: by 2002:a17:907:c78d:b0:7af:113a:7416 with SMTP id tz13-20020a170907c78d00b007af113a7416mr10052021ejc.16.1668632015148; Wed, 16 Nov 2022 12:53:35 -0800 (PST) Received: from blmsp.fritz.box ([2001:4090:a244:804b:353b:565:addf:3aa7]) by smtp.gmail.com with ESMTPSA id kv17-20020a17090778d100b007aece68483csm6782828ejc.193.2022.11.16.12.53.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 16 Nov 2022 12:53:34 -0800 (PST) From: Markus Schneider-Pargmann To: Chandrasekar Ramakrishnan , Marc Kleine-Budde , Wolfgang Grandegger Cc: linux-can@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Markus Schneider-Pargmann Subject: [PATCH 14/15] can: tcan4x5x: Fix register range of first block Date: Wed, 16 Nov 2022 21:53:07 +0100 Message-Id: <20221116205308.2996556-15-msp@baylibre.com> X-Mailer: git-send-email 2.38.1 In-Reply-To: <20221116205308.2996556-1-msp@baylibre.com> References: <20221116205308.2996556-1-msp@baylibre.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" According to the datasheet 0x1c is the last register in the first block, not register 0x2c. Signed-off-by: Markus Schneider-Pargmann --- drivers/net/can/m_can/tcan4x5x-regmap.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/net/can/m_can/tcan4x5x-regmap.c b/drivers/net/can/m_ca= n/tcan4x5x-regmap.c index 26e212b8ca7a..d4b79d2d4598 100644 --- a/drivers/net/can/m_can/tcan4x5x-regmap.c +++ b/drivers/net/can/m_can/tcan4x5x-regmap.c @@ -91,7 +91,7 @@ static int tcan4x5x_regmap_read(void *context, } =20 static const struct regmap_range tcan4x5x_reg_table_yes_range[] =3D { - regmap_reg_range(0x0000, 0x002c), /* Device ID and SPI Registers */ + regmap_reg_range(0x0000, 0x001c), /* Device ID and SPI Registers */ regmap_reg_range(0x0800, 0x083c), /* Device configuration registers and I= nterrupt Flags*/ regmap_reg_range(0x1000, 0x10fc), /* M_CAN */ regmap_reg_range(0x8000, 0x87fc), /* MRAM */ --=20 2.38.1 From nobody Fri Dec 19 06:19:31 2025 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 6DDFFC433FE for ; Wed, 16 Nov 2022 20:57:42 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236954AbiKPU5k (ORCPT ); Wed, 16 Nov 2022 15:57:40 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35214 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234407AbiKPUyC (ORCPT ); Wed, 16 Nov 2022 15:54:02 -0500 Received: from mail-ed1-x530.google.com (mail-ed1-x530.google.com [IPv6:2a00:1450:4864:20::530]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8D89D5FE0 for ; Wed, 16 Nov 2022 12:53:36 -0800 (PST) Received: by mail-ed1-x530.google.com with SMTP id a5so28422895edb.11 for ; Wed, 16 Nov 2022 12:53:36 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20210112.gappssmtp.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=CeVee7WTu+MIVK7s97PRG5d4Tw3kKV6cU2vVtZ3DItQ=; b=ofPkZh1sJHCSjcXBt5MSofHDe4685qhi1/Uc6LWnRd5EToxTmQIbpUn6ccrEQAQAns SXavK0S2kbOubR/NRJ7cDZLF6RKWaQ4G757sspLKT7U2Nq1FQa21mr8+z+tgJN1JAHar bAGuACN8zSgXgSFsxzahOcOiGZtZqtaI3ADgt8nVKKhB/xQ5NRUK8cjr9uuVpDjrECJG ZIM8hXLVCMHjmTEFYN/pf8GLR66Zi1gz5BAhY62LqokcHeYn5zUnYo+GMZQSk9oRLSrz 5o59LVtNJfrNkQhOE//fxGY7XlXdPB/LDl9sjti2Spkq8u58gt9NoQCSLUs3GqyCorT1 nZKA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=CeVee7WTu+MIVK7s97PRG5d4Tw3kKV6cU2vVtZ3DItQ=; b=0cg8XZD3zRCUtgcE4eiNPsS98XYX/ZX16E7fTGbMPOG/8CokZK2cKo+gknUyglhR89 jxjX6YTT77d+vcTwSlEaGwwWMdV5P4j5t8YiDhQzCJb4XJq8MTeQTRZMNWOc2cc8wdJM 6/n8ETZD/AFJ+Q/XuC8snkwlLTGytXiVLiL5V1UW+8UQgwGyihk8q2Wf63Tjo/zToR0r xqAPlzxGl96v7DoE+bGQRa9kAtnX52WVI4ut2Srsv5rE+FiT79zZJ4SIcJaoWtz2OWb4 MayfroTyJO622nQ0Ys/suKtdLpo8vsBOQkltcmreruOnCmNOiauVoUoTwK3GUSd7eE0w 6qwA== X-Gm-Message-State: ANoB5pkUrLNcRy6MOtqdrw9mRrPsPryU664AgdyCx+YaBkDML2EoTmM9 aiqS1YW0OIEiRl5SoBUWo7ataP3KNEk3sg== X-Google-Smtp-Source: AA0mqf5j6sPxY2lkGgEc/UQ8QjGsma8Lta5ZRqNfdGt0PvRbt3fxbOhFaJmq6bYcUruYMVFEqjFqeA== X-Received: by 2002:a05:6402:17c2:b0:459:443a:faf4 with SMTP id s2-20020a05640217c200b00459443afaf4mr20696086edy.297.1668632016031; Wed, 16 Nov 2022 12:53:36 -0800 (PST) Received: from blmsp.fritz.box ([2001:4090:a244:804b:353b:565:addf:3aa7]) by smtp.gmail.com with ESMTPSA id kv17-20020a17090778d100b007aece68483csm6782828ejc.193.2022.11.16.12.53.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 16 Nov 2022 12:53:35 -0800 (PST) From: Markus Schneider-Pargmann To: Chandrasekar Ramakrishnan , Marc Kleine-Budde , Wolfgang Grandegger Cc: linux-can@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Markus Schneider-Pargmann Subject: [PATCH 15/15] can: tcan4x5x: Specify separate read/write ranges Date: Wed, 16 Nov 2022 21:53:08 +0100 Message-Id: <20221116205308.2996556-16-msp@baylibre.com> X-Mailer: git-send-email 2.38.1 In-Reply-To: <20221116205308.2996556-1-msp@baylibre.com> References: <20221116205308.2996556-1-msp@baylibre.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Specify exactly which registers are read/writeable in the chip. This is supposed to help detect any violations in the future. Signed-off-by: Markus Schneider-Pargmann --- drivers/net/can/m_can/tcan4x5x-regmap.c | 43 +++++++++++++++++++++---- 1 file changed, 37 insertions(+), 6 deletions(-) diff --git a/drivers/net/can/m_can/tcan4x5x-regmap.c b/drivers/net/can/m_ca= n/tcan4x5x-regmap.c index d4b79d2d4598..19215c39cd5b 100644 --- a/drivers/net/can/m_can/tcan4x5x-regmap.c +++ b/drivers/net/can/m_can/tcan4x5x-regmap.c @@ -90,16 +90,47 @@ static int tcan4x5x_regmap_read(void *context, return 0; } =20 -static const struct regmap_range tcan4x5x_reg_table_yes_range[] =3D { +static const struct regmap_range tcan4x5x_reg_table_wr_range[] =3D { + /* Device ID and SPI Registers */ + regmap_reg_range(0x000c, 0x001c), + /* Device configuration registers and Interrupt Flags*/ + regmap_reg_range(0x0800, 0x080c), + regmap_reg_range(0x0814, 0x0814), + regmap_reg_range(0x0820, 0x0820), + regmap_reg_range(0x0830, 0x0830), + /* M_CAN */ + regmap_reg_range(0x100c, 0x102c), + regmap_reg_range(0x1048, 0x1048), + regmap_reg_range(0x1050, 0x105c), + regmap_reg_range(0x1080, 0x1088), + regmap_reg_range(0x1090, 0x1090), + regmap_reg_range(0x1098, 0x10a0), + regmap_reg_range(0x10a8, 0x10b0), + regmap_reg_range(0x10b8, 0x10c0), + regmap_reg_range(0x10c8, 0x10c8), + regmap_reg_range(0x10d0, 0x10d4), + regmap_reg_range(0x10e0, 0x10e4), + regmap_reg_range(0x10f0, 0x10f0), + regmap_reg_range(0x10f8, 0x10f8), + /* MRAM */ + regmap_reg_range(0x8000, 0x87fc), +}; + +static const struct regmap_range tcan4x5x_reg_table_rd_range[] =3D { regmap_reg_range(0x0000, 0x001c), /* Device ID and SPI Registers */ regmap_reg_range(0x0800, 0x083c), /* Device configuration registers and I= nterrupt Flags*/ regmap_reg_range(0x1000, 0x10fc), /* M_CAN */ regmap_reg_range(0x8000, 0x87fc), /* MRAM */ }; =20 -static const struct regmap_access_table tcan4x5x_reg_table =3D { - .yes_ranges =3D tcan4x5x_reg_table_yes_range, - .n_yes_ranges =3D ARRAY_SIZE(tcan4x5x_reg_table_yes_range), +static const struct regmap_access_table tcan4x5x_reg_table_wr =3D { + .yes_ranges =3D tcan4x5x_reg_table_wr_range, + .n_yes_ranges =3D ARRAY_SIZE(tcan4x5x_reg_table_wr_range), +}; + +static const struct regmap_access_table tcan4x5x_reg_table_rd =3D { + .yes_ranges =3D tcan4x5x_reg_table_rd_range, + .n_yes_ranges =3D ARRAY_SIZE(tcan4x5x_reg_table_rd_range), }; =20 static const struct regmap_config tcan4x5x_regmap =3D { @@ -107,8 +138,8 @@ static const struct regmap_config tcan4x5x_regmap =3D { .reg_stride =3D 4, .pad_bits =3D 8, .val_bits =3D 32, - .wr_table =3D &tcan4x5x_reg_table, - .rd_table =3D &tcan4x5x_reg_table, + .wr_table =3D &tcan4x5x_reg_table_wr, + .rd_table =3D &tcan4x5x_reg_table_rd, .max_register =3D TCAN4X5X_MAX_REGISTER, .cache_type =3D REGCACHE_NONE, .read_flag_mask =3D (__force unsigned long) --=20 2.38.1