-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
can: ctucanfd: add support for CTU CAN FD open-source IP core - bus i…
…ndependent part. This driver adds support for the CTU CAN FD open-source IP core. More documentation and core sources at project page (https://gitlab.fel.cvut.cz/canbus/ctucanfd_ip_core). The core integration to Xilinx Zynq system as platform driver is available (https://gitlab.fel.cvut.cz/canbus/zynq/zynq-can-sja1000-top). Implementation on Intel FPGA based PCI Express board is available from project (https://gitlab.fel.cvut.cz/canbus/pcie-ctucanfd). More about CAN bus related projects used and developed at CTU FEE at https://canbus.pages.fel.cvut.cz/ . Link: https://lore.kernel.org/all/1906e4941560ae2ce4b8d181131fd4963aa31611.1647904780.git.pisa@cmp.felk.cvut.cz Signed-off-by: Martin Jerabek <martin.jerabek01@gmail.com> Signed-off-by: Ondrej Ille <ondrej.ille@gmail.com> Signed-off-by: Pavel Pisa <pisa@cmp.felk.cvut.cz> Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
- Loading branch information
Martin Jerabek
authored and
Marc Kleine-Budde
committed
Apr 19, 2022
1 parent
1da9d6e
commit 2dcb8e8
Showing
8 changed files
with
1,995 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
config CAN_CTUCANFD | ||
tristate "CTU CAN-FD IP core" | ||
help | ||
This driver adds support for the CTU CAN FD open-source IP core. | ||
More documentation and core sources at project page | ||
(https://gitlab.fel.cvut.cz/canbus/ctucanfd_ip_core). | ||
The core integration to Xilinx Zynq system as platform driver | ||
is available (https://gitlab.fel.cvut.cz/canbus/zynq/zynq-can-sja1000-top). | ||
Implementation on Intel FPGA-based PCI Express board is available | ||
from project (https://gitlab.fel.cvut.cz/canbus/pcie-ctucanfd) and | ||
on Intel SoC from project (https://gitlab.fel.cvut.cz/canbus/intel-soc-ctucanfd). | ||
Guidepost CTU FEE CAN bus projects page https://canbus.pages.fel.cvut.cz/ . |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
# SPDX-License-Identifier: GPL-2.0-or-later | ||
# | ||
# Makefile for the CTU CAN-FD IP module drivers | ||
# | ||
|
||
obj-$(CONFIG_CAN_CTUCANFD) := ctucanfd.o | ||
ctucanfd-y := ctucanfd_base.o |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,82 @@ | ||
/* SPDX-License-Identifier: GPL-2.0-or-later */ | ||
/******************************************************************************* | ||
* | ||
* CTU CAN FD IP Core | ||
* | ||
* Copyright (C) 2015-2018 Ondrej Ille <ondrej.ille@gmail.com> FEE CTU | ||
* Copyright (C) 2018-2021 Ondrej Ille <ondrej.ille@gmail.com> self-funded | ||
* Copyright (C) 2018-2019 Martin Jerabek <martin.jerabek01@gmail.com> FEE CTU | ||
* Copyright (C) 2018-2021 Pavel Pisa <pisa@cmp.felk.cvut.cz> FEE CTU/self-funded | ||
* | ||
* Project advisors: | ||
* Jiri Novak <jnovak@fel.cvut.cz> | ||
* Pavel Pisa <pisa@cmp.felk.cvut.cz> | ||
* | ||
* Department of Measurement (http://meas.fel.cvut.cz/) | ||
* Faculty of Electrical Engineering (http://www.fel.cvut.cz) | ||
* Czech Technical University (http://www.cvut.cz/) | ||
******************************************************************************/ | ||
|
||
#ifndef __CTUCANFD__ | ||
#define __CTUCANFD__ | ||
|
||
#include <linux/netdevice.h> | ||
#include <linux/can/dev.h> | ||
#include <linux/list.h> | ||
|
||
enum ctu_can_fd_can_registers; | ||
|
||
struct ctucan_priv { | ||
struct can_priv can; /* must be first member! */ | ||
|
||
void __iomem *mem_base; | ||
u32 (*read_reg)(struct ctucan_priv *priv, | ||
enum ctu_can_fd_can_registers reg); | ||
void (*write_reg)(struct ctucan_priv *priv, | ||
enum ctu_can_fd_can_registers reg, u32 val); | ||
|
||
unsigned int txb_head; | ||
unsigned int txb_tail; | ||
u32 txb_prio; | ||
unsigned int ntxbufs; | ||
spinlock_t tx_lock; /* spinlock to serialize allocation and processing of TX buffers */ | ||
|
||
struct napi_struct napi; | ||
struct device *dev; | ||
struct clk *can_clk; | ||
|
||
int irq_flags; | ||
unsigned long drv_flags; | ||
|
||
u32 rxfrm_first_word; | ||
|
||
struct list_head peers_on_pdev; | ||
}; | ||
|
||
/** | ||
* ctucan_probe_common - Device type independent registration call | ||
* | ||
* This function does all the memory allocation and registration for the CAN | ||
* device. | ||
* | ||
* @dev: Handle to the generic device structure | ||
* @addr: Base address of CTU CAN FD core address | ||
* @irq: Interrupt number | ||
* @ntxbufs: Number of implemented Tx buffers | ||
* @can_clk_rate: Clock rate, if 0 then clock are taken from device node | ||
* @pm_enable_call: Whether pm_runtime_enable should be called | ||
* @set_drvdata_fnc: Function to set network driver data for physical device | ||
* | ||
* Return: 0 on success and failure value on error | ||
*/ | ||
int ctucan_probe_common(struct device *dev, void __iomem *addr, | ||
int irq, unsigned int ntxbufs, | ||
unsigned long can_clk_rate, | ||
int pm_enable_call, | ||
void (*set_drvdata_fnc)(struct device *dev, | ||
struct net_device *ndev)); | ||
|
||
int ctucan_suspend(struct device *dev) __maybe_unused; | ||
int ctucan_resume(struct device *dev) __maybe_unused; | ||
|
||
#endif /*__CTUCANFD__*/ |
Oops, something went wrong.