--- v3
+++ v1
@@ -1,10 +1,10 @@
This patch adds support for the PCI based PCIe/402 CAN interface family
from esd GmbH that is available with various form factors
-(https://esd.eu/en/products/402-series-can-interfaces).
+(https://esd.eu/technologie/can/can-und-can-fd-interfaces).
All boards utilize a FPGA based CAN controller solution developed
by esd (esdACC). For more information on the esdACC see
-https://esd.eu/en/products/esdacc.
+https://esd.eu/technologie/can/esd-advanced-can-controller-esdacc.
This driver detects all available CAN interface board variants of
the family but atm. operates the CAN-FD capable devices in
@@ -19,10 +19,10 @@
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 | 514 ++++++++++++++++
+ drivers/net/can/esd/esd_402_pci-core.c | 502 ++++++++++++++++
drivers/net/can/esd/esdacc.c | 777 +++++++++++++++++++++++++
drivers/net/can/esd/esdacc.h | 380 ++++++++++++
- 7 files changed, 1692 insertions(+)
+ 7 files changed, 1680 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
@@ -86,10 +86,10 @@
+obj-$(CONFIG_CAN_ESD_402_PCI) += esd_402_pci.o
diff --git a/drivers/net/can/esd/esd_402_pci-core.c b/drivers/net/can/esd/esd_402_pci-core.c
new file mode 100644
-index 000000000000..aaaeecfbd38f
+index 000000000000..80d816a78859
--- /dev/null
+++ b/drivers/net/can/esd/esd_402_pci-core.c
-@@ -0,0 +1,514 @@
+@@ -0,0 +1,502 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/* Copyright (C) 2015 - 2016 Thomas Körper, esd electronic system design gmbh
+ * Copyright (C) 2017 - 2021 Stefan Mätje, esd electronics gmbh
@@ -182,7 +182,6 @@
+ struct acc_core *cores;
+
+ bool msi_enabled;
-+ int irq_stack;
+};
+
+static irqreturn_t pci402_interrupt(int irq, void *dev_id)
@@ -190,20 +189,8 @@
+ struct pci_dev *pdev = dev_id;
+ struct pci402_card *card = pci_get_drvdata(pdev);
+ irqreturn_t irq_status;
-+ int irq_level_out;
-+ int irq_level_in;
-+
-+ /* Use <irq_stack> to check for IRQ multi service on multiple CPUs. */
-+ irq_level_in = __sync_fetch_and_add(&card->irq_stack, 1);
+
+ irq_status = acc_card_interrupt(&card->ov, card->cores);
-+
-+ irq_level_out = __sync_sub_and_fetch(&card->irq_stack, 1);
-+
-+ if (irq_level_in || irq_level_out) {
-+ pci_warn(pdev, "%s(): Bad level, in %d, out %d\n",
-+ __func__, irq_level_in, irq_level_out);
-+ }
+
+ return irq_status;
+}
@@ -447,6 +434,7 @@
+ core->netdev = netdev;
+
+ netdev->flags |= IFF_ECHO;
++ netdev->dev_port = i;
+ netdev->netdev_ops = &pci402_acc_netdev_ops;
+ SET_NETDEV_DEV(netdev, &pdev->dev);
+
@@ -606,7 +594,7 @@
+MODULE_LICENSE("GPL");
diff --git a/drivers/net/can/esd/esdacc.c b/drivers/net/can/esd/esdacc.c
new file mode 100644
-index 000000000000..a8a02e48fc45
+index 000000000000..13f7397dfc4e
--- /dev/null
+++ b/drivers/net/can/esd/esdacc.c
@@ -0,0 +1,777 @@
@@ -1155,10 +1143,10 @@
+
+ /* lost_cnt may be 0 if not supported by ESDACC version */
+ if (msg->lost_cnt) {
-+ stats->rx_dropped += msg->lost_cnt;
++ stats->rx_errors += msg->lost_cnt;
+ stats->rx_over_errors += msg->lost_cnt;
+ } else {
-+ stats->rx_dropped++;
++ stats->rx_errors++;
+ stats->rx_over_errors++;
+ }
+