Re: [PATCH 2/2] can: flexcan: add support for ISO CAN-FD
From: Michael Walle <hidden>
Date: 2020-06-30 05:53:27
Also in:
linux-can, lkml
[+ Oliver] Hi Joakim, Am 2020-06-30 04:42, schrieb Joakim Zhang:
quoted
-----Original Message----- From: Michael Walle <redacted> Sent: 2020年6月30日 2:18 To: linux-can@vger.kernel.org; netdev@vger.kernel.org; linux-kernel@vger.kernel.org Cc: Wolfgang Grandegger <redacted>; Marc Kleine-Budde [off-list ref]; David S . Miller [off-list ref]; Jakub Kicinski [off-list ref]; Joakim Zhang [off-list ref]; dl-linux-imx [off-list ref]; Michael Walle [off-list ref] Subject: [PATCH 2/2] can: flexcan: add support for ISO CAN-FD Up until now, the controller used non-ISO CAN-FD mode, although it supports it. Add support for ISO mode, too. By default the hardware is in non-ISO mode and an enable bit has to be explicitly set. Signed-off-by: Michael Walle <redacted> --- drivers/net/can/flexcan.c | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-)diff --git a/drivers/net/can/flexcan.c b/drivers/net/can/flexcan.cindex 183e094f8d66..a92d3cdf4195 100644--- a/drivers/net/can/flexcan.c +++ b/drivers/net/can/flexcan.c@@ -94,6 +94,7 @@ #define FLEXCAN_CTRL2_MRP BIT(18) #define FLEXCAN_CTRL2_RRS BIT(17) #define FLEXCAN_CTRL2_EACEN BIT(16) +#define FLEXCAN_CTRL2_ISOCANFDEN BIT(12) /* FLEXCAN memory error control register (MECR) bits */ #define FLEXCAN_MECR_ECRWRDIS BIT(31)@@ -1344,14 +1345,25 @@ static int flexcan_chip_start(structnet_device *dev) else reg_mcr |= FLEXCAN_MCR_SRX_DIS; - /* MCR - CAN-FD */ - if (priv->can.ctrlmode & CAN_CTRLMODE_FD) + /* MCR, CTRL2 + * + * CAN-FD mode + * ISO CAN-FD mode + */ + reg_ctrl2 = priv->read(®s->ctrl2); + if (priv->can.ctrlmode & CAN_CTRLMODE_FD) { reg_mcr |= FLEXCAN_MCR_FDEN; - else + reg_ctrl2 |= FLEXCAN_CTRL2_ISOCANFDEN; + } else { reg_mcr &= ~FLEXCAN_MCR_FDEN; + } + + if (priv->can.ctrlmode & CAN_CTRLMODE_FD_NON_ISO) + reg_ctrl2 &= ~FLEXCAN_CTRL2_ISOCANFDEN;
[..]
ip link set can0 up type can bitrate 1000000 dbitrate 5000000 fd on ip link set can0 up type can bitrate 1000000 dbitrate 5000000 fd on \ fd-non-iso on
vs.
ip link set can0 up type can bitrate 1000000 dbitrate 5000000 fd-non-iso on
I haven't found anything if CAN_CTRLMODE_FD_NON_ISO depends on
CAN_CTRLMODE_FD. I.e. wether CAN_CTRLMODE_FD_NON_ISO can only be set if
CAN_CTRLMODE_FD is also set.
Only the following piece of code, which might be a hint that you
have to set CAN_CTRLMODE_FD if you wan't to use CAN_CTRLMODE_FD_NON_ISO:
drivers/net/can/dev.c:
/* do not check for static fd-non-iso if 'fd' is disabled */
if (!(maskedflags & CAN_CTRLMODE_FD))
ctrlstatic &= ~CAN_CTRLMODE_FD_NON_ISO;
If CAN_CTRLMODE_FD_NON_ISO can be set without CAN_CTRLMODE_FD, what
should be the mode if both are set at the same time?
Marc? Oliver?
-michael