Skip to content

Commit 50ad649

Browse files
committed
Merge tag 'linux-can-next-for-5.20-20220720' of git://git.kernel.org/pub/scm/linux/kernel/git/mkl/linux-can-next
Marc Kleine-Budde says: ==================== this is a pull request of 29 patches for net-next/master. The first 6 patches target the slcan driver. Dan Carpenter contributes a hardening patch, followed by 5 cleanup patches. Biju Das contributes 5 patches to prepare the sja1000 driver to support the Renesas RZ/N1 SJA1000 CAN controller. Dario Binacchi's patch for the slcan driver fixes a sleep with held spin lock. Another patch by Dario Binacchi fixes a wrong comment in the c_can driver. Pavel Pisa updates the CTU CAN FD IP core registers. Stephane Grosjean contributes 3 patches to the peak_usb driver for cleanups and support of a new MCU. The last 12 patches are by Vincent Mailhol, they fix and improve the txerr and rxerr reporting in all CAN drivers. ==================== Signed-off-by: David S. Miller <[email protected]>
2 parents c2fe9ec + 1dbd874 commit 50ad649

File tree

35 files changed

+376
-204
lines changed

35 files changed

+376
-204
lines changed
Lines changed: 132 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,132 @@
1+
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
2+
%YAML 1.2
3+
---
4+
$id: http://devicetree.org/schemas/net/can/nxp,sja1000.yaml#
5+
$schema: http://devicetree.org/meta-schemas/core.yaml#
6+
7+
title: Memory mapped SJA1000 CAN controller from NXP (formerly Philips)
8+
9+
maintainers:
10+
- Wolfgang Grandegger <[email protected]>
11+
12+
properties:
13+
compatible:
14+
oneOf:
15+
- enum:
16+
- nxp,sja1000
17+
- technologic,sja1000
18+
- items:
19+
- enum:
20+
- renesas,r9a06g032-sja1000 # RZ/N1D
21+
- renesas,r9a06g033-sja1000 # RZ/N1S
22+
- const: renesas,rzn1-sja1000 # RZ/N1
23+
24+
reg:
25+
maxItems: 1
26+
27+
interrupts:
28+
maxItems: 1
29+
30+
clocks:
31+
maxItems: 1
32+
33+
reg-io-width:
34+
$ref: /schemas/types.yaml#/definitions/uint32
35+
description: I/O register width (in bytes) implemented by this device
36+
default: 1
37+
enum: [ 1, 2, 4 ]
38+
39+
nxp,external-clock-frequency:
40+
$ref: /schemas/types.yaml#/definitions/uint32
41+
default: 16000000
42+
description: |
43+
Frequency of the external oscillator clock in Hz.
44+
The internal clock frequency used by the SJA1000 is half of that value.
45+
46+
nxp,tx-output-mode:
47+
$ref: /schemas/types.yaml#/definitions/uint32
48+
enum: [ 0, 1, 2, 3 ]
49+
default: 1
50+
description: |
51+
operation mode of the TX output control logic. Valid values are:
52+
<0> : bi-phase output mode
53+
<1> : normal output mode (default)
54+
<2> : test output mode
55+
<3> : clock output mode
56+
57+
nxp,tx-output-config:
58+
$ref: /schemas/types.yaml#/definitions/uint32
59+
default: 0x02
60+
description: |
61+
TX output pin configuration. Valid values are any one of the below
62+
or combination of TX0 and TX1:
63+
<0x01> : TX0 invert
64+
<0x02> : TX0 pull-down (default)
65+
<0x04> : TX0 pull-up
66+
<0x06> : TX0 push-pull
67+
<0x08> : TX1 invert
68+
<0x10> : TX1 pull-down
69+
<0x20> : TX1 pull-up
70+
<0x30> : TX1 push-pull
71+
72+
nxp,clock-out-frequency:
73+
$ref: /schemas/types.yaml#/definitions/uint32
74+
description: |
75+
clock frequency in Hz on the CLKOUT pin.
76+
If not specified or if the specified value is 0, the CLKOUT pin
77+
will be disabled.
78+
79+
nxp,no-comparator-bypass:
80+
type: boolean
81+
description: Allows to disable the CAN input comparator.
82+
83+
required:
84+
- compatible
85+
- reg
86+
- interrupts
87+
88+
allOf:
89+
- $ref: can-controller.yaml#
90+
- if:
91+
properties:
92+
compatible:
93+
contains:
94+
enum:
95+
- technologic,sja1000
96+
- renesas,rzn1-sja1000
97+
then:
98+
required:
99+
- reg-io-width
100+
- if:
101+
properties:
102+
compatible:
103+
contains:
104+
const: renesas,rzn1-sja1000
105+
then:
106+
required:
107+
- clocks
108+
109+
unevaluatedProperties: false
110+
111+
examples:
112+
- |
113+
can@1a000 {
114+
compatible = "technologic,sja1000";
115+
reg = <0x1a000 0x100>;
116+
interrupts = <1>;
117+
reg-io-width = <2>;
118+
nxp,tx-output-config = <0x06>;
119+
nxp,external-clock-frequency = <24000000>;
120+
};
121+
122+
- |
123+
#include <dt-bindings/interrupt-controller/arm-gic.h>
124+
#include <dt-bindings/clock/r9a06g032-sysctrl.h>
125+
126+
can@52104000 {
127+
compatible = "renesas,r9a06g032-sja1000", "renesas,rzn1-sja1000";
128+
reg = <0x52104000 0x800>;
129+
reg-io-width = <4>;
130+
interrupts = <GIC_SPI 95 IRQ_TYPE_LEVEL_HIGH>;
131+
clocks = <&sysctrl R9A06G032_HCLK_CAN0>;
132+
};

Documentation/devicetree/bindings/net/can/sja1000.txt

Lines changed: 0 additions & 58 deletions
This file was deleted.

drivers/net/can/c_can/c_can_main.c

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -952,15 +952,14 @@ static int c_can_handle_state_change(struct net_device *dev,
952952

953953
switch (error_type) {
954954
case C_CAN_NO_ERROR:
955-
/* error warning state */
956-
cf->can_id |= CAN_ERR_CRTL;
955+
cf->can_id |= CAN_ERR_CRTL | CAN_ERR_CNT;
957956
cf->data[1] = CAN_ERR_CRTL_ACTIVE;
958957
cf->data[6] = bec.txerr;
959958
cf->data[7] = bec.rxerr;
960959
break;
961960
case C_CAN_ERROR_WARNING:
962961
/* error warning state */
963-
cf->can_id |= CAN_ERR_CRTL;
962+
cf->can_id |= CAN_ERR_CRTL | CAN_ERR_CNT;
964963
cf->data[1] = (bec.txerr > bec.rxerr) ?
965964
CAN_ERR_CRTL_TX_WARNING :
966965
CAN_ERR_CRTL_RX_WARNING;
@@ -970,7 +969,7 @@ static int c_can_handle_state_change(struct net_device *dev,
970969
break;
971970
case C_CAN_ERROR_PASSIVE:
972971
/* error passive state */
973-
cf->can_id |= CAN_ERR_CRTL;
972+
cf->can_id |= CAN_ERR_CRTL | CAN_ERR_CNT;
974973
if (rx_err_passive)
975974
cf->data[1] |= CAN_ERR_CRTL_RX_PASSIVE;
976975
if (bec.txerr > 127)

drivers/net/can/cc770/cc770.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -512,6 +512,7 @@ static int cc770_err(struct net_device *dev, u8 status)
512512

513513
/* Use extended functions of the CC770 */
514514
if (priv->control_normal_mode & CTRL_EAF) {
515+
cf->can_id |= CAN_ERR_CNT;
515516
cf->data[6] = cc770_read_reg(priv, tx_error_counter);
516517
cf->data[7] = cc770_read_reg(priv, rx_error_counter);
517518
}

drivers/net/can/ctucanfd/ctucanfd_base.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -847,7 +847,7 @@ static void ctucan_err_interrupt(struct net_device *ndev, u32 isr)
847847
case CAN_STATE_ERROR_PASSIVE:
848848
priv->can.can_stats.error_passive++;
849849
if (skb) {
850-
cf->can_id |= CAN_ERR_CRTL;
850+
cf->can_id |= CAN_ERR_CRTL | CAN_ERR_CNT;
851851
cf->data[1] = (bec.rxerr > 127) ?
852852
CAN_ERR_CRTL_RX_PASSIVE :
853853
CAN_ERR_CRTL_TX_PASSIVE;
@@ -858,7 +858,7 @@ static void ctucan_err_interrupt(struct net_device *ndev, u32 isr)
858858
case CAN_STATE_ERROR_WARNING:
859859
priv->can.can_stats.error_warning++;
860860
if (skb) {
861-
cf->can_id |= CAN_ERR_CRTL;
861+
cf->can_id |= CAN_ERR_CRTL | CAN_ERR_CNT;
862862
cf->data[1] |= (bec.txerr > bec.rxerr) ?
863863
CAN_ERR_CRTL_TX_WARNING :
864864
CAN_ERR_CRTL_RX_WARNING;
@@ -867,6 +867,7 @@ static void ctucan_err_interrupt(struct net_device *ndev, u32 isr)
867867
}
868868
break;
869869
case CAN_STATE_ERROR_ACTIVE:
870+
cf->can_id |= CAN_ERR_CNT;
870871
cf->data[1] = CAN_ERR_CRTL_ACTIVE;
871872
cf->data[6] = bec.txerr;
872873
cf->data[7] = bec.rxerr;

drivers/net/can/ctucanfd/ctucanfd_kregs.h

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@
44
* CTU CAN FD IP Core
55
*
66
* Copyright (C) 2015-2018 Ondrej Ille <[email protected]> FEE CTU
7-
* Copyright (C) 2018-2021 Ondrej Ille <[email protected]> self-funded
7+
* Copyright (C) 2018-2022 Ondrej Ille <[email protected]> self-funded
88
* Copyright (C) 2018-2019 Martin Jerabek <[email protected]> FEE CTU
9-
* Copyright (C) 2018-2021 Pavel Pisa <[email protected]> FEE CTU/self-funded
9+
* Copyright (C) 2018-2022 Pavel Pisa <[email protected]> FEE CTU/self-funded
1010
*
1111
* Project advisors:
1212
* Jiri Novak <[email protected]>
@@ -64,9 +64,12 @@ enum ctu_can_fd_can_registers {
6464
CTUCANFD_RX_DATA = 0x6c,
6565
CTUCANFD_TX_STATUS = 0x70,
6666
CTUCANFD_TX_COMMAND = 0x74,
67+
CTUCANFD_TXTB_INFO = 0x76,
6768
CTUCANFD_TX_PRIORITY = 0x78,
6869
CTUCANFD_ERR_CAPT = 0x7c,
70+
CTUCANFD_RETR_CTR = 0x7d,
6971
CTUCANFD_ALC = 0x7e,
72+
CTUCANFD_TS_INFO = 0x7f,
7073
CTUCANFD_TRV_DELAY = 0x80,
7174
CTUCANFD_SSP_CFG = 0x82,
7275
CTUCANFD_RX_FR_CTR = 0x84,
@@ -102,8 +105,12 @@ enum ctu_can_fd_can_registers {
102105
#define REG_MODE_STM BIT(2)
103106
#define REG_MODE_AFM BIT(3)
104107
#define REG_MODE_FDE BIT(4)
108+
#define REG_MODE_TTTM BIT(5)
109+
#define REG_MODE_ROM BIT(6)
105110
#define REG_MODE_ACF BIT(7)
106111
#define REG_MODE_TSTM BIT(8)
112+
#define REG_MODE_RXBAM BIT(9)
113+
#define REG_MODE_SAM BIT(11)
107114
#define REG_MODE_RTRLE BIT(16)
108115
#define REG_MODE_RTRTH GENMASK(20, 17)
109116
#define REG_MODE_ILBP BIT(21)
@@ -123,8 +130,10 @@ enum ctu_can_fd_can_registers {
123130
#define REG_STATUS_EWL BIT(6)
124131
#define REG_STATUS_IDLE BIT(7)
125132
#define REG_STATUS_PEXS BIT(8)
133+
#define REG_STATUS_STCNT BIT(16)
126134

127135
/* COMMAND registers */
136+
#define REG_COMMAND_RXRPMV BIT(1)
128137
#define REG_COMMAND_RRB BIT(2)
129138
#define REG_COMMAND_CDO BIT(3)
130139
#define REG_COMMAND_ERCRST BIT(4)
@@ -263,27 +272,42 @@ enum ctu_can_fd_can_registers {
263272
#define REG_TX_STATUS_TX2S GENMASK(7, 4)
264273
#define REG_TX_STATUS_TX3S GENMASK(11, 8)
265274
#define REG_TX_STATUS_TX4S GENMASK(15, 12)
275+
#define REG_TX_STATUS_TX5S GENMASK(19, 16)
276+
#define REG_TX_STATUS_TX6S GENMASK(23, 20)
277+
#define REG_TX_STATUS_TX7S GENMASK(27, 24)
278+
#define REG_TX_STATUS_TX8S GENMASK(31, 28)
266279

267-
/* TX_COMMAND registers */
280+
/* TX_COMMAND TXTB_INFO registers */
268281
#define REG_TX_COMMAND_TXCE BIT(0)
269282
#define REG_TX_COMMAND_TXCR BIT(1)
270283
#define REG_TX_COMMAND_TXCA BIT(2)
271284
#define REG_TX_COMMAND_TXB1 BIT(8)
272285
#define REG_TX_COMMAND_TXB2 BIT(9)
273286
#define REG_TX_COMMAND_TXB3 BIT(10)
274287
#define REG_TX_COMMAND_TXB4 BIT(11)
288+
#define REG_TX_COMMAND_TXB5 BIT(12)
289+
#define REG_TX_COMMAND_TXB6 BIT(13)
290+
#define REG_TX_COMMAND_TXB7 BIT(14)
291+
#define REG_TX_COMMAND_TXB8 BIT(15)
292+
#define REG_TX_COMMAND_TXT_BUFFER_COUNT GENMASK(19, 16)
275293

276294
/* TX_PRIORITY registers */
277295
#define REG_TX_PRIORITY_TXT1P GENMASK(2, 0)
278296
#define REG_TX_PRIORITY_TXT2P GENMASK(6, 4)
279297
#define REG_TX_PRIORITY_TXT3P GENMASK(10, 8)
280298
#define REG_TX_PRIORITY_TXT4P GENMASK(14, 12)
299+
#define REG_TX_PRIORITY_TXT5P GENMASK(18, 16)
300+
#define REG_TX_PRIORITY_TXT6P GENMASK(22, 20)
301+
#define REG_TX_PRIORITY_TXT7P GENMASK(26, 24)
302+
#define REG_TX_PRIORITY_TXT8P GENMASK(30, 28)
281303

282-
/* ERR_CAPT ALC registers */
304+
/* ERR_CAPT RETR_CTR ALC TS_INFO registers */
283305
#define REG_ERR_CAPT_ERR_POS GENMASK(4, 0)
284306
#define REG_ERR_CAPT_ERR_TYPE GENMASK(7, 5)
307+
#define REG_ERR_CAPT_RETR_CTR_VAL GENMASK(11, 8)
285308
#define REG_ERR_CAPT_ALC_BIT GENMASK(20, 16)
286309
#define REG_ERR_CAPT_ALC_ID_FIELD GENMASK(23, 21)
310+
#define REG_ERR_CAPT_TS_BITS GENMASK(29, 24)
287311

288312
/* TRV_DELAY SSP_CFG registers */
289313
#define REG_TRV_DELAY_TRV_DELAY_VALUE GENMASK(6, 0)

drivers/net/can/grcan.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -671,6 +671,7 @@ static void grcan_err(struct net_device *dev, u32 sources, u32 status)
671671
/* There are no others at this point */
672672
break;
673673
}
674+
cf.can_id |= CAN_ERR_CNT;
674675
cf.data[6] = txerr;
675676
cf.data[7] = rxerr;
676677
priv->can.state = state;

drivers/net/can/ifi_canfd/ifi_canfd.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -492,7 +492,7 @@ static int ifi_canfd_handle_state_change(struct net_device *ndev,
492492
switch (new_state) {
493493
case CAN_STATE_ERROR_WARNING:
494494
/* error warning state */
495-
cf->can_id |= CAN_ERR_CRTL;
495+
cf->can_id |= CAN_ERR_CRTL | CAN_ERR_CNT;
496496
cf->data[1] = (bec.txerr > bec.rxerr) ?
497497
CAN_ERR_CRTL_TX_WARNING :
498498
CAN_ERR_CRTL_RX_WARNING;
@@ -501,7 +501,7 @@ static int ifi_canfd_handle_state_change(struct net_device *ndev,
501501
break;
502502
case CAN_STATE_ERROR_PASSIVE:
503503
/* error passive state */
504-
cf->can_id |= CAN_ERR_CRTL;
504+
cf->can_id |= CAN_ERR_CRTL | CAN_ERR_CNT;
505505
cf->data[1] |= CAN_ERR_CRTL_RX_PASSIVE;
506506
if (bec.txerr > 127)
507507
cf->data[1] |= CAN_ERR_CRTL_TX_PASSIVE;

drivers/net/can/janz-ican3.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1127,7 +1127,7 @@ static int ican3_handle_cevtind(struct ican3_dev *mod, struct ican3_msg *msg)
11271127
/* bus error interrupt */
11281128
if (isrc == CEVTIND_BEI) {
11291129
mod->can.can_stats.bus_error++;
1130-
cf->can_id |= CAN_ERR_PROT | CAN_ERR_BUSERROR;
1130+
cf->can_id |= CAN_ERR_PROT | CAN_ERR_BUSERROR | CAN_ERR_CNT;
11311131

11321132
switch (ecc & ECC_MASK) {
11331133
case ECC_BIT:
@@ -1153,7 +1153,7 @@ static int ican3_handle_cevtind(struct ican3_dev *mod, struct ican3_msg *msg)
11531153

11541154
if (state != mod->can.state && (state == CAN_STATE_ERROR_WARNING ||
11551155
state == CAN_STATE_ERROR_PASSIVE)) {
1156-
cf->can_id |= CAN_ERR_CRTL;
1156+
cf->can_id |= CAN_ERR_CRTL | CAN_ERR_CNT;
11571157
if (state == CAN_STATE_ERROR_WARNING) {
11581158
mod->can.can_stats.error_warning++;
11591159
cf->data[1] = (txerr > rxerr) ?

drivers/net/can/kvaser_pciefd.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1306,7 +1306,7 @@ static int kvaser_pciefd_rx_error_frame(struct kvaser_pciefd_can *can,
13061306
shhwtstamps->hwtstamp =
13071307
ns_to_ktime(div_u64(p->timestamp * 1000,
13081308
can->kv_pcie->freq_to_ticks_div));
1309-
cf->can_id |= CAN_ERR_BUSERROR;
1309+
cf->can_id |= CAN_ERR_BUSERROR | CAN_ERR_CNT;
13101310

13111311
cf->data[6] = bec.txerr;
13121312
cf->data[7] = bec.rxerr;

0 commit comments

Comments
 (0)