0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024 #include <linux/module.h>
0025 #include <linux/moduleparam.h>
0026 #include <linux/kernel.h>
0027 #include <linux/types.h>
0028 #include <linux/interrupt.h>
0029 #include <linux/errno.h>
0030 #include <linux/ethtool.h>
0031 #include <linux/netdevice.h>
0032 #include <linux/platform_device.h>
0033 #include <linux/can/dev.h>
0034 #include <linux/clk.h>
0035 #include <linux/of.h>
0036 #include <linux/of_device.h>
0037 #include <linux/bitmap.h>
0038 #include <linux/bitops.h>
0039 #include <linux/iopoll.h>
0040 #include <linux/reset.h>
0041
0042 #define RCANFD_DRV_NAME "rcar_canfd"
0043
0044 enum rcanfd_chip_id {
0045 RENESAS_RCAR_GEN3 = 0,
0046 RENESAS_RZG2L,
0047 RENESAS_R8A779A0,
0048 };
0049
0050
0051
0052
0053 #define RCANFD_GRMCFG_RCMC BIT(0)
0054
0055
0056 #define RCANFD_GCFG_EEFE BIT(6)
0057 #define RCANFD_GCFG_CMPOC BIT(5)
0058 #define RCANFD_GCFG_DCS BIT(4)
0059 #define RCANFD_GCFG_DCE BIT(1)
0060 #define RCANFD_GCFG_TPRI BIT(0)
0061
0062
0063 #define RCANFD_GCTR_TSRST BIT(16)
0064 #define RCANFD_GCTR_CFMPOFIE BIT(11)
0065 #define RCANFD_GCTR_THLEIE BIT(10)
0066 #define RCANFD_GCTR_MEIE BIT(9)
0067 #define RCANFD_GCTR_DEIE BIT(8)
0068 #define RCANFD_GCTR_GSLPR BIT(2)
0069 #define RCANFD_GCTR_GMDC_MASK (0x3)
0070 #define RCANFD_GCTR_GMDC_GOPM (0x0)
0071 #define RCANFD_GCTR_GMDC_GRESET (0x1)
0072 #define RCANFD_GCTR_GMDC_GTEST (0x2)
0073
0074
0075 #define RCANFD_GSTS_GRAMINIT BIT(3)
0076 #define RCANFD_GSTS_GSLPSTS BIT(2)
0077 #define RCANFD_GSTS_GHLTSTS BIT(1)
0078 #define RCANFD_GSTS_GRSTSTS BIT(0)
0079
0080 #define RCANFD_GSTS_GNOPM (BIT(0) | BIT(1) | BIT(2) | BIT(3))
0081
0082
0083 #define RCANFD_GERFL_EEF0_7 GENMASK(23, 16)
0084 #define RCANFD_GERFL_EEF1 BIT(17)
0085 #define RCANFD_GERFL_EEF0 BIT(16)
0086 #define RCANFD_GERFL_CMPOF BIT(3)
0087 #define RCANFD_GERFL_THLES BIT(2)
0088 #define RCANFD_GERFL_MES BIT(1)
0089 #define RCANFD_GERFL_DEF BIT(0)
0090
0091 #define RCANFD_GERFL_ERR(gpriv, x) \
0092 ((x) & (reg_v3u(gpriv, RCANFD_GERFL_EEF0_7, \
0093 RCANFD_GERFL_EEF0 | RCANFD_GERFL_EEF1) | \
0094 RCANFD_GERFL_MES | \
0095 ((gpriv)->fdmode ? RCANFD_GERFL_CMPOF : 0)))
0096
0097
0098
0099
0100 #define RCANFD_GAFLCFG_SETRNC(gpriv, n, x) \
0101 (((x) & reg_v3u(gpriv, 0x1ff, 0xff)) << \
0102 (reg_v3u(gpriv, 16, 24) - (n) * reg_v3u(gpriv, 16, 8)))
0103
0104 #define RCANFD_GAFLCFG_GETRNC(gpriv, n, x) \
0105 (((x) >> (reg_v3u(gpriv, 16, 24) - (n) * reg_v3u(gpriv, 16, 8))) & \
0106 reg_v3u(gpriv, 0x1ff, 0xff))
0107
0108
0109 #define RCANFD_GAFLECTR_AFLDAE BIT(8)
0110 #define RCANFD_GAFLECTR_AFLPN(gpriv, x) ((x) & reg_v3u(gpriv, 0x7f, 0x1f))
0111
0112
0113 #define RCANFD_GAFLID_GAFLLB BIT(29)
0114
0115
0116 #define RCANFD_GAFLP1_GAFLFDP(x) (1 << (x))
0117
0118
0119
0120
0121 #define RCANFD_CFG_SJW(x) (((x) & 0x3) << 24)
0122 #define RCANFD_CFG_TSEG2(x) (((x) & 0x7) << 20)
0123 #define RCANFD_CFG_TSEG1(x) (((x) & 0xf) << 16)
0124 #define RCANFD_CFG_BRP(x) (((x) & 0x3ff) << 0)
0125
0126
0127 #define RCANFD_NCFG_NTSEG2(gpriv, x) \
0128 (((x) & reg_v3u(gpriv, 0x7f, 0x1f)) << reg_v3u(gpriv, 25, 24))
0129
0130 #define RCANFD_NCFG_NTSEG1(gpriv, x) \
0131 (((x) & reg_v3u(gpriv, 0xff, 0x7f)) << reg_v3u(gpriv, 17, 16))
0132
0133 #define RCANFD_NCFG_NSJW(gpriv, x) \
0134 (((x) & reg_v3u(gpriv, 0x7f, 0x1f)) << reg_v3u(gpriv, 10, 11))
0135
0136 #define RCANFD_NCFG_NBRP(x) (((x) & 0x3ff) << 0)
0137
0138
0139 #define RCANFD_CCTR_CTME BIT(24)
0140 #define RCANFD_CCTR_ERRD BIT(23)
0141 #define RCANFD_CCTR_BOM_MASK (0x3 << 21)
0142 #define RCANFD_CCTR_BOM_ISO (0x0 << 21)
0143 #define RCANFD_CCTR_BOM_BENTRY (0x1 << 21)
0144 #define RCANFD_CCTR_BOM_BEND (0x2 << 21)
0145 #define RCANFD_CCTR_TDCVFIE BIT(19)
0146 #define RCANFD_CCTR_SOCOIE BIT(18)
0147 #define RCANFD_CCTR_EOCOIE BIT(17)
0148 #define RCANFD_CCTR_TAIE BIT(16)
0149 #define RCANFD_CCTR_ALIE BIT(15)
0150 #define RCANFD_CCTR_BLIE BIT(14)
0151 #define RCANFD_CCTR_OLIE BIT(13)
0152 #define RCANFD_CCTR_BORIE BIT(12)
0153 #define RCANFD_CCTR_BOEIE BIT(11)
0154 #define RCANFD_CCTR_EPIE BIT(10)
0155 #define RCANFD_CCTR_EWIE BIT(9)
0156 #define RCANFD_CCTR_BEIE BIT(8)
0157 #define RCANFD_CCTR_CSLPR BIT(2)
0158 #define RCANFD_CCTR_CHMDC_MASK (0x3)
0159 #define RCANFD_CCTR_CHDMC_COPM (0x0)
0160 #define RCANFD_CCTR_CHDMC_CRESET (0x1)
0161 #define RCANFD_CCTR_CHDMC_CHLT (0x2)
0162
0163
0164 #define RCANFD_CSTS_COMSTS BIT(7)
0165 #define RCANFD_CSTS_RECSTS BIT(6)
0166 #define RCANFD_CSTS_TRMSTS BIT(5)
0167 #define RCANFD_CSTS_BOSTS BIT(4)
0168 #define RCANFD_CSTS_EPSTS BIT(3)
0169 #define RCANFD_CSTS_SLPSTS BIT(2)
0170 #define RCANFD_CSTS_HLTSTS BIT(1)
0171 #define RCANFD_CSTS_CRSTSTS BIT(0)
0172
0173 #define RCANFD_CSTS_TECCNT(x) (((x) >> 24) & 0xff)
0174 #define RCANFD_CSTS_RECCNT(x) (((x) >> 16) & 0xff)
0175
0176
0177 #define RCANFD_CERFL_ADERR BIT(14)
0178 #define RCANFD_CERFL_B0ERR BIT(13)
0179 #define RCANFD_CERFL_B1ERR BIT(12)
0180 #define RCANFD_CERFL_CERR BIT(11)
0181 #define RCANFD_CERFL_AERR BIT(10)
0182 #define RCANFD_CERFL_FERR BIT(9)
0183 #define RCANFD_CERFL_SERR BIT(8)
0184 #define RCANFD_CERFL_ALF BIT(7)
0185 #define RCANFD_CERFL_BLF BIT(6)
0186 #define RCANFD_CERFL_OVLF BIT(5)
0187 #define RCANFD_CERFL_BORF BIT(4)
0188 #define RCANFD_CERFL_BOEF BIT(3)
0189 #define RCANFD_CERFL_EPF BIT(2)
0190 #define RCANFD_CERFL_EWF BIT(1)
0191 #define RCANFD_CERFL_BEF BIT(0)
0192
0193 #define RCANFD_CERFL_ERR(x) ((x) & (0x7fff))
0194
0195
0196 #define RCANFD_DCFG_DSJW(x) (((x) & 0x7) << 24)
0197
0198 #define RCANFD_DCFG_DTSEG2(gpriv, x) \
0199 (((x) & reg_v3u(gpriv, 0x0f, 0x7)) << reg_v3u(gpriv, 16, 20))
0200
0201 #define RCANFD_DCFG_DTSEG1(gpriv, x) \
0202 (((x) & reg_v3u(gpriv, 0x1f, 0xf)) << reg_v3u(gpriv, 8, 16))
0203
0204 #define RCANFD_DCFG_DBRP(x) (((x) & 0xff) << 0)
0205
0206
0207 #define RCANFD_FDCFG_CLOE BIT(30)
0208 #define RCANFD_FDCFG_FDOE BIT(28)
0209 #define RCANFD_FDCFG_TDCE BIT(9)
0210 #define RCANFD_FDCFG_TDCOC BIT(8)
0211 #define RCANFD_FDCFG_TDCO(x) (((x) & 0x7f) >> 16)
0212
0213
0214 #define RCANFD_RFCC_RFIM BIT(12)
0215 #define RCANFD_RFCC_RFDC(x) (((x) & 0x7) << 8)
0216 #define RCANFD_RFCC_RFPLS(x) (((x) & 0x7) << 4)
0217 #define RCANFD_RFCC_RFIE BIT(1)
0218 #define RCANFD_RFCC_RFE BIT(0)
0219
0220
0221 #define RCANFD_RFSTS_RFIF BIT(3)
0222 #define RCANFD_RFSTS_RFMLT BIT(2)
0223 #define RCANFD_RFSTS_RFFLL BIT(1)
0224 #define RCANFD_RFSTS_RFEMP BIT(0)
0225
0226
0227 #define RCANFD_RFID_RFIDE BIT(31)
0228 #define RCANFD_RFID_RFRTR BIT(30)
0229
0230
0231 #define RCANFD_RFPTR_RFDLC(x) (((x) >> 28) & 0xf)
0232 #define RCANFD_RFPTR_RFPTR(x) (((x) >> 16) & 0xfff)
0233 #define RCANFD_RFPTR_RFTS(x) (((x) >> 0) & 0xffff)
0234
0235
0236 #define RCANFD_RFFDSTS_RFFDF BIT(2)
0237 #define RCANFD_RFFDSTS_RFBRS BIT(1)
0238 #define RCANFD_RFFDSTS_RFESI BIT(0)
0239
0240
0241
0242
0243 #define RCANFD_CFCC_CFTML(gpriv, x) (((x) & 0xf) << reg_v3u(gpriv, 16, 20))
0244 #define RCANFD_CFCC_CFM(gpriv, x) (((x) & 0x3) << reg_v3u(gpriv, 8, 16))
0245 #define RCANFD_CFCC_CFIM BIT(12)
0246 #define RCANFD_CFCC_CFDC(gpriv, x) (((x) & 0x7) << reg_v3u(gpriv, 21, 8))
0247 #define RCANFD_CFCC_CFPLS(x) (((x) & 0x7) << 4)
0248 #define RCANFD_CFCC_CFTXIE BIT(2)
0249 #define RCANFD_CFCC_CFE BIT(0)
0250
0251
0252 #define RCANFD_CFSTS_CFMC(x) (((x) >> 8) & 0xff)
0253 #define RCANFD_CFSTS_CFTXIF BIT(4)
0254 #define RCANFD_CFSTS_CFMLT BIT(2)
0255 #define RCANFD_CFSTS_CFFLL BIT(1)
0256 #define RCANFD_CFSTS_CFEMP BIT(0)
0257
0258
0259 #define RCANFD_CFID_CFIDE BIT(31)
0260 #define RCANFD_CFID_CFRTR BIT(30)
0261 #define RCANFD_CFID_CFID_MASK(x) ((x) & 0x1fffffff)
0262
0263
0264 #define RCANFD_CFPTR_CFDLC(x) (((x) & 0xf) << 28)
0265 #define RCANFD_CFPTR_CFPTR(x) (((x) & 0xfff) << 16)
0266 #define RCANFD_CFPTR_CFTS(x) (((x) & 0xff) << 0)
0267
0268
0269 #define RCANFD_CFFDCSTS_CFFDF BIT(2)
0270 #define RCANFD_CFFDCSTS_CFBRS BIT(1)
0271 #define RCANFD_CFFDCSTS_CFESI BIT(0)
0272
0273
0274
0275
0276
0277
0278
0279
0280
0281
0282
0283
0284
0285
0286 #define RCANFD_CCFG(m) (0x0000 + (0x10 * (m)))
0287
0288 #define RCANFD_CCTR(m) (0x0004 + (0x10 * (m)))
0289
0290 #define RCANFD_CSTS(m) (0x0008 + (0x10 * (m)))
0291
0292 #define RCANFD_CERFL(m) (0x000C + (0x10 * (m)))
0293
0294
0295 #define RCANFD_GCFG (0x0084)
0296
0297 #define RCANFD_GCTR (0x0088)
0298
0299 #define RCANFD_GSTS (0x008c)
0300
0301 #define RCANFD_GERFL (0x0090)
0302
0303 #define RCANFD_GTSC (0x0094)
0304
0305 #define RCANFD_GAFLECTR (0x0098)
0306
0307 #define RCANFD_GAFLCFG(ch) (0x009c + (0x04 * ((ch) / 2)))
0308
0309 #define RCANFD_RMNB (0x00a4)
0310
0311 #define RCANFD_RMND(y) (0x00a8 + (0x04 * (y)))
0312
0313
0314 #define RCANFD_RFCC(gpriv, x) (reg_v3u(gpriv, 0x00c0, 0x00b8) + (0x04 * (x)))
0315
0316 #define RCANFD_RFSTS(gpriv, x) (RCANFD_RFCC(gpriv, x) + 0x20)
0317
0318 #define RCANFD_RFPCTR(gpriv, x) (RCANFD_RFCC(gpriv, x) + 0x40)
0319
0320
0321
0322
0323 #define RCANFD_CFCC(gpriv, ch, idx) \
0324 (reg_v3u(gpriv, 0x0120, 0x0118) + (0x0c * (ch)) + (0x04 * (idx)))
0325
0326 #define RCANFD_CFSTS(gpriv, ch, idx) \
0327 (reg_v3u(gpriv, 0x01e0, 0x0178) + (0x0c * (ch)) + (0x04 * (idx)))
0328
0329 #define RCANFD_CFPCTR(gpriv, ch, idx) \
0330 (reg_v3u(gpriv, 0x0240, 0x01d8) + (0x0c * (ch)) + (0x04 * (idx)))
0331
0332
0333 #define RCANFD_FESTS (0x0238)
0334
0335 #define RCANFD_FFSTS (0x023c)
0336
0337 #define RCANFD_FMSTS (0x0240)
0338
0339 #define RCANFD_RFISTS (0x0244)
0340
0341 #define RCANFD_CFRISTS (0x0248)
0342
0343 #define RCANFD_CFTISTS (0x024c)
0344
0345
0346 #define RCANFD_TMC(p) (0x0250 + (0x01 * (p)))
0347
0348 #define RCANFD_TMSTS(p) (0x02d0 + (0x01 * (p)))
0349
0350
0351 #define RCANFD_TMTRSTS(y) (0x0350 + (0x04 * (y)))
0352
0353 #define RCANFD_TMTARSTS(y) (0x0360 + (0x04 * (y)))
0354
0355 #define RCANFD_TMTCSTS(y) (0x0370 + (0x04 * (y)))
0356
0357 #define RCANFD_TMTASTS(y) (0x0380 + (0x04 * (y)))
0358
0359 #define RCANFD_TMIEC(y) (0x0390 + (0x04 * (y)))
0360
0361
0362 #define RCANFD_TXQCC(m) (0x03a0 + (0x04 * (m)))
0363
0364 #define RCANFD_TXQSTS(m) (0x03c0 + (0x04 * (m)))
0365
0366 #define RCANFD_TXQPCTR(m) (0x03e0 + (0x04 * (m)))
0367
0368
0369 #define RCANFD_THLCC(m) (0x0400 + (0x04 * (m)))
0370
0371 #define RCANFD_THLSTS(m) (0x0420 + (0x04 * (m)))
0372
0373 #define RCANFD_THLPCTR(m) (0x0440 + (0x04 * (m)))
0374
0375
0376 #define RCANFD_GTINTSTS0 (0x0460)
0377
0378 #define RCANFD_GTINTSTS1 (0x0464)
0379
0380 #define RCANFD_GTSTCFG (0x0468)
0381
0382 #define RCANFD_GTSTCTR (0x046c)
0383
0384 #define RCANFD_GLOCKK (0x047c)
0385
0386 #define RCANFD_GRMCFG (0x04fc)
0387
0388
0389 #define RCANFD_GAFLID(offset, j) ((offset) + (0x10 * (j)))
0390
0391 #define RCANFD_GAFLM(offset, j) ((offset) + 0x04 + (0x10 * (j)))
0392
0393 #define RCANFD_GAFLP0(offset, j) ((offset) + 0x08 + (0x10 * (j)))
0394
0395 #define RCANFD_GAFLP1(offset, j) ((offset) + 0x0c + (0x10 * (j)))
0396
0397
0398
0399
0400 #define RCANFD_C_GAFL_OFFSET (0x0500)
0401
0402
0403 #define RCANFD_C_RMID(q) (0x0600 + (0x10 * (q)))
0404 #define RCANFD_C_RMPTR(q) (0x0604 + (0x10 * (q)))
0405 #define RCANFD_C_RMDF0(q) (0x0608 + (0x10 * (q)))
0406 #define RCANFD_C_RMDF1(q) (0x060c + (0x10 * (q)))
0407
0408
0409 #define RCANFD_C_RFOFFSET (0x0e00)
0410 #define RCANFD_C_RFID(x) (RCANFD_C_RFOFFSET + (0x10 * (x)))
0411 #define RCANFD_C_RFPTR(x) (RCANFD_C_RFOFFSET + 0x04 + (0x10 * (x)))
0412 #define RCANFD_C_RFDF(x, df) \
0413 (RCANFD_C_RFOFFSET + 0x08 + (0x10 * (x)) + (0x04 * (df)))
0414
0415
0416 #define RCANFD_C_CFOFFSET (0x0e80)
0417
0418 #define RCANFD_C_CFID(ch, idx) \
0419 (RCANFD_C_CFOFFSET + (0x30 * (ch)) + (0x10 * (idx)))
0420
0421 #define RCANFD_C_CFPTR(ch, idx) \
0422 (RCANFD_C_CFOFFSET + 0x04 + (0x30 * (ch)) + (0x10 * (idx)))
0423
0424 #define RCANFD_C_CFDF(ch, idx, df) \
0425 (RCANFD_C_CFOFFSET + 0x08 + (0x30 * (ch)) + (0x10 * (idx)) + (0x04 * (df)))
0426
0427
0428 #define RCANFD_C_TMID(p) (0x1000 + (0x10 * (p)))
0429 #define RCANFD_C_TMPTR(p) (0x1004 + (0x10 * (p)))
0430 #define RCANFD_C_TMDF0(p) (0x1008 + (0x10 * (p)))
0431 #define RCANFD_C_TMDF1(p) (0x100c + (0x10 * (p)))
0432
0433
0434 #define RCANFD_C_THLACC(m) (0x1800 + (0x04 * (m)))
0435
0436 #define RCANFD_C_RPGACC(r) (0x1900 + (0x04 * (r)))
0437
0438
0439 #define RCANFD_V3U_CFDCFG (0x1314)
0440 #define RCANFD_V3U_DCFG(m) (0x1400 + (0x20 * (m)))
0441
0442 #define RCANFD_V3U_GAFL_OFFSET (0x1800)
0443
0444
0445
0446
0447 #define RCANFD_F_DCFG(m) (0x0500 + (0x20 * (m)))
0448 #define RCANFD_F_CFDCFG(m) (0x0504 + (0x20 * (m)))
0449 #define RCANFD_F_CFDCTR(m) (0x0508 + (0x20 * (m)))
0450 #define RCANFD_F_CFDSTS(m) (0x050c + (0x20 * (m)))
0451 #define RCANFD_F_CFDCRC(m) (0x0510 + (0x20 * (m)))
0452
0453
0454 #define RCANFD_F_GAFL_OFFSET (0x1000)
0455
0456
0457 #define RCANFD_F_RMID(q) (0x2000 + (0x20 * (q)))
0458 #define RCANFD_F_RMPTR(q) (0x2004 + (0x20 * (q)))
0459 #define RCANFD_F_RMFDSTS(q) (0x2008 + (0x20 * (q)))
0460 #define RCANFD_F_RMDF(q, b) (0x200c + (0x04 * (b)) + (0x20 * (q)))
0461
0462
0463 #define RCANFD_F_RFOFFSET(gpriv) reg_v3u(gpriv, 0x6000, 0x3000)
0464 #define RCANFD_F_RFID(gpriv, x) (RCANFD_F_RFOFFSET(gpriv) + (0x80 * (x)))
0465 #define RCANFD_F_RFPTR(gpriv, x) (RCANFD_F_RFOFFSET(gpriv) + 0x04 + (0x80 * (x)))
0466 #define RCANFD_F_RFFDSTS(gpriv, x) (RCANFD_F_RFOFFSET(gpriv) + 0x08 + (0x80 * (x)))
0467 #define RCANFD_F_RFDF(gpriv, x, df) \
0468 (RCANFD_F_RFOFFSET(gpriv) + 0x0c + (0x80 * (x)) + (0x04 * (df)))
0469
0470
0471 #define RCANFD_F_CFOFFSET(gpriv) reg_v3u(gpriv, 0x6400, 0x3400)
0472
0473 #define RCANFD_F_CFID(gpriv, ch, idx) \
0474 (RCANFD_F_CFOFFSET(gpriv) + (0x180 * (ch)) + (0x80 * (idx)))
0475
0476 #define RCANFD_F_CFPTR(gpriv, ch, idx) \
0477 (RCANFD_F_CFOFFSET(gpriv) + 0x04 + (0x180 * (ch)) + (0x80 * (idx)))
0478
0479 #define RCANFD_F_CFFDCSTS(gpriv, ch, idx) \
0480 (RCANFD_F_CFOFFSET(gpriv) + 0x08 + (0x180 * (ch)) + (0x80 * (idx)))
0481
0482 #define RCANFD_F_CFDF(gpriv, ch, idx, df) \
0483 (RCANFD_F_CFOFFSET(gpriv) + 0x0c + (0x180 * (ch)) + (0x80 * (idx)) + \
0484 (0x04 * (df)))
0485
0486
0487 #define RCANFD_F_TMID(p) (0x4000 + (0x20 * (p)))
0488 #define RCANFD_F_TMPTR(p) (0x4004 + (0x20 * (p)))
0489 #define RCANFD_F_TMFDCTR(p) (0x4008 + (0x20 * (p)))
0490 #define RCANFD_F_TMDF(p, b) (0x400c + (0x20 * (p)) + (0x04 * (b)))
0491
0492
0493 #define RCANFD_F_THLACC(m) (0x6000 + (0x04 * (m)))
0494
0495 #define RCANFD_F_RPGACC(r) (0x6400 + (0x04 * (r)))
0496
0497
0498 #define RCANFD_FIFO_DEPTH 8
0499 #define RCANFD_NAPI_WEIGHT 8
0500
0501 #define RCANFD_NUM_CHANNELS 8
0502 #define RCANFD_CHANNELS_MASK BIT((RCANFD_NUM_CHANNELS) - 1)
0503
0504 #define RCANFD_GAFL_PAGENUM(entry) ((entry) / 16)
0505 #define RCANFD_CHANNEL_NUMRULES 1
0506
0507
0508
0509
0510
0511 #define RCANFD_RFFIFO_IDX 0
0512
0513
0514
0515
0516 #define RCANFD_CFFIFO_IDX 0
0517
0518
0519 enum rcar_canfd_fcanclk {
0520 RCANFD_CANFDCLK = 0,
0521 RCANFD_EXTCLK,
0522 };
0523
0524 struct rcar_canfd_global;
0525
0526
0527 struct rcar_canfd_channel {
0528 struct can_priv can;
0529 struct net_device *ndev;
0530 struct rcar_canfd_global *gpriv;
0531 void __iomem *base;
0532 struct napi_struct napi;
0533 u32 tx_head;
0534 u32 tx_tail;
0535 u32 channel;
0536 spinlock_t tx_lock;
0537 };
0538
0539
0540 struct rcar_canfd_global {
0541 struct rcar_canfd_channel *ch[RCANFD_NUM_CHANNELS];
0542 void __iomem *base;
0543 struct platform_device *pdev;
0544 struct clk *clkp;
0545 struct clk *can_clk;
0546 enum rcar_canfd_fcanclk fcan;
0547 unsigned long channels_mask;
0548 bool fdmode;
0549 struct reset_control *rstc1;
0550 struct reset_control *rstc2;
0551 enum rcanfd_chip_id chip_id;
0552 u32 max_channels;
0553 };
0554
0555
0556 static const struct can_bittiming_const rcar_canfd_nom_bittiming_const = {
0557 .name = RCANFD_DRV_NAME,
0558 .tseg1_min = 2,
0559 .tseg1_max = 128,
0560 .tseg2_min = 2,
0561 .tseg2_max = 32,
0562 .sjw_max = 32,
0563 .brp_min = 1,
0564 .brp_max = 1024,
0565 .brp_inc = 1,
0566 };
0567
0568
0569 static const struct can_bittiming_const rcar_canfd_data_bittiming_const = {
0570 .name = RCANFD_DRV_NAME,
0571 .tseg1_min = 2,
0572 .tseg1_max = 16,
0573 .tseg2_min = 2,
0574 .tseg2_max = 8,
0575 .sjw_max = 8,
0576 .brp_min = 1,
0577 .brp_max = 256,
0578 .brp_inc = 1,
0579 };
0580
0581
0582 static const struct can_bittiming_const rcar_canfd_bittiming_const = {
0583 .name = RCANFD_DRV_NAME,
0584 .tseg1_min = 4,
0585 .tseg1_max = 16,
0586 .tseg2_min = 2,
0587 .tseg2_max = 8,
0588 .sjw_max = 4,
0589 .brp_min = 1,
0590 .brp_max = 1024,
0591 .brp_inc = 1,
0592 };
0593
0594
0595 static inline bool is_v3u(struct rcar_canfd_global *gpriv)
0596 {
0597 return gpriv->chip_id == RENESAS_R8A779A0;
0598 }
0599
0600 static inline u32 reg_v3u(struct rcar_canfd_global *gpriv,
0601 u32 v3u, u32 not_v3u)
0602 {
0603 return is_v3u(gpriv) ? v3u : not_v3u;
0604 }
0605
0606 static inline void rcar_canfd_update(u32 mask, u32 val, u32 __iomem *reg)
0607 {
0608 u32 data = readl(reg);
0609
0610 data &= ~mask;
0611 data |= (val & mask);
0612 writel(data, reg);
0613 }
0614
0615 static inline u32 rcar_canfd_read(void __iomem *base, u32 offset)
0616 {
0617 return readl(base + (offset));
0618 }
0619
0620 static inline void rcar_canfd_write(void __iomem *base, u32 offset, u32 val)
0621 {
0622 writel(val, base + (offset));
0623 }
0624
0625 static void rcar_canfd_set_bit(void __iomem *base, u32 reg, u32 val)
0626 {
0627 rcar_canfd_update(val, val, base + (reg));
0628 }
0629
0630 static void rcar_canfd_clear_bit(void __iomem *base, u32 reg, u32 val)
0631 {
0632 rcar_canfd_update(val, 0, base + (reg));
0633 }
0634
0635 static void rcar_canfd_update_bit(void __iomem *base, u32 reg,
0636 u32 mask, u32 val)
0637 {
0638 rcar_canfd_update(mask, val, base + (reg));
0639 }
0640
0641 static void rcar_canfd_get_data(struct rcar_canfd_channel *priv,
0642 struct canfd_frame *cf, u32 off)
0643 {
0644 u32 i, lwords;
0645
0646 lwords = DIV_ROUND_UP(cf->len, sizeof(u32));
0647 for (i = 0; i < lwords; i++)
0648 *((u32 *)cf->data + i) =
0649 rcar_canfd_read(priv->base, off + (i * sizeof(u32)));
0650 }
0651
0652 static void rcar_canfd_put_data(struct rcar_canfd_channel *priv,
0653 struct canfd_frame *cf, u32 off)
0654 {
0655 u32 i, lwords;
0656
0657 lwords = DIV_ROUND_UP(cf->len, sizeof(u32));
0658 for (i = 0; i < lwords; i++)
0659 rcar_canfd_write(priv->base, off + (i * sizeof(u32)),
0660 *((u32 *)cf->data + i));
0661 }
0662
0663 static void rcar_canfd_tx_failure_cleanup(struct net_device *ndev)
0664 {
0665 u32 i;
0666
0667 for (i = 0; i < RCANFD_FIFO_DEPTH; i++)
0668 can_free_echo_skb(ndev, i, NULL);
0669 }
0670
0671 static void rcar_canfd_set_mode(struct rcar_canfd_global *gpriv)
0672 {
0673 if (is_v3u(gpriv)) {
0674 if (gpriv->fdmode)
0675 rcar_canfd_set_bit(gpriv->base, RCANFD_V3U_CFDCFG,
0676 RCANFD_FDCFG_FDOE);
0677 else
0678 rcar_canfd_set_bit(gpriv->base, RCANFD_V3U_CFDCFG,
0679 RCANFD_FDCFG_CLOE);
0680 } else {
0681 if (gpriv->fdmode)
0682 rcar_canfd_set_bit(gpriv->base, RCANFD_GRMCFG,
0683 RCANFD_GRMCFG_RCMC);
0684 else
0685 rcar_canfd_clear_bit(gpriv->base, RCANFD_GRMCFG,
0686 RCANFD_GRMCFG_RCMC);
0687 }
0688 }
0689
0690 static int rcar_canfd_reset_controller(struct rcar_canfd_global *gpriv)
0691 {
0692 u32 sts, ch;
0693 int err;
0694
0695
0696
0697
0698 err = readl_poll_timeout((gpriv->base + RCANFD_GSTS), sts,
0699 !(sts & RCANFD_GSTS_GRAMINIT), 2, 500000);
0700 if (err) {
0701 dev_dbg(&gpriv->pdev->dev, "global raminit failed\n");
0702 return err;
0703 }
0704
0705
0706 rcar_canfd_clear_bit(gpriv->base, RCANFD_GCTR, RCANFD_GCTR_GSLPR);
0707 rcar_canfd_update_bit(gpriv->base, RCANFD_GCTR,
0708 RCANFD_GCTR_GMDC_MASK, RCANFD_GCTR_GMDC_GRESET);
0709
0710
0711 err = readl_poll_timeout((gpriv->base + RCANFD_GSTS), sts,
0712 (sts & RCANFD_GSTS_GRSTSTS), 2, 500000);
0713 if (err) {
0714 dev_dbg(&gpriv->pdev->dev, "global reset failed\n");
0715 return err;
0716 }
0717
0718
0719 rcar_canfd_write(gpriv->base, RCANFD_GERFL, 0x0);
0720
0721
0722 rcar_canfd_set_mode(gpriv);
0723
0724
0725 for_each_set_bit(ch, &gpriv->channels_mask, gpriv->max_channels) {
0726 rcar_canfd_clear_bit(gpriv->base,
0727 RCANFD_CCTR(ch), RCANFD_CCTR_CSLPR);
0728
0729 rcar_canfd_update_bit(gpriv->base, RCANFD_CCTR(ch),
0730 RCANFD_CCTR_CHMDC_MASK,
0731 RCANFD_CCTR_CHDMC_CRESET);
0732
0733
0734 err = readl_poll_timeout((gpriv->base + RCANFD_CSTS(ch)), sts,
0735 (sts & RCANFD_CSTS_CRSTSTS),
0736 2, 500000);
0737 if (err) {
0738 dev_dbg(&gpriv->pdev->dev,
0739 "channel %u reset failed\n", ch);
0740 return err;
0741 }
0742 }
0743 return 0;
0744 }
0745
0746 static void rcar_canfd_configure_controller(struct rcar_canfd_global *gpriv)
0747 {
0748 u32 cfg, ch;
0749
0750
0751
0752
0753 cfg = RCANFD_GCFG_EEFE;
0754
0755 if (gpriv->fdmode)
0756
0757 cfg |= RCANFD_GCFG_CMPOC;
0758
0759
0760 if (gpriv->fcan != RCANFD_CANFDCLK)
0761 cfg |= RCANFD_GCFG_DCS;
0762
0763 rcar_canfd_set_bit(gpriv->base, RCANFD_GCFG, cfg);
0764
0765
0766 for_each_set_bit(ch, &gpriv->channels_mask, gpriv->max_channels) {
0767 rcar_canfd_set_bit(gpriv->base, RCANFD_CCTR(ch),
0768 RCANFD_CCTR_ERRD);
0769 rcar_canfd_update_bit(gpriv->base, RCANFD_CCTR(ch),
0770 RCANFD_CCTR_BOM_MASK,
0771 RCANFD_CCTR_BOM_BENTRY);
0772 }
0773 }
0774
0775 static void rcar_canfd_configure_afl_rules(struct rcar_canfd_global *gpriv,
0776 u32 ch)
0777 {
0778 u32 cfg;
0779 int offset, start, page, num_rules = RCANFD_CHANNEL_NUMRULES;
0780 u32 ridx = ch + RCANFD_RFFIFO_IDX;
0781
0782 if (ch == 0) {
0783 start = 0;
0784 } else {
0785
0786 cfg = rcar_canfd_read(gpriv->base, RCANFD_GAFLCFG(ch));
0787 start = RCANFD_GAFLCFG_GETRNC(gpriv, 0, cfg);
0788 }
0789
0790
0791 page = RCANFD_GAFL_PAGENUM(start);
0792 rcar_canfd_set_bit(gpriv->base, RCANFD_GAFLECTR,
0793 (RCANFD_GAFLECTR_AFLPN(gpriv, page) |
0794 RCANFD_GAFLECTR_AFLDAE));
0795
0796
0797 rcar_canfd_set_bit(gpriv->base, RCANFD_GAFLCFG(ch),
0798 RCANFD_GAFLCFG_SETRNC(gpriv, ch, num_rules));
0799 if (is_v3u(gpriv))
0800 offset = RCANFD_V3U_GAFL_OFFSET;
0801 else if (gpriv->fdmode)
0802 offset = RCANFD_F_GAFL_OFFSET;
0803 else
0804 offset = RCANFD_C_GAFL_OFFSET;
0805
0806
0807 rcar_canfd_write(gpriv->base, RCANFD_GAFLID(offset, start), 0);
0808
0809 rcar_canfd_write(gpriv->base, RCANFD_GAFLM(offset, start), 0);
0810
0811 rcar_canfd_write(gpriv->base, RCANFD_GAFLP0(offset, start), 0);
0812
0813 rcar_canfd_set_bit(gpriv->base, RCANFD_GAFLP1(offset, start),
0814 RCANFD_GAFLP1_GAFLFDP(ridx));
0815
0816
0817 rcar_canfd_clear_bit(gpriv->base,
0818 RCANFD_GAFLECTR, RCANFD_GAFLECTR_AFLDAE);
0819 }
0820
0821 static void rcar_canfd_configure_rx(struct rcar_canfd_global *gpriv, u32 ch)
0822 {
0823
0824 u32 cfg;
0825 u16 rfdc, rfpls;
0826
0827
0828 u32 ridx = ch + RCANFD_RFFIFO_IDX;
0829
0830 rfdc = 2;
0831 if (gpriv->fdmode)
0832 rfpls = 7;
0833 else
0834 rfpls = 0;
0835
0836 cfg = (RCANFD_RFCC_RFIM | RCANFD_RFCC_RFDC(rfdc) |
0837 RCANFD_RFCC_RFPLS(rfpls) | RCANFD_RFCC_RFIE);
0838 rcar_canfd_write(gpriv->base, RCANFD_RFCC(gpriv, ridx), cfg);
0839 }
0840
0841 static void rcar_canfd_configure_tx(struct rcar_canfd_global *gpriv, u32 ch)
0842 {
0843
0844
0845
0846
0847
0848
0849 u32 cfg;
0850 u16 cftml, cfm, cfdc, cfpls;
0851
0852 cftml = 0;
0853 cfm = 1;
0854 cfdc = 2;
0855 if (gpriv->fdmode)
0856 cfpls = 7;
0857 else
0858 cfpls = 0;
0859
0860 cfg = (RCANFD_CFCC_CFTML(gpriv, cftml) | RCANFD_CFCC_CFM(gpriv, cfm) |
0861 RCANFD_CFCC_CFIM | RCANFD_CFCC_CFDC(gpriv, cfdc) |
0862 RCANFD_CFCC_CFPLS(cfpls) | RCANFD_CFCC_CFTXIE);
0863 rcar_canfd_write(gpriv->base, RCANFD_CFCC(gpriv, ch, RCANFD_CFFIFO_IDX), cfg);
0864
0865 if (gpriv->fdmode)
0866
0867 rcar_canfd_write(gpriv->base,
0868 RCANFD_F_CFFDCSTS(gpriv, ch, RCANFD_CFFIFO_IDX), 0);
0869 }
0870
0871 static void rcar_canfd_enable_global_interrupts(struct rcar_canfd_global *gpriv)
0872 {
0873 u32 ctr;
0874
0875
0876 rcar_canfd_write(gpriv->base, RCANFD_GERFL, 0);
0877
0878
0879 ctr = RCANFD_GCTR_MEIE;
0880 if (gpriv->fdmode)
0881 ctr |= RCANFD_GCTR_CFMPOFIE;
0882
0883 rcar_canfd_set_bit(gpriv->base, RCANFD_GCTR, ctr);
0884 }
0885
0886 static void rcar_canfd_disable_global_interrupts(struct rcar_canfd_global
0887 *gpriv)
0888 {
0889
0890 rcar_canfd_write(gpriv->base, RCANFD_GCTR, 0);
0891
0892
0893 rcar_canfd_write(gpriv->base, RCANFD_GERFL, 0);
0894 }
0895
0896 static void rcar_canfd_enable_channel_interrupts(struct rcar_canfd_channel
0897 *priv)
0898 {
0899 u32 ctr, ch = priv->channel;
0900
0901
0902 rcar_canfd_write(priv->base, RCANFD_CERFL(ch), 0);
0903
0904
0905 ctr = (RCANFD_CCTR_TAIE |
0906 RCANFD_CCTR_ALIE | RCANFD_CCTR_BLIE |
0907 RCANFD_CCTR_OLIE | RCANFD_CCTR_BORIE |
0908 RCANFD_CCTR_BOEIE | RCANFD_CCTR_EPIE |
0909 RCANFD_CCTR_EWIE | RCANFD_CCTR_BEIE);
0910 rcar_canfd_set_bit(priv->base, RCANFD_CCTR(ch), ctr);
0911 }
0912
0913 static void rcar_canfd_disable_channel_interrupts(struct rcar_canfd_channel
0914 *priv)
0915 {
0916 u32 ctr, ch = priv->channel;
0917
0918 ctr = (RCANFD_CCTR_TAIE |
0919 RCANFD_CCTR_ALIE | RCANFD_CCTR_BLIE |
0920 RCANFD_CCTR_OLIE | RCANFD_CCTR_BORIE |
0921 RCANFD_CCTR_BOEIE | RCANFD_CCTR_EPIE |
0922 RCANFD_CCTR_EWIE | RCANFD_CCTR_BEIE);
0923 rcar_canfd_clear_bit(priv->base, RCANFD_CCTR(ch), ctr);
0924
0925
0926 rcar_canfd_write(priv->base, RCANFD_CERFL(ch), 0);
0927 }
0928
0929 static void rcar_canfd_global_error(struct net_device *ndev)
0930 {
0931 struct rcar_canfd_channel *priv = netdev_priv(ndev);
0932 struct rcar_canfd_global *gpriv = priv->gpriv;
0933 struct net_device_stats *stats = &ndev->stats;
0934 u32 ch = priv->channel;
0935 u32 gerfl, sts;
0936 u32 ridx = ch + RCANFD_RFFIFO_IDX;
0937
0938 gerfl = rcar_canfd_read(priv->base, RCANFD_GERFL);
0939 if ((gerfl & RCANFD_GERFL_EEF0) && (ch == 0)) {
0940 netdev_dbg(ndev, "Ch0: ECC Error flag\n");
0941 stats->tx_dropped++;
0942 }
0943 if ((gerfl & RCANFD_GERFL_EEF1) && (ch == 1)) {
0944 netdev_dbg(ndev, "Ch1: ECC Error flag\n");
0945 stats->tx_dropped++;
0946 }
0947 if (gerfl & RCANFD_GERFL_MES) {
0948 sts = rcar_canfd_read(priv->base,
0949 RCANFD_CFSTS(gpriv, ch, RCANFD_CFFIFO_IDX));
0950 if (sts & RCANFD_CFSTS_CFMLT) {
0951 netdev_dbg(ndev, "Tx Message Lost flag\n");
0952 stats->tx_dropped++;
0953 rcar_canfd_write(priv->base,
0954 RCANFD_CFSTS(gpriv, ch, RCANFD_CFFIFO_IDX),
0955 sts & ~RCANFD_CFSTS_CFMLT);
0956 }
0957
0958 sts = rcar_canfd_read(priv->base, RCANFD_RFSTS(gpriv, ridx));
0959 if (sts & RCANFD_RFSTS_RFMLT) {
0960 netdev_dbg(ndev, "Rx Message Lost flag\n");
0961 stats->rx_dropped++;
0962 rcar_canfd_write(priv->base, RCANFD_RFSTS(gpriv, ridx),
0963 sts & ~RCANFD_RFSTS_RFMLT);
0964 }
0965 }
0966 if (gpriv->fdmode && gerfl & RCANFD_GERFL_CMPOF) {
0967
0968
0969
0970
0971 netdev_dbg(ndev, "global payload overflow interrupt\n");
0972 }
0973
0974
0975
0976
0977 rcar_canfd_write(priv->base, RCANFD_GERFL, 0);
0978 }
0979
0980 static void rcar_canfd_error(struct net_device *ndev, u32 cerfl,
0981 u16 txerr, u16 rxerr)
0982 {
0983 struct rcar_canfd_channel *priv = netdev_priv(ndev);
0984 struct net_device_stats *stats = &ndev->stats;
0985 struct can_frame *cf;
0986 struct sk_buff *skb;
0987 u32 ch = priv->channel;
0988
0989 netdev_dbg(ndev, "ch erfl %x txerr %u rxerr %u\n", cerfl, txerr, rxerr);
0990
0991
0992 skb = alloc_can_err_skb(ndev, &cf);
0993 if (!skb) {
0994 stats->rx_dropped++;
0995 return;
0996 }
0997
0998
0999 if (cerfl & RCANFD_CERFL_BEF) {
1000 netdev_dbg(ndev, "Bus error\n");
1001 cf->can_id |= CAN_ERR_BUSERROR | CAN_ERR_PROT;
1002 cf->data[2] = CAN_ERR_PROT_UNSPEC;
1003 priv->can.can_stats.bus_error++;
1004 }
1005 if (cerfl & RCANFD_CERFL_ADERR) {
1006 netdev_dbg(ndev, "ACK Delimiter Error\n");
1007 stats->tx_errors++;
1008 cf->data[3] |= CAN_ERR_PROT_LOC_ACK_DEL;
1009 }
1010 if (cerfl & RCANFD_CERFL_B0ERR) {
1011 netdev_dbg(ndev, "Bit Error (dominant)\n");
1012 stats->tx_errors++;
1013 cf->data[2] |= CAN_ERR_PROT_BIT0;
1014 }
1015 if (cerfl & RCANFD_CERFL_B1ERR) {
1016 netdev_dbg(ndev, "Bit Error (recessive)\n");
1017 stats->tx_errors++;
1018 cf->data[2] |= CAN_ERR_PROT_BIT1;
1019 }
1020 if (cerfl & RCANFD_CERFL_CERR) {
1021 netdev_dbg(ndev, "CRC Error\n");
1022 stats->rx_errors++;
1023 cf->data[3] |= CAN_ERR_PROT_LOC_CRC_SEQ;
1024 }
1025 if (cerfl & RCANFD_CERFL_AERR) {
1026 netdev_dbg(ndev, "ACK Error\n");
1027 stats->tx_errors++;
1028 cf->can_id |= CAN_ERR_ACK;
1029 cf->data[3] |= CAN_ERR_PROT_LOC_ACK;
1030 }
1031 if (cerfl & RCANFD_CERFL_FERR) {
1032 netdev_dbg(ndev, "Form Error\n");
1033 stats->rx_errors++;
1034 cf->data[2] |= CAN_ERR_PROT_FORM;
1035 }
1036 if (cerfl & RCANFD_CERFL_SERR) {
1037 netdev_dbg(ndev, "Stuff Error\n");
1038 stats->rx_errors++;
1039 cf->data[2] |= CAN_ERR_PROT_STUFF;
1040 }
1041 if (cerfl & RCANFD_CERFL_ALF) {
1042 netdev_dbg(ndev, "Arbitration lost Error\n");
1043 priv->can.can_stats.arbitration_lost++;
1044 cf->can_id |= CAN_ERR_LOSTARB;
1045 cf->data[0] |= CAN_ERR_LOSTARB_UNSPEC;
1046 }
1047 if (cerfl & RCANFD_CERFL_BLF) {
1048 netdev_dbg(ndev, "Bus Lock Error\n");
1049 stats->rx_errors++;
1050 cf->can_id |= CAN_ERR_BUSERROR;
1051 }
1052 if (cerfl & RCANFD_CERFL_EWF) {
1053 netdev_dbg(ndev, "Error warning interrupt\n");
1054 priv->can.state = CAN_STATE_ERROR_WARNING;
1055 priv->can.can_stats.error_warning++;
1056 cf->can_id |= CAN_ERR_CRTL | CAN_ERR_CNT;
1057 cf->data[1] = txerr > rxerr ? CAN_ERR_CRTL_TX_WARNING :
1058 CAN_ERR_CRTL_RX_WARNING;
1059 cf->data[6] = txerr;
1060 cf->data[7] = rxerr;
1061 }
1062 if (cerfl & RCANFD_CERFL_EPF) {
1063 netdev_dbg(ndev, "Error passive interrupt\n");
1064 priv->can.state = CAN_STATE_ERROR_PASSIVE;
1065 priv->can.can_stats.error_passive++;
1066 cf->can_id |= CAN_ERR_CRTL | CAN_ERR_CNT;
1067 cf->data[1] = txerr > rxerr ? CAN_ERR_CRTL_TX_PASSIVE :
1068 CAN_ERR_CRTL_RX_PASSIVE;
1069 cf->data[6] = txerr;
1070 cf->data[7] = rxerr;
1071 }
1072 if (cerfl & RCANFD_CERFL_BOEF) {
1073 netdev_dbg(ndev, "Bus-off entry interrupt\n");
1074 rcar_canfd_tx_failure_cleanup(ndev);
1075 priv->can.state = CAN_STATE_BUS_OFF;
1076 priv->can.can_stats.bus_off++;
1077 can_bus_off(ndev);
1078 cf->can_id |= CAN_ERR_BUSOFF;
1079 }
1080 if (cerfl & RCANFD_CERFL_OVLF) {
1081 netdev_dbg(ndev,
1082 "Overload Frame Transmission error interrupt\n");
1083 stats->tx_errors++;
1084 cf->can_id |= CAN_ERR_PROT;
1085 cf->data[2] |= CAN_ERR_PROT_OVERLOAD;
1086 }
1087
1088
1089 rcar_canfd_write(priv->base, RCANFD_CERFL(ch),
1090 RCANFD_CERFL_ERR(~cerfl));
1091 netif_rx(skb);
1092 }
1093
1094 static void rcar_canfd_tx_done(struct net_device *ndev)
1095 {
1096 struct rcar_canfd_channel *priv = netdev_priv(ndev);
1097 struct rcar_canfd_global *gpriv = priv->gpriv;
1098 struct net_device_stats *stats = &ndev->stats;
1099 u32 sts;
1100 unsigned long flags;
1101 u32 ch = priv->channel;
1102
1103 do {
1104 u8 unsent, sent;
1105
1106 sent = priv->tx_tail % RCANFD_FIFO_DEPTH;
1107 stats->tx_packets++;
1108 stats->tx_bytes += can_get_echo_skb(ndev, sent, NULL);
1109
1110 spin_lock_irqsave(&priv->tx_lock, flags);
1111 priv->tx_tail++;
1112 sts = rcar_canfd_read(priv->base,
1113 RCANFD_CFSTS(gpriv, ch, RCANFD_CFFIFO_IDX));
1114 unsent = RCANFD_CFSTS_CFMC(sts);
1115
1116
1117 if (unsent != RCANFD_FIFO_DEPTH)
1118 netif_wake_queue(ndev);
1119
1120 if (priv->tx_head - priv->tx_tail <= unsent) {
1121 spin_unlock_irqrestore(&priv->tx_lock, flags);
1122 break;
1123 }
1124 spin_unlock_irqrestore(&priv->tx_lock, flags);
1125
1126 } while (1);
1127
1128
1129 rcar_canfd_write(priv->base, RCANFD_CFSTS(gpriv, ch, RCANFD_CFFIFO_IDX),
1130 sts & ~RCANFD_CFSTS_CFTXIF);
1131 }
1132
1133 static void rcar_canfd_handle_global_err(struct rcar_canfd_global *gpriv, u32 ch)
1134 {
1135 struct rcar_canfd_channel *priv = gpriv->ch[ch];
1136 struct net_device *ndev = priv->ndev;
1137 u32 gerfl;
1138
1139
1140 gerfl = rcar_canfd_read(priv->base, RCANFD_GERFL);
1141 if (unlikely(RCANFD_GERFL_ERR(gpriv, gerfl)))
1142 rcar_canfd_global_error(ndev);
1143 }
1144
1145 static irqreturn_t rcar_canfd_global_err_interrupt(int irq, void *dev_id)
1146 {
1147 struct rcar_canfd_global *gpriv = dev_id;
1148 u32 ch;
1149
1150 for_each_set_bit(ch, &gpriv->channels_mask, gpriv->max_channels)
1151 rcar_canfd_handle_global_err(gpriv, ch);
1152
1153 return IRQ_HANDLED;
1154 }
1155
1156 static void rcar_canfd_handle_global_receive(struct rcar_canfd_global *gpriv, u32 ch)
1157 {
1158 struct rcar_canfd_channel *priv = gpriv->ch[ch];
1159 u32 ridx = ch + RCANFD_RFFIFO_IDX;
1160 u32 sts;
1161
1162
1163 sts = rcar_canfd_read(priv->base, RCANFD_RFSTS(gpriv, ridx));
1164 if (likely(sts & RCANFD_RFSTS_RFIF)) {
1165 if (napi_schedule_prep(&priv->napi)) {
1166
1167 rcar_canfd_clear_bit(priv->base,
1168 RCANFD_RFCC(gpriv, ridx),
1169 RCANFD_RFCC_RFIE);
1170 __napi_schedule(&priv->napi);
1171 }
1172 }
1173 }
1174
1175 static irqreturn_t rcar_canfd_global_receive_fifo_interrupt(int irq, void *dev_id)
1176 {
1177 struct rcar_canfd_global *gpriv = dev_id;
1178 u32 ch;
1179
1180 for_each_set_bit(ch, &gpriv->channels_mask, gpriv->max_channels)
1181 rcar_canfd_handle_global_receive(gpriv, ch);
1182
1183 return IRQ_HANDLED;
1184 }
1185
1186 static irqreturn_t rcar_canfd_global_interrupt(int irq, void *dev_id)
1187 {
1188 struct rcar_canfd_global *gpriv = dev_id;
1189 u32 ch;
1190
1191
1192
1193
1194 for_each_set_bit(ch, &gpriv->channels_mask, gpriv->max_channels) {
1195 rcar_canfd_handle_global_err(gpriv, ch);
1196 rcar_canfd_handle_global_receive(gpriv, ch);
1197 }
1198 return IRQ_HANDLED;
1199 }
1200
1201 static void rcar_canfd_state_change(struct net_device *ndev,
1202 u16 txerr, u16 rxerr)
1203 {
1204 struct rcar_canfd_channel *priv = netdev_priv(ndev);
1205 struct net_device_stats *stats = &ndev->stats;
1206 enum can_state rx_state, tx_state, state = priv->can.state;
1207 struct can_frame *cf;
1208 struct sk_buff *skb;
1209
1210
1211 if (txerr < 96 && rxerr < 96)
1212 state = CAN_STATE_ERROR_ACTIVE;
1213 else if (txerr < 128 && rxerr < 128)
1214 state = CAN_STATE_ERROR_WARNING;
1215
1216 if (state != priv->can.state) {
1217 netdev_dbg(ndev, "state: new %d, old %d: txerr %u, rxerr %u\n",
1218 state, priv->can.state, txerr, rxerr);
1219 skb = alloc_can_err_skb(ndev, &cf);
1220 if (!skb) {
1221 stats->rx_dropped++;
1222 return;
1223 }
1224 tx_state = txerr >= rxerr ? state : 0;
1225 rx_state = txerr <= rxerr ? state : 0;
1226
1227 can_change_state(ndev, cf, tx_state, rx_state);
1228 netif_rx(skb);
1229 }
1230 }
1231
1232 static void rcar_canfd_handle_channel_tx(struct rcar_canfd_global *gpriv, u32 ch)
1233 {
1234 struct rcar_canfd_channel *priv = gpriv->ch[ch];
1235 struct net_device *ndev = priv->ndev;
1236 u32 sts;
1237
1238
1239 sts = rcar_canfd_read(priv->base,
1240 RCANFD_CFSTS(gpriv, ch, RCANFD_CFFIFO_IDX));
1241 if (likely(sts & RCANFD_CFSTS_CFTXIF))
1242 rcar_canfd_tx_done(ndev);
1243 }
1244
1245 static irqreturn_t rcar_canfd_channel_tx_interrupt(int irq, void *dev_id)
1246 {
1247 struct rcar_canfd_global *gpriv = dev_id;
1248 u32 ch;
1249
1250 for_each_set_bit(ch, &gpriv->channels_mask, gpriv->max_channels)
1251 rcar_canfd_handle_channel_tx(gpriv, ch);
1252
1253 return IRQ_HANDLED;
1254 }
1255
1256 static void rcar_canfd_handle_channel_err(struct rcar_canfd_global *gpriv, u32 ch)
1257 {
1258 struct rcar_canfd_channel *priv = gpriv->ch[ch];
1259 struct net_device *ndev = priv->ndev;
1260 u16 txerr, rxerr;
1261 u32 sts, cerfl;
1262
1263
1264 cerfl = rcar_canfd_read(priv->base, RCANFD_CERFL(ch));
1265 sts = rcar_canfd_read(priv->base, RCANFD_CSTS(ch));
1266 txerr = RCANFD_CSTS_TECCNT(sts);
1267 rxerr = RCANFD_CSTS_RECCNT(sts);
1268 if (unlikely(RCANFD_CERFL_ERR(cerfl)))
1269 rcar_canfd_error(ndev, cerfl, txerr, rxerr);
1270
1271
1272 if (unlikely(priv->can.state != CAN_STATE_ERROR_ACTIVE &&
1273 priv->can.state != CAN_STATE_BUS_OFF))
1274 rcar_canfd_state_change(ndev, txerr, rxerr);
1275 }
1276
1277 static irqreturn_t rcar_canfd_channel_err_interrupt(int irq, void *dev_id)
1278 {
1279 struct rcar_canfd_global *gpriv = dev_id;
1280 u32 ch;
1281
1282 for_each_set_bit(ch, &gpriv->channels_mask, gpriv->max_channels)
1283 rcar_canfd_handle_channel_err(gpriv, ch);
1284
1285 return IRQ_HANDLED;
1286 }
1287
1288 static irqreturn_t rcar_canfd_channel_interrupt(int irq, void *dev_id)
1289 {
1290 struct rcar_canfd_global *gpriv = dev_id;
1291 u32 ch;
1292
1293
1294 for_each_set_bit(ch, &gpriv->channels_mask, gpriv->max_channels) {
1295 rcar_canfd_handle_channel_err(gpriv, ch);
1296 rcar_canfd_handle_channel_tx(gpriv, ch);
1297 }
1298
1299 return IRQ_HANDLED;
1300 }
1301
1302 static void rcar_canfd_set_bittiming(struct net_device *dev)
1303 {
1304 struct rcar_canfd_channel *priv = netdev_priv(dev);
1305 struct rcar_canfd_global *gpriv = priv->gpriv;
1306 const struct can_bittiming *bt = &priv->can.bittiming;
1307 const struct can_bittiming *dbt = &priv->can.data_bittiming;
1308 u16 brp, sjw, tseg1, tseg2;
1309 u32 cfg;
1310 u32 ch = priv->channel;
1311
1312
1313 brp = bt->brp - 1;
1314 sjw = bt->sjw - 1;
1315 tseg1 = bt->prop_seg + bt->phase_seg1 - 1;
1316 tseg2 = bt->phase_seg2 - 1;
1317
1318 if (priv->can.ctrlmode & CAN_CTRLMODE_FD) {
1319
1320 cfg = (RCANFD_NCFG_NTSEG1(gpriv, tseg1) | RCANFD_NCFG_NBRP(brp) |
1321 RCANFD_NCFG_NSJW(gpriv, sjw) | RCANFD_NCFG_NTSEG2(gpriv, tseg2));
1322
1323 rcar_canfd_write(priv->base, RCANFD_CCFG(ch), cfg);
1324 netdev_dbg(priv->ndev, "nrate: brp %u, sjw %u, tseg1 %u, tseg2 %u\n",
1325 brp, sjw, tseg1, tseg2);
1326
1327
1328 brp = dbt->brp - 1;
1329 sjw = dbt->sjw - 1;
1330 tseg1 = dbt->prop_seg + dbt->phase_seg1 - 1;
1331 tseg2 = dbt->phase_seg2 - 1;
1332
1333 cfg = (RCANFD_DCFG_DTSEG1(gpriv, tseg1) | RCANFD_DCFG_DBRP(brp) |
1334 RCANFD_DCFG_DSJW(sjw) | RCANFD_DCFG_DTSEG2(gpriv, tseg2));
1335
1336 if (is_v3u(gpriv))
1337 rcar_canfd_write(priv->base, RCANFD_V3U_DCFG(ch), cfg);
1338 else
1339 rcar_canfd_write(priv->base, RCANFD_F_DCFG(ch), cfg);
1340 netdev_dbg(priv->ndev, "drate: brp %u, sjw %u, tseg1 %u, tseg2 %u\n",
1341 brp, sjw, tseg1, tseg2);
1342 } else {
1343
1344 if (is_v3u(gpriv)) {
1345 cfg = (RCANFD_NCFG_NTSEG1(gpriv, tseg1) |
1346 RCANFD_NCFG_NBRP(brp) |
1347 RCANFD_NCFG_NSJW(gpriv, sjw) |
1348 RCANFD_NCFG_NTSEG2(gpriv, tseg2));
1349 } else {
1350 cfg = (RCANFD_CFG_TSEG1(tseg1) |
1351 RCANFD_CFG_BRP(brp) |
1352 RCANFD_CFG_SJW(sjw) |
1353 RCANFD_CFG_TSEG2(tseg2));
1354 }
1355
1356 rcar_canfd_write(priv->base, RCANFD_CCFG(ch), cfg);
1357 netdev_dbg(priv->ndev,
1358 "rate: brp %u, sjw %u, tseg1 %u, tseg2 %u\n",
1359 brp, sjw, tseg1, tseg2);
1360 }
1361 }
1362
1363 static int rcar_canfd_start(struct net_device *ndev)
1364 {
1365 struct rcar_canfd_channel *priv = netdev_priv(ndev);
1366 struct rcar_canfd_global *gpriv = priv->gpriv;
1367 int err = -EOPNOTSUPP;
1368 u32 sts, ch = priv->channel;
1369 u32 ridx = ch + RCANFD_RFFIFO_IDX;
1370
1371 rcar_canfd_set_bittiming(ndev);
1372
1373 rcar_canfd_enable_channel_interrupts(priv);
1374
1375
1376 rcar_canfd_update_bit(priv->base, RCANFD_CCTR(ch),
1377 RCANFD_CCTR_CHMDC_MASK, RCANFD_CCTR_CHDMC_COPM);
1378
1379
1380 err = readl_poll_timeout((priv->base + RCANFD_CSTS(ch)), sts,
1381 (sts & RCANFD_CSTS_COMSTS), 2, 500000);
1382 if (err) {
1383 netdev_err(ndev, "channel %u communication state failed\n", ch);
1384 goto fail_mode_change;
1385 }
1386
1387
1388 rcar_canfd_set_bit(priv->base, RCANFD_CFCC(gpriv, ch, RCANFD_CFFIFO_IDX),
1389 RCANFD_CFCC_CFE);
1390 rcar_canfd_set_bit(priv->base, RCANFD_RFCC(gpriv, ridx), RCANFD_RFCC_RFE);
1391
1392 priv->can.state = CAN_STATE_ERROR_ACTIVE;
1393 return 0;
1394
1395 fail_mode_change:
1396 rcar_canfd_disable_channel_interrupts(priv);
1397 return err;
1398 }
1399
1400 static int rcar_canfd_open(struct net_device *ndev)
1401 {
1402 struct rcar_canfd_channel *priv = netdev_priv(ndev);
1403 struct rcar_canfd_global *gpriv = priv->gpriv;
1404 int err;
1405
1406
1407 err = clk_prepare_enable(gpriv->can_clk);
1408 if (err) {
1409 netdev_err(ndev, "failed to enable CAN clock, error %d\n", err);
1410 goto out_clock;
1411 }
1412
1413 err = open_candev(ndev);
1414 if (err) {
1415 netdev_err(ndev, "open_candev() failed, error %d\n", err);
1416 goto out_can_clock;
1417 }
1418
1419 napi_enable(&priv->napi);
1420 err = rcar_canfd_start(ndev);
1421 if (err)
1422 goto out_close;
1423 netif_start_queue(ndev);
1424 return 0;
1425 out_close:
1426 napi_disable(&priv->napi);
1427 close_candev(ndev);
1428 out_can_clock:
1429 clk_disable_unprepare(gpriv->can_clk);
1430 out_clock:
1431 return err;
1432 }
1433
1434 static void rcar_canfd_stop(struct net_device *ndev)
1435 {
1436 struct rcar_canfd_channel *priv = netdev_priv(ndev);
1437 struct rcar_canfd_global *gpriv = priv->gpriv;
1438 int err;
1439 u32 sts, ch = priv->channel;
1440 u32 ridx = ch + RCANFD_RFFIFO_IDX;
1441
1442
1443 rcar_canfd_update_bit(priv->base, RCANFD_CCTR(ch),
1444 RCANFD_CCTR_CHMDC_MASK, RCANFD_CCTR_CHDMC_CRESET);
1445
1446
1447 err = readl_poll_timeout((priv->base + RCANFD_CSTS(ch)), sts,
1448 (sts & RCANFD_CSTS_CRSTSTS), 2, 500000);
1449 if (err)
1450 netdev_err(ndev, "channel %u reset failed\n", ch);
1451
1452 rcar_canfd_disable_channel_interrupts(priv);
1453
1454
1455 rcar_canfd_clear_bit(priv->base, RCANFD_CFCC(gpriv, ch, RCANFD_CFFIFO_IDX),
1456 RCANFD_CFCC_CFE);
1457 rcar_canfd_clear_bit(priv->base, RCANFD_RFCC(gpriv, ridx), RCANFD_RFCC_RFE);
1458
1459
1460 priv->can.state = CAN_STATE_STOPPED;
1461 }
1462
1463 static int rcar_canfd_close(struct net_device *ndev)
1464 {
1465 struct rcar_canfd_channel *priv = netdev_priv(ndev);
1466 struct rcar_canfd_global *gpriv = priv->gpriv;
1467
1468 netif_stop_queue(ndev);
1469 rcar_canfd_stop(ndev);
1470 napi_disable(&priv->napi);
1471 clk_disable_unprepare(gpriv->can_clk);
1472 close_candev(ndev);
1473 return 0;
1474 }
1475
1476 static netdev_tx_t rcar_canfd_start_xmit(struct sk_buff *skb,
1477 struct net_device *ndev)
1478 {
1479 struct rcar_canfd_channel *priv = netdev_priv(ndev);
1480 struct rcar_canfd_global *gpriv = priv->gpriv;
1481 struct canfd_frame *cf = (struct canfd_frame *)skb->data;
1482 u32 sts = 0, id, dlc;
1483 unsigned long flags;
1484 u32 ch = priv->channel;
1485
1486 if (can_dropped_invalid_skb(ndev, skb))
1487 return NETDEV_TX_OK;
1488
1489 if (cf->can_id & CAN_EFF_FLAG) {
1490 id = cf->can_id & CAN_EFF_MASK;
1491 id |= RCANFD_CFID_CFIDE;
1492 } else {
1493 id = cf->can_id & CAN_SFF_MASK;
1494 }
1495
1496 if (cf->can_id & CAN_RTR_FLAG)
1497 id |= RCANFD_CFID_CFRTR;
1498
1499 dlc = RCANFD_CFPTR_CFDLC(can_fd_len2dlc(cf->len));
1500
1501 if ((priv->can.ctrlmode & CAN_CTRLMODE_FD) || is_v3u(gpriv)) {
1502 rcar_canfd_write(priv->base,
1503 RCANFD_F_CFID(gpriv, ch, RCANFD_CFFIFO_IDX), id);
1504 rcar_canfd_write(priv->base,
1505 RCANFD_F_CFPTR(gpriv, ch, RCANFD_CFFIFO_IDX), dlc);
1506
1507 if (can_is_canfd_skb(skb)) {
1508
1509 sts |= RCANFD_CFFDCSTS_CFFDF;
1510 if (cf->flags & CANFD_BRS)
1511 sts |= RCANFD_CFFDCSTS_CFBRS;
1512
1513 if (priv->can.state == CAN_STATE_ERROR_PASSIVE)
1514 sts |= RCANFD_CFFDCSTS_CFESI;
1515 }
1516
1517 rcar_canfd_write(priv->base,
1518 RCANFD_F_CFFDCSTS(gpriv, ch, RCANFD_CFFIFO_IDX), sts);
1519
1520 rcar_canfd_put_data(priv, cf,
1521 RCANFD_F_CFDF(gpriv, ch, RCANFD_CFFIFO_IDX, 0));
1522 } else {
1523 rcar_canfd_write(priv->base,
1524 RCANFD_C_CFID(ch, RCANFD_CFFIFO_IDX), id);
1525 rcar_canfd_write(priv->base,
1526 RCANFD_C_CFPTR(ch, RCANFD_CFFIFO_IDX), dlc);
1527 rcar_canfd_put_data(priv, cf,
1528 RCANFD_C_CFDF(ch, RCANFD_CFFIFO_IDX, 0));
1529 }
1530
1531 can_put_echo_skb(skb, ndev, priv->tx_head % RCANFD_FIFO_DEPTH, 0);
1532
1533 spin_lock_irqsave(&priv->tx_lock, flags);
1534 priv->tx_head++;
1535
1536
1537 if (priv->tx_head - priv->tx_tail >= RCANFD_FIFO_DEPTH)
1538 netif_stop_queue(ndev);
1539
1540
1541
1542
1543 rcar_canfd_write(priv->base,
1544 RCANFD_CFPCTR(gpriv, ch, RCANFD_CFFIFO_IDX), 0xff);
1545
1546 spin_unlock_irqrestore(&priv->tx_lock, flags);
1547 return NETDEV_TX_OK;
1548 }
1549
1550 static void rcar_canfd_rx_pkt(struct rcar_canfd_channel *priv)
1551 {
1552 struct net_device_stats *stats = &priv->ndev->stats;
1553 struct rcar_canfd_global *gpriv = priv->gpriv;
1554 struct canfd_frame *cf;
1555 struct sk_buff *skb;
1556 u32 sts = 0, id, dlc;
1557 u32 ch = priv->channel;
1558 u32 ridx = ch + RCANFD_RFFIFO_IDX;
1559
1560 if ((priv->can.ctrlmode & CAN_CTRLMODE_FD) || is_v3u(gpriv)) {
1561 id = rcar_canfd_read(priv->base, RCANFD_F_RFID(gpriv, ridx));
1562 dlc = rcar_canfd_read(priv->base, RCANFD_F_RFPTR(gpriv, ridx));
1563
1564 sts = rcar_canfd_read(priv->base, RCANFD_F_RFFDSTS(gpriv, ridx));
1565
1566 if ((priv->can.ctrlmode & CAN_CTRLMODE_FD) &&
1567 sts & RCANFD_RFFDSTS_RFFDF)
1568 skb = alloc_canfd_skb(priv->ndev, &cf);
1569 else
1570 skb = alloc_can_skb(priv->ndev,
1571 (struct can_frame **)&cf);
1572 } else {
1573 id = rcar_canfd_read(priv->base, RCANFD_C_RFID(ridx));
1574 dlc = rcar_canfd_read(priv->base, RCANFD_C_RFPTR(ridx));
1575 skb = alloc_can_skb(priv->ndev, (struct can_frame **)&cf);
1576 }
1577
1578 if (!skb) {
1579 stats->rx_dropped++;
1580 return;
1581 }
1582
1583 if (id & RCANFD_RFID_RFIDE)
1584 cf->can_id = (id & CAN_EFF_MASK) | CAN_EFF_FLAG;
1585 else
1586 cf->can_id = id & CAN_SFF_MASK;
1587
1588 if (priv->can.ctrlmode & CAN_CTRLMODE_FD) {
1589 if (sts & RCANFD_RFFDSTS_RFFDF)
1590 cf->len = can_fd_dlc2len(RCANFD_RFPTR_RFDLC(dlc));
1591 else
1592 cf->len = can_cc_dlc2len(RCANFD_RFPTR_RFDLC(dlc));
1593
1594 if (sts & RCANFD_RFFDSTS_RFESI) {
1595 cf->flags |= CANFD_ESI;
1596 netdev_dbg(priv->ndev, "ESI Error\n");
1597 }
1598
1599 if (!(sts & RCANFD_RFFDSTS_RFFDF) && (id & RCANFD_RFID_RFRTR)) {
1600 cf->can_id |= CAN_RTR_FLAG;
1601 } else {
1602 if (sts & RCANFD_RFFDSTS_RFBRS)
1603 cf->flags |= CANFD_BRS;
1604
1605 rcar_canfd_get_data(priv, cf, RCANFD_F_RFDF(gpriv, ridx, 0));
1606 }
1607 } else {
1608 cf->len = can_cc_dlc2len(RCANFD_RFPTR_RFDLC(dlc));
1609 if (id & RCANFD_RFID_RFRTR)
1610 cf->can_id |= CAN_RTR_FLAG;
1611 else if (is_v3u(gpriv))
1612 rcar_canfd_get_data(priv, cf, RCANFD_F_RFDF(gpriv, ridx, 0));
1613 else
1614 rcar_canfd_get_data(priv, cf, RCANFD_C_RFDF(ridx, 0));
1615 }
1616
1617
1618
1619
1620 rcar_canfd_write(priv->base, RCANFD_RFPCTR(gpriv, ridx), 0xff);
1621
1622 if (!(cf->can_id & CAN_RTR_FLAG))
1623 stats->rx_bytes += cf->len;
1624 stats->rx_packets++;
1625 netif_receive_skb(skb);
1626 }
1627
1628 static int rcar_canfd_rx_poll(struct napi_struct *napi, int quota)
1629 {
1630 struct rcar_canfd_channel *priv =
1631 container_of(napi, struct rcar_canfd_channel, napi);
1632 struct rcar_canfd_global *gpriv = priv->gpriv;
1633 int num_pkts;
1634 u32 sts;
1635 u32 ch = priv->channel;
1636 u32 ridx = ch + RCANFD_RFFIFO_IDX;
1637
1638 for (num_pkts = 0; num_pkts < quota; num_pkts++) {
1639 sts = rcar_canfd_read(priv->base, RCANFD_RFSTS(gpriv, ridx));
1640
1641 if (sts & RCANFD_RFSTS_RFEMP)
1642 break;
1643
1644 rcar_canfd_rx_pkt(priv);
1645
1646
1647 if (sts & RCANFD_RFSTS_RFIF)
1648 rcar_canfd_write(priv->base, RCANFD_RFSTS(gpriv, ridx),
1649 sts & ~RCANFD_RFSTS_RFIF);
1650 }
1651
1652
1653 if (num_pkts < quota) {
1654 if (napi_complete_done(napi, num_pkts)) {
1655
1656 rcar_canfd_set_bit(priv->base, RCANFD_RFCC(gpriv, ridx),
1657 RCANFD_RFCC_RFIE);
1658 }
1659 }
1660 return num_pkts;
1661 }
1662
1663 static int rcar_canfd_do_set_mode(struct net_device *ndev, enum can_mode mode)
1664 {
1665 int err;
1666
1667 switch (mode) {
1668 case CAN_MODE_START:
1669 err = rcar_canfd_start(ndev);
1670 if (err)
1671 return err;
1672 netif_wake_queue(ndev);
1673 return 0;
1674 default:
1675 return -EOPNOTSUPP;
1676 }
1677 }
1678
1679 static int rcar_canfd_get_berr_counter(const struct net_device *dev,
1680 struct can_berr_counter *bec)
1681 {
1682 struct rcar_canfd_channel *priv = netdev_priv(dev);
1683 u32 val, ch = priv->channel;
1684
1685
1686 val = rcar_canfd_read(priv->base, RCANFD_CSTS(ch));
1687 bec->txerr = RCANFD_CSTS_TECCNT(val);
1688 bec->rxerr = RCANFD_CSTS_RECCNT(val);
1689 return 0;
1690 }
1691
1692 static const struct net_device_ops rcar_canfd_netdev_ops = {
1693 .ndo_open = rcar_canfd_open,
1694 .ndo_stop = rcar_canfd_close,
1695 .ndo_start_xmit = rcar_canfd_start_xmit,
1696 .ndo_change_mtu = can_change_mtu,
1697 };
1698
1699 static const struct ethtool_ops rcar_canfd_ethtool_ops = {
1700 .get_ts_info = ethtool_op_get_ts_info,
1701 };
1702
1703 static int rcar_canfd_channel_probe(struct rcar_canfd_global *gpriv, u32 ch,
1704 u32 fcan_freq)
1705 {
1706 struct platform_device *pdev = gpriv->pdev;
1707 struct rcar_canfd_channel *priv;
1708 struct net_device *ndev;
1709 int err = -ENODEV;
1710
1711 ndev = alloc_candev(sizeof(*priv), RCANFD_FIFO_DEPTH);
1712 if (!ndev) {
1713 dev_err(&pdev->dev, "alloc_candev() failed\n");
1714 return -ENOMEM;
1715 }
1716 priv = netdev_priv(ndev);
1717
1718 ndev->netdev_ops = &rcar_canfd_netdev_ops;
1719 ndev->ethtool_ops = &rcar_canfd_ethtool_ops;
1720 ndev->flags |= IFF_ECHO;
1721 priv->ndev = ndev;
1722 priv->base = gpriv->base;
1723 priv->channel = ch;
1724 priv->can.clock.freq = fcan_freq;
1725 dev_info(&pdev->dev, "can_clk rate is %u\n", priv->can.clock.freq);
1726
1727 if (gpriv->chip_id == RENESAS_RZG2L) {
1728 char *irq_name;
1729 int err_irq;
1730 int tx_irq;
1731
1732 err_irq = platform_get_irq_byname(pdev, ch == 0 ? "ch0_err" : "ch1_err");
1733 if (err_irq < 0) {
1734 err = err_irq;
1735 goto fail;
1736 }
1737
1738 tx_irq = platform_get_irq_byname(pdev, ch == 0 ? "ch0_trx" : "ch1_trx");
1739 if (tx_irq < 0) {
1740 err = tx_irq;
1741 goto fail;
1742 }
1743
1744 irq_name = devm_kasprintf(&pdev->dev, GFP_KERNEL,
1745 "canfd.ch%d_err", ch);
1746 if (!irq_name) {
1747 err = -ENOMEM;
1748 goto fail;
1749 }
1750 err = devm_request_irq(&pdev->dev, err_irq,
1751 rcar_canfd_channel_err_interrupt, 0,
1752 irq_name, gpriv);
1753 if (err) {
1754 dev_err(&pdev->dev, "devm_request_irq CH Err(%d) failed, error %d\n",
1755 err_irq, err);
1756 goto fail;
1757 }
1758 irq_name = devm_kasprintf(&pdev->dev, GFP_KERNEL,
1759 "canfd.ch%d_trx", ch);
1760 if (!irq_name) {
1761 err = -ENOMEM;
1762 goto fail;
1763 }
1764 err = devm_request_irq(&pdev->dev, tx_irq,
1765 rcar_canfd_channel_tx_interrupt, 0,
1766 irq_name, gpriv);
1767 if (err) {
1768 dev_err(&pdev->dev, "devm_request_irq Tx (%d) failed, error %d\n",
1769 tx_irq, err);
1770 goto fail;
1771 }
1772 }
1773
1774 if (gpriv->fdmode) {
1775 priv->can.bittiming_const = &rcar_canfd_nom_bittiming_const;
1776 priv->can.data_bittiming_const =
1777 &rcar_canfd_data_bittiming_const;
1778
1779
1780 err = can_set_static_ctrlmode(ndev, CAN_CTRLMODE_FD);
1781 if (err)
1782 goto fail;
1783 priv->can.ctrlmode_supported = CAN_CTRLMODE_BERR_REPORTING;
1784 } else {
1785
1786 priv->can.bittiming_const = &rcar_canfd_bittiming_const;
1787 priv->can.ctrlmode_supported = CAN_CTRLMODE_BERR_REPORTING;
1788 }
1789
1790 priv->can.do_set_mode = rcar_canfd_do_set_mode;
1791 priv->can.do_get_berr_counter = rcar_canfd_get_berr_counter;
1792 priv->gpriv = gpriv;
1793 SET_NETDEV_DEV(ndev, &pdev->dev);
1794
1795 netif_napi_add_weight(ndev, &priv->napi, rcar_canfd_rx_poll,
1796 RCANFD_NAPI_WEIGHT);
1797 spin_lock_init(&priv->tx_lock);
1798 gpriv->ch[priv->channel] = priv;
1799 err = register_candev(ndev);
1800 if (err) {
1801 dev_err(&pdev->dev,
1802 "register_candev() failed, error %d\n", err);
1803 goto fail_candev;
1804 }
1805 dev_info(&pdev->dev, "device registered (channel %u)\n", priv->channel);
1806 return 0;
1807
1808 fail_candev:
1809 netif_napi_del(&priv->napi);
1810 fail:
1811 free_candev(ndev);
1812 return err;
1813 }
1814
1815 static void rcar_canfd_channel_remove(struct rcar_canfd_global *gpriv, u32 ch)
1816 {
1817 struct rcar_canfd_channel *priv = gpriv->ch[ch];
1818
1819 if (priv) {
1820 unregister_candev(priv->ndev);
1821 netif_napi_del(&priv->napi);
1822 free_candev(priv->ndev);
1823 }
1824 }
1825
1826 static int rcar_canfd_probe(struct platform_device *pdev)
1827 {
1828 void __iomem *addr;
1829 u32 sts, ch, fcan_freq;
1830 struct rcar_canfd_global *gpriv;
1831 struct device_node *of_child;
1832 unsigned long channels_mask = 0;
1833 int err, ch_irq, g_irq;
1834 int g_err_irq, g_recc_irq;
1835 bool fdmode = true;
1836 enum rcanfd_chip_id chip_id;
1837 int max_channels;
1838 char name[9] = "channelX";
1839 int i;
1840
1841 chip_id = (uintptr_t)of_device_get_match_data(&pdev->dev);
1842 max_channels = chip_id == RENESAS_R8A779A0 ? 8 : 2;
1843
1844 if (of_property_read_bool(pdev->dev.of_node, "renesas,no-can-fd"))
1845 fdmode = false;
1846
1847 for (i = 0; i < max_channels; ++i) {
1848 name[7] = '0' + i;
1849 of_child = of_get_child_by_name(pdev->dev.of_node, name);
1850 if (of_child && of_device_is_available(of_child))
1851 channels_mask |= BIT(i);
1852 of_node_put(of_child);
1853 }
1854
1855 if (chip_id != RENESAS_RZG2L) {
1856 ch_irq = platform_get_irq_byname_optional(pdev, "ch_int");
1857 if (ch_irq < 0) {
1858
1859 ch_irq = platform_get_irq(pdev, 0);
1860 if (ch_irq < 0)
1861 return ch_irq;
1862 }
1863
1864 g_irq = platform_get_irq_byname_optional(pdev, "g_int");
1865 if (g_irq < 0) {
1866
1867 g_irq = platform_get_irq(pdev, 1);
1868 if (g_irq < 0)
1869 return g_irq;
1870 }
1871 } else {
1872 g_err_irq = platform_get_irq_byname(pdev, "g_err");
1873 if (g_err_irq < 0)
1874 return g_err_irq;
1875
1876 g_recc_irq = platform_get_irq_byname(pdev, "g_recc");
1877 if (g_recc_irq < 0)
1878 return g_recc_irq;
1879 }
1880
1881
1882 gpriv = devm_kzalloc(&pdev->dev, sizeof(*gpriv), GFP_KERNEL);
1883 if (!gpriv) {
1884 err = -ENOMEM;
1885 goto fail_dev;
1886 }
1887 gpriv->pdev = pdev;
1888 gpriv->channels_mask = channels_mask;
1889 gpriv->fdmode = fdmode;
1890 gpriv->chip_id = chip_id;
1891 gpriv->max_channels = max_channels;
1892
1893 if (gpriv->chip_id == RENESAS_RZG2L) {
1894 gpriv->rstc1 = devm_reset_control_get_exclusive(&pdev->dev, "rstp_n");
1895 if (IS_ERR(gpriv->rstc1))
1896 return dev_err_probe(&pdev->dev, PTR_ERR(gpriv->rstc1),
1897 "failed to get rstp_n\n");
1898
1899 gpriv->rstc2 = devm_reset_control_get_exclusive(&pdev->dev, "rstc_n");
1900 if (IS_ERR(gpriv->rstc2))
1901 return dev_err_probe(&pdev->dev, PTR_ERR(gpriv->rstc2),
1902 "failed to get rstc_n\n");
1903 }
1904
1905
1906 gpriv->clkp = devm_clk_get(&pdev->dev, "fck");
1907 if (IS_ERR(gpriv->clkp)) {
1908 err = PTR_ERR(gpriv->clkp);
1909 dev_err(&pdev->dev, "cannot get peripheral clock, error %d\n",
1910 err);
1911 goto fail_dev;
1912 }
1913
1914
1915
1916
1917 gpriv->can_clk = devm_clk_get(&pdev->dev, "can_clk");
1918 if (IS_ERR(gpriv->can_clk) || (clk_get_rate(gpriv->can_clk) == 0)) {
1919 gpriv->can_clk = devm_clk_get(&pdev->dev, "canfd");
1920 if (IS_ERR(gpriv->can_clk)) {
1921 err = PTR_ERR(gpriv->can_clk);
1922 dev_err(&pdev->dev,
1923 "cannot get canfd clock, error %d\n", err);
1924 goto fail_dev;
1925 }
1926 gpriv->fcan = RCANFD_CANFDCLK;
1927
1928 } else {
1929 gpriv->fcan = RCANFD_EXTCLK;
1930 }
1931 fcan_freq = clk_get_rate(gpriv->can_clk);
1932
1933 if (gpriv->fcan == RCANFD_CANFDCLK && gpriv->chip_id != RENESAS_RZG2L)
1934
1935 fcan_freq /= 2;
1936
1937 addr = devm_platform_ioremap_resource(pdev, 0);
1938 if (IS_ERR(addr)) {
1939 err = PTR_ERR(addr);
1940 goto fail_dev;
1941 }
1942 gpriv->base = addr;
1943
1944
1945 if (gpriv->chip_id != RENESAS_RZG2L) {
1946 err = devm_request_irq(&pdev->dev, ch_irq,
1947 rcar_canfd_channel_interrupt, 0,
1948 "canfd.ch_int", gpriv);
1949 if (err) {
1950 dev_err(&pdev->dev, "devm_request_irq(%d) failed, error %d\n",
1951 ch_irq, err);
1952 goto fail_dev;
1953 }
1954
1955 err = devm_request_irq(&pdev->dev, g_irq,
1956 rcar_canfd_global_interrupt, 0,
1957 "canfd.g_int", gpriv);
1958 if (err) {
1959 dev_err(&pdev->dev, "devm_request_irq(%d) failed, error %d\n",
1960 g_irq, err);
1961 goto fail_dev;
1962 }
1963 } else {
1964 err = devm_request_irq(&pdev->dev, g_recc_irq,
1965 rcar_canfd_global_receive_fifo_interrupt, 0,
1966 "canfd.g_recc", gpriv);
1967
1968 if (err) {
1969 dev_err(&pdev->dev, "devm_request_irq(%d) failed, error %d\n",
1970 g_recc_irq, err);
1971 goto fail_dev;
1972 }
1973
1974 err = devm_request_irq(&pdev->dev, g_err_irq,
1975 rcar_canfd_global_err_interrupt, 0,
1976 "canfd.g_err", gpriv);
1977 if (err) {
1978 dev_err(&pdev->dev, "devm_request_irq(%d) failed, error %d\n",
1979 g_err_irq, err);
1980 goto fail_dev;
1981 }
1982 }
1983
1984 err = reset_control_reset(gpriv->rstc1);
1985 if (err)
1986 goto fail_dev;
1987 err = reset_control_reset(gpriv->rstc2);
1988 if (err) {
1989 reset_control_assert(gpriv->rstc1);
1990 goto fail_dev;
1991 }
1992
1993
1994 err = clk_prepare_enable(gpriv->clkp);
1995 if (err) {
1996 dev_err(&pdev->dev,
1997 "failed to enable peripheral clock, error %d\n", err);
1998 goto fail_reset;
1999 }
2000
2001 err = rcar_canfd_reset_controller(gpriv);
2002 if (err) {
2003 dev_err(&pdev->dev, "reset controller failed\n");
2004 goto fail_clk;
2005 }
2006
2007
2008 rcar_canfd_configure_controller(gpriv);
2009
2010
2011 for_each_set_bit(ch, &gpriv->channels_mask, max_channels) {
2012
2013 rcar_canfd_configure_rx(gpriv, ch);
2014
2015
2016 rcar_canfd_configure_tx(gpriv, ch);
2017
2018
2019 rcar_canfd_configure_afl_rules(gpriv, ch);
2020 }
2021
2022
2023 rcar_canfd_enable_global_interrupts(gpriv);
2024
2025
2026 rcar_canfd_update_bit(gpriv->base, RCANFD_GCTR, RCANFD_GCTR_GMDC_MASK,
2027 RCANFD_GCTR_GMDC_GOPM);
2028
2029
2030 err = readl_poll_timeout((gpriv->base + RCANFD_GSTS), sts,
2031 !(sts & RCANFD_GSTS_GNOPM), 2, 500000);
2032 if (err) {
2033 dev_err(&pdev->dev, "global operational mode failed\n");
2034 goto fail_mode;
2035 }
2036
2037 for_each_set_bit(ch, &gpriv->channels_mask, max_channels) {
2038 err = rcar_canfd_channel_probe(gpriv, ch, fcan_freq);
2039 if (err)
2040 goto fail_channel;
2041 }
2042
2043 platform_set_drvdata(pdev, gpriv);
2044 dev_info(&pdev->dev, "global operational state (clk %d, fdmode %d)\n",
2045 gpriv->fcan, gpriv->fdmode);
2046 return 0;
2047
2048 fail_channel:
2049 for_each_set_bit(ch, &gpriv->channels_mask, max_channels)
2050 rcar_canfd_channel_remove(gpriv, ch);
2051 fail_mode:
2052 rcar_canfd_disable_global_interrupts(gpriv);
2053 fail_clk:
2054 clk_disable_unprepare(gpriv->clkp);
2055 fail_reset:
2056 reset_control_assert(gpriv->rstc1);
2057 reset_control_assert(gpriv->rstc2);
2058 fail_dev:
2059 return err;
2060 }
2061
2062 static int rcar_canfd_remove(struct platform_device *pdev)
2063 {
2064 struct rcar_canfd_global *gpriv = platform_get_drvdata(pdev);
2065 u32 ch;
2066
2067 rcar_canfd_reset_controller(gpriv);
2068 rcar_canfd_disable_global_interrupts(gpriv);
2069
2070 for_each_set_bit(ch, &gpriv->channels_mask, gpriv->max_channels) {
2071 rcar_canfd_disable_channel_interrupts(gpriv->ch[ch]);
2072 rcar_canfd_channel_remove(gpriv, ch);
2073 }
2074
2075
2076 rcar_canfd_set_bit(gpriv->base, RCANFD_GCTR, RCANFD_GCTR_GSLPR);
2077 clk_disable_unprepare(gpriv->clkp);
2078 reset_control_assert(gpriv->rstc1);
2079 reset_control_assert(gpriv->rstc2);
2080
2081 return 0;
2082 }
2083
2084 static int __maybe_unused rcar_canfd_suspend(struct device *dev)
2085 {
2086 return 0;
2087 }
2088
2089 static int __maybe_unused rcar_canfd_resume(struct device *dev)
2090 {
2091 return 0;
2092 }
2093
2094 static SIMPLE_DEV_PM_OPS(rcar_canfd_pm_ops, rcar_canfd_suspend,
2095 rcar_canfd_resume);
2096
2097 static const __maybe_unused struct of_device_id rcar_canfd_of_table[] = {
2098 { .compatible = "renesas,rcar-gen3-canfd", .data = (void *)RENESAS_RCAR_GEN3 },
2099 { .compatible = "renesas,rzg2l-canfd", .data = (void *)RENESAS_RZG2L },
2100 { .compatible = "renesas,r8a779a0-canfd", .data = (void *)RENESAS_R8A779A0 },
2101 { }
2102 };
2103
2104 MODULE_DEVICE_TABLE(of, rcar_canfd_of_table);
2105
2106 static struct platform_driver rcar_canfd_driver = {
2107 .driver = {
2108 .name = RCANFD_DRV_NAME,
2109 .of_match_table = of_match_ptr(rcar_canfd_of_table),
2110 .pm = &rcar_canfd_pm_ops,
2111 },
2112 .probe = rcar_canfd_probe,
2113 .remove = rcar_canfd_remove,
2114 };
2115
2116 module_platform_driver(rcar_canfd_driver);
2117
2118 MODULE_AUTHOR("Ramesh Shanmugasundaram <ramesh.shanmugasundaram@bp.renesas.com>");
2119 MODULE_LICENSE("GPL");
2120 MODULE_DESCRIPTION("CAN FD driver for Renesas R-Car SoC");
2121 MODULE_ALIAS("platform:" RCANFD_DRV_NAME);