dp83640.c 27 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100
  1. /*
  2. * Driver for the National Semiconductor DP83640 PHYTER
  3. *
  4. * Copyright (C) 2010 OMICRON electronics GmbH
  5. *
  6. * This program is free software; you can redistribute it and/or modify
  7. * it under the terms of the GNU General Public License as published by
  8. * the Free Software Foundation; either version 2 of the License, or
  9. * (at your option) any later version.
  10. *
  11. * This program is distributed in the hope that it will be useful,
  12. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  14. * GNU General Public License for more details.
  15. *
  16. * You should have received a copy of the GNU General Public License
  17. * along with this program; if not, write to the Free Software
  18. * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  19. */
  20. #include <linux/ethtool.h>
  21. #include <linux/kernel.h>
  22. #include <linux/list.h>
  23. #include <linux/mii.h>
  24. #include <linux/module.h>
  25. #include <linux/net_tstamp.h>
  26. #include <linux/netdevice.h>
  27. #include <linux/phy.h>
  28. #include <linux/ptp_classify.h>
  29. #include <linux/ptp_clock_kernel.h>
  30. #include "dp83640_reg.h"
  31. #define DP83640_PHY_ID 0x20005ce1
  32. #define PAGESEL 0x13
  33. #define LAYER4 0x02
  34. #define LAYER2 0x01
  35. #define MAX_RXTS 4
  36. #define MAX_TXTS 4
  37. #define N_EXT_TS 1
  38. #define PSF_PTPVER 2
  39. #define PSF_EVNT 0x4000
  40. #define PSF_RX 0x2000
  41. #define PSF_TX 0x1000
  42. #define EXT_EVENT 1
  43. #define EXT_GPIO 1
  44. #define CAL_EVENT 2
  45. #define CAL_GPIO 9
  46. #define CAL_TRIGGER 2
  47. /* phyter seems to miss the mark by 16 ns */
  48. #define ADJTIME_FIX 16
  49. #if defined(__BIG_ENDIAN)
  50. #define ENDIAN_FLAG 0
  51. #elif defined(__LITTLE_ENDIAN)
  52. #define ENDIAN_FLAG PSF_ENDIAN
  53. #endif
  54. #define SKB_PTP_TYPE(__skb) (*(unsigned int *)((__skb)->cb))
  55. struct phy_rxts {
  56. u16 ns_lo; /* ns[15:0] */
  57. u16 ns_hi; /* overflow[1:0], ns[29:16] */
  58. u16 sec_lo; /* sec[15:0] */
  59. u16 sec_hi; /* sec[31:16] */
  60. u16 seqid; /* sequenceId[15:0] */
  61. u16 msgtype; /* messageType[3:0], hash[11:0] */
  62. };
  63. struct phy_txts {
  64. u16 ns_lo; /* ns[15:0] */
  65. u16 ns_hi; /* overflow[1:0], ns[29:16] */
  66. u16 sec_lo; /* sec[15:0] */
  67. u16 sec_hi; /* sec[31:16] */
  68. };
  69. struct rxts {
  70. struct list_head list;
  71. unsigned long tmo;
  72. u64 ns;
  73. u16 seqid;
  74. u8 msgtype;
  75. u16 hash;
  76. };
  77. struct dp83640_clock;
  78. struct dp83640_private {
  79. struct list_head list;
  80. struct dp83640_clock *clock;
  81. struct phy_device *phydev;
  82. struct work_struct ts_work;
  83. int hwts_tx_en;
  84. int hwts_rx_en;
  85. int layer;
  86. int version;
  87. /* remember state of cfg0 during calibration */
  88. int cfg0;
  89. /* remember the last event time stamp */
  90. struct phy_txts edata;
  91. /* list of rx timestamps */
  92. struct list_head rxts;
  93. struct list_head rxpool;
  94. struct rxts rx_pool_data[MAX_RXTS];
  95. /* protects above three fields from concurrent access */
  96. spinlock_t rx_lock;
  97. /* queues of incoming and outgoing packets */
  98. struct sk_buff_head rx_queue;
  99. struct sk_buff_head tx_queue;
  100. };
  101. struct dp83640_clock {
  102. /* keeps the instance in the 'phyter_clocks' list */
  103. struct list_head list;
  104. /* we create one clock instance per MII bus */
  105. struct mii_bus *bus;
  106. /* protects extended registers from concurrent access */
  107. struct mutex extreg_lock;
  108. /* remembers which page was last selected */
  109. int page;
  110. /* our advertised capabilities */
  111. struct ptp_clock_info caps;
  112. /* protects the three fields below from concurrent access */
  113. struct mutex clock_lock;
  114. /* the one phyter from which we shall read */
  115. struct dp83640_private *chosen;
  116. /* list of the other attached phyters, not chosen */
  117. struct list_head phylist;
  118. /* reference to our PTP hardware clock */
  119. struct ptp_clock *ptp_clock;
  120. };
  121. /* globals */
  122. static int chosen_phy = -1;
  123. static ushort cal_gpio = 4;
  124. module_param(chosen_phy, int, 0444);
  125. module_param(cal_gpio, ushort, 0444);
  126. MODULE_PARM_DESC(chosen_phy, \
  127. "The address of the PHY to use for the ancillary clock features");
  128. MODULE_PARM_DESC(cal_gpio, \
  129. "Which GPIO line to use for synchronizing multiple PHYs");
  130. /* a list of clocks and a mutex to protect it */
  131. static LIST_HEAD(phyter_clocks);
  132. static DEFINE_MUTEX(phyter_clocks_lock);
  133. static void rx_timestamp_work(struct work_struct *work);
  134. /* extended register access functions */
  135. #define BROADCAST_ADDR 31
  136. static inline int broadcast_write(struct mii_bus *bus, u32 regnum, u16 val)
  137. {
  138. return mdiobus_write(bus, BROADCAST_ADDR, regnum, val);
  139. }
  140. /* Caller must hold extreg_lock. */
  141. static int ext_read(struct phy_device *phydev, int page, u32 regnum)
  142. {
  143. struct dp83640_private *dp83640 = phydev->priv;
  144. int val;
  145. if (dp83640->clock->page != page) {
  146. broadcast_write(phydev->bus, PAGESEL, page);
  147. dp83640->clock->page = page;
  148. }
  149. val = phy_read(phydev, regnum);
  150. return val;
  151. }
  152. /* Caller must hold extreg_lock. */
  153. static void ext_write(int broadcast, struct phy_device *phydev,
  154. int page, u32 regnum, u16 val)
  155. {
  156. struct dp83640_private *dp83640 = phydev->priv;
  157. if (dp83640->clock->page != page) {
  158. broadcast_write(phydev->bus, PAGESEL, page);
  159. dp83640->clock->page = page;
  160. }
  161. if (broadcast)
  162. broadcast_write(phydev->bus, regnum, val);
  163. else
  164. phy_write(phydev, regnum, val);
  165. }
  166. /* Caller must hold extreg_lock. */
  167. static int tdr_write(int bc, struct phy_device *dev,
  168. const struct timespec *ts, u16 cmd)
  169. {
  170. ext_write(bc, dev, PAGE4, PTP_TDR, ts->tv_nsec & 0xffff);/* ns[15:0] */
  171. ext_write(bc, dev, PAGE4, PTP_TDR, ts->tv_nsec >> 16); /* ns[31:16] */
  172. ext_write(bc, dev, PAGE4, PTP_TDR, ts->tv_sec & 0xffff); /* sec[15:0] */
  173. ext_write(bc, dev, PAGE4, PTP_TDR, ts->tv_sec >> 16); /* sec[31:16]*/
  174. ext_write(bc, dev, PAGE4, PTP_CTL, cmd);
  175. return 0;
  176. }
  177. /* convert phy timestamps into driver timestamps */
  178. static void phy2rxts(struct phy_rxts *p, struct rxts *rxts)
  179. {
  180. u32 sec;
  181. sec = p->sec_lo;
  182. sec |= p->sec_hi << 16;
  183. rxts->ns = p->ns_lo;
  184. rxts->ns |= (p->ns_hi & 0x3fff) << 16;
  185. rxts->ns += ((u64)sec) * 1000000000ULL;
  186. rxts->seqid = p->seqid;
  187. rxts->msgtype = (p->msgtype >> 12) & 0xf;
  188. rxts->hash = p->msgtype & 0x0fff;
  189. rxts->tmo = jiffies + HZ;
  190. }
  191. static u64 phy2txts(struct phy_txts *p)
  192. {
  193. u64 ns;
  194. u32 sec;
  195. sec = p->sec_lo;
  196. sec |= p->sec_hi << 16;
  197. ns = p->ns_lo;
  198. ns |= (p->ns_hi & 0x3fff) << 16;
  199. ns += ((u64)sec) * 1000000000ULL;
  200. return ns;
  201. }
  202. /* ptp clock methods */
  203. static int ptp_dp83640_adjfreq(struct ptp_clock_info *ptp, s32 ppb)
  204. {
  205. struct dp83640_clock *clock =
  206. container_of(ptp, struct dp83640_clock, caps);
  207. struct phy_device *phydev = clock->chosen->phydev;
  208. u64 rate;
  209. int neg_adj = 0;
  210. u16 hi, lo;
  211. if (ppb < 0) {
  212. neg_adj = 1;
  213. ppb = -ppb;
  214. }
  215. rate = ppb;
  216. rate <<= 26;
  217. rate = div_u64(rate, 1953125);
  218. hi = (rate >> 16) & PTP_RATE_HI_MASK;
  219. if (neg_adj)
  220. hi |= PTP_RATE_DIR;
  221. lo = rate & 0xffff;
  222. mutex_lock(&clock->extreg_lock);
  223. ext_write(1, phydev, PAGE4, PTP_RATEH, hi);
  224. ext_write(1, phydev, PAGE4, PTP_RATEL, lo);
  225. mutex_unlock(&clock->extreg_lock);
  226. return 0;
  227. }
  228. static int ptp_dp83640_adjtime(struct ptp_clock_info *ptp, s64 delta)
  229. {
  230. struct dp83640_clock *clock =
  231. container_of(ptp, struct dp83640_clock, caps);
  232. struct phy_device *phydev = clock->chosen->phydev;
  233. struct timespec ts;
  234. int err;
  235. delta += ADJTIME_FIX;
  236. ts = ns_to_timespec(delta);
  237. mutex_lock(&clock->extreg_lock);
  238. err = tdr_write(1, phydev, &ts, PTP_STEP_CLK);
  239. mutex_unlock(&clock->extreg_lock);
  240. return err;
  241. }
  242. static int ptp_dp83640_gettime(struct ptp_clock_info *ptp, struct timespec *ts)
  243. {
  244. struct dp83640_clock *clock =
  245. container_of(ptp, struct dp83640_clock, caps);
  246. struct phy_device *phydev = clock->chosen->phydev;
  247. unsigned int val[4];
  248. mutex_lock(&clock->extreg_lock);
  249. ext_write(0, phydev, PAGE4, PTP_CTL, PTP_RD_CLK);
  250. val[0] = ext_read(phydev, PAGE4, PTP_TDR); /* ns[15:0] */
  251. val[1] = ext_read(phydev, PAGE4, PTP_TDR); /* ns[31:16] */
  252. val[2] = ext_read(phydev, PAGE4, PTP_TDR); /* sec[15:0] */
  253. val[3] = ext_read(phydev, PAGE4, PTP_TDR); /* sec[31:16] */
  254. mutex_unlock(&clock->extreg_lock);
  255. ts->tv_nsec = val[0] | (val[1] << 16);
  256. ts->tv_sec = val[2] | (val[3] << 16);
  257. return 0;
  258. }
  259. static int ptp_dp83640_settime(struct ptp_clock_info *ptp,
  260. const struct timespec *ts)
  261. {
  262. struct dp83640_clock *clock =
  263. container_of(ptp, struct dp83640_clock, caps);
  264. struct phy_device *phydev = clock->chosen->phydev;
  265. int err;
  266. mutex_lock(&clock->extreg_lock);
  267. err = tdr_write(1, phydev, ts, PTP_LOAD_CLK);
  268. mutex_unlock(&clock->extreg_lock);
  269. return err;
  270. }
  271. static int ptp_dp83640_enable(struct ptp_clock_info *ptp,
  272. struct ptp_clock_request *rq, int on)
  273. {
  274. struct dp83640_clock *clock =
  275. container_of(ptp, struct dp83640_clock, caps);
  276. struct phy_device *phydev = clock->chosen->phydev;
  277. u16 evnt;
  278. switch (rq->type) {
  279. case PTP_CLK_REQ_EXTTS:
  280. if (rq->extts.index != 0)
  281. return -EINVAL;
  282. evnt = EVNT_WR | (EXT_EVENT & EVNT_SEL_MASK) << EVNT_SEL_SHIFT;
  283. if (on) {
  284. evnt |= (EXT_GPIO & EVNT_GPIO_MASK) << EVNT_GPIO_SHIFT;
  285. evnt |= EVNT_RISE;
  286. }
  287. ext_write(0, phydev, PAGE5, PTP_EVNT, evnt);
  288. return 0;
  289. default:
  290. break;
  291. }
  292. return -EOPNOTSUPP;
  293. }
  294. static u8 status_frame_dst[6] = { 0x01, 0x1B, 0x19, 0x00, 0x00, 0x00 };
  295. static u8 status_frame_src[6] = { 0x08, 0x00, 0x17, 0x0B, 0x6B, 0x0F };
  296. static void enable_status_frames(struct phy_device *phydev, bool on)
  297. {
  298. u16 cfg0 = 0, ver;
  299. if (on)
  300. cfg0 = PSF_EVNT_EN | PSF_RXTS_EN | PSF_TXTS_EN | ENDIAN_FLAG;
  301. ver = (PSF_PTPVER & VERSIONPTP_MASK) << VERSIONPTP_SHIFT;
  302. ext_write(0, phydev, PAGE5, PSF_CFG0, cfg0);
  303. ext_write(0, phydev, PAGE6, PSF_CFG1, ver);
  304. if (!phydev->attached_dev) {
  305. pr_warning("dp83640: expected to find an attached netdevice\n");
  306. return;
  307. }
  308. if (on) {
  309. if (dev_mc_add(phydev->attached_dev, status_frame_dst))
  310. pr_warning("dp83640: failed to add mc address\n");
  311. } else {
  312. if (dev_mc_del(phydev->attached_dev, status_frame_dst))
  313. pr_warning("dp83640: failed to delete mc address\n");
  314. }
  315. }
  316. static bool is_status_frame(struct sk_buff *skb, int type)
  317. {
  318. struct ethhdr *h = eth_hdr(skb);
  319. if (PTP_CLASS_V2_L2 == type &&
  320. !memcmp(h->h_source, status_frame_src, sizeof(status_frame_src)))
  321. return true;
  322. else
  323. return false;
  324. }
  325. static int expired(struct rxts *rxts)
  326. {
  327. return time_after(jiffies, rxts->tmo);
  328. }
  329. /* Caller must hold rx_lock. */
  330. static void prune_rx_ts(struct dp83640_private *dp83640)
  331. {
  332. struct list_head *this, *next;
  333. struct rxts *rxts;
  334. list_for_each_safe(this, next, &dp83640->rxts) {
  335. rxts = list_entry(this, struct rxts, list);
  336. if (expired(rxts)) {
  337. list_del_init(&rxts->list);
  338. list_add(&rxts->list, &dp83640->rxpool);
  339. }
  340. }
  341. }
  342. /* synchronize the phyters so they act as one clock */
  343. static void enable_broadcast(struct phy_device *phydev, int init_page, int on)
  344. {
  345. int val;
  346. phy_write(phydev, PAGESEL, 0);
  347. val = phy_read(phydev, PHYCR2);
  348. if (on)
  349. val |= BC_WRITE;
  350. else
  351. val &= ~BC_WRITE;
  352. phy_write(phydev, PHYCR2, val);
  353. phy_write(phydev, PAGESEL, init_page);
  354. }
  355. static void recalibrate(struct dp83640_clock *clock)
  356. {
  357. s64 now, diff;
  358. struct phy_txts event_ts;
  359. struct timespec ts;
  360. struct list_head *this;
  361. struct dp83640_private *tmp;
  362. struct phy_device *master = clock->chosen->phydev;
  363. u16 cfg0, evnt, ptp_trig, trigger, val;
  364. trigger = CAL_TRIGGER;
  365. mutex_lock(&clock->extreg_lock);
  366. /*
  367. * enable broadcast, disable status frames, enable ptp clock
  368. */
  369. list_for_each(this, &clock->phylist) {
  370. tmp = list_entry(this, struct dp83640_private, list);
  371. enable_broadcast(tmp->phydev, clock->page, 1);
  372. tmp->cfg0 = ext_read(tmp->phydev, PAGE5, PSF_CFG0);
  373. ext_write(0, tmp->phydev, PAGE5, PSF_CFG0, 0);
  374. ext_write(0, tmp->phydev, PAGE4, PTP_CTL, PTP_ENABLE);
  375. }
  376. enable_broadcast(master, clock->page, 1);
  377. cfg0 = ext_read(master, PAGE5, PSF_CFG0);
  378. ext_write(0, master, PAGE5, PSF_CFG0, 0);
  379. ext_write(0, master, PAGE4, PTP_CTL, PTP_ENABLE);
  380. /*
  381. * enable an event timestamp
  382. */
  383. evnt = EVNT_WR | EVNT_RISE | EVNT_SINGLE;
  384. evnt |= (CAL_EVENT & EVNT_SEL_MASK) << EVNT_SEL_SHIFT;
  385. evnt |= (cal_gpio & EVNT_GPIO_MASK) << EVNT_GPIO_SHIFT;
  386. list_for_each(this, &clock->phylist) {
  387. tmp = list_entry(this, struct dp83640_private, list);
  388. ext_write(0, tmp->phydev, PAGE5, PTP_EVNT, evnt);
  389. }
  390. ext_write(0, master, PAGE5, PTP_EVNT, evnt);
  391. /*
  392. * configure a trigger
  393. */
  394. ptp_trig = TRIG_WR | TRIG_IF_LATE | TRIG_PULSE;
  395. ptp_trig |= (trigger & TRIG_CSEL_MASK) << TRIG_CSEL_SHIFT;
  396. ptp_trig |= (cal_gpio & TRIG_GPIO_MASK) << TRIG_GPIO_SHIFT;
  397. ext_write(0, master, PAGE5, PTP_TRIG, ptp_trig);
  398. /* load trigger */
  399. val = (trigger & TRIG_SEL_MASK) << TRIG_SEL_SHIFT;
  400. val |= TRIG_LOAD;
  401. ext_write(0, master, PAGE4, PTP_CTL, val);
  402. /* enable trigger */
  403. val &= ~TRIG_LOAD;
  404. val |= TRIG_EN;
  405. ext_write(0, master, PAGE4, PTP_CTL, val);
  406. /* disable trigger */
  407. val = (trigger & TRIG_SEL_MASK) << TRIG_SEL_SHIFT;
  408. val |= TRIG_DIS;
  409. ext_write(0, master, PAGE4, PTP_CTL, val);
  410. /*
  411. * read out and correct offsets
  412. */
  413. val = ext_read(master, PAGE4, PTP_STS);
  414. pr_info("master PTP_STS 0x%04hx", val);
  415. val = ext_read(master, PAGE4, PTP_ESTS);
  416. pr_info("master PTP_ESTS 0x%04hx", val);
  417. event_ts.ns_lo = ext_read(master, PAGE4, PTP_EDATA);
  418. event_ts.ns_hi = ext_read(master, PAGE4, PTP_EDATA);
  419. event_ts.sec_lo = ext_read(master, PAGE4, PTP_EDATA);
  420. event_ts.sec_hi = ext_read(master, PAGE4, PTP_EDATA);
  421. now = phy2txts(&event_ts);
  422. list_for_each(this, &clock->phylist) {
  423. tmp = list_entry(this, struct dp83640_private, list);
  424. val = ext_read(tmp->phydev, PAGE4, PTP_STS);
  425. pr_info("slave PTP_STS 0x%04hx", val);
  426. val = ext_read(tmp->phydev, PAGE4, PTP_ESTS);
  427. pr_info("slave PTP_ESTS 0x%04hx", val);
  428. event_ts.ns_lo = ext_read(tmp->phydev, PAGE4, PTP_EDATA);
  429. event_ts.ns_hi = ext_read(tmp->phydev, PAGE4, PTP_EDATA);
  430. event_ts.sec_lo = ext_read(tmp->phydev, PAGE4, PTP_EDATA);
  431. event_ts.sec_hi = ext_read(tmp->phydev, PAGE4, PTP_EDATA);
  432. diff = now - (s64) phy2txts(&event_ts);
  433. pr_info("slave offset %lld nanoseconds\n", diff);
  434. diff += ADJTIME_FIX;
  435. ts = ns_to_timespec(diff);
  436. tdr_write(0, tmp->phydev, &ts, PTP_STEP_CLK);
  437. }
  438. /*
  439. * restore status frames
  440. */
  441. list_for_each(this, &clock->phylist) {
  442. tmp = list_entry(this, struct dp83640_private, list);
  443. ext_write(0, tmp->phydev, PAGE5, PSF_CFG0, tmp->cfg0);
  444. }
  445. ext_write(0, master, PAGE5, PSF_CFG0, cfg0);
  446. mutex_unlock(&clock->extreg_lock);
  447. }
  448. /* time stamping methods */
  449. static void decode_evnt(struct dp83640_private *dp83640,
  450. struct phy_txts *phy_txts, u16 ests)
  451. {
  452. struct ptp_clock_event event;
  453. int words = (ests >> EVNT_TS_LEN_SHIFT) & EVNT_TS_LEN_MASK;
  454. switch (words) { /* fall through in every case */
  455. case 3:
  456. dp83640->edata.sec_hi = phy_txts->sec_hi;
  457. case 2:
  458. dp83640->edata.sec_lo = phy_txts->sec_lo;
  459. case 1:
  460. dp83640->edata.ns_hi = phy_txts->ns_hi;
  461. case 0:
  462. dp83640->edata.ns_lo = phy_txts->ns_lo;
  463. }
  464. event.type = PTP_CLOCK_EXTTS;
  465. event.index = 0;
  466. event.timestamp = phy2txts(&dp83640->edata);
  467. ptp_clock_event(dp83640->clock->ptp_clock, &event);
  468. }
  469. static void decode_rxts(struct dp83640_private *dp83640,
  470. struct phy_rxts *phy_rxts)
  471. {
  472. struct rxts *rxts;
  473. unsigned long flags;
  474. spin_lock_irqsave(&dp83640->rx_lock, flags);
  475. prune_rx_ts(dp83640);
  476. if (list_empty(&dp83640->rxpool)) {
  477. pr_warning("dp83640: rx timestamp pool is empty\n");
  478. goto out;
  479. }
  480. rxts = list_first_entry(&dp83640->rxpool, struct rxts, list);
  481. list_del_init(&rxts->list);
  482. phy2rxts(phy_rxts, rxts);
  483. list_add_tail(&rxts->list, &dp83640->rxts);
  484. out:
  485. spin_unlock_irqrestore(&dp83640->rx_lock, flags);
  486. }
  487. static void decode_txts(struct dp83640_private *dp83640,
  488. struct phy_txts *phy_txts)
  489. {
  490. struct skb_shared_hwtstamps shhwtstamps;
  491. struct sk_buff *skb;
  492. u64 ns;
  493. /* We must already have the skb that triggered this. */
  494. skb = skb_dequeue(&dp83640->tx_queue);
  495. if (!skb) {
  496. pr_warning("dp83640: have timestamp but tx_queue empty\n");
  497. return;
  498. }
  499. ns = phy2txts(phy_txts);
  500. memset(&shhwtstamps, 0, sizeof(shhwtstamps));
  501. shhwtstamps.hwtstamp = ns_to_ktime(ns);
  502. skb_complete_tx_timestamp(skb, &shhwtstamps);
  503. }
  504. static void decode_status_frame(struct dp83640_private *dp83640,
  505. struct sk_buff *skb)
  506. {
  507. struct phy_rxts *phy_rxts;
  508. struct phy_txts *phy_txts;
  509. u8 *ptr;
  510. int len, size;
  511. u16 ests, type;
  512. ptr = skb->data + 2;
  513. for (len = skb_headlen(skb) - 2; len > sizeof(type); len -= size) {
  514. type = *(u16 *)ptr;
  515. ests = type & 0x0fff;
  516. type = type & 0xf000;
  517. len -= sizeof(type);
  518. ptr += sizeof(type);
  519. if (PSF_RX == type && len >= sizeof(*phy_rxts)) {
  520. phy_rxts = (struct phy_rxts *) ptr;
  521. decode_rxts(dp83640, phy_rxts);
  522. size = sizeof(*phy_rxts);
  523. } else if (PSF_TX == type && len >= sizeof(*phy_txts)) {
  524. phy_txts = (struct phy_txts *) ptr;
  525. decode_txts(dp83640, phy_txts);
  526. size = sizeof(*phy_txts);
  527. } else if (PSF_EVNT == type && len >= sizeof(*phy_txts)) {
  528. phy_txts = (struct phy_txts *) ptr;
  529. decode_evnt(dp83640, phy_txts, ests);
  530. size = sizeof(*phy_txts);
  531. } else {
  532. size = 0;
  533. break;
  534. }
  535. ptr += size;
  536. }
  537. }
  538. static int match(struct sk_buff *skb, unsigned int type, struct rxts *rxts)
  539. {
  540. u16 *seqid;
  541. unsigned int offset;
  542. u8 *msgtype, *data = skb_mac_header(skb);
  543. /* check sequenceID, messageType, 12 bit hash of offset 20-29 */
  544. switch (type) {
  545. case PTP_CLASS_V1_IPV4:
  546. case PTP_CLASS_V2_IPV4:
  547. offset = ETH_HLEN + IPV4_HLEN(data) + UDP_HLEN;
  548. break;
  549. case PTP_CLASS_V1_IPV6:
  550. case PTP_CLASS_V2_IPV6:
  551. offset = OFF_PTP6;
  552. break;
  553. case PTP_CLASS_V2_L2:
  554. offset = ETH_HLEN;
  555. break;
  556. case PTP_CLASS_V2_VLAN:
  557. offset = ETH_HLEN + VLAN_HLEN;
  558. break;
  559. default:
  560. return 0;
  561. }
  562. if (skb->len + ETH_HLEN < offset + OFF_PTP_SEQUENCE_ID + sizeof(*seqid))
  563. return 0;
  564. if (unlikely(type & PTP_CLASS_V1))
  565. msgtype = data + offset + OFF_PTP_CONTROL;
  566. else
  567. msgtype = data + offset;
  568. seqid = (u16 *)(data + offset + OFF_PTP_SEQUENCE_ID);
  569. return (rxts->msgtype == (*msgtype & 0xf) &&
  570. rxts->seqid == ntohs(*seqid));
  571. }
  572. static void dp83640_free_clocks(void)
  573. {
  574. struct dp83640_clock *clock;
  575. struct list_head *this, *next;
  576. mutex_lock(&phyter_clocks_lock);
  577. list_for_each_safe(this, next, &phyter_clocks) {
  578. clock = list_entry(this, struct dp83640_clock, list);
  579. if (!list_empty(&clock->phylist)) {
  580. pr_warning("phy list non-empty while unloading");
  581. BUG();
  582. }
  583. list_del(&clock->list);
  584. mutex_destroy(&clock->extreg_lock);
  585. mutex_destroy(&clock->clock_lock);
  586. put_device(&clock->bus->dev);
  587. kfree(clock);
  588. }
  589. mutex_unlock(&phyter_clocks_lock);
  590. }
  591. static void dp83640_clock_init(struct dp83640_clock *clock, struct mii_bus *bus)
  592. {
  593. INIT_LIST_HEAD(&clock->list);
  594. clock->bus = bus;
  595. mutex_init(&clock->extreg_lock);
  596. mutex_init(&clock->clock_lock);
  597. INIT_LIST_HEAD(&clock->phylist);
  598. clock->caps.owner = THIS_MODULE;
  599. sprintf(clock->caps.name, "dp83640 timer");
  600. clock->caps.max_adj = 1953124;
  601. clock->caps.n_alarm = 0;
  602. clock->caps.n_ext_ts = N_EXT_TS;
  603. clock->caps.n_per_out = 0;
  604. clock->caps.pps = 0;
  605. clock->caps.adjfreq = ptp_dp83640_adjfreq;
  606. clock->caps.adjtime = ptp_dp83640_adjtime;
  607. clock->caps.gettime = ptp_dp83640_gettime;
  608. clock->caps.settime = ptp_dp83640_settime;
  609. clock->caps.enable = ptp_dp83640_enable;
  610. /*
  611. * Get a reference to this bus instance.
  612. */
  613. get_device(&bus->dev);
  614. }
  615. static int choose_this_phy(struct dp83640_clock *clock,
  616. struct phy_device *phydev)
  617. {
  618. if (chosen_phy == -1 && !clock->chosen)
  619. return 1;
  620. if (chosen_phy == phydev->addr)
  621. return 1;
  622. return 0;
  623. }
  624. static struct dp83640_clock *dp83640_clock_get(struct dp83640_clock *clock)
  625. {
  626. if (clock)
  627. mutex_lock(&clock->clock_lock);
  628. return clock;
  629. }
  630. /*
  631. * Look up and lock a clock by bus instance.
  632. * If there is no clock for this bus, then create it first.
  633. */
  634. static struct dp83640_clock *dp83640_clock_get_bus(struct mii_bus *bus)
  635. {
  636. struct dp83640_clock *clock = NULL, *tmp;
  637. struct list_head *this;
  638. mutex_lock(&phyter_clocks_lock);
  639. list_for_each(this, &phyter_clocks) {
  640. tmp = list_entry(this, struct dp83640_clock, list);
  641. if (tmp->bus == bus) {
  642. clock = tmp;
  643. break;
  644. }
  645. }
  646. if (clock)
  647. goto out;
  648. clock = kzalloc(sizeof(struct dp83640_clock), GFP_KERNEL);
  649. if (!clock)
  650. goto out;
  651. dp83640_clock_init(clock, bus);
  652. list_add_tail(&phyter_clocks, &clock->list);
  653. out:
  654. mutex_unlock(&phyter_clocks_lock);
  655. return dp83640_clock_get(clock);
  656. }
  657. static void dp83640_clock_put(struct dp83640_clock *clock)
  658. {
  659. mutex_unlock(&clock->clock_lock);
  660. }
  661. static int dp83640_probe(struct phy_device *phydev)
  662. {
  663. struct dp83640_clock *clock;
  664. struct dp83640_private *dp83640;
  665. int err = -ENOMEM, i;
  666. if (phydev->addr == BROADCAST_ADDR)
  667. return 0;
  668. clock = dp83640_clock_get_bus(phydev->bus);
  669. if (!clock)
  670. goto no_clock;
  671. dp83640 = kzalloc(sizeof(struct dp83640_private), GFP_KERNEL);
  672. if (!dp83640)
  673. goto no_memory;
  674. dp83640->phydev = phydev;
  675. INIT_WORK(&dp83640->ts_work, rx_timestamp_work);
  676. INIT_LIST_HEAD(&dp83640->rxts);
  677. INIT_LIST_HEAD(&dp83640->rxpool);
  678. for (i = 0; i < MAX_RXTS; i++)
  679. list_add(&dp83640->rx_pool_data[i].list, &dp83640->rxpool);
  680. phydev->priv = dp83640;
  681. spin_lock_init(&dp83640->rx_lock);
  682. skb_queue_head_init(&dp83640->rx_queue);
  683. skb_queue_head_init(&dp83640->tx_queue);
  684. dp83640->clock = clock;
  685. if (choose_this_phy(clock, phydev)) {
  686. clock->chosen = dp83640;
  687. clock->ptp_clock = ptp_clock_register(&clock->caps);
  688. if (IS_ERR(clock->ptp_clock)) {
  689. err = PTR_ERR(clock->ptp_clock);
  690. goto no_register;
  691. }
  692. } else
  693. list_add_tail(&dp83640->list, &clock->phylist);
  694. if (clock->chosen && !list_empty(&clock->phylist))
  695. recalibrate(clock);
  696. else
  697. enable_broadcast(dp83640->phydev, clock->page, 1);
  698. dp83640_clock_put(clock);
  699. return 0;
  700. no_register:
  701. clock->chosen = NULL;
  702. kfree(dp83640);
  703. no_memory:
  704. dp83640_clock_put(clock);
  705. no_clock:
  706. return err;
  707. }
  708. static void dp83640_remove(struct phy_device *phydev)
  709. {
  710. struct dp83640_clock *clock;
  711. struct list_head *this, *next;
  712. struct dp83640_private *tmp, *dp83640 = phydev->priv;
  713. if (phydev->addr == BROADCAST_ADDR)
  714. return;
  715. enable_status_frames(phydev, false);
  716. cancel_work_sync(&dp83640->ts_work);
  717. clock = dp83640_clock_get(dp83640->clock);
  718. if (dp83640 == clock->chosen) {
  719. ptp_clock_unregister(clock->ptp_clock);
  720. clock->chosen = NULL;
  721. } else {
  722. list_for_each_safe(this, next, &clock->phylist) {
  723. tmp = list_entry(this, struct dp83640_private, list);
  724. if (tmp == dp83640) {
  725. list_del_init(&tmp->list);
  726. break;
  727. }
  728. }
  729. }
  730. dp83640_clock_put(clock);
  731. kfree(dp83640);
  732. }
  733. static int dp83640_hwtstamp(struct phy_device *phydev, struct ifreq *ifr)
  734. {
  735. struct dp83640_private *dp83640 = phydev->priv;
  736. struct hwtstamp_config cfg;
  737. u16 txcfg0, rxcfg0;
  738. if (copy_from_user(&cfg, ifr->ifr_data, sizeof(cfg)))
  739. return -EFAULT;
  740. if (cfg.flags) /* reserved for future extensions */
  741. return -EINVAL;
  742. switch (cfg.tx_type) {
  743. case HWTSTAMP_TX_OFF:
  744. dp83640->hwts_tx_en = 0;
  745. break;
  746. case HWTSTAMP_TX_ON:
  747. dp83640->hwts_tx_en = 1;
  748. break;
  749. default:
  750. return -ERANGE;
  751. }
  752. switch (cfg.rx_filter) {
  753. case HWTSTAMP_FILTER_NONE:
  754. dp83640->hwts_rx_en = 0;
  755. dp83640->layer = 0;
  756. dp83640->version = 0;
  757. break;
  758. case HWTSTAMP_FILTER_PTP_V1_L4_EVENT:
  759. case HWTSTAMP_FILTER_PTP_V1_L4_SYNC:
  760. case HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ:
  761. dp83640->hwts_rx_en = 1;
  762. dp83640->layer = LAYER4;
  763. dp83640->version = 1;
  764. break;
  765. case HWTSTAMP_FILTER_PTP_V2_L4_EVENT:
  766. case HWTSTAMP_FILTER_PTP_V2_L4_SYNC:
  767. case HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ:
  768. dp83640->hwts_rx_en = 1;
  769. dp83640->layer = LAYER4;
  770. dp83640->version = 2;
  771. break;
  772. case HWTSTAMP_FILTER_PTP_V2_L2_EVENT:
  773. case HWTSTAMP_FILTER_PTP_V2_L2_SYNC:
  774. case HWTSTAMP_FILTER_PTP_V2_L2_DELAY_REQ:
  775. dp83640->hwts_rx_en = 1;
  776. dp83640->layer = LAYER2;
  777. dp83640->version = 2;
  778. break;
  779. case HWTSTAMP_FILTER_PTP_V2_EVENT:
  780. case HWTSTAMP_FILTER_PTP_V2_SYNC:
  781. case HWTSTAMP_FILTER_PTP_V2_DELAY_REQ:
  782. dp83640->hwts_rx_en = 1;
  783. dp83640->layer = LAYER4|LAYER2;
  784. dp83640->version = 2;
  785. break;
  786. default:
  787. return -ERANGE;
  788. }
  789. txcfg0 = (dp83640->version & TX_PTP_VER_MASK) << TX_PTP_VER_SHIFT;
  790. rxcfg0 = (dp83640->version & TX_PTP_VER_MASK) << TX_PTP_VER_SHIFT;
  791. if (dp83640->layer & LAYER2) {
  792. txcfg0 |= TX_L2_EN;
  793. rxcfg0 |= RX_L2_EN;
  794. }
  795. if (dp83640->layer & LAYER4) {
  796. txcfg0 |= TX_IPV6_EN | TX_IPV4_EN;
  797. rxcfg0 |= RX_IPV6_EN | RX_IPV4_EN;
  798. }
  799. if (dp83640->hwts_tx_en)
  800. txcfg0 |= TX_TS_EN;
  801. if (dp83640->hwts_rx_en)
  802. rxcfg0 |= RX_TS_EN;
  803. mutex_lock(&dp83640->clock->extreg_lock);
  804. if (dp83640->hwts_tx_en || dp83640->hwts_rx_en) {
  805. enable_status_frames(phydev, true);
  806. ext_write(0, phydev, PAGE4, PTP_CTL, PTP_ENABLE);
  807. }
  808. ext_write(0, phydev, PAGE5, PTP_TXCFG0, txcfg0);
  809. ext_write(0, phydev, PAGE5, PTP_RXCFG0, rxcfg0);
  810. mutex_unlock(&dp83640->clock->extreg_lock);
  811. return copy_to_user(ifr->ifr_data, &cfg, sizeof(cfg)) ? -EFAULT : 0;
  812. }
  813. static void rx_timestamp_work(struct work_struct *work)
  814. {
  815. struct dp83640_private *dp83640 =
  816. container_of(work, struct dp83640_private, ts_work);
  817. struct list_head *this, *next;
  818. struct rxts *rxts;
  819. struct skb_shared_hwtstamps *shhwtstamps;
  820. struct sk_buff *skb;
  821. unsigned int type;
  822. unsigned long flags;
  823. /* Deliver each deferred packet, with or without a time stamp. */
  824. while ((skb = skb_dequeue(&dp83640->rx_queue)) != NULL) {
  825. type = SKB_PTP_TYPE(skb);
  826. spin_lock_irqsave(&dp83640->rx_lock, flags);
  827. list_for_each_safe(this, next, &dp83640->rxts) {
  828. rxts = list_entry(this, struct rxts, list);
  829. if (match(skb, type, rxts)) {
  830. shhwtstamps = skb_hwtstamps(skb);
  831. memset(shhwtstamps, 0, sizeof(*shhwtstamps));
  832. shhwtstamps->hwtstamp = ns_to_ktime(rxts->ns);
  833. list_del_init(&rxts->list);
  834. list_add(&rxts->list, &dp83640->rxpool);
  835. break;
  836. }
  837. }
  838. spin_unlock_irqrestore(&dp83640->rx_lock, flags);
  839. netif_rx(skb);
  840. }
  841. /* Clear out expired time stamps. */
  842. spin_lock_irqsave(&dp83640->rx_lock, flags);
  843. prune_rx_ts(dp83640);
  844. spin_unlock_irqrestore(&dp83640->rx_lock, flags);
  845. }
  846. static bool dp83640_rxtstamp(struct phy_device *phydev,
  847. struct sk_buff *skb, int type)
  848. {
  849. struct dp83640_private *dp83640 = phydev->priv;
  850. if (!dp83640->hwts_rx_en)
  851. return false;
  852. if (is_status_frame(skb, type)) {
  853. decode_status_frame(dp83640, skb);
  854. /* Let the stack drop this frame. */
  855. return false;
  856. }
  857. SKB_PTP_TYPE(skb) = type;
  858. skb_queue_tail(&dp83640->rx_queue, skb);
  859. schedule_work(&dp83640->ts_work);
  860. return true;
  861. }
  862. static void dp83640_txtstamp(struct phy_device *phydev,
  863. struct sk_buff *skb, int type)
  864. {
  865. struct dp83640_private *dp83640 = phydev->priv;
  866. if (!dp83640->hwts_tx_en) {
  867. kfree_skb(skb);
  868. return;
  869. }
  870. skb_queue_tail(&dp83640->tx_queue, skb);
  871. schedule_work(&dp83640->ts_work);
  872. }
  873. static struct phy_driver dp83640_driver = {
  874. .phy_id = DP83640_PHY_ID,
  875. .phy_id_mask = 0xfffffff0,
  876. .name = "NatSemi DP83640",
  877. .features = PHY_BASIC_FEATURES,
  878. .flags = 0,
  879. .probe = dp83640_probe,
  880. .remove = dp83640_remove,
  881. .config_aneg = genphy_config_aneg,
  882. .read_status = genphy_read_status,
  883. .hwtstamp = dp83640_hwtstamp,
  884. .rxtstamp = dp83640_rxtstamp,
  885. .txtstamp = dp83640_txtstamp,
  886. .driver = {.owner = THIS_MODULE,}
  887. };
  888. static int __init dp83640_init(void)
  889. {
  890. return phy_driver_register(&dp83640_driver);
  891. }
  892. static void __exit dp83640_exit(void)
  893. {
  894. dp83640_free_clocks();
  895. phy_driver_unregister(&dp83640_driver);
  896. }
  897. MODULE_DESCRIPTION("National Semiconductor DP83640 PHY driver");
  898. MODULE_AUTHOR("Richard Cochran <richard.cochran@omicron.at>");
  899. MODULE_LICENSE("GPL");
  900. module_init(dp83640_init);
  901. module_exit(dp83640_exit);
  902. static struct mdio_device_id __maybe_unused dp83640_tbl[] = {
  903. { DP83640_PHY_ID, 0xfffffff0 },
  904. { }
  905. };
  906. MODULE_DEVICE_TABLE(mdio, dp83640_tbl);