[PATCH v6 0/2] Add Loongson CAN-FD controller driver
Binbin Zhou <[email protected]> Tue, 21 Jul 2026 19:44:15 +0800
| Newsgroups | dev.linux.lists.loongarch,org.kernel.vger.linux-can |
|---|---|
| Message-ID | <[email protected]> |
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 ========= 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=2 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