Received: by 2002:a05:6358:45e:b0:b5:b6eb:e1f9 with SMTP id 30csp801362rwe; Fri, 26 Aug 2022 15:05:12 -0700 (PDT) X-Google-Smtp-Source: AA6agR60wcDUn0eRRoFrHlsvSvogCUTjalZapF6q/05S8VaptUPheRPTN60Rre72g6cxK+qAOolF X-Received: by 2002:a05:6402:50ce:b0:447:d71:8405 with SMTP id h14-20020a05640250ce00b004470d718405mr8234602edb.31.1661551511781; Fri, 26 Aug 2022 15:05:11 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1661551511; cv=none; d=google.com; s=arc-20160816; b=vwB3r52jiEi65XXt7OgmE0nSpOg24Iz0+8ppAix504BQOzlDh9kLZIljT4HYFJkHxr u/hhOfOsazt+iw5cTZ+k003eWGy6jW4AkUB3YrnZzNNXEijjM5WclV81AeiJneAKruep ZTIA+gSzbObdhrTr5LVgQCBwzqDwA16Lq1egbJHQXmXQCfrzOqyn8cVIAWbQOSSn4iGj mvhz29qfj/yMNmkGw6Mpgf58h1FbyWktHD7Kp0UNxZxeXk/28LAzmin4oXtbZCylCmne rJxiLQnnnrOHbuqhJUjn4HvMvEJuuJBO6uiQZlQ2jK780qlL5Qx2z4EQqzyfQgUztCFb RqkA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:cc:to:subject :message-id:date:from:in-reply-to:references:mime-version :dkim-signature; bh=YIsmXK/1IMUzBKPFPBCOzWlrG3vuxnAl26/EQEinaGU=; b=IeGYET9RieYoRPXD3ud6I5ItujRsf8eIo9X1lb02JrMclgVvAM7ebn94yH2d7p5QmM amx++fFEYdKILtDgZkpKaGr0SZT9Iq5YMNwz0yRk+T9ILL63Vi5iGOW9YPaosr9hGSXo 32Wt6ydppswu0RTCM8fVrMLio0kVapbH74TiHA08r6/Gjbmd3pc3vLDTTF3DO8GeOQAF tTybazPrY6Q0FsCXwWfc8AGHKg0VBOhvEuhti14/KP1w9uII6O4xGSl6gZGp3EQdAIv9 JvdYr4UHfCBqBt12nZaub6vl8dPdM22WHfDJdsp7OJ7rUJBJSI3B456vJAaG4RlMYVbk eADA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20210112 header.b=Woi3HMQV; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id z6-20020a05640240c600b0043db3c4b3b8si2330281edb.28.2022.08.26.15.04.43; Fri, 26 Aug 2022 15:05:11 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20210112 header.b=Woi3HMQV; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231731AbiHZV46 (ORCPT + 99 others); Fri, 26 Aug 2022 17:56:58 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:39992 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231298AbiHZV44 (ORCPT ); Fri, 26 Aug 2022 17:56:56 -0400 Received: from mail-yw1-x112a.google.com (mail-yw1-x112a.google.com [IPv6:2607:f8b0:4864:20::112a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5AE92CACA2; Fri, 26 Aug 2022 14:56:54 -0700 (PDT) Received: by mail-yw1-x112a.google.com with SMTP id 00721157ae682-32a09b909f6so69161807b3.0; Fri, 26 Aug 2022 14:56:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc; bh=YIsmXK/1IMUzBKPFPBCOzWlrG3vuxnAl26/EQEinaGU=; b=Woi3HMQVUTh9wjBeAKXEpTFy4sf0GT5G162/idyorzEjanNHHAAO45K6yb3Gq251vx vdGkWXeLHyJD1Eg5RShfMvgsW17hKDHZr/WeeDtgdpyt32v1ggnnjCHlRuAQ94Dpc11n zS2IwMRHR9s2PGlSxiCxhhs3r1G6RPkeqBKCOCYCE4mPWzWmQqlnHguY0hSWkrhmHkVP c80tnpQQ8aynngWmq9c20Rz5FIJYqJ1lG8EM+uu+/Bn+bD/1qLICngiaAtk0lCNG7gJn U7gXacECwV1iR4jaz+0w7cw+lJzQltivxlZf7vX/cHXdyHNxlEyqXdk9GMeHqzK764xE fj2w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc; bh=YIsmXK/1IMUzBKPFPBCOzWlrG3vuxnAl26/EQEinaGU=; b=xtJ3U2yLwssHKz6czZ3Qs+tai4dTBlgdlPzgdlZ5kCmBHzUs4Q4+BqpIaYTYJg4xwe 8+vxr/EqO+65qpYAatXv95S53IEZZsG2hUZ085JMjr6AbuvME6i/pZREpB+TwwKMdVHE zhSgFb++RH4cSFbCvG7DXaKiDQArf5momXl+O7c2qNE6BUgi8pfDLfxF8QZUUziI3QYR Uh+Gk8zGQwFCCaU4UI2Be3KXwtXeLFSudMPcrXeJo0P1dDs3t9n9xM8UBfk8A5mpAnhj tnR1KXjFx4EWJJVq5bNdBEiyhK1gyMCMIQXSmci6mxjMhgAO0fXPdePWtphaKpNjQ+lq rd9w== X-Gm-Message-State: ACgBeo3R57Ucj1iiEZDefLlEEItyUdZ6LUMTw7XMYwhM9jqqaOQLDS4d Z99ETb3AKLCcvbQuHmrV/AEaeUx6m0PGS7sLv6Y= X-Received: by 2002:a5b:68e:0:b0:671:76c9:ff with SMTP id j14-20020a5b068e000000b0067176c900ffmr1606448ybq.630.1661551013566; Fri, 26 Aug 2022 14:56:53 -0700 (PDT) MIME-Version: 1.0 References: <20220820082936.686924-1-dario.binacchi@amarulasolutions.com> <20220820082936.686924-5-dario.binacchi@amarulasolutions.com> In-Reply-To: <20220820082936.686924-5-dario.binacchi@amarulasolutions.com> From: Vincent Mailhol Date: Sat, 27 Aug 2022 06:56:42 +0900 Message-ID: Subject: Re: [RFC PATCH v2 4/4] can: bxcan: add support for ST bxCAN controller To: Dario Binacchi Cc: linux-kernel@vger.kernel.org, Alexandre Torgue , Amarula patchwork , Marc Kleine-Budde , michael@amarulasolutions.com, Dario Binacchi , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Wolfgang Grandegger , linux-can@vger.kernel.org, netdev@vger.kernel.org Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM, RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Sat. 20 Aug. 2022 =C3=A0 17:32, Dario Binacchi a =C3=A9crit : > Add support for the basic extended CAN controller (bxCAN) found in many > low- to middle-end STM32 SoCs. It supports the Basic Extended CAN > protocol versions 2.0A and B with a maximum bit rate of 1 Mbit/s. > > The controller supports two channels (CAN1 as master and CAN2 as slave) > and the driver can enable either or both of the channels. They share > some of the required logic (e. g. clocks and filters), and that means > you cannot use the slave CAN without enabling some hardware resources > managed by the master CAN. > > Each channel has 3 transmit mailboxes, 2 receive FIFOs with 3 stages and > 28 scalable filter banks. > It also manages 4 dedicated interrupt vectors: > - transmit interrupt > - FIFO 0 receive interrupt > - FIFO 1 receive interrupt > - status change error interrupt > > Driver uses all 3 available mailboxes for transmission and FIFO 0 for > reception. Rx filter rules are configured to the minimum. They accept > all messages and assign filter 0 to CAN1 and filter 14 to CAN2 in > identifier mask mode with 32 bits width. It enables and uses transmit, > receive buffers for FIFO 0 and error and status change interrupts. > > Signed-off-by: Dario Binacchi > Signed-off-by: Dario Binacchi > > --- (...) > +static void bxcan_handle_state_change(struct net_device *ndev, u32 esr) > +{ > + struct bxcan_priv *priv =3D netdev_priv(ndev); > + struct net_device_stats *stats =3D &ndev->stats; > + enum can_state new_state =3D priv->can.state; > + struct can_berr_counter bec; > + enum can_state rx_state, tx_state; > + struct sk_buff *skb; > + struct can_frame *cf; > + > + /* Early exit if no error flag is set */ > + if (!(esr & (BXCAN_ESR_EWGF | BXCAN_ESR_EPVF | BXCAN_ESR_BOFF))) > + return; > + > + bec.txerr =3D BXCAN_TEC(esr); > + bec.rxerr =3D BXCAN_REC(esr); > + > + if (esr & BXCAN_ESR_BOFF) > + new_state =3D CAN_STATE_BUS_OFF; > + else if (esr & BXCAN_ESR_EPVF) > + new_state =3D CAN_STATE_ERROR_PASSIVE; > + else if (esr & BXCAN_ESR_EWGF) > + new_state =3D CAN_STATE_ERROR_WARNING; > + > + /* state hasn't changed */ > + if (unlikely(new_state =3D=3D priv->can.state)) > + return; > + > + skb =3D alloc_can_err_skb(ndev, &cf); > + if (unlikely(!skb)) > + return; > + > + tx_state =3D bec.txerr >=3D bec.rxerr ? new_state : 0; > + rx_state =3D bec.txerr <=3D bec.rxerr ? new_state : 0; > + can_change_state(ndev, cf, tx_state, rx_state); > + > + if (new_state =3D=3D CAN_STATE_BUS_OFF) > + can_bus_off(ndev); > + > + stats->rx_bytes +=3D cf->len; Please do not increment the stats if the frame is remote (c.f. CAN_RTR_FLAG= ). > + stats->rx_packets++; > + netif_rx(skb); > +} Yours sincerely, Vincent Mailhol