fman_dtsec.c 42 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502
  1. // SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0-or-later
  2. /*
  3. * Copyright 2008 - 2015 Freescale Semiconductor Inc.
  4. */
  5. #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
  6. #include "fman_dtsec.h"
  7. #include "fman.h"
  8. #include "mac.h"
  9. #include <linux/slab.h>
  10. #include <linux/bitrev.h>
  11. #include <linux/io.h>
  12. #include <linux/delay.h>
  13. #include <linux/phy.h>
  14. #include <linux/crc32.h>
  15. #include <linux/of_mdio.h>
  16. #include <linux/mii.h>
  17. #include <linux/netdevice.h>
  18. /* TBI register addresses */
  19. #define MII_TBICON 0x11
  20. /* TBICON register bit fields */
  21. #define TBICON_SOFT_RESET 0x8000 /* Soft reset */
  22. #define TBICON_DISABLE_RX_DIS 0x2000 /* Disable receive disparity */
  23. #define TBICON_DISABLE_TX_DIS 0x1000 /* Disable transmit disparity */
  24. #define TBICON_AN_SENSE 0x0100 /* Auto-negotiation sense enable */
  25. #define TBICON_CLK_SELECT 0x0020 /* Clock select */
  26. #define TBICON_MI_MODE 0x0010 /* GMII mode (TBI if not set) */
  27. /* Interrupt Mask Register (IMASK) */
  28. #define DTSEC_IMASK_BREN 0x80000000
  29. #define DTSEC_IMASK_RXCEN 0x40000000
  30. #define DTSEC_IMASK_MSROEN 0x04000000
  31. #define DTSEC_IMASK_GTSCEN 0x02000000
  32. #define DTSEC_IMASK_BTEN 0x01000000
  33. #define DTSEC_IMASK_TXCEN 0x00800000
  34. #define DTSEC_IMASK_TXEEN 0x00400000
  35. #define DTSEC_IMASK_LCEN 0x00040000
  36. #define DTSEC_IMASK_CRLEN 0x00020000
  37. #define DTSEC_IMASK_XFUNEN 0x00010000
  38. #define DTSEC_IMASK_ABRTEN 0x00008000
  39. #define DTSEC_IMASK_IFERREN 0x00004000
  40. #define DTSEC_IMASK_MAGEN 0x00000800
  41. #define DTSEC_IMASK_MMRDEN 0x00000400
  42. #define DTSEC_IMASK_MMWREN 0x00000200
  43. #define DTSEC_IMASK_GRSCEN 0x00000100
  44. #define DTSEC_IMASK_TDPEEN 0x00000002
  45. #define DTSEC_IMASK_RDPEEN 0x00000001
  46. #define DTSEC_EVENTS_MASK \
  47. ((u32)(DTSEC_IMASK_BREN | \
  48. DTSEC_IMASK_RXCEN | \
  49. DTSEC_IMASK_BTEN | \
  50. DTSEC_IMASK_TXCEN | \
  51. DTSEC_IMASK_TXEEN | \
  52. DTSEC_IMASK_ABRTEN | \
  53. DTSEC_IMASK_LCEN | \
  54. DTSEC_IMASK_CRLEN | \
  55. DTSEC_IMASK_XFUNEN | \
  56. DTSEC_IMASK_IFERREN | \
  57. DTSEC_IMASK_MAGEN | \
  58. DTSEC_IMASK_TDPEEN | \
  59. DTSEC_IMASK_RDPEEN))
  60. /* dtsec timestamp event bits */
  61. #define TMR_PEMASK_TSREEN 0x00010000
  62. #define TMR_PEVENT_TSRE 0x00010000
  63. /* Group address bit indication */
  64. #define MAC_GROUP_ADDRESS 0x0000010000000000ULL
  65. /* Defaults */
  66. #define DEFAULT_HALFDUP_RETRANSMIT 0xf
  67. #define DEFAULT_HALFDUP_COLL_WINDOW 0x37
  68. #define DEFAULT_TX_PAUSE_TIME 0xf000
  69. #define DEFAULT_RX_PREPEND 0
  70. #define DEFAULT_PREAMBLE_LEN 7
  71. #define DEFAULT_TX_PAUSE_TIME_EXTD 0
  72. #define DEFAULT_NON_BACK_TO_BACK_IPG1 0x40
  73. #define DEFAULT_NON_BACK_TO_BACK_IPG2 0x60
  74. #define DEFAULT_MIN_IFG_ENFORCEMENT 0x50
  75. #define DEFAULT_BACK_TO_BACK_IPG 0x60
  76. #define DEFAULT_MAXIMUM_FRAME 0x600
  77. /* register related defines (bits, field offsets..) */
  78. #define DTSEC_ID2_INT_REDUCED_OFF 0x00010000
  79. #define DTSEC_ECNTRL_GMIIM 0x00000040
  80. #define DTSEC_ECNTRL_TBIM 0x00000020
  81. #define DTSEC_ECNTRL_RPM 0x00000010
  82. #define DTSEC_ECNTRL_R100M 0x00000008
  83. #define DTSEC_ECNTRL_RMM 0x00000004
  84. #define DTSEC_ECNTRL_SGMIIM 0x00000002
  85. #define DTSEC_ECNTRL_QSGMIIM 0x00000001
  86. #define TCTRL_TTSE 0x00000040
  87. #define TCTRL_GTS 0x00000020
  88. #define RCTRL_PAL_MASK 0x001f0000
  89. #define RCTRL_PAL_SHIFT 16
  90. #define RCTRL_GHTX 0x00000400
  91. #define RCTRL_RTSE 0x00000040
  92. #define RCTRL_GRS 0x00000020
  93. #define RCTRL_MPROM 0x00000008
  94. #define RCTRL_RSF 0x00000004
  95. #define RCTRL_UPROM 0x00000001
  96. #define MACCFG1_SOFT_RESET 0x80000000
  97. #define MACCFG1_RX_FLOW 0x00000020
  98. #define MACCFG1_TX_FLOW 0x00000010
  99. #define MACCFG1_TX_EN 0x00000001
  100. #define MACCFG1_RX_EN 0x00000004
  101. #define MACCFG2_NIBBLE_MODE 0x00000100
  102. #define MACCFG2_BYTE_MODE 0x00000200
  103. #define MACCFG2_PAD_CRC_EN 0x00000004
  104. #define MACCFG2_FULL_DUPLEX 0x00000001
  105. #define MACCFG2_PREAMBLE_LENGTH_MASK 0x0000f000
  106. #define MACCFG2_PREAMBLE_LENGTH_SHIFT 12
  107. #define IPGIFG_NON_BACK_TO_BACK_IPG_1_SHIFT 24
  108. #define IPGIFG_NON_BACK_TO_BACK_IPG_2_SHIFT 16
  109. #define IPGIFG_MIN_IFG_ENFORCEMENT_SHIFT 8
  110. #define IPGIFG_NON_BACK_TO_BACK_IPG_1 0x7F000000
  111. #define IPGIFG_NON_BACK_TO_BACK_IPG_2 0x007F0000
  112. #define IPGIFG_MIN_IFG_ENFORCEMENT 0x0000FF00
  113. #define IPGIFG_BACK_TO_BACK_IPG 0x0000007F
  114. #define HAFDUP_EXCESS_DEFER 0x00010000
  115. #define HAFDUP_COLLISION_WINDOW 0x000003ff
  116. #define HAFDUP_RETRANSMISSION_MAX_SHIFT 12
  117. #define HAFDUP_RETRANSMISSION_MAX 0x0000f000
  118. #define NUM_OF_HASH_REGS 8 /* Number of hash table registers */
  119. #define PTV_PTE_MASK 0xffff0000
  120. #define PTV_PT_MASK 0x0000ffff
  121. #define PTV_PTE_SHIFT 16
  122. #define MAX_PACKET_ALIGNMENT 31
  123. #define MAX_INTER_PACKET_GAP 0x7f
  124. #define MAX_RETRANSMISSION 0x0f
  125. #define MAX_COLLISION_WINDOW 0x03ff
  126. /* Hash table size (32 bits*8 regs) */
  127. #define DTSEC_HASH_TABLE_SIZE 256
  128. /* Extended Hash table size (32 bits*16 regs) */
  129. #define EXTENDED_HASH_TABLE_SIZE 512
  130. /* dTSEC Memory Map registers */
  131. struct dtsec_regs {
  132. /* dTSEC General Control and Status Registers */
  133. u32 tsec_id; /* 0x000 ETSEC_ID register */
  134. u32 tsec_id2; /* 0x004 ETSEC_ID2 register */
  135. u32 ievent; /* 0x008 Interrupt event register */
  136. u32 imask; /* 0x00C Interrupt mask register */
  137. u32 reserved0010[1];
  138. u32 ecntrl; /* 0x014 E control register */
  139. u32 ptv; /* 0x018 Pause time value register */
  140. u32 tbipa; /* 0x01C TBI PHY address register */
  141. u32 tmr_ctrl; /* 0x020 Time-stamp Control register */
  142. u32 tmr_pevent; /* 0x024 Time-stamp event register */
  143. u32 tmr_pemask; /* 0x028 Timer event mask register */
  144. u32 reserved002c[5];
  145. u32 tctrl; /* 0x040 Transmit control register */
  146. u32 reserved0044[3];
  147. u32 rctrl; /* 0x050 Receive control register */
  148. u32 reserved0054[11];
  149. u32 igaddr[8]; /* 0x080-0x09C Individual/group address */
  150. u32 gaddr[8]; /* 0x0A0-0x0BC Group address registers 0-7 */
  151. u32 reserved00c0[16];
  152. u32 maccfg1; /* 0x100 MAC configuration #1 */
  153. u32 maccfg2; /* 0x104 MAC configuration #2 */
  154. u32 ipgifg; /* 0x108 IPG/IFG */
  155. u32 hafdup; /* 0x10C Half-duplex */
  156. u32 maxfrm; /* 0x110 Maximum frame */
  157. u32 reserved0114[10];
  158. u32 ifstat; /* 0x13C Interface status */
  159. u32 macstnaddr1; /* 0x140 Station Address,part 1 */
  160. u32 macstnaddr2; /* 0x144 Station Address,part 2 */
  161. struct {
  162. u32 exact_match1; /* octets 1-4 */
  163. u32 exact_match2; /* octets 5-6 */
  164. } macaddr[15]; /* 0x148-0x1BC mac exact match addresses 1-15 */
  165. u32 reserved01c0[16];
  166. u32 tr64; /* 0x200 Tx and Rx 64 byte frame counter */
  167. u32 tr127; /* 0x204 Tx and Rx 65 to 127 byte frame counter */
  168. u32 tr255; /* 0x208 Tx and Rx 128 to 255 byte frame counter */
  169. u32 tr511; /* 0x20C Tx and Rx 256 to 511 byte frame counter */
  170. u32 tr1k; /* 0x210 Tx and Rx 512 to 1023 byte frame counter */
  171. u32 trmax; /* 0x214 Tx and Rx 1024 to 1518 byte frame counter */
  172. u32 trmgv;
  173. /* 0x218 Tx and Rx 1519 to 1522 byte good VLAN frame count */
  174. u32 rbyt; /* 0x21C receive byte counter */
  175. u32 rpkt; /* 0x220 receive packet counter */
  176. u32 rfcs; /* 0x224 receive FCS error counter */
  177. u32 rmca; /* 0x228 RMCA Rx multicast packet counter */
  178. u32 rbca; /* 0x22C Rx broadcast packet counter */
  179. u32 rxcf; /* 0x230 Rx control frame packet counter */
  180. u32 rxpf; /* 0x234 Rx pause frame packet counter */
  181. u32 rxuo; /* 0x238 Rx unknown OP code counter */
  182. u32 raln; /* 0x23C Rx alignment error counter */
  183. u32 rflr; /* 0x240 Rx frame length error counter */
  184. u32 rcde; /* 0x244 Rx code error counter */
  185. u32 rcse; /* 0x248 Rx carrier sense error counter */
  186. u32 rund; /* 0x24C Rx undersize packet counter */
  187. u32 rovr; /* 0x250 Rx oversize packet counter */
  188. u32 rfrg; /* 0x254 Rx fragments counter */
  189. u32 rjbr; /* 0x258 Rx jabber counter */
  190. u32 rdrp; /* 0x25C Rx drop */
  191. u32 tbyt; /* 0x260 Tx byte counter */
  192. u32 tpkt; /* 0x264 Tx packet counter */
  193. u32 tmca; /* 0x268 Tx multicast packet counter */
  194. u32 tbca; /* 0x26C Tx broadcast packet counter */
  195. u32 txpf; /* 0x270 Tx pause control frame counter */
  196. u32 tdfr; /* 0x274 Tx deferral packet counter */
  197. u32 tedf; /* 0x278 Tx excessive deferral packet counter */
  198. u32 tscl; /* 0x27C Tx single collision packet counter */
  199. u32 tmcl; /* 0x280 Tx multiple collision packet counter */
  200. u32 tlcl; /* 0x284 Tx late collision packet counter */
  201. u32 txcl; /* 0x288 Tx excessive collision packet counter */
  202. u32 tncl; /* 0x28C Tx total collision counter */
  203. u32 reserved0290[1];
  204. u32 tdrp; /* 0x294 Tx drop frame counter */
  205. u32 tjbr; /* 0x298 Tx jabber frame counter */
  206. u32 tfcs; /* 0x29C Tx FCS error counter */
  207. u32 txcf; /* 0x2A0 Tx control frame counter */
  208. u32 tovr; /* 0x2A4 Tx oversize frame counter */
  209. u32 tund; /* 0x2A8 Tx undersize frame counter */
  210. u32 tfrg; /* 0x2AC Tx fragments frame counter */
  211. u32 car1; /* 0x2B0 carry register one register* */
  212. u32 car2; /* 0x2B4 carry register two register* */
  213. u32 cam1; /* 0x2B8 carry register one mask register */
  214. u32 cam2; /* 0x2BC carry register two mask register */
  215. u32 reserved02c0[848];
  216. };
  217. /* struct dtsec_cfg - dTSEC configuration
  218. * Transmit half-duplex flow control, under software control for 10/100-Mbps
  219. * half-duplex media. If set, back pressure is applied to media by raising
  220. * carrier.
  221. * halfdup_retransmit:
  222. * Number of retransmission attempts following a collision.
  223. * If this is exceeded dTSEC aborts transmission due to excessive collisions.
  224. * The standard specifies the attempt limit to be 15.
  225. * halfdup_coll_window:
  226. * The number of bytes of the frame during which collisions may occur.
  227. * The default value of 55 corresponds to the frame byte at the end of the
  228. * standard 512-bit slot time window. If collisions are detected after this
  229. * byte, the late collision event is asserted and transmission of current
  230. * frame is aborted.
  231. * tx_pad_crc:
  232. * Pad and append CRC. If set, the MAC pads all ransmitted short frames and
  233. * appends a CRC to every frame regardless of padding requirement.
  234. * tx_pause_time:
  235. * Transmit pause time value. This pause value is used as part of the pause
  236. * frame to be sent when a transmit pause frame is initiated.
  237. * If set to 0 this disables transmission of pause frames.
  238. * preamble_len:
  239. * Length, in bytes, of the preamble field preceding each Ethernet
  240. * start-of-frame delimiter byte. The default value of 0x7 should be used in
  241. * order to guarantee reliable operation with IEEE 802.3 compliant hardware.
  242. * rx_prepend:
  243. * Packet alignment padding length. The specified number of bytes (1-31)
  244. * of zero padding are inserted before the start of each received frame.
  245. * For Ethernet, where optional preamble extraction is enabled, the padding
  246. * appears before the preamble, otherwise the padding precedes the
  247. * layer 2 header.
  248. *
  249. * This structure contains basic dTSEC configuration and must be passed to
  250. * init() function. A default set of configuration values can be
  251. * obtained by calling set_dflts().
  252. */
  253. struct dtsec_cfg {
  254. u16 halfdup_retransmit;
  255. u16 halfdup_coll_window;
  256. bool tx_pad_crc;
  257. u16 tx_pause_time;
  258. bool ptp_tsu_en;
  259. bool ptp_exception_en;
  260. u32 preamble_len;
  261. u32 rx_prepend;
  262. u16 tx_pause_time_extd;
  263. u16 maximum_frame;
  264. u32 non_back_to_back_ipg1;
  265. u32 non_back_to_back_ipg2;
  266. u32 min_ifg_enforcement;
  267. u32 back_to_back_ipg;
  268. };
  269. struct fman_mac {
  270. /* pointer to dTSEC memory mapped registers */
  271. struct dtsec_regs __iomem *regs;
  272. /* MAC address of device */
  273. u64 addr;
  274. /* Ethernet physical interface */
  275. phy_interface_t phy_if;
  276. u16 max_speed;
  277. struct mac_device *dev_id; /* device cookie used by the exception cbs */
  278. fman_mac_exception_cb *exception_cb;
  279. fman_mac_exception_cb *event_cb;
  280. /* Number of individual addresses in registers for this station */
  281. u8 num_of_ind_addr_in_regs;
  282. /* pointer to driver's global address hash table */
  283. struct eth_hash_t *multicast_addr_hash;
  284. /* pointer to driver's individual address hash table */
  285. struct eth_hash_t *unicast_addr_hash;
  286. u8 mac_id;
  287. u32 exceptions;
  288. bool ptp_tsu_enabled;
  289. bool en_tsu_err_exception;
  290. struct dtsec_cfg *dtsec_drv_param;
  291. void *fm;
  292. struct fman_rev_info fm_rev_info;
  293. bool basex_if;
  294. struct mdio_device *tbidev;
  295. struct phylink_pcs pcs;
  296. };
  297. static void set_dflts(struct dtsec_cfg *cfg)
  298. {
  299. cfg->halfdup_retransmit = DEFAULT_HALFDUP_RETRANSMIT;
  300. cfg->halfdup_coll_window = DEFAULT_HALFDUP_COLL_WINDOW;
  301. cfg->tx_pad_crc = true;
  302. cfg->tx_pause_time = DEFAULT_TX_PAUSE_TIME;
  303. /* PHY address 0 is reserved (DPAA RM) */
  304. cfg->rx_prepend = DEFAULT_RX_PREPEND;
  305. cfg->ptp_tsu_en = true;
  306. cfg->ptp_exception_en = true;
  307. cfg->preamble_len = DEFAULT_PREAMBLE_LEN;
  308. cfg->tx_pause_time_extd = DEFAULT_TX_PAUSE_TIME_EXTD;
  309. cfg->non_back_to_back_ipg1 = DEFAULT_NON_BACK_TO_BACK_IPG1;
  310. cfg->non_back_to_back_ipg2 = DEFAULT_NON_BACK_TO_BACK_IPG2;
  311. cfg->min_ifg_enforcement = DEFAULT_MIN_IFG_ENFORCEMENT;
  312. cfg->back_to_back_ipg = DEFAULT_BACK_TO_BACK_IPG;
  313. cfg->maximum_frame = DEFAULT_MAXIMUM_FRAME;
  314. }
  315. static void set_mac_address(struct dtsec_regs __iomem *regs, const u8 *adr)
  316. {
  317. u32 tmp;
  318. tmp = (u32)((adr[5] << 24) |
  319. (adr[4] << 16) | (adr[3] << 8) | adr[2]);
  320. iowrite32be(tmp, &regs->macstnaddr1);
  321. tmp = (u32)((adr[1] << 24) | (adr[0] << 16));
  322. iowrite32be(tmp, &regs->macstnaddr2);
  323. }
  324. static int init(struct dtsec_regs __iomem *regs, struct dtsec_cfg *cfg,
  325. phy_interface_t iface, u16 iface_speed, u64 addr,
  326. u32 exception_mask, u8 tbi_addr)
  327. {
  328. enet_addr_t eth_addr;
  329. u32 tmp = 0;
  330. int i;
  331. /* Soft reset */
  332. iowrite32be(MACCFG1_SOFT_RESET, &regs->maccfg1);
  333. iowrite32be(0, &regs->maccfg1);
  334. if (cfg->tx_pause_time)
  335. tmp |= cfg->tx_pause_time;
  336. if (cfg->tx_pause_time_extd)
  337. tmp |= cfg->tx_pause_time_extd << PTV_PTE_SHIFT;
  338. iowrite32be(tmp, &regs->ptv);
  339. tmp = 0;
  340. tmp |= (cfg->rx_prepend << RCTRL_PAL_SHIFT) & RCTRL_PAL_MASK;
  341. /* Accept short frames */
  342. tmp |= RCTRL_RSF;
  343. iowrite32be(tmp, &regs->rctrl);
  344. /* Assign a Phy Address to the TBI (TBIPA).
  345. * Done also in cases where TBI is not selected to avoid conflict with
  346. * the external PHY's Physical address
  347. */
  348. iowrite32be(tbi_addr, &regs->tbipa);
  349. iowrite32be(0, &regs->tmr_ctrl);
  350. if (cfg->ptp_tsu_en) {
  351. tmp = 0;
  352. tmp |= TMR_PEVENT_TSRE;
  353. iowrite32be(tmp, &regs->tmr_pevent);
  354. if (cfg->ptp_exception_en) {
  355. tmp = 0;
  356. tmp |= TMR_PEMASK_TSREEN;
  357. iowrite32be(tmp, &regs->tmr_pemask);
  358. }
  359. }
  360. tmp = 0;
  361. tmp |= MACCFG1_RX_FLOW;
  362. tmp |= MACCFG1_TX_FLOW;
  363. iowrite32be(tmp, &regs->maccfg1);
  364. tmp = 0;
  365. tmp |= (cfg->preamble_len << MACCFG2_PREAMBLE_LENGTH_SHIFT) &
  366. MACCFG2_PREAMBLE_LENGTH_MASK;
  367. if (cfg->tx_pad_crc)
  368. tmp |= MACCFG2_PAD_CRC_EN;
  369. iowrite32be(tmp, &regs->maccfg2);
  370. tmp = (((cfg->non_back_to_back_ipg1 <<
  371. IPGIFG_NON_BACK_TO_BACK_IPG_1_SHIFT)
  372. & IPGIFG_NON_BACK_TO_BACK_IPG_1)
  373. | ((cfg->non_back_to_back_ipg2 <<
  374. IPGIFG_NON_BACK_TO_BACK_IPG_2_SHIFT)
  375. & IPGIFG_NON_BACK_TO_BACK_IPG_2)
  376. | ((cfg->min_ifg_enforcement << IPGIFG_MIN_IFG_ENFORCEMENT_SHIFT)
  377. & IPGIFG_MIN_IFG_ENFORCEMENT)
  378. | (cfg->back_to_back_ipg & IPGIFG_BACK_TO_BACK_IPG));
  379. iowrite32be(tmp, &regs->ipgifg);
  380. tmp = 0;
  381. tmp |= HAFDUP_EXCESS_DEFER;
  382. tmp |= ((cfg->halfdup_retransmit << HAFDUP_RETRANSMISSION_MAX_SHIFT)
  383. & HAFDUP_RETRANSMISSION_MAX);
  384. tmp |= (cfg->halfdup_coll_window & HAFDUP_COLLISION_WINDOW);
  385. iowrite32be(tmp, &regs->hafdup);
  386. /* Initialize Maximum frame length */
  387. iowrite32be(cfg->maximum_frame, &regs->maxfrm);
  388. iowrite32be(0xffffffff, &regs->cam1);
  389. iowrite32be(0xffffffff, &regs->cam2);
  390. iowrite32be(exception_mask, &regs->imask);
  391. iowrite32be(0xffffffff, &regs->ievent);
  392. if (addr) {
  393. MAKE_ENET_ADDR_FROM_UINT64(addr, eth_addr);
  394. set_mac_address(regs, (const u8 *)eth_addr);
  395. }
  396. /* HASH */
  397. for (i = 0; i < NUM_OF_HASH_REGS; i++) {
  398. /* Initialize IADDRx */
  399. iowrite32be(0, &regs->igaddr[i]);
  400. /* Initialize GADDRx */
  401. iowrite32be(0, &regs->gaddr[i]);
  402. }
  403. return 0;
  404. }
  405. static void set_bucket(struct dtsec_regs __iomem *regs, int bucket,
  406. bool enable)
  407. {
  408. int reg_idx = (bucket >> 5) & 0xf;
  409. int bit_idx = bucket & 0x1f;
  410. u32 bit_mask = 0x80000000 >> bit_idx;
  411. u32 __iomem *reg;
  412. if (reg_idx > 7)
  413. reg = &regs->gaddr[reg_idx - 8];
  414. else
  415. reg = &regs->igaddr[reg_idx];
  416. if (enable)
  417. iowrite32be(ioread32be(reg) | bit_mask, reg);
  418. else
  419. iowrite32be(ioread32be(reg) & (~bit_mask), reg);
  420. }
  421. static int check_init_parameters(struct fman_mac *dtsec)
  422. {
  423. if ((dtsec->dtsec_drv_param)->rx_prepend >
  424. MAX_PACKET_ALIGNMENT) {
  425. pr_err("packetAlignmentPadding can't be > than %d\n",
  426. MAX_PACKET_ALIGNMENT);
  427. return -EINVAL;
  428. }
  429. if (((dtsec->dtsec_drv_param)->non_back_to_back_ipg1 >
  430. MAX_INTER_PACKET_GAP) ||
  431. ((dtsec->dtsec_drv_param)->non_back_to_back_ipg2 >
  432. MAX_INTER_PACKET_GAP) ||
  433. ((dtsec->dtsec_drv_param)->back_to_back_ipg >
  434. MAX_INTER_PACKET_GAP)) {
  435. pr_err("Inter packet gap can't be greater than %d\n",
  436. MAX_INTER_PACKET_GAP);
  437. return -EINVAL;
  438. }
  439. if ((dtsec->dtsec_drv_param)->halfdup_retransmit >
  440. MAX_RETRANSMISSION) {
  441. pr_err("maxRetransmission can't be greater than %d\n",
  442. MAX_RETRANSMISSION);
  443. return -EINVAL;
  444. }
  445. if ((dtsec->dtsec_drv_param)->halfdup_coll_window >
  446. MAX_COLLISION_WINDOW) {
  447. pr_err("collisionWindow can't be greater than %d\n",
  448. MAX_COLLISION_WINDOW);
  449. return -EINVAL;
  450. /* If Auto negotiation process is disabled, need to set up the PHY
  451. * using the MII Management Interface
  452. */
  453. }
  454. if (!dtsec->exception_cb) {
  455. pr_err("uninitialized exception_cb\n");
  456. return -EINVAL;
  457. }
  458. if (!dtsec->event_cb) {
  459. pr_err("uninitialized event_cb\n");
  460. return -EINVAL;
  461. }
  462. return 0;
  463. }
  464. static int get_exception_flag(enum fman_mac_exceptions exception)
  465. {
  466. u32 bit_mask;
  467. switch (exception) {
  468. case FM_MAC_EX_1G_BAB_RX:
  469. bit_mask = DTSEC_IMASK_BREN;
  470. break;
  471. case FM_MAC_EX_1G_RX_CTL:
  472. bit_mask = DTSEC_IMASK_RXCEN;
  473. break;
  474. case FM_MAC_EX_1G_GRATEFUL_TX_STP_COMPLET:
  475. bit_mask = DTSEC_IMASK_GTSCEN;
  476. break;
  477. case FM_MAC_EX_1G_BAB_TX:
  478. bit_mask = DTSEC_IMASK_BTEN;
  479. break;
  480. case FM_MAC_EX_1G_TX_CTL:
  481. bit_mask = DTSEC_IMASK_TXCEN;
  482. break;
  483. case FM_MAC_EX_1G_TX_ERR:
  484. bit_mask = DTSEC_IMASK_TXEEN;
  485. break;
  486. case FM_MAC_EX_1G_LATE_COL:
  487. bit_mask = DTSEC_IMASK_LCEN;
  488. break;
  489. case FM_MAC_EX_1G_COL_RET_LMT:
  490. bit_mask = DTSEC_IMASK_CRLEN;
  491. break;
  492. case FM_MAC_EX_1G_TX_FIFO_UNDRN:
  493. bit_mask = DTSEC_IMASK_XFUNEN;
  494. break;
  495. case FM_MAC_EX_1G_MAG_PCKT:
  496. bit_mask = DTSEC_IMASK_MAGEN;
  497. break;
  498. case FM_MAC_EX_1G_MII_MNG_RD_COMPLET:
  499. bit_mask = DTSEC_IMASK_MMRDEN;
  500. break;
  501. case FM_MAC_EX_1G_MII_MNG_WR_COMPLET:
  502. bit_mask = DTSEC_IMASK_MMWREN;
  503. break;
  504. case FM_MAC_EX_1G_GRATEFUL_RX_STP_COMPLET:
  505. bit_mask = DTSEC_IMASK_GRSCEN;
  506. break;
  507. case FM_MAC_EX_1G_DATA_ERR:
  508. bit_mask = DTSEC_IMASK_TDPEEN;
  509. break;
  510. case FM_MAC_EX_1G_RX_MIB_CNT_OVFL:
  511. bit_mask = DTSEC_IMASK_MSROEN;
  512. break;
  513. default:
  514. bit_mask = 0;
  515. break;
  516. }
  517. return bit_mask;
  518. }
  519. static u16 dtsec_get_max_frame_length(struct fman_mac *dtsec)
  520. {
  521. struct dtsec_regs __iomem *regs = dtsec->regs;
  522. return (u16)ioread32be(&regs->maxfrm);
  523. }
  524. static void dtsec_isr(void *handle)
  525. {
  526. struct fman_mac *dtsec = (struct fman_mac *)handle;
  527. struct dtsec_regs __iomem *regs = dtsec->regs;
  528. u32 event;
  529. /* do not handle MDIO events */
  530. event = ioread32be(&regs->ievent) &
  531. (u32)(~(DTSEC_IMASK_MMRDEN | DTSEC_IMASK_MMWREN));
  532. event &= ioread32be(&regs->imask);
  533. iowrite32be(event, &regs->ievent);
  534. if (event & DTSEC_IMASK_BREN)
  535. dtsec->exception_cb(dtsec->dev_id, FM_MAC_EX_1G_BAB_RX);
  536. if (event & DTSEC_IMASK_RXCEN)
  537. dtsec->exception_cb(dtsec->dev_id, FM_MAC_EX_1G_RX_CTL);
  538. if (event & DTSEC_IMASK_GTSCEN)
  539. dtsec->exception_cb(dtsec->dev_id,
  540. FM_MAC_EX_1G_GRATEFUL_TX_STP_COMPLET);
  541. if (event & DTSEC_IMASK_BTEN)
  542. dtsec->exception_cb(dtsec->dev_id, FM_MAC_EX_1G_BAB_TX);
  543. if (event & DTSEC_IMASK_TXCEN)
  544. dtsec->exception_cb(dtsec->dev_id, FM_MAC_EX_1G_TX_CTL);
  545. if (event & DTSEC_IMASK_TXEEN)
  546. dtsec->exception_cb(dtsec->dev_id, FM_MAC_EX_1G_TX_ERR);
  547. if (event & DTSEC_IMASK_LCEN)
  548. dtsec->exception_cb(dtsec->dev_id, FM_MAC_EX_1G_LATE_COL);
  549. if (event & DTSEC_IMASK_CRLEN)
  550. dtsec->exception_cb(dtsec->dev_id, FM_MAC_EX_1G_COL_RET_LMT);
  551. if (event & DTSEC_IMASK_XFUNEN) {
  552. /* FM_TX_LOCKUP_ERRATA_DTSEC6 Errata workaround */
  553. /* FIXME: This races with the rest of the driver! */
  554. if (dtsec->fm_rev_info.major == 2) {
  555. u32 tpkt1, tmp_reg1, tpkt2, tmp_reg2, i;
  556. /* a. Write 0x00E0_0C00 to DTSEC_ID
  557. * This is a read only register
  558. * b. Read and save the value of TPKT
  559. */
  560. tpkt1 = ioread32be(&regs->tpkt);
  561. /* c. Read the register at dTSEC address offset 0x32C */
  562. tmp_reg1 = ioread32be(&regs->reserved02c0[27]);
  563. /* d. Compare bits [9:15] to bits [25:31] of the
  564. * register at address offset 0x32C.
  565. */
  566. if ((tmp_reg1 & 0x007F0000) !=
  567. (tmp_reg1 & 0x0000007F)) {
  568. /* If they are not equal, save the value of
  569. * this register and wait for at least
  570. * MAXFRM*16 ns
  571. */
  572. usleep_range((u32)(min
  573. (dtsec_get_max_frame_length(dtsec) *
  574. 16 / 1000, 1)), (u32)
  575. (min(dtsec_get_max_frame_length
  576. (dtsec) * 16 / 1000, 1) + 1));
  577. }
  578. /* e. Read and save TPKT again and read the register
  579. * at dTSEC address offset 0x32C again
  580. */
  581. tpkt2 = ioread32be(&regs->tpkt);
  582. tmp_reg2 = ioread32be(&regs->reserved02c0[27]);
  583. /* f. Compare the value of TPKT saved in step b to
  584. * value read in step e. Also compare bits [9:15] of
  585. * the register at offset 0x32C saved in step d to the
  586. * value of bits [9:15] saved in step e. If the two
  587. * registers values are unchanged, then the transmit
  588. * portion of the dTSEC controller is locked up and
  589. * the user should proceed to the recover sequence.
  590. */
  591. if ((tpkt1 == tpkt2) && ((tmp_reg1 & 0x007F0000) ==
  592. (tmp_reg2 & 0x007F0000))) {
  593. /* recover sequence */
  594. /* a.Write a 1 to RCTRL[GRS] */
  595. iowrite32be(ioread32be(&regs->rctrl) |
  596. RCTRL_GRS, &regs->rctrl);
  597. /* b.Wait until IEVENT[GRSC]=1, or at least
  598. * 100 us has elapsed.
  599. */
  600. for (i = 0; i < 100; i++) {
  601. if (ioread32be(&regs->ievent) &
  602. DTSEC_IMASK_GRSCEN)
  603. break;
  604. udelay(1);
  605. }
  606. if (ioread32be(&regs->ievent) &
  607. DTSEC_IMASK_GRSCEN)
  608. iowrite32be(DTSEC_IMASK_GRSCEN,
  609. &regs->ievent);
  610. else
  611. pr_debug("Rx lockup due to Tx lockup\n");
  612. /* c.Write a 1 to bit n of FM_RSTC
  613. * (offset 0x0CC of FPM)
  614. */
  615. fman_reset_mac(dtsec->fm, dtsec->mac_id);
  616. /* d.Wait 4 Tx clocks (32 ns) */
  617. udelay(1);
  618. /* e.Write a 0 to bit n of FM_RSTC. */
  619. /* cleared by FMAN
  620. */
  621. }
  622. }
  623. dtsec->exception_cb(dtsec->dev_id, FM_MAC_EX_1G_TX_FIFO_UNDRN);
  624. }
  625. if (event & DTSEC_IMASK_MAGEN)
  626. dtsec->exception_cb(dtsec->dev_id, FM_MAC_EX_1G_MAG_PCKT);
  627. if (event & DTSEC_IMASK_GRSCEN)
  628. dtsec->exception_cb(dtsec->dev_id,
  629. FM_MAC_EX_1G_GRATEFUL_RX_STP_COMPLET);
  630. if (event & DTSEC_IMASK_TDPEEN)
  631. dtsec->exception_cb(dtsec->dev_id, FM_MAC_EX_1G_DATA_ERR);
  632. if (event & DTSEC_IMASK_RDPEEN)
  633. dtsec->exception_cb(dtsec->dev_id, FM_MAC_1G_RX_DATA_ERR);
  634. /* masked interrupts */
  635. WARN_ON(event & DTSEC_IMASK_ABRTEN);
  636. WARN_ON(event & DTSEC_IMASK_IFERREN);
  637. }
  638. static void dtsec_1588_isr(void *handle)
  639. {
  640. struct fman_mac *dtsec = (struct fman_mac *)handle;
  641. struct dtsec_regs __iomem *regs = dtsec->regs;
  642. u32 event;
  643. if (dtsec->ptp_tsu_enabled) {
  644. event = ioread32be(&regs->tmr_pevent);
  645. event &= ioread32be(&regs->tmr_pemask);
  646. if (event) {
  647. iowrite32be(event, &regs->tmr_pevent);
  648. WARN_ON(event & TMR_PEVENT_TSRE);
  649. dtsec->exception_cb(dtsec->dev_id,
  650. FM_MAC_EX_1G_1588_TS_RX_ERR);
  651. }
  652. }
  653. }
  654. static void free_init_resources(struct fman_mac *dtsec)
  655. {
  656. fman_unregister_intr(dtsec->fm, FMAN_MOD_MAC, dtsec->mac_id,
  657. FMAN_INTR_TYPE_ERR);
  658. fman_unregister_intr(dtsec->fm, FMAN_MOD_MAC, dtsec->mac_id,
  659. FMAN_INTR_TYPE_NORMAL);
  660. /* release the driver's group hash table */
  661. free_hash_table(dtsec->multicast_addr_hash);
  662. dtsec->multicast_addr_hash = NULL;
  663. /* release the driver's individual hash table */
  664. free_hash_table(dtsec->unicast_addr_hash);
  665. dtsec->unicast_addr_hash = NULL;
  666. }
  667. static struct fman_mac *pcs_to_dtsec(struct phylink_pcs *pcs)
  668. {
  669. return container_of(pcs, struct fman_mac, pcs);
  670. }
  671. static void dtsec_pcs_get_state(struct phylink_pcs *pcs, unsigned int neg_mode,
  672. struct phylink_link_state *state)
  673. {
  674. struct fman_mac *dtsec = pcs_to_dtsec(pcs);
  675. phylink_mii_c22_pcs_get_state(dtsec->tbidev, neg_mode, state);
  676. }
  677. static int dtsec_pcs_config(struct phylink_pcs *pcs, unsigned int neg_mode,
  678. phy_interface_t interface,
  679. const unsigned long *advertising,
  680. bool permit_pause_to_mac)
  681. {
  682. struct fman_mac *dtsec = pcs_to_dtsec(pcs);
  683. return phylink_mii_c22_pcs_config(dtsec->tbidev, interface,
  684. advertising, neg_mode);
  685. }
  686. static void dtsec_pcs_an_restart(struct phylink_pcs *pcs)
  687. {
  688. struct fman_mac *dtsec = pcs_to_dtsec(pcs);
  689. phylink_mii_c22_pcs_an_restart(dtsec->tbidev);
  690. }
  691. static const struct phylink_pcs_ops dtsec_pcs_ops = {
  692. .pcs_get_state = dtsec_pcs_get_state,
  693. .pcs_config = dtsec_pcs_config,
  694. .pcs_an_restart = dtsec_pcs_an_restart,
  695. };
  696. static void graceful_start(struct fman_mac *dtsec)
  697. {
  698. struct dtsec_regs __iomem *regs = dtsec->regs;
  699. iowrite32be(ioread32be(&regs->tctrl) & ~TCTRL_GTS, &regs->tctrl);
  700. iowrite32be(ioread32be(&regs->rctrl) & ~RCTRL_GRS, &regs->rctrl);
  701. }
  702. static void graceful_stop(struct fman_mac *dtsec)
  703. {
  704. struct dtsec_regs __iomem *regs = dtsec->regs;
  705. u32 tmp;
  706. /* Graceful stop - Assert the graceful Rx stop bit */
  707. tmp = ioread32be(&regs->rctrl) | RCTRL_GRS;
  708. iowrite32be(tmp, &regs->rctrl);
  709. if (dtsec->fm_rev_info.major == 2) {
  710. /* Workaround for dTSEC Errata A002 */
  711. usleep_range(100, 200);
  712. } else {
  713. /* Workaround for dTSEC Errata A004839 */
  714. usleep_range(10, 50);
  715. }
  716. /* Graceful stop - Assert the graceful Tx stop bit */
  717. if (dtsec->fm_rev_info.major == 2) {
  718. /* dTSEC Errata A004: Do not use TCTRL[GTS]=1 */
  719. pr_debug("GTS not supported due to DTSEC_A004 Errata.\n");
  720. } else {
  721. tmp = ioread32be(&regs->tctrl) | TCTRL_GTS;
  722. iowrite32be(tmp, &regs->tctrl);
  723. /* Workaround for dTSEC Errata A0012, A0014 */
  724. usleep_range(10, 50);
  725. }
  726. }
  727. static int dtsec_enable(struct fman_mac *dtsec)
  728. {
  729. return 0;
  730. }
  731. static void dtsec_disable(struct fman_mac *dtsec)
  732. {
  733. }
  734. static int dtsec_set_tx_pause_frames(struct fman_mac *dtsec,
  735. u8 __maybe_unused priority,
  736. u16 pause_time,
  737. u16 __maybe_unused thresh_time)
  738. {
  739. struct dtsec_regs __iomem *regs = dtsec->regs;
  740. u32 ptv = 0;
  741. if (pause_time) {
  742. /* FM_BAD_TX_TS_IN_B_2_B_ERRATA_DTSEC_A003 Errata workaround */
  743. if (dtsec->fm_rev_info.major == 2 && pause_time <= 320) {
  744. pr_warn("pause-time: %d illegal.Should be > 320\n",
  745. pause_time);
  746. return -EINVAL;
  747. }
  748. ptv = ioread32be(&regs->ptv);
  749. ptv &= PTV_PTE_MASK;
  750. ptv |= pause_time & PTV_PT_MASK;
  751. iowrite32be(ptv, &regs->ptv);
  752. /* trigger the transmission of a flow-control pause frame */
  753. iowrite32be(ioread32be(&regs->maccfg1) | MACCFG1_TX_FLOW,
  754. &regs->maccfg1);
  755. } else
  756. iowrite32be(ioread32be(&regs->maccfg1) & ~MACCFG1_TX_FLOW,
  757. &regs->maccfg1);
  758. return 0;
  759. }
  760. static int dtsec_accept_rx_pause_frames(struct fman_mac *dtsec, bool en)
  761. {
  762. struct dtsec_regs __iomem *regs = dtsec->regs;
  763. u32 tmp;
  764. tmp = ioread32be(&regs->maccfg1);
  765. if (en)
  766. tmp |= MACCFG1_RX_FLOW;
  767. else
  768. tmp &= ~MACCFG1_RX_FLOW;
  769. iowrite32be(tmp, &regs->maccfg1);
  770. return 0;
  771. }
  772. static struct phylink_pcs *dtsec_select_pcs(struct phylink_config *config,
  773. phy_interface_t iface)
  774. {
  775. struct fman_mac *dtsec = fman_config_to_mac(config)->fman_mac;
  776. switch (iface) {
  777. case PHY_INTERFACE_MODE_SGMII:
  778. case PHY_INTERFACE_MODE_1000BASEX:
  779. case PHY_INTERFACE_MODE_2500BASEX:
  780. return &dtsec->pcs;
  781. default:
  782. return NULL;
  783. }
  784. }
  785. static void dtsec_mac_config(struct phylink_config *config, unsigned int mode,
  786. const struct phylink_link_state *state)
  787. {
  788. struct mac_device *mac_dev = fman_config_to_mac(config);
  789. struct dtsec_regs __iomem *regs = mac_dev->fman_mac->regs;
  790. u32 tmp;
  791. switch (state->interface) {
  792. case PHY_INTERFACE_MODE_RMII:
  793. tmp = DTSEC_ECNTRL_RMM;
  794. break;
  795. case PHY_INTERFACE_MODE_RGMII:
  796. case PHY_INTERFACE_MODE_RGMII_ID:
  797. case PHY_INTERFACE_MODE_RGMII_RXID:
  798. case PHY_INTERFACE_MODE_RGMII_TXID:
  799. tmp = DTSEC_ECNTRL_GMIIM | DTSEC_ECNTRL_RPM;
  800. break;
  801. case PHY_INTERFACE_MODE_SGMII:
  802. case PHY_INTERFACE_MODE_1000BASEX:
  803. case PHY_INTERFACE_MODE_2500BASEX:
  804. tmp = DTSEC_ECNTRL_TBIM | DTSEC_ECNTRL_SGMIIM;
  805. break;
  806. default:
  807. dev_warn(mac_dev->dev, "cannot configure dTSEC for %s\n",
  808. phy_modes(state->interface));
  809. return;
  810. }
  811. iowrite32be(tmp, &regs->ecntrl);
  812. }
  813. static void dtsec_link_up(struct phylink_config *config, struct phy_device *phy,
  814. unsigned int mode, phy_interface_t interface,
  815. int speed, int duplex, bool tx_pause, bool rx_pause)
  816. {
  817. struct mac_device *mac_dev = fman_config_to_mac(config);
  818. struct fman_mac *dtsec = mac_dev->fman_mac;
  819. struct dtsec_regs __iomem *regs = dtsec->regs;
  820. u16 pause_time = tx_pause ? FSL_FM_PAUSE_TIME_ENABLE :
  821. FSL_FM_PAUSE_TIME_DISABLE;
  822. u32 tmp;
  823. dtsec_set_tx_pause_frames(dtsec, 0, pause_time, 0);
  824. dtsec_accept_rx_pause_frames(dtsec, rx_pause);
  825. tmp = ioread32be(&regs->ecntrl);
  826. if (speed == SPEED_100)
  827. tmp |= DTSEC_ECNTRL_R100M;
  828. else
  829. tmp &= ~DTSEC_ECNTRL_R100M;
  830. iowrite32be(tmp, &regs->ecntrl);
  831. tmp = ioread32be(&regs->maccfg2);
  832. tmp &= ~(MACCFG2_NIBBLE_MODE | MACCFG2_BYTE_MODE | MACCFG2_FULL_DUPLEX);
  833. if (speed >= SPEED_1000)
  834. tmp |= MACCFG2_BYTE_MODE;
  835. else
  836. tmp |= MACCFG2_NIBBLE_MODE;
  837. if (duplex == DUPLEX_FULL)
  838. tmp |= MACCFG2_FULL_DUPLEX;
  839. iowrite32be(tmp, &regs->maccfg2);
  840. mac_dev->update_speed(mac_dev, speed);
  841. /* Enable */
  842. tmp = ioread32be(&regs->maccfg1);
  843. tmp |= MACCFG1_RX_EN | MACCFG1_TX_EN;
  844. iowrite32be(tmp, &regs->maccfg1);
  845. /* Graceful start - clear the graceful Rx/Tx stop bit */
  846. graceful_start(dtsec);
  847. }
  848. static void dtsec_link_down(struct phylink_config *config, unsigned int mode,
  849. phy_interface_t interface)
  850. {
  851. struct fman_mac *dtsec = fman_config_to_mac(config)->fman_mac;
  852. struct dtsec_regs __iomem *regs = dtsec->regs;
  853. u32 tmp;
  854. /* Graceful stop - Assert the graceful Rx/Tx stop bit */
  855. graceful_stop(dtsec);
  856. tmp = ioread32be(&regs->maccfg1);
  857. tmp &= ~(MACCFG1_RX_EN | MACCFG1_TX_EN);
  858. iowrite32be(tmp, &regs->maccfg1);
  859. }
  860. static const struct phylink_mac_ops dtsec_mac_ops = {
  861. .mac_select_pcs = dtsec_select_pcs,
  862. .mac_config = dtsec_mac_config,
  863. .mac_link_up = dtsec_link_up,
  864. .mac_link_down = dtsec_link_down,
  865. };
  866. static int dtsec_modify_mac_address(struct fman_mac *dtsec,
  867. const enet_addr_t *enet_addr)
  868. {
  869. graceful_stop(dtsec);
  870. /* Initialize MAC Station Address registers (1 & 2)
  871. * Station address have to be swapped (big endian to little endian
  872. */
  873. dtsec->addr = ENET_ADDR_TO_UINT64(*enet_addr);
  874. set_mac_address(dtsec->regs, (const u8 *)(*enet_addr));
  875. graceful_start(dtsec);
  876. return 0;
  877. }
  878. static int dtsec_add_hash_mac_address(struct fman_mac *dtsec,
  879. enet_addr_t *eth_addr)
  880. {
  881. struct dtsec_regs __iomem *regs = dtsec->regs;
  882. struct eth_hash_entry *hash_entry;
  883. u64 addr;
  884. s32 bucket;
  885. u32 crc = 0xFFFFFFFF;
  886. bool mcast, ghtx;
  887. addr = ENET_ADDR_TO_UINT64(*eth_addr);
  888. ghtx = (bool)((ioread32be(&regs->rctrl) & RCTRL_GHTX) ? true : false);
  889. mcast = (bool)((addr & MAC_GROUP_ADDRESS) ? true : false);
  890. /* Cannot handle unicast mac addr when GHTX is on */
  891. if (ghtx && !mcast) {
  892. pr_err("Could not compute hash bucket\n");
  893. return -EINVAL;
  894. }
  895. crc = crc32_le(crc, (u8 *)eth_addr, ETH_ALEN);
  896. crc = bitrev32(crc);
  897. /* considering the 9 highest order bits in crc H[8:0]:
  898. *if ghtx = 0 H[8:6] (highest order 3 bits) identify the hash register
  899. *and H[5:1] (next 5 bits) identify the hash bit
  900. *if ghts = 1 H[8:5] (highest order 4 bits) identify the hash register
  901. *and H[4:0] (next 5 bits) identify the hash bit.
  902. *
  903. *In bucket index output the low 5 bits identify the hash register
  904. *bit, while the higher 4 bits identify the hash register
  905. */
  906. if (ghtx) {
  907. bucket = (s32)((crc >> 23) & 0x1ff);
  908. } else {
  909. bucket = (s32)((crc >> 24) & 0xff);
  910. /* if !ghtx and mcast the bit must be set in gaddr instead of
  911. *igaddr.
  912. */
  913. if (mcast)
  914. bucket += 0x100;
  915. }
  916. set_bucket(dtsec->regs, bucket, true);
  917. /* Create element to be added to the driver hash table */
  918. hash_entry = kmalloc_obj(*hash_entry, GFP_ATOMIC);
  919. if (!hash_entry)
  920. return -ENOMEM;
  921. hash_entry->addr = addr;
  922. INIT_LIST_HEAD(&hash_entry->node);
  923. if (addr & MAC_GROUP_ADDRESS)
  924. /* Group Address */
  925. list_add_tail(&hash_entry->node,
  926. &dtsec->multicast_addr_hash->lsts[bucket]);
  927. else
  928. list_add_tail(&hash_entry->node,
  929. &dtsec->unicast_addr_hash->lsts[bucket]);
  930. return 0;
  931. }
  932. static int dtsec_set_allmulti(struct fman_mac *dtsec, bool enable)
  933. {
  934. u32 tmp;
  935. struct dtsec_regs __iomem *regs = dtsec->regs;
  936. tmp = ioread32be(&regs->rctrl);
  937. if (enable)
  938. tmp |= RCTRL_MPROM;
  939. else
  940. tmp &= ~RCTRL_MPROM;
  941. iowrite32be(tmp, &regs->rctrl);
  942. return 0;
  943. }
  944. static int dtsec_set_tstamp(struct fman_mac *dtsec, bool enable)
  945. {
  946. struct dtsec_regs __iomem *regs = dtsec->regs;
  947. u32 rctrl, tctrl;
  948. rctrl = ioread32be(&regs->rctrl);
  949. tctrl = ioread32be(&regs->tctrl);
  950. if (enable) {
  951. rctrl |= RCTRL_RTSE;
  952. tctrl |= TCTRL_TTSE;
  953. } else {
  954. rctrl &= ~RCTRL_RTSE;
  955. tctrl &= ~TCTRL_TTSE;
  956. }
  957. iowrite32be(rctrl, &regs->rctrl);
  958. iowrite32be(tctrl, &regs->tctrl);
  959. return 0;
  960. }
  961. static int dtsec_del_hash_mac_address(struct fman_mac *dtsec,
  962. enet_addr_t *eth_addr)
  963. {
  964. struct dtsec_regs __iomem *regs = dtsec->regs;
  965. struct list_head *pos;
  966. struct eth_hash_entry *hash_entry = NULL;
  967. u64 addr;
  968. s32 bucket;
  969. u32 crc = 0xFFFFFFFF;
  970. bool mcast, ghtx;
  971. addr = ENET_ADDR_TO_UINT64(*eth_addr);
  972. ghtx = (bool)((ioread32be(&regs->rctrl) & RCTRL_GHTX) ? true : false);
  973. mcast = (bool)((addr & MAC_GROUP_ADDRESS) ? true : false);
  974. /* Cannot handle unicast mac addr when GHTX is on */
  975. if (ghtx && !mcast) {
  976. pr_err("Could not compute hash bucket\n");
  977. return -EINVAL;
  978. }
  979. crc = crc32_le(crc, (u8 *)eth_addr, ETH_ALEN);
  980. crc = bitrev32(crc);
  981. if (ghtx) {
  982. bucket = (s32)((crc >> 23) & 0x1ff);
  983. } else {
  984. bucket = (s32)((crc >> 24) & 0xff);
  985. /* if !ghtx and mcast the bit must be set
  986. * in gaddr instead of igaddr.
  987. */
  988. if (mcast)
  989. bucket += 0x100;
  990. }
  991. if (addr & MAC_GROUP_ADDRESS) {
  992. /* Group Address */
  993. list_for_each(pos,
  994. &dtsec->multicast_addr_hash->lsts[bucket]) {
  995. hash_entry = ETH_HASH_ENTRY_OBJ(pos);
  996. if (hash_entry && hash_entry->addr == addr) {
  997. list_del_init(&hash_entry->node);
  998. kfree(hash_entry);
  999. break;
  1000. }
  1001. }
  1002. if (list_empty(&dtsec->multicast_addr_hash->lsts[bucket]))
  1003. set_bucket(dtsec->regs, bucket, false);
  1004. } else {
  1005. /* Individual Address */
  1006. list_for_each(pos,
  1007. &dtsec->unicast_addr_hash->lsts[bucket]) {
  1008. hash_entry = ETH_HASH_ENTRY_OBJ(pos);
  1009. if (hash_entry && hash_entry->addr == addr) {
  1010. list_del_init(&hash_entry->node);
  1011. kfree(hash_entry);
  1012. break;
  1013. }
  1014. }
  1015. if (list_empty(&dtsec->unicast_addr_hash->lsts[bucket]))
  1016. set_bucket(dtsec->regs, bucket, false);
  1017. }
  1018. /* address does not exist */
  1019. WARN_ON(!hash_entry);
  1020. return 0;
  1021. }
  1022. static int dtsec_set_promiscuous(struct fman_mac *dtsec, bool new_val)
  1023. {
  1024. struct dtsec_regs __iomem *regs = dtsec->regs;
  1025. u32 tmp;
  1026. /* Set unicast promiscuous */
  1027. tmp = ioread32be(&regs->rctrl);
  1028. if (new_val)
  1029. tmp |= RCTRL_UPROM;
  1030. else
  1031. tmp &= ~RCTRL_UPROM;
  1032. iowrite32be(tmp, &regs->rctrl);
  1033. /* Set multicast promiscuous */
  1034. tmp = ioread32be(&regs->rctrl);
  1035. if (new_val)
  1036. tmp |= RCTRL_MPROM;
  1037. else
  1038. tmp &= ~RCTRL_MPROM;
  1039. iowrite32be(tmp, &regs->rctrl);
  1040. return 0;
  1041. }
  1042. static int dtsec_set_exception(struct fman_mac *dtsec,
  1043. enum fman_mac_exceptions exception, bool enable)
  1044. {
  1045. struct dtsec_regs __iomem *regs = dtsec->regs;
  1046. u32 bit_mask = 0;
  1047. if (exception != FM_MAC_EX_1G_1588_TS_RX_ERR) {
  1048. bit_mask = get_exception_flag(exception);
  1049. if (bit_mask) {
  1050. if (enable)
  1051. dtsec->exceptions |= bit_mask;
  1052. else
  1053. dtsec->exceptions &= ~bit_mask;
  1054. } else {
  1055. pr_err("Undefined exception\n");
  1056. return -EINVAL;
  1057. }
  1058. if (enable)
  1059. iowrite32be(ioread32be(&regs->imask) | bit_mask,
  1060. &regs->imask);
  1061. else
  1062. iowrite32be(ioread32be(&regs->imask) & ~bit_mask,
  1063. &regs->imask);
  1064. } else {
  1065. if (!dtsec->ptp_tsu_enabled) {
  1066. pr_err("Exception valid for 1588 only\n");
  1067. return -EINVAL;
  1068. }
  1069. switch (exception) {
  1070. case FM_MAC_EX_1G_1588_TS_RX_ERR:
  1071. if (enable) {
  1072. dtsec->en_tsu_err_exception = true;
  1073. iowrite32be(ioread32be(&regs->tmr_pemask) |
  1074. TMR_PEMASK_TSREEN,
  1075. &regs->tmr_pemask);
  1076. } else {
  1077. dtsec->en_tsu_err_exception = false;
  1078. iowrite32be(ioread32be(&regs->tmr_pemask) &
  1079. ~TMR_PEMASK_TSREEN,
  1080. &regs->tmr_pemask);
  1081. }
  1082. break;
  1083. default:
  1084. pr_err("Undefined exception\n");
  1085. return -EINVAL;
  1086. }
  1087. }
  1088. return 0;
  1089. }
  1090. static int dtsec_init(struct fman_mac *dtsec)
  1091. {
  1092. struct dtsec_regs __iomem *regs = dtsec->regs;
  1093. struct dtsec_cfg *dtsec_drv_param;
  1094. u16 max_frm_ln, tbicon;
  1095. int err;
  1096. if (DEFAULT_RESET_ON_INIT &&
  1097. (fman_reset_mac(dtsec->fm, dtsec->mac_id) != 0)) {
  1098. pr_err("Can't reset MAC!\n");
  1099. return -EINVAL;
  1100. }
  1101. err = check_init_parameters(dtsec);
  1102. if (err)
  1103. return err;
  1104. dtsec_drv_param = dtsec->dtsec_drv_param;
  1105. err = init(dtsec->regs, dtsec_drv_param, dtsec->phy_if,
  1106. dtsec->max_speed, dtsec->addr, dtsec->exceptions,
  1107. dtsec->tbidev->addr);
  1108. if (err) {
  1109. free_init_resources(dtsec);
  1110. pr_err("DTSEC version doesn't support this i/f mode\n");
  1111. return err;
  1112. }
  1113. /* Configure the TBI PHY Control Register */
  1114. tbicon = TBICON_CLK_SELECT | TBICON_SOFT_RESET;
  1115. mdiodev_write(dtsec->tbidev, MII_TBICON, tbicon);
  1116. tbicon = TBICON_CLK_SELECT;
  1117. mdiodev_write(dtsec->tbidev, MII_TBICON, tbicon);
  1118. /* Max Frame Length */
  1119. max_frm_ln = (u16)ioread32be(&regs->maxfrm);
  1120. err = fman_set_mac_max_frame(dtsec->fm, dtsec->mac_id, max_frm_ln);
  1121. if (err) {
  1122. pr_err("Setting max frame length failed\n");
  1123. free_init_resources(dtsec);
  1124. return -EINVAL;
  1125. }
  1126. dtsec->multicast_addr_hash =
  1127. alloc_hash_table(EXTENDED_HASH_TABLE_SIZE);
  1128. if (!dtsec->multicast_addr_hash) {
  1129. free_init_resources(dtsec);
  1130. pr_err("MC hash table is failed\n");
  1131. return -ENOMEM;
  1132. }
  1133. dtsec->unicast_addr_hash = alloc_hash_table(DTSEC_HASH_TABLE_SIZE);
  1134. if (!dtsec->unicast_addr_hash) {
  1135. free_init_resources(dtsec);
  1136. pr_err("UC hash table is failed\n");
  1137. return -ENOMEM;
  1138. }
  1139. /* register err intr handler for dtsec to FPM (err) */
  1140. fman_register_intr(dtsec->fm, FMAN_MOD_MAC, dtsec->mac_id,
  1141. FMAN_INTR_TYPE_ERR, dtsec_isr, dtsec);
  1142. /* register 1588 intr handler for TMR to FPM (normal) */
  1143. fman_register_intr(dtsec->fm, FMAN_MOD_MAC, dtsec->mac_id,
  1144. FMAN_INTR_TYPE_NORMAL, dtsec_1588_isr, dtsec);
  1145. kfree(dtsec_drv_param);
  1146. dtsec->dtsec_drv_param = NULL;
  1147. return 0;
  1148. }
  1149. static int dtsec_free(struct fman_mac *dtsec)
  1150. {
  1151. free_init_resources(dtsec);
  1152. kfree(dtsec->dtsec_drv_param);
  1153. dtsec->dtsec_drv_param = NULL;
  1154. if (!IS_ERR_OR_NULL(dtsec->tbidev))
  1155. put_device(&dtsec->tbidev->dev);
  1156. kfree(dtsec);
  1157. return 0;
  1158. }
  1159. static struct fman_mac *dtsec_config(struct mac_device *mac_dev,
  1160. struct fman_mac_params *params)
  1161. {
  1162. struct fman_mac *dtsec;
  1163. struct dtsec_cfg *dtsec_drv_param;
  1164. /* allocate memory for the UCC GETH data structure. */
  1165. dtsec = kzalloc_obj(*dtsec);
  1166. if (!dtsec)
  1167. return NULL;
  1168. /* allocate memory for the d_tsec driver parameters data structure. */
  1169. dtsec_drv_param = kzalloc_obj(*dtsec_drv_param);
  1170. if (!dtsec_drv_param)
  1171. goto err_dtsec;
  1172. /* Plant parameter structure pointer */
  1173. dtsec->dtsec_drv_param = dtsec_drv_param;
  1174. set_dflts(dtsec_drv_param);
  1175. dtsec->regs = mac_dev->vaddr;
  1176. dtsec->addr = ENET_ADDR_TO_UINT64(mac_dev->addr);
  1177. dtsec->phy_if = mac_dev->phy_if;
  1178. dtsec->mac_id = params->mac_id;
  1179. dtsec->exceptions = (DTSEC_IMASK_BREN |
  1180. DTSEC_IMASK_RXCEN |
  1181. DTSEC_IMASK_BTEN |
  1182. DTSEC_IMASK_TXCEN |
  1183. DTSEC_IMASK_TXEEN |
  1184. DTSEC_IMASK_ABRTEN |
  1185. DTSEC_IMASK_LCEN |
  1186. DTSEC_IMASK_CRLEN |
  1187. DTSEC_IMASK_XFUNEN |
  1188. DTSEC_IMASK_IFERREN |
  1189. DTSEC_IMASK_MAGEN |
  1190. DTSEC_IMASK_TDPEEN |
  1191. DTSEC_IMASK_RDPEEN);
  1192. dtsec->exception_cb = params->exception_cb;
  1193. dtsec->event_cb = params->event_cb;
  1194. dtsec->dev_id = mac_dev;
  1195. dtsec->ptp_tsu_enabled = dtsec->dtsec_drv_param->ptp_tsu_en;
  1196. dtsec->en_tsu_err_exception = dtsec->dtsec_drv_param->ptp_exception_en;
  1197. dtsec->fm = params->fm;
  1198. /* Save FMan revision */
  1199. fman_get_revision(dtsec->fm, &dtsec->fm_rev_info);
  1200. return dtsec;
  1201. err_dtsec:
  1202. kfree(dtsec);
  1203. return NULL;
  1204. }
  1205. int dtsec_initialization(struct mac_device *mac_dev,
  1206. struct device_node *mac_node,
  1207. struct fman_mac_params *params)
  1208. {
  1209. int err;
  1210. struct fman_mac *dtsec;
  1211. struct device_node *phy_node;
  1212. unsigned long capabilities;
  1213. unsigned long *supported;
  1214. mac_dev->phylink_ops = &dtsec_mac_ops;
  1215. mac_dev->set_promisc = dtsec_set_promiscuous;
  1216. mac_dev->change_addr = dtsec_modify_mac_address;
  1217. mac_dev->add_hash_mac_addr = dtsec_add_hash_mac_address;
  1218. mac_dev->remove_hash_mac_addr = dtsec_del_hash_mac_address;
  1219. mac_dev->set_exception = dtsec_set_exception;
  1220. mac_dev->set_allmulti = dtsec_set_allmulti;
  1221. mac_dev->set_tstamp = dtsec_set_tstamp;
  1222. mac_dev->enable = dtsec_enable;
  1223. mac_dev->disable = dtsec_disable;
  1224. mac_dev->fman_mac = dtsec_config(mac_dev, params);
  1225. if (!mac_dev->fman_mac) {
  1226. err = -EINVAL;
  1227. goto _return;
  1228. }
  1229. dtsec = mac_dev->fman_mac;
  1230. dtsec->dtsec_drv_param->maximum_frame = fman_get_max_frm();
  1231. dtsec->dtsec_drv_param->tx_pad_crc = true;
  1232. phy_node = of_parse_phandle(mac_node, "tbi-handle", 0);
  1233. if (!phy_node || !of_device_is_available(phy_node)) {
  1234. of_node_put(phy_node);
  1235. err = -EINVAL;
  1236. dev_err_probe(mac_dev->dev, err,
  1237. "TBI PCS node is not available\n");
  1238. goto _return_fm_mac_free;
  1239. }
  1240. dtsec->tbidev = of_mdio_find_device(phy_node);
  1241. of_node_put(phy_node);
  1242. if (!dtsec->tbidev) {
  1243. err = -EPROBE_DEFER;
  1244. dev_err_probe(mac_dev->dev, err,
  1245. "could not find mdiodev for PCS\n");
  1246. goto _return_fm_mac_free;
  1247. }
  1248. dtsec->pcs.ops = &dtsec_pcs_ops;
  1249. dtsec->pcs.poll = true;
  1250. supported = mac_dev->phylink_config.supported_interfaces;
  1251. /* FIXME: Can we use DTSEC_ID2_INT_FULL_OFF to determine if these are
  1252. * supported? If not, we can determine support via the phy if SerDes
  1253. * support is added.
  1254. */
  1255. if (mac_dev->phy_if == PHY_INTERFACE_MODE_SGMII ||
  1256. mac_dev->phy_if == PHY_INTERFACE_MODE_1000BASEX) {
  1257. __set_bit(PHY_INTERFACE_MODE_SGMII, supported);
  1258. __set_bit(PHY_INTERFACE_MODE_1000BASEX, supported);
  1259. } else if (mac_dev->phy_if == PHY_INTERFACE_MODE_2500BASEX) {
  1260. __set_bit(PHY_INTERFACE_MODE_2500BASEX, supported);
  1261. }
  1262. if (!(ioread32be(&dtsec->regs->tsec_id2) & DTSEC_ID2_INT_REDUCED_OFF)) {
  1263. phy_interface_set_rgmii(supported);
  1264. /* DTSEC_ID2_INT_REDUCED_OFF indicates that the dTSEC supports
  1265. * RMII and RGMII. However, the only SoCs which support RMII
  1266. * are the P1017 and P1023. Avoid advertising this mode on
  1267. * other SoCs. This is a bit of a moot point, since there's no
  1268. * in-tree support for ethernet on these platforms...
  1269. */
  1270. if (of_machine_is_compatible("fsl,P1023") ||
  1271. of_machine_is_compatible("fsl,P1023RDB"))
  1272. __set_bit(PHY_INTERFACE_MODE_RMII, supported);
  1273. }
  1274. capabilities = MAC_SYM_PAUSE | MAC_ASYM_PAUSE;
  1275. capabilities |= MAC_10 | MAC_100 | MAC_1000FD | MAC_2500FD;
  1276. mac_dev->phylink_config.mac_capabilities = capabilities;
  1277. err = dtsec_init(dtsec);
  1278. if (err < 0)
  1279. goto _return_fm_mac_free;
  1280. /* For 1G MAC, disable by default the MIB counters overflow interrupt */
  1281. err = dtsec_set_exception(dtsec, FM_MAC_EX_1G_RX_MIB_CNT_OVFL, false);
  1282. if (err < 0)
  1283. goto _return_fm_mac_free;
  1284. dev_info(mac_dev->dev, "FMan dTSEC version: 0x%08x\n",
  1285. ioread32be(&dtsec->regs->tsec_id));
  1286. goto _return;
  1287. _return_fm_mac_free:
  1288. dtsec_free(dtsec);
  1289. _return:
  1290. return err;
  1291. }