Re: [PATCH v6 0/2] Add Loongson CAN-FD controller driver

Huacai Chen <[email protected]> Fri, 24 Jul 2026 17:08:40 +0800
Newsgroups dev.linux.lists.loongarch,org.kernel.vger.linux-can
Message-ID <CAAhV-H65TkXw-Vbh_uJ3=EwObzrvMohzVEJR2hi+4Z-3RQ==+Q@mail.gmail.com>
For the whole series:

Reviewed-by: Huacai Chen <[email protected]>

On Tue, Jul 21, 2026 at 7:44=E2=80=AFPM Binbin Zhou <[email protected]=
> wrote:
>
> Hi all:
>
> This patchset adds support for the CAN-FD controller found on Loongson
> CPUs.
>
> Patch 1 introduces the basic CAN-FD controller driver with support
> for classic CAN and CAN FD, including bit timing, error handling,
> NAPI-based RX, and multiple TX buffers.
>
> Patch 2 adds optional DMA support for RX path using the Loongson APB
> CMC DMA engine, which significantly reduces CPU load under high
> receive throughput.
>
> The driver has been tested on Loongson-2K3000 platforms with various
> CAN/CAN FD traffic patterns.
>
> Finally, I'd like to thank Bingxiong, the original author of this driver,
> for his efforts in working on the patch.
>
> Thanks.
> Binbin
>
> =3D=3D=3D=3D=3D=3D=3D=3D=3D
> V6:
> - Rebase on linux-can/master;
> Patch (1/2):
>  - Drop CAN_CTRLMODE_3_SAMPLES ctrlmode;
>  - Replace kfree_skb() with dev_kfree_skb_any();
>  - Drop REG_CMD_ERCRST operation;
>  - Rewrite `loongson_canfd_tx_interrupt()` to prevent duplicate handling
>    of TX completion';
> Patch (2/2):
>  - Added a fallback to true when dmaengine_tx_status() returns an error;
>  - Replaced all direct regmap_read() from LOONGSON_CANFD_RX_DATA with
>    the priv->get_rx_data() callback;
>  - Release the DMA channel and clear priv->rx_ch on dma_alloc_coherent()
>    failure;
>
> Link to V5:
> https://lore.kernel.org/all/[email protected]/
>
> V5:
> Patch (1/2):
>  - Fix tseg1_max const value;
>  - Empty FIFO when SKB allocate failed.
>  - Use REG_FRAME_META1_RWCNT as the playload read count value;
>  - Only clean processed interrupt flags in
>    loongson_canfd_err_interrupt();
>  - Refact loongson_canfd_tx_interrupt();
>  - Add LOONGSON_CANFD_TRV_DLY into loongson_canfd_volatile_reg();
> Patch (2/2):
>  - Fix dma_request_chan() error path;
>  - Fix build error;
>  - Fix loongson_canfd_rxdma_init() error path;
>
> Link to V4:
> https://lore.kernel.org/all/[email protected]/
>
> V4:
> - Fix some issues from sashiko.
> Patch (1/2):
>  - Update commit message;
>  - Use common APIs to calculate DLC;
>  - Correct CAN_RTR_FLAG judgement;
>  - Add skb check for CAN_STATE_ERROR_ACTIVE case;
>  - Use regmap_write() rather than regmap_update_bits() to
>    disable all interrupts;
>  - Add napi_disable() in error paths;
>  - Add `clock-frequency` return value check;
>  - More comments for macros.
>
> Link to V3:
> https://lore.kernel.org/all/[email protected]/
>
> V3:
> Patch (1/2):
>  - Replace the switch-case statement with a calculated mask in
>    `loongson_canfd_get_txbuf_sts()`;
>  - Change `loongson_canfd_reset()` return type to `void`;
>  - Drop old code in `loongson_canfd_set_btr()`;
>  - Rename `loongson_canfd_set_mode()` to `loongson_canfd_set_conf_mode()`=
;
>  - Drop `cf->__res*` usage;
>  - Drop unnecessary macro definitions;
>  - Add `netif_napi_del()` in probe error route path;
>  - Replace ternary operator with `if-else`;
>  - Drop stats->rx_packets and stats->rx_bytes count in CAN error frames;
>  - Add ethtool_ops;
>  - Add CAN_CTRLMODE_CC_LEN8_DLC;
>
> Patch (2/2):
>  - Fix W=3D2 warning;
>  - Rename get_rx_frc() -> get_rxbuf_empty();
>  - Put `loongson_canfd_rxdma_remove()` before free_candev();
>  - Adjust the RXDMA probe process.
>
> Link to V2:
> https://lore.kernel.org/all/[email protected]/
>
> V2:
> Patch (1/2):
>  - Put all code into one file;
>  - Add COMPILE_TEST Kconfig option;
>  - Rewrite Kconfig description;
>  - Use `regmap_test_bits()` to simplify bit field checks;
>  - Drop odd FIELD_GET() usage;
>  - Don't use FIELD_GET() for a single bit;
>  - Use an if/else instead of the ternary operator;
>  - Use the CAN TDC framework to get the SSP value;
>  - Use guard(spinlock)/scoped_guard(spinlock);
>  - Use netdev_debug() to be less verboss;
>  - Check for memory allocation failure;
>  - Add CAN_ERR_CNT flag;
>  - Drop unused REG_DATA_xx_yy_W_DATA_yy definition;
>  - Add more function comment;
>
> Link to V1:
> https://lore.kernel.org/all/[email protected]/
>
> Binbin Zhou (2):
>   can: Add Loongson CAN-FD controller driver
>   can: loongson_canfd: Add RXDMA support
>
>  MAINTAINERS                      |    7 +
>  drivers/net/can/Kconfig          |   11 +
>  drivers/net/can/Makefile         |    1 +
>  drivers/net/can/loongson_canfd.c | 1877 ++++++++++++++++++++++++++++++
>  4 files changed, 1896 insertions(+)
>  create mode 100644 drivers/net/can/loongson_canfd.c
>
>
> base-commit: 1cb8553c02e93e5a150cebd42f9ee3db0ece4707
> --
> 2.52.0
>