| From: |
| Stefan Mätje <stefan.maetje-AT-esd.eu> |
| To: |
| Marc Kleine-Budde <mkl-AT-pengutronix.de>, linux-can-AT-vger.kernel.org, netdev-AT-vger.kernel.org, linux-kernel-AT-vger.kernel.org |
| Subject: |
| [PATCH v8 0/2] can: esd: add support for esd GmbH PCIe/402 CAN interface |
| Date: |
| Wed, 25 Oct 2023 16:16:33 +0200 |
| Message-ID: |
| <20231025141635.1459606-1-stefan.maetje@esd.eu> |
| Cc: |
| Wolfgang Grandegger <wg-AT-grandegger.com>, "David S . Miller" <davem-AT-davemloft.net>, Eric Dumazet <edumazet-AT-google.com>, Jakub Kicinski <kuba-AT-kernel.org>, Paolo Abeni <pabeni-AT-redhat.com> |
| Archive-link: |
| Article |
This patch picks up the work from last year. Any comments on needed or
recommended changes are appreciated.
The purpose of this patch is to introduce a new CAN driver to support
the esd GmbH 402 family of CAN interface boards. The hardware design
is based on a CAN controller implemented in a FPGA attached to a
PCIe link.
More information on these boards can be found following the links
included in the commit message.
This patch supports all boards but will operate the CAN-FD capable
boards only in Classic-CAN mode. The CAN-FD support will be added
when the initial patch has stabilized.
The patch is reuses the previous work of my former colleague:
Link: https://lore.kernel.org/linux-can/1426592308-23817-1-git-...
The patch is based on the linux-can-next main branch.
Changes in v8:
- Rebased to 6.6-rc2 on linux-can-next branch main
Changes in v7:
- Numerous changes. Find the quoted with inline comments about changes
below after the changes list. Stuff that I don't understand and
where I have questions is marked with ????.
Unfortunately I will be AFK till 28th of November.
Changes in v6:
- Fixed the statistic handling of RX overrun errors and increase
net_device_stats::rx_errors instead of net_device_stats::rx_dropped.
- Added a patch to not increase rx statistics when generating a CAN
rx error message frame as suggested on the linux-can list.
- Added a patch to not not increase rx_bytes statistics for RTR frames
as suggested on the linux-can list.
The last two patches change the statistics handling from the previous
style used in other drivers to the newly suggested one.
Changes in v5:
- Added the initialization for netdev::dev_port as it is implemented
for another CAN driver. See
https://lore.kernel.org/linux-can/20211026180553.1953189-...
Changes in v4:
- Fixed the build failure on ARCH=arm64 that was found by the Intel
kernel test robot. See
https://lore.kernel.org/linux-can/202109120608.7ZbQXkRh-l...
Removed error monitoring code that used GCC's built-in compiler
functions for atomic access (__sync_* functions). GCC versions
after 9 (tested with "gcc-10 (Ubuntu 10.3.0-1ubuntu1~20.04)")
don't implement the intrinsic atomic as in-line code but call
"__aarch64_ldadd4_acq_rel" on arm64. This GCC support function
is not exported by the kernel and therefore the module build
post-processing fails.
Removed that code because the error monitoring never showed a
problem during the development this year.
Changes in v3:
- Rework the bus-off restart logic in acc_set_mode() and
handle_core_msg_errstatechange() to call netif_wake_queue() from the
error active event.
- Changed pci402_init_card() to allocate a variable sized array of
struct acc_core using devm_kcalloc() instead of using a fixed size
array in struct pci402_card.
- Changed handle_core_msg_txabort() to release aborted TX frames in
TX FIFO order.
- Fixed the acc_close() function to abort all pending TX request in
esdACC controller.
- Fixed counting of transmit aborts in handle_core_msg_txabort().
It is now done like in can_flush_echo_skb().
- Fixed handle_core_msg_buserr() to create error frames including the
CAN RX and TX error counters that were missing.
- Fixed acc_set_bittiming() neither to touch LOM mode setting of
esdACC controller nor to enter or leave RESET mode.
The esdACC controller is going active on the CAN bus in acc_open()
and is going inactive (RESET mode) again in acc_close().
- Rely on the automatic release of memory fetched by devm_kzalloc().
But still use devm_irq_free() explicitely to make sure that the
interrupt handler is disconnected at that point.
This avoids a possible crash in non-MSI mode due to the IRQ
triggered by another device on the same PCI IRQ line.
- Changed to use DMA map API instead of pci_*_consistent compatibility
wrappers.
- Fixed stale email references and updated copyright information.
- Removed any traces of future CAN-FD support.
Changes in v2:
- Avoid warning triggered by -Wshift-count-overflow on architectures
with 32-bit dma_addr_t.
- Fixed Makefile not to build the kernel module always. Doing this
renamed esd402_pci.c to esd_402_pci-core.c as recommended by Marc.
previous versions:
v1 - https://lore.kernel.org/linux-can/20210728203647.15240-1-...
v2 - https://lore.kernel.org/linux-can/20210730173805.3926-1-S...
v3 - https://lore.kernel.org/linux-can/20210908164640.23243-1-...
v4 - https://lore.kernel.org/linux-can/20210916172152.5127-1-s...
v5 - https://lore.kernel.org/linux-can/20211109155326.2608822-...
v6 - https://lore.kernel.org/linux-can/20211201220328.3079270-...
v7 - https://lore.kernel.org/linux-can/20221106224156.3619334-...
Stefan Mätje (2):
MAINTAINERS: add Stefan Mätje as maintainer for the esd electronics
GmbH PCIe/402 CAN drivers
can: esd: add support for esd GmbH PCIe/402 CAN interface family
MAINTAINERS | 7 +
drivers/net/can/Kconfig | 1 +
drivers/net/can/Makefile | 1 +
drivers/net/can/esd/Kconfig | 12 +
drivers/net/can/esd/Makefile | 7 +
drivers/net/can/esd/esd_402_pci-core.c | 510 ++++++++++++++++
drivers/net/can/esd/esdacc.c | 771 +++++++++++++++++++++++++
drivers/net/can/esd/esdacc.h | 393 +++++++++++++
8 files changed, 1702 insertions(+)
create mode 100644 drivers/net/can/esd/Kconfig
create mode 100644 drivers/net/can/esd/Makefile
create mode 100644 drivers/net/can/esd/esd_402_pci-core.c
create mode 100644 drivers/net/can/esd/esdacc.c
create mode 100644 drivers/net/can/esd/esdacc.h
base-commit: 93e7eca853ca0087b129433630ddd89288d2b8b4
--
2.25.1