[PATCH v5 0/2] Add Loongson CAN-FD controller driver
Binbin Zhou <[email protected]>
| 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 ========= 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 | 1897 ++++++++++++++++++++++++++++++ 4 files changed, 1916 insertions(+) create mode 100644 drivers/net/can/loongson_canfd.c base-commit: b266bacba796ff5c4dcd2ae2fc08aacf7ab39153 -- 2.52.0