465 lines · c
1/* SPDX-License-Identifier: GPL-2.0 */2 3/* Renesas Ethernet-TSN device driver4 *5 * Copyright (C) 2022 Renesas Electronics Corporation6 * Copyright (C) 2023 Niklas Söderlund <niklas.soderlund@ragnatech.se>7 */8 9#ifndef __RTSN_H__10#define __RTSN_H__11 12#include <linux/types.h>13 14#define AXIBMI 0x000015#define TSNMHD 0x100016#define RMSO 0x200017#define RMRO 0x380018 19enum rtsn_reg {20 AXIWC = AXIBMI + 0x0000,21 AXIRC = AXIBMI + 0x0004,22 TDPC0 = AXIBMI + 0x0010,23 TFT = AXIBMI + 0x0090,24 TATLS0 = AXIBMI + 0x00a0,25 TATLS1 = AXIBMI + 0x00a4,26 TATLR = AXIBMI + 0x00a8,27 RATLS0 = AXIBMI + 0x00b0,28 RATLS1 = AXIBMI + 0x00b4,29 RATLR = AXIBMI + 0x00b8,30 TSA0 = AXIBMI + 0x00c0,31 TSS0 = AXIBMI + 0x00c4,32 TRCR0 = AXIBMI + 0x0140,33 RIDAUAS0 = AXIBMI + 0x0180,34 RR = AXIBMI + 0x0200,35 TATS = AXIBMI + 0x0210,36 TATSR0 = AXIBMI + 0x0214,37 TATSR1 = AXIBMI + 0x0218,38 TATSR2 = AXIBMI + 0x021c,39 RATS = AXIBMI + 0x0220,40 RATSR0 = AXIBMI + 0x0224,41 RATSR1 = AXIBMI + 0x0228,42 RATSR2 = AXIBMI + 0x022c,43 RIDASM0 = AXIBMI + 0x0240,44 RIDASAM0 = AXIBMI + 0x0244,45 RIDACAM0 = AXIBMI + 0x0248,46 EIS0 = AXIBMI + 0x0300,47 EIE0 = AXIBMI + 0x0304,48 EID0 = AXIBMI + 0x0308,49 EIS1 = AXIBMI + 0x0310,50 EIE1 = AXIBMI + 0x0314,51 EID1 = AXIBMI + 0x0318,52 TCEIS0 = AXIBMI + 0x0340,53 TCEIE0 = AXIBMI + 0x0344,54 TCEID0 = AXIBMI + 0x0348,55 RFSEIS0 = AXIBMI + 0x04c0,56 RFSEIE0 = AXIBMI + 0x04c4,57 RFSEID0 = AXIBMI + 0x04c8,58 RFEIS0 = AXIBMI + 0x0540,59 RFEIE0 = AXIBMI + 0x0544,60 RFEID0 = AXIBMI + 0x0548,61 RCEIS0 = AXIBMI + 0x05c0,62 RCEIE0 = AXIBMI + 0x05c4,63 RCEID0 = AXIBMI + 0x05c8,64 RIDAOIS = AXIBMI + 0x0640,65 RIDAOIE = AXIBMI + 0x0644,66 RIDAOID = AXIBMI + 0x0648,67 TSFEIS = AXIBMI + 0x06c0,68 TSFEIE = AXIBMI + 0x06c4,69 TSFEID = AXIBMI + 0x06c8,70 TSCEIS = AXIBMI + 0x06d0,71 TSCEIE = AXIBMI + 0x06d4,72 TSCEID = AXIBMI + 0x06d8,73 DIS = AXIBMI + 0x0b00,74 DIE = AXIBMI + 0x0b04,75 DID = AXIBMI + 0x0b08,76 TDIS0 = AXIBMI + 0x0b10,77 TDIE0 = AXIBMI + 0x0b14,78 TDID0 = AXIBMI + 0x0b18,79 RDIS0 = AXIBMI + 0x0b90,80 RDIE0 = AXIBMI + 0x0b94,81 RDID0 = AXIBMI + 0x0b98,82 TSDIS = AXIBMI + 0x0c10,83 TSDIE = AXIBMI + 0x0c14,84 TSDID = AXIBMI + 0x0c18,85 GPOUT = AXIBMI + 0x6000,86 87 OCR = TSNMHD + 0x0000,88 OSR = TSNMHD + 0x0004,89 SWR = TSNMHD + 0x0008,90 SIS = TSNMHD + 0x000c,91 GIS = TSNMHD + 0x0010,92 GIE = TSNMHD + 0x0014,93 GID = TSNMHD + 0x0018,94 TIS1 = TSNMHD + 0x0020,95 TIE1 = TSNMHD + 0x0024,96 TID1 = TSNMHD + 0x0028,97 TIS2 = TSNMHD + 0x0030,98 TIE2 = TSNMHD + 0x0034,99 TID2 = TSNMHD + 0x0038,100 RIS = TSNMHD + 0x0040,101 RIE = TSNMHD + 0x0044,102 RID = TSNMHD + 0x0048,103 TGC1 = TSNMHD + 0x0050,104 TGC2 = TSNMHD + 0x0054,105 TFS0 = TSNMHD + 0x0060,106 TCF0 = TSNMHD + 0x0070,107 TCR1 = TSNMHD + 0x0080,108 TCR2 = TSNMHD + 0x0084,109 TCR3 = TSNMHD + 0x0088,110 TCR4 = TSNMHD + 0x008c,111 TMS0 = TSNMHD + 0x0090,112 TSR1 = TSNMHD + 0x00b0,113 TSR2 = TSNMHD + 0x00b4,114 TSR3 = TSNMHD + 0x00b8,115 TSR4 = TSNMHD + 0x00bc,116 TSR5 = TSNMHD + 0x00c0,117 RGC = TSNMHD + 0x00d0,118 RDFCR = TSNMHD + 0x00d4,119 RCFCR = TSNMHD + 0x00d8,120 REFCNCR = TSNMHD + 0x00dc,121 RSR1 = TSNMHD + 0x00e0,122 RSR2 = TSNMHD + 0x00e4,123 RSR3 = TSNMHD + 0x00e8,124 TCIS = TSNMHD + 0x01e0,125 TCIE = TSNMHD + 0x01e4,126 TCID = TSNMHD + 0x01e8,127 TPTPC = TSNMHD + 0x01f0,128 TTML = TSNMHD + 0x01f4,129 TTJ = TSNMHD + 0x01f8,130 TCC = TSNMHD + 0x0200,131 TCS = TSNMHD + 0x0204,132 TGS = TSNMHD + 0x020c,133 TACST0 = TSNMHD + 0x0210,134 TACST1 = TSNMHD + 0x0214,135 TACST2 = TSNMHD + 0x0218,136 TALIT0 = TSNMHD + 0x0220,137 TALIT1 = TSNMHD + 0x0224,138 TALIT2 = TSNMHD + 0x0228,139 TAEN0 = TSNMHD + 0x0230,140 TAEN1 = TSNMHD + 0x0234,141 TASFE = TSNMHD + 0x0240,142 TACLL0 = TSNMHD + 0x0250,143 TACLL1 = TSNMHD + 0x0254,144 TACLL2 = TSNMHD + 0x0258,145 CACC = TSNMHD + 0x0260,146 CCS = TSNMHD + 0x0264,147 CAIV0 = TSNMHD + 0x0270,148 CAUL0 = TSNMHD + 0x0290,149 TOCST0 = TSNMHD + 0x0300,150 TOCST1 = TSNMHD + 0x0304,151 TOCST2 = TSNMHD + 0x0308,152 TOLIT0 = TSNMHD + 0x0310,153 TOLIT1 = TSNMHD + 0x0314,154 TOLIT2 = TSNMHD + 0x0318,155 TOEN0 = TSNMHD + 0x0320,156 TOEN1 = TSNMHD + 0x0324,157 TOSFE = TSNMHD + 0x0330,158 TCLR0 = TSNMHD + 0x0340,159 TCLR1 = TSNMHD + 0x0344,160 TCLR2 = TSNMHD + 0x0348,161 TSMS = TSNMHD + 0x0350,162 COCC = TSNMHD + 0x0360,163 COIV0 = TSNMHD + 0x03b0,164 COUL0 = TSNMHD + 0x03d0,165 QSTMACU0 = TSNMHD + 0x0400,166 QSTMACD0 = TSNMHD + 0x0404,167 QSTMAMU0 = TSNMHD + 0x0408,168 QSTMAMD0 = TSNMHD + 0x040c,169 QSFTVL0 = TSNMHD + 0x0410,170 QSFTVLM0 = TSNMHD + 0x0414,171 QSFTMSD0 = TSNMHD + 0x0418,172 QSFTGMI0 = TSNMHD + 0x041c,173 QSFTLS = TSNMHD + 0x0600,174 QSFTLIS = TSNMHD + 0x0604,175 QSFTLIE = TSNMHD + 0x0608,176 QSFTLID = TSNMHD + 0x060c,177 QSMSMC = TSNMHD + 0x0610,178 QSGTMC = TSNMHD + 0x0614,179 QSEIS = TSNMHD + 0x0618,180 QSEIE = TSNMHD + 0x061c,181 QSEID = TSNMHD + 0x0620,182 QGACST0 = TSNMHD + 0x0630,183 QGACST1 = TSNMHD + 0x0634,184 QGACST2 = TSNMHD + 0x0638,185 QGALIT1 = TSNMHD + 0x0640,186 QGALIT2 = TSNMHD + 0x0644,187 QGAEN0 = TSNMHD + 0x0648,188 QGAEN1 = TSNMHD + 0x074c,189 QGIGS = TSNMHD + 0x0650,190 QGGC = TSNMHD + 0x0654,191 QGATL0 = TSNMHD + 0x0664,192 QGATL1 = TSNMHD + 0x0668,193 QGATL2 = TSNMHD + 0x066c,194 QGOCST0 = TSNMHD + 0x0670,195 QGOCST1 = TSNMHD + 0x0674,196 QGOCST2 = TSNMHD + 0x0678,197 QGOLIT0 = TSNMHD + 0x067c,198 QGOLIT1 = TSNMHD + 0x0680,199 QGOLIT2 = TSNMHD + 0x0684,200 QGOEN0 = TSNMHD + 0x0688,201 QGOEN1 = TSNMHD + 0x068c,202 QGTRO = TSNMHD + 0x0690,203 QGTR1 = TSNMHD + 0x0694,204 QGTR2 = TSNMHD + 0x0698,205 QGFSMS = TSNMHD + 0x069c,206 QTMIS = TSNMHD + 0x06e0,207 QTMIE = TSNMHD + 0x06e4,208 QTMID = TSNMHD + 0x06e8,209 QMEC = TSNMHD + 0x0700,210 QMMC = TSNMHD + 0x0704,211 QRFDC = TSNMHD + 0x0708,212 QYFDC = TSNMHD + 0x070c,213 QVTCMC0 = TSNMHD + 0x0710,214 QMCBSC0 = TSNMHD + 0x0750,215 QMCIRC0 = TSNMHD + 0x0790,216 QMEBSC0 = TSNMHD + 0x07d0,217 QMEIRC0 = TSNMHD + 0x0710,218 QMCFC = TSNMHD + 0x0850,219 QMEIS = TSNMHD + 0x0860,220 QMEIE = TSNMHD + 0x0864,221 QMEID = TSNMHD + 0x086c,222 QSMFC0 = TSNMHD + 0x0870,223 QMSPPC0 = TSNMHD + 0x08b0,224 QMSRPC0 = TSNMHD + 0x08f0,225 QGPPC0 = TSNMHD + 0x0930,226 QGRPC0 = TSNMHD + 0x0950,227 QMDPC0 = TSNMHD + 0x0970,228 QMGPC0 = TSNMHD + 0x09b0,229 QMYPC0 = TSNMHD + 0x09f0,230 QMRPC0 = TSNMHD + 0x0a30,231 MQSTMACU = TSNMHD + 0x0a70,232 MQSTMACD = TSNMHD + 0x0a74,233 MQSTMAMU = TSNMHD + 0x0a78,234 MQSTMAMD = TSNMHD + 0x0a7c,235 MQSFTVL = TSNMHD + 0x0a80,236 MQSFTVLM = TSNMHD + 0x0a84,237 MQSFTMSD = TSNMHD + 0x0a88,238 MQSFTGMI = TSNMHD + 0x0a8c,239 240 CFCR0 = RMSO + 0x0800,241 FMSCR = RMSO + 0x0c10,242 243 MMC = RMRO + 0x0000,244 MPSM = RMRO + 0x0010,245 MPIC = RMRO + 0x0014,246 MTFFC = RMRO + 0x0020,247 MTPFC = RMRO + 0x0024,248 MTATC0 = RMRO + 0x0040,249 MRGC = RMRO + 0x0080,250 MRMAC0 = RMRO + 0x0084,251 MRMAC1 = RMRO + 0x0088,252 MRAFC = RMRO + 0x008c,253 MRSCE = RMRO + 0x0090,254 MRSCP = RMRO + 0x0094,255 MRSCC = RMRO + 0x0098,256 MRFSCE = RMRO + 0x009c,257 MRFSCP = RMRO + 0x00a0,258 MTRC = RMRO + 0x00a4,259 MPFC = RMRO + 0x0100,260 MLVC = RMRO + 0x0340,261 MEEEC = RMRO + 0x0350,262 MLBC = RMRO + 0x0360,263 MGMR = RMRO + 0x0400,264 MMPFTCT = RMRO + 0x0410,265 MAPFTCT = RMRO + 0x0414,266 MPFRCT = RMRO + 0x0418,267 MFCICT = RMRO + 0x041c,268 MEEECT = RMRO + 0x0420,269 MEIS = RMRO + 0x0500,270 MEIE = RMRO + 0x0504,271 MEID = RMRO + 0x0508,272 MMIS0 = RMRO + 0x0510,273 MMIE0 = RMRO + 0x0514,274 MMID0 = RMRO + 0x0518,275 MMIS1 = RMRO + 0x0520,276 MMIE1 = RMRO + 0x0524,277 MMID1 = RMRO + 0x0528,278 MMIS2 = RMRO + 0x0530,279 MMIE2 = RMRO + 0x0534,280 MMID2 = RMRO + 0x0538,281 MXMS = RMRO + 0x0600,282 283};284 285/* AXIBMI */286#define RR_RATRR BIT(0)287#define RR_TATRR BIT(1)288#define RR_RST (RR_RATRR | RR_TATRR)289#define RR_RST_COMPLETE 0x03290 291#define AXIWC_DEFAULT 0xffff292#define AXIRC_DEFAULT 0xffff293 294#define TATLS0_TEDE BIT(1)295#define TATLS0_TATEN_SHIFT 24296#define TATLS0_TATEN(n) ((n) << TATLS0_TATEN_SHIFT)297#define TATLR_TATL BIT(31)298 299#define RATLS0_RETS BIT(2)300#define RATLS0_REDE BIT(3)301#define RATLS0_RATEN_SHIFT 24302#define RATLS0_RATEN(n) ((n) << RATLS0_RATEN_SHIFT)303#define RATLR_RATL BIT(31)304 305#define DIE_DID_TDICX(n) BIT((n))306#define DIE_DID_RDICX(n) BIT((n) + 8)307#define TDIE_TDID_TDX(n) BIT(n)308#define RDIE_RDID_RDX(n) BIT(n)309#define TDIS_TDS(n) BIT(n)310#define RDIS_RDS(n) BIT(n)311 312/* MHD */313#define OSR_OPS 0x07314#define SWR_SWR BIT(0)315 316#define TGC1_TQTM_SFM 0xff00317#define TGC1_STTV_DEFAULT 0x03318 319#define TMS_MFS_MAX 0x2800320 321/* RMAC System */322#define CFCR_SDID(n) ((n) << 16)323#define FMSCR_FMSIE(n) ((n) << 0)324 325/* RMAC */326#define MPIC_PIS_MASK GENMASK(1, 0)327#define MPIC_PIS_MII 0328#define MPIC_PIS_RMII 0x01329#define MPIC_PIS_GMII 0x02330#define MPIC_PIS_RGMII 0x03331#define MPIC_LSC_SHIFT 2332#define MPIC_LSC_MASK GENMASK(3, MPIC_LSC_SHIFT)333#define MPIC_LSC_10M (0 << MPIC_LSC_SHIFT)334#define MPIC_LSC_100M (0x01 << MPIC_LSC_SHIFT)335#define MPIC_LSC_1G (0x02 << MPIC_LSC_SHIFT)336#define MPIC_PSMCS_SHIFT 16337#define MPIC_PSMCS_MASK GENMASK(21, MPIC_PSMCS_SHIFT)338#define MPIC_PSMCS_DEFAULT (0x0a << MPIC_PSMCS_SHIFT)339#define MPIC_PSMHT_SHIFT 24340#define MPIC_PSMHT_MASK GENMASK(26, MPIC_PSMHT_SHIFT)341#define MPIC_PSMHT_DEFAULT (0x07 << MPIC_PSMHT_SHIFT)342 343#define MLVC_PASE BIT(8)344#define MLVC_PSE BIT(16)345#define MLVC_PLV BIT(17)346 347#define MPSM_PSME BIT(0)348#define MPSM_PSMAD BIT(1)349#define MPSM_PDA_SHIFT 3350#define MPSM_PDA_MASK GENMASK(7, 3)351#define MPSM_PDA(n) (((n) << MPSM_PDA_SHIFT) & MPSM_PDA_MASK)352#define MPSM_PRA_SHIFT 8353#define MPSM_PRA_MASK GENMASK(12, 8)354#define MPSM_PRA(n) (((n) << MPSM_PRA_SHIFT) & MPSM_PRA_MASK)355#define MPSM_PRD_SHIFT 16356#define MPSM_PRD_SET(n) ((n) << MPSM_PRD_SHIFT)357#define MPSM_PRD_GET(n) ((n) >> MPSM_PRD_SHIFT)358 359#define GPOUT_RDM BIT(13)360#define GPOUT_TDM BIT(14)361 362/* RTSN */363#define RTSN_INTERVAL_US 1000364#define RTSN_TIMEOUT_US 1000000365 366#define TX_NUM_CHAINS 1367#define RX_NUM_CHAINS 1368 369#define TX_CHAIN_SIZE 1024370#define RX_CHAIN_SIZE 1024371 372#define TX_CHAIN_IDX 0373#define RX_CHAIN_IDX 0374 375#define TX_CHAIN_ADDR_OFFSET (sizeof(struct rtsn_desc) * TX_CHAIN_IDX)376#define RX_CHAIN_ADDR_OFFSET (sizeof(struct rtsn_desc) * RX_CHAIN_IDX)377 378#define PKT_BUF_SZ 1584379#define RTSN_ALIGN 128380 381enum rtsn_mode {382 OCR_OPC_DISABLE,383 OCR_OPC_CONFIG,384 OCR_OPC_OPERATION,385};386 387/* Descriptors */388enum RX_DS_CC_BIT {389 RX_DS = 0x0fff, /* Data size */390 RX_TR = 0x1000, /* Truncation indication */391 RX_EI = 0x2000, /* Error indication */392 RX_PS = 0xc000, /* Padding selection */393};394 395enum TX_FS_TAGL_BIT {396 TX_DS = 0x0fff, /* Data size */397 TX_TAGL = 0xf000, /* Frame tag LSBs */398};399 400enum DIE_DT {401 /* HW/SW arbitration */402 DT_FEMPTY_IS = 0x10,403 DT_FEMPTY_IC = 0x20,404 DT_FEMPTY_ND = 0x30,405 DT_FEMPTY = 0x40,406 DT_FEMPTY_START = 0x50,407 DT_FEMPTY_MID = 0x60,408 DT_FEMPTY_END = 0x70,409 410 /* Frame data */411 DT_FSINGLE = 0x80,412 DT_FSTART = 0x90,413 DT_FMID = 0xa0,414 DT_FEND = 0xb0,415 416 /* Chain control */417 DT_LEMPTY = 0xc0,418 DT_EEMPTY = 0xd0,419 DT_LINK = 0xe0,420 DT_EOS = 0xf0,421 422 DT_MASK = 0xf0,423 D_DIE = 0x08,424};425 426struct rtsn_desc {427 __le16 info_ds;428 __u8 info;429 u8 die_dt;430 __le32 dptr;431} __packed;432 433struct rtsn_ts_desc {434 __le16 info_ds;435 __u8 info;436 u8 die_dt;437 __le32 dptr;438 __le32 ts_nsec;439 __le32 ts_sec;440} __packed;441 442struct rtsn_ext_desc {443 __le16 info_ds;444 __u8 info;445 u8 die_dt;446 __le32 dptr;447 __le64 info1;448} __packed;449 450struct rtsn_ext_ts_desc {451 __le16 info_ds;452 __u8 info;453 u8 die_dt;454 __le32 dptr;455 __le64 info1;456 __le32 ts_nsec;457 __le32 ts_sec;458} __packed;459 460enum EXT_INFO_DS_BIT {461 TXC = 0x4000,462};463 464#endif465