1/* SPDX-License-Identifier: GPL-2.0-only */ 2/* Copyright (C) 2015 - 2016 Thomas K��rper, esd electronic system design gmbh 3 * Copyright (C) 2017 - 2023 Stefan M��tje, esd electronics gmbh 4 */ 5 6#include <linux/bits.h> 7#include <linux/can/dev.h> 8#include <linux/kernel.h> 9#include <linux/netdevice.h> 10#include <linux/units.h> 11 12#define ACC_TS_FREQ_80MHZ (80 * HZ_PER_MHZ) 13#define ACC_I2C_ADDON_DETECT_DELAY_MS 10 14 15/* esdACC Overview Module */ 16#define ACC_OV_OF_PROBE 0x0000 17#define ACC_OV_OF_VERSION 0x0004 18#define ACC_OV_OF_INFO 0x0008 19#define ACC_OV_OF_CANCORE_FREQ 0x000c 20#define ACC_OV_OF_TS_FREQ_LO 0x0010 21#define ACC_OV_OF_TS_FREQ_HI 0x0014 22#define ACC_OV_OF_IRQ_STATUS_CORES 0x0018 23#define ACC_OV_OF_TS_CURR_LO 0x001c 24#define ACC_OV_OF_TS_CURR_HI 0x0020 25#define ACC_OV_OF_IRQ_STATUS 0x0028 26#define ACC_OV_OF_MODE 0x002c 27#define ACC_OV_OF_BM_IRQ_COUNTER 0x0070 28#define ACC_OV_OF_BM_IRQ_MASK 0x0074 29#define ACC_OV_OF_MSI_DATA 0x0080 30#define ACC_OV_OF_MSI_ADDRESSOFFSET 0x0084 31 32/* Feature flags are contained in the upper 16 bit of the version 33 * register at ACC_OV_OF_VERSION but only used with these masks after 34 * extraction into an extra variable => (xx - 16). 35 */ 36#define ACC_OV_REG_FEAT_MASK_CANFD BIT(27 - 16) 37#define ACC_OV_REG_FEAT_MASK_NEW_PSC BIT(28 - 16) 38 39#define ACC_OV_REG_MODE_MASK_ENDIAN_LITTLE BIT(0) 40#define ACC_OV_REG_MODE_MASK_BM_ENABLE BIT(1) 41#define ACC_OV_REG_MODE_MASK_MODE_LED BIT(2) 42#define ACC_OV_REG_MODE_MASK_TIMER_ENABLE BIT(4) 43#define ACC_OV_REG_MODE_MASK_TIMER_ONE_SHOT BIT(5) 44#define ACC_OV_REG_MODE_MASK_TIMER_ABSOLUTE BIT(6) 45#define ACC_OV_REG_MODE_MASK_TIMER GENMASK(6, 4) 46#define ACC_OV_REG_MODE_MASK_TS_SRC GENMASK(8, 7) 47#define ACC_OV_REG_MODE_MASK_I2C_ENABLE BIT(11) 48#define ACC_OV_REG_MODE_MASK_MSI_ENABLE BIT(14) 49#define ACC_OV_REG_MODE_MASK_NEW_PSC_ENABLE BIT(15) 50#define ACC_OV_REG_MODE_MASK_FPGA_RESET BIT(31) 51 52/* esdACC CAN Core Module */ 53#define ACC_CORE_OF_CTRL_MODE 0x0000 54#define ACC_CORE_OF_STATUS_IRQ 0x0008 55#define ACC_CORE_OF_BRP 0x000c 56#define ACC_CORE_OF_BTR 0x0010 57#define ACC_CORE_OF_FBTR 0x0014 58#define ACC_CORE_OF_STATUS 0x0030 59#define ACC_CORE_OF_TXFIFO_CONFIG 0x0048 60#define ACC_CORE_OF_TXFIFO_STATUS 0x004c 61#define ACC_CORE_OF_TX_STATUS_IRQ 0x0050 62#define ACC_CORE_OF_TX_ABORT_MASK 0x0054 63#define ACC_CORE_OF_BM_IRQ_COUNTER 0x0070 64#define ACC_CORE_OF_TXFIFO_ID 0x00c0 65#define ACC_CORE_OF_TXFIFO_DLC 0x00c4 66#define ACC_CORE_OF_TXFIFO_DATA_0 0x00c8 67#define ACC_CORE_OF_TXFIFO_DATA_1 0x00cc 68 69#define ACC_REG_CONTROL_MASK_MODE_RESETMODE BIT(0) 70#define ACC_REG_CONTROL_MASK_MODE_LOM BIT(1) 71#define ACC_REG_CONTROL_MASK_MODE_STM BIT(2) 72#define ACC_REG_CONTROL_MASK_MODE_TRANSEN BIT(5) 73#define ACC_REG_CONTROL_MASK_MODE_TS BIT(6) 74#define ACC_REG_CONTROL_MASK_MODE_SCHEDULE BIT(7) 75 76#define ACC_REG_CONTROL_MASK_IE_RXTX BIT(8) 77#define ACC_REG_CONTROL_MASK_IE_TXERROR BIT(9) 78#define ACC_REG_CONTROL_MASK_IE_ERRWARN BIT(10) 79#define ACC_REG_CONTROL_MASK_IE_OVERRUN BIT(11) 80#define ACC_REG_CONTROL_MASK_IE_TSI BIT(12) 81#define ACC_REG_CONTROL_MASK_IE_ERRPASS BIT(13) 82#define ACC_REG_CONTROL_MASK_IE_ALI BIT(14) 83#define ACC_REG_CONTROL_MASK_IE_BUSERR BIT(15) 84 85/* BRP and BTR register layout for CAN-Classic version */ 86#define ACC_REG_BRP_CL_MASK_BRP GENMASK(8, 0) 87#define ACC_REG_BTR_CL_MASK_TSEG1 GENMASK(3, 0) 88#define ACC_REG_BTR_CL_MASK_TSEG2 GENMASK(18, 16) 89#define ACC_REG_BTR_CL_MASK_SJW GENMASK(25, 24) 90 91/* BRP and BTR register layout for CAN-FD version */ 92#define ACC_REG_BRP_FD_MASK_BRP GENMASK(7, 0) 93#define ACC_REG_BTR_FD_MASK_TSEG1 GENMASK(7, 0) 94#define ACC_REG_BTR_FD_MASK_TSEG2 GENMASK(22, 16) 95#define ACC_REG_BTR_FD_MASK_SJW GENMASK(30, 24) 96 97/* 256 BM_MSGs of 32 byte size */ 98#define ACC_CORE_DMAMSG_SIZE 32U 99#define ACC_CORE_DMABUF_SIZE (256U * ACC_CORE_DMAMSG_SIZE) 100 101enum acc_bmmsg_id { 102 BM_MSG_ID_RXTXDONE = 0x01, 103 BM_MSG_ID_TXABORT = 0x02, 104 BM_MSG_ID_OVERRUN = 0x03, 105 BM_MSG_ID_BUSERR = 0x04, 106 BM_MSG_ID_ERRPASSIVE = 0x05, 107 BM_MSG_ID_ERRWARN = 0x06, 108 BM_MSG_ID_TIMESLICE = 0x07, 109 BM_MSG_ID_HWTIMER = 0x08, 110 BM_MSG_ID_HOTPLUG = 0x09, 111}; 112 113/* The struct acc_bmmsg_* structure declarations that follow here provide 114 * access to the ring buffer of bus master messages maintained by the FPGA 115 * bus master engine. All bus master messages have the same size of 116 * ACC_CORE_DMAMSG_SIZE and a minimum alignment of ACC_CORE_DMAMSG_SIZE in 117 * memory. 118 * 119 * All structure members are natural aligned. Therefore we should not need 120 * a __packed attribute. All struct acc_bmmsg_* declarations have at least 121 * reserved* members to fill the structure to the full ACC_CORE_DMAMSG_SIZE. 122 * 123 * A failure of this property due padding will be detected at compile time 124 * by static_assert(sizeof(union acc_bmmsg) == ACC_CORE_DMAMSG_SIZE). 125 */ 126 127struct acc_bmmsg_rxtxdone { 128 u8 msg_id; 129 u8 txfifo_level; 130 u8 reserved1[2]; 131 u8 txtsfifo_level; 132 u8 reserved2[3]; 133 u32 id; 134 struct { 135 u8 len; 136 u8 txdfifo_idx; 137 u8 zeroes8; 138 u8 reserved; 139 } acc_dlc; 140 u8 data[CAN_MAX_DLEN]; 141 /* Time stamps in struct acc_ov::timestamp_frequency ticks. */ 142 u64 ts; 143}; 144 145struct acc_bmmsg_txabort { 146 u8 msg_id; 147 u8 txfifo_level; 148 u16 abort_mask; 149 u8 txtsfifo_level; 150 u8 reserved2[1]; 151 u16 abort_mask_txts; 152 u64 ts; 153 u32 reserved3[4]; 154}; 155 156struct acc_bmmsg_overrun { 157 u8 msg_id; 158 u8 txfifo_level; 159 u8 lost_cnt; 160 u8 reserved1; 161 u8 txtsfifo_level; 162 u8 reserved2[3]; 163 u64 ts; 164 u32 reserved3[4]; 165}; 166 167struct acc_bmmsg_buserr { 168 u8 msg_id; 169 u8 txfifo_level; 170 u8 ecc; 171 u8 reserved1; 172 u8 txtsfifo_level; 173 u8 reserved2[3]; 174 u64 ts; 175 u32 reg_status; 176 u32 reg_btr; 177 u32 reserved3[2]; 178}; 179 180struct acc_bmmsg_errstatechange { 181 u8 msg_id; 182 u8 txfifo_level; 183 u8 reserved1[2]; 184 u8 txtsfifo_level; 185 u8 reserved2[3]; 186 u64 ts; 187 u32 reg_status; 188 u32 reserved3[3]; 189}; 190 191struct acc_bmmsg_timeslice { 192 u8 msg_id; 193 u8 txfifo_level; 194 u8 reserved1[2]; 195 u8 txtsfifo_level; 196 u8 reserved2[3]; 197 u64 ts; 198 u32 reserved3[4]; 199}; 200 201struct acc_bmmsg_hwtimer { 202 u8 msg_id; 203 u8 reserved1[3]; 204 u32 reserved2[1]; 205 u64 timer; 206 u32 reserved3[4]; 207}; 208 209struct acc_bmmsg_hotplug { 210 u8 msg_id; 211 u8 reserved1[3]; 212 u32 reserved2[7]; 213}; 214 215union acc_bmmsg { 216 u8 msg_id; 217 struct acc_bmmsg_rxtxdone rxtxdone; 218 struct acc_bmmsg_txabort txabort; 219 struct acc_bmmsg_overrun overrun; 220 struct acc_bmmsg_buserr buserr; 221 struct acc_bmmsg_errstatechange errstatechange; 222 struct acc_bmmsg_timeslice timeslice; 223 struct acc_bmmsg_hwtimer hwtimer; 224}; 225 226/* Check size of union acc_bmmsg to be of expected size. */ 227static_assert(sizeof(union acc_bmmsg) == ACC_CORE_DMAMSG_SIZE); 228 229struct acc_bmfifo { 230 const union acc_bmmsg *messages; 231 /* irq_cnt points to an u32 value where the esdACC FPGA deposits 232 * the bm_fifo head index in coherent DMA memory. Only bits 7..0 233 * are valid. Use READ_ONCE() to access this memory location. 234 */ 235 const u32 *irq_cnt; 236 u32 local_irq_cnt; 237 u32 msg_fifo_tail; 238}; 239 240struct acc_core { 241 void __iomem *addr; 242 struct net_device *netdev; 243 struct acc_bmfifo bmfifo; 244 u8 tx_fifo_size; 245 u8 tx_fifo_head; 246 u8 tx_fifo_tail; 247}; 248 249struct acc_ov { 250 void __iomem *addr; 251 struct acc_bmfifo bmfifo; 252 u32 timestamp_frequency; 253 u32 core_frequency; 254 u16 version; 255 u16 features; 256 u8 total_cores; 257 u8 active_cores; 258}; 259 260struct acc_net_priv { 261 struct can_priv can; /* must be the first member! */ 262 struct acc_core *core; 263 struct acc_ov *ov; 264}; 265 266static inline u32 acc_read32(struct acc_core *core, unsigned short offs) 267{ 268 return ioread32be(core->addr + offs); 269} 270 271static inline void acc_write32(struct acc_core *core, 272 unsigned short offs, u32 v) 273{ 274 iowrite32be(v, core->addr + offs); 275} 276 277static inline void acc_write32_noswap(struct acc_core *core, 278 unsigned short offs, u32 v) 279{ 280 iowrite32(v, core->addr + offs); 281} 282 283static inline void acc_set_bits(struct acc_core *core, 284 unsigned short offs, u32 mask) 285{ 286 u32 v = acc_read32(core, offs); 287 288 v |= mask; 289 acc_write32(core, offs, v); 290} 291 292static inline void acc_clear_bits(struct acc_core *core, 293 unsigned short offs, u32 mask) 294{ 295 u32 v = acc_read32(core, offs); 296 297 v &= ~mask; 298 acc_write32(core, offs, v); 299} 300 301static inline int acc_resetmode_entered(struct acc_core *core) 302{ 303 u32 ctrl = acc_read32(core, ACC_CORE_OF_CTRL_MODE); 304 305 return (ctrl & ACC_REG_CONTROL_MASK_MODE_RESETMODE) != 0; 306} 307 308static inline u32 acc_ov_read32(struct acc_ov *ov, unsigned short offs) 309{ 310 return ioread32be(ov->addr + offs); 311} 312 313static inline void acc_ov_write32(struct acc_ov *ov, 314 unsigned short offs, u32 v) 315{ 316 iowrite32be(v, ov->addr + offs); 317} 318 319static inline void acc_ov_set_bits(struct acc_ov *ov, 320 unsigned short offs, u32 b) 321{ 322 u32 v = acc_ov_read32(ov, offs); 323 324 v |= b; 325 acc_ov_write32(ov, offs, v); 326} 327 328static inline void acc_ov_clear_bits(struct acc_ov *ov, 329 unsigned short offs, u32 b) 330{ 331 u32 v = acc_ov_read32(ov, offs); 332 333 v &= ~b; 334 acc_ov_write32(ov, offs, v); 335} 336 337static inline void acc_reset_fpga(struct acc_ov *ov) 338{ 339 acc_ov_write32(ov, ACC_OV_OF_MODE, ACC_OV_REG_MODE_MASK_FPGA_RESET); 340 341 /* (Re-)start and wait for completion of addon detection on the I^2C bus */ 342 acc_ov_set_bits(ov, ACC_OV_OF_MODE, ACC_OV_REG_MODE_MASK_I2C_ENABLE); 343 mdelay(ACC_I2C_ADDON_DETECT_DELAY_MS); 344} 345 346void acc_init_ov(struct acc_ov *ov, struct device *dev); 347void acc_init_bm_ptr(struct acc_ov *ov, struct acc_core *cores, 348 const void *mem); 349int acc_open(struct net_device *netdev); 350int acc_close(struct net_device *netdev); 351netdev_tx_t acc_start_xmit(struct sk_buff *skb, struct net_device *netdev); 352int acc_get_berr_counter(const struct net_device *netdev, 353 struct can_berr_counter *bec); 354int acc_set_mode(struct net_device *netdev, enum can_mode mode); 355int acc_set_bittiming(struct net_device *netdev); 356irqreturn_t acc_card_interrupt(struct acc_ov *ov, struct acc_core *cores); 357