fsl_ucc_hdlc.c 31 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294
  1. // SPDX-License-Identifier: GPL-2.0-or-later
  2. /* Freescale QUICC Engine HDLC Device Driver
  3. *
  4. * Copyright 2016 Freescale Semiconductor Inc.
  5. */
  6. #include <linux/delay.h>
  7. #include <linux/dma-mapping.h>
  8. #include <linux/hdlc.h>
  9. #include <linux/init.h>
  10. #include <linux/interrupt.h>
  11. #include <linux/io.h>
  12. #include <linux/irq.h>
  13. #include <linux/kernel.h>
  14. #include <linux/module.h>
  15. #include <linux/netdevice.h>
  16. #include <linux/of_address.h>
  17. #include <linux/of_irq.h>
  18. #include <linux/of_platform.h>
  19. #include <linux/platform_device.h>
  20. #include <linux/sched.h>
  21. #include <linux/skbuff.h>
  22. #include <linux/slab.h>
  23. #include <linux/spinlock.h>
  24. #include <linux/stddef.h>
  25. #include <soc/fsl/qe/qe_tdm.h>
  26. #include <uapi/linux/if_arp.h>
  27. #include "fsl_ucc_hdlc.h"
  28. #define DRV_DESC "Freescale QE UCC HDLC Driver"
  29. #define DRV_NAME "ucc_hdlc"
  30. #define TDM_PPPOHT_SLIC_MAXIN
  31. #define RX_BD_ERRORS (R_CD_S | R_OV_S | R_CR_S | R_AB_S | R_NO_S | R_LG_S)
  32. static int uhdlc_close(struct net_device *dev);
  33. static struct ucc_tdm_info utdm_primary_info = {
  34. .uf_info = {
  35. .tsa = 0,
  36. .cdp = 0,
  37. .cds = 1,
  38. .ctsp = 1,
  39. .ctss = 1,
  40. .revd = 0,
  41. .urfs = 256,
  42. .utfs = 256,
  43. .urfet = 128,
  44. .urfset = 192,
  45. .utfet = 128,
  46. .utftt = 0x40,
  47. .ufpt = 256,
  48. .mode = UCC_FAST_PROTOCOL_MODE_HDLC,
  49. .ttx_trx = UCC_FAST_GUMR_TRANSPARENT_TTX_TRX_NORMAL,
  50. .tenc = UCC_FAST_TX_ENCODING_NRZ,
  51. .renc = UCC_FAST_RX_ENCODING_NRZ,
  52. .tcrc = UCC_FAST_16_BIT_CRC,
  53. .synl = UCC_FAST_SYNC_LEN_NOT_USED,
  54. },
  55. .si_info = {
  56. #ifdef TDM_PPPOHT_SLIC_MAXIN
  57. .simr_rfsd = 1,
  58. .simr_tfsd = 2,
  59. #else
  60. .simr_rfsd = 0,
  61. .simr_tfsd = 0,
  62. #endif
  63. .simr_crt = 0,
  64. .simr_sl = 0,
  65. .simr_ce = 1,
  66. .simr_fe = 1,
  67. .simr_gm = 0,
  68. },
  69. };
  70. static struct ucc_tdm_info utdm_info[UCC_MAX_NUM];
  71. static int uhdlc_init(struct ucc_hdlc_private *priv)
  72. {
  73. struct ucc_tdm_info *ut_info;
  74. struct ucc_fast_info *uf_info;
  75. u32 cecr_subblock;
  76. u16 bd_status;
  77. int ret, i;
  78. void *bd_buffer;
  79. dma_addr_t bd_dma_addr;
  80. s32 riptr;
  81. s32 tiptr;
  82. u32 gumr;
  83. ut_info = priv->ut_info;
  84. uf_info = &ut_info->uf_info;
  85. if (priv->tsa) {
  86. uf_info->tsa = 1;
  87. uf_info->ctsp = 1;
  88. uf_info->cds = 1;
  89. uf_info->ctss = 1;
  90. } else {
  91. uf_info->cds = 0;
  92. uf_info->ctsp = 0;
  93. uf_info->ctss = 0;
  94. }
  95. /* This sets HPM register in CMXUCR register which configures a
  96. * open drain connected HDLC bus
  97. */
  98. if (priv->hdlc_bus)
  99. uf_info->brkpt_support = 1;
  100. uf_info->uccm_mask = ((UCC_HDLC_UCCE_RXB | UCC_HDLC_UCCE_RXF |
  101. UCC_HDLC_UCCE_TXB) << 16);
  102. ret = ucc_fast_init(uf_info, &priv->uccf);
  103. if (ret) {
  104. dev_err(priv->dev, "Failed to init uccf.");
  105. return ret;
  106. }
  107. priv->uf_regs = priv->uccf->uf_regs;
  108. ucc_fast_disable(priv->uccf, COMM_DIR_RX | COMM_DIR_TX);
  109. /* Loopback mode */
  110. if (priv->loopback) {
  111. dev_info(priv->dev, "Loopback Mode\n");
  112. /* use the same clock when work in loopback */
  113. qe_setbrg(ut_info->uf_info.rx_clock, 20000000, 1);
  114. gumr = ioread32be(&priv->uf_regs->gumr);
  115. gumr |= (UCC_FAST_GUMR_LOOPBACK | UCC_FAST_GUMR_CDS |
  116. UCC_FAST_GUMR_TCI);
  117. gumr &= ~(UCC_FAST_GUMR_CTSP | UCC_FAST_GUMR_RSYN);
  118. iowrite32be(gumr, &priv->uf_regs->gumr);
  119. }
  120. /* Initialize SI */
  121. if (priv->tsa)
  122. ucc_tdm_init(priv->utdm, priv->ut_info);
  123. /* Write to QE CECR, UCCx channel to Stop Transmission */
  124. cecr_subblock = ucc_fast_get_qe_cr_subblock(uf_info->ucc_num);
  125. ret = qe_issue_cmd(QE_STOP_TX, cecr_subblock,
  126. QE_CR_PROTOCOL_UNSPECIFIED, 0);
  127. /* Set UPSMR normal mode (need fixed)*/
  128. iowrite32be(0, &priv->uf_regs->upsmr);
  129. /* hdlc_bus mode */
  130. if (priv->hdlc_bus) {
  131. u32 upsmr;
  132. dev_info(priv->dev, "HDLC bus Mode\n");
  133. upsmr = ioread32be(&priv->uf_regs->upsmr);
  134. /* bus mode and retransmit enable, with collision window
  135. * set to 8 bytes
  136. */
  137. upsmr |= UCC_HDLC_UPSMR_RTE | UCC_HDLC_UPSMR_BUS |
  138. UCC_HDLC_UPSMR_CW8;
  139. iowrite32be(upsmr, &priv->uf_regs->upsmr);
  140. /* explicitly disable CDS & CTSP */
  141. gumr = ioread32be(&priv->uf_regs->gumr);
  142. gumr &= ~(UCC_FAST_GUMR_CDS | UCC_FAST_GUMR_CTSP);
  143. /* set automatic sync to explicitly ignore CD signal */
  144. gumr |= UCC_FAST_GUMR_SYNL_AUTO;
  145. iowrite32be(gumr, &priv->uf_regs->gumr);
  146. }
  147. priv->rx_ring_size = RX_BD_RING_LEN;
  148. priv->tx_ring_size = TX_BD_RING_LEN;
  149. /* Alloc Rx BD */
  150. priv->rx_bd_base = dma_alloc_coherent(priv->dev,
  151. RX_BD_RING_LEN * sizeof(struct qe_bd),
  152. &priv->dma_rx_bd, GFP_KERNEL);
  153. if (!priv->rx_bd_base) {
  154. dev_err(priv->dev, "Cannot allocate MURAM memory for RxBDs\n");
  155. ret = -ENOMEM;
  156. goto free_uccf;
  157. }
  158. /* Alloc Tx BD */
  159. priv->tx_bd_base = dma_alloc_coherent(priv->dev,
  160. TX_BD_RING_LEN * sizeof(struct qe_bd),
  161. &priv->dma_tx_bd, GFP_KERNEL);
  162. if (!priv->tx_bd_base) {
  163. dev_err(priv->dev, "Cannot allocate MURAM memory for TxBDs\n");
  164. ret = -ENOMEM;
  165. goto free_rx_bd;
  166. }
  167. /* Alloc parameter ram for ucc hdlc */
  168. priv->ucc_pram_offset = qe_muram_alloc(sizeof(struct ucc_hdlc_param),
  169. ALIGNMENT_OF_UCC_HDLC_PRAM);
  170. if (priv->ucc_pram_offset < 0) {
  171. dev_err(priv->dev, "Can not allocate MURAM for hdlc parameter.\n");
  172. ret = -ENOMEM;
  173. goto free_tx_bd;
  174. }
  175. priv->rx_skbuff = kzalloc_objs(*priv->rx_skbuff, priv->rx_ring_size);
  176. if (!priv->rx_skbuff) {
  177. ret = -ENOMEM;
  178. goto free_ucc_pram;
  179. }
  180. priv->tx_skbuff = kzalloc_objs(*priv->tx_skbuff, priv->tx_ring_size);
  181. if (!priv->tx_skbuff) {
  182. ret = -ENOMEM;
  183. goto free_rx_skbuff;
  184. }
  185. priv->skb_curtx = 0;
  186. priv->skb_dirtytx = 0;
  187. priv->curtx_bd = priv->tx_bd_base;
  188. priv->dirty_tx = priv->tx_bd_base;
  189. priv->currx_bd = priv->rx_bd_base;
  190. priv->currx_bdnum = 0;
  191. /* init parameter base */
  192. cecr_subblock = ucc_fast_get_qe_cr_subblock(uf_info->ucc_num);
  193. ret = qe_issue_cmd(QE_ASSIGN_PAGE_TO_DEVICE, cecr_subblock,
  194. QE_CR_PROTOCOL_UNSPECIFIED, priv->ucc_pram_offset);
  195. priv->ucc_pram = (struct ucc_hdlc_param __iomem *)
  196. qe_muram_addr(priv->ucc_pram_offset);
  197. /* Zero out parameter ram */
  198. memset_io(priv->ucc_pram, 0, sizeof(struct ucc_hdlc_param));
  199. /* Alloc riptr, tiptr */
  200. riptr = qe_muram_alloc(32, 32);
  201. if (riptr < 0) {
  202. dev_err(priv->dev, "Cannot allocate MURAM mem for Receive internal temp data pointer\n");
  203. ret = -ENOMEM;
  204. goto free_tx_skbuff;
  205. }
  206. tiptr = qe_muram_alloc(32, 32);
  207. if (tiptr < 0) {
  208. dev_err(priv->dev, "Cannot allocate MURAM mem for Transmit internal temp data pointer\n");
  209. ret = -ENOMEM;
  210. goto free_riptr;
  211. }
  212. if (riptr != (u16)riptr || tiptr != (u16)tiptr) {
  213. dev_err(priv->dev, "MURAM allocation out of addressable range\n");
  214. ret = -ENOMEM;
  215. goto free_tiptr;
  216. }
  217. /* Set RIPTR, TIPTR */
  218. iowrite16be(riptr, &priv->ucc_pram->riptr);
  219. iowrite16be(tiptr, &priv->ucc_pram->tiptr);
  220. /* Set MRBLR */
  221. iowrite16be(MAX_RX_BUF_LENGTH, &priv->ucc_pram->mrblr);
  222. /* Set RBASE, TBASE */
  223. iowrite32be(priv->dma_rx_bd, &priv->ucc_pram->rbase);
  224. iowrite32be(priv->dma_tx_bd, &priv->ucc_pram->tbase);
  225. /* Set RSTATE, TSTATE */
  226. iowrite32be(BMR_GBL | BMR_BIG_ENDIAN, &priv->ucc_pram->rstate);
  227. iowrite32be(BMR_GBL | BMR_BIG_ENDIAN, &priv->ucc_pram->tstate);
  228. /* Set C_MASK, C_PRES for 16bit CRC */
  229. iowrite32be(CRC_16BIT_MASK, &priv->ucc_pram->c_mask);
  230. iowrite32be(CRC_16BIT_PRES, &priv->ucc_pram->c_pres);
  231. iowrite16be(MAX_FRAME_LENGTH, &priv->ucc_pram->mflr);
  232. iowrite16be(DEFAULT_RFTHR, &priv->ucc_pram->rfthr);
  233. iowrite16be(DEFAULT_RFTHR, &priv->ucc_pram->rfcnt);
  234. iowrite16be(priv->hmask, &priv->ucc_pram->hmask);
  235. iowrite16be(DEFAULT_HDLC_ADDR, &priv->ucc_pram->haddr1);
  236. iowrite16be(DEFAULT_HDLC_ADDR, &priv->ucc_pram->haddr2);
  237. iowrite16be(DEFAULT_HDLC_ADDR, &priv->ucc_pram->haddr3);
  238. iowrite16be(DEFAULT_HDLC_ADDR, &priv->ucc_pram->haddr4);
  239. /* Get BD buffer */
  240. bd_buffer = dma_alloc_coherent(priv->dev,
  241. (RX_BD_RING_LEN + TX_BD_RING_LEN) * MAX_RX_BUF_LENGTH,
  242. &bd_dma_addr, GFP_KERNEL);
  243. if (!bd_buffer) {
  244. dev_err(priv->dev, "Could not allocate buffer descriptors\n");
  245. ret = -ENOMEM;
  246. goto free_tiptr;
  247. }
  248. priv->rx_buffer = bd_buffer;
  249. priv->tx_buffer = bd_buffer + RX_BD_RING_LEN * MAX_RX_BUF_LENGTH;
  250. priv->dma_rx_addr = bd_dma_addr;
  251. priv->dma_tx_addr = bd_dma_addr + RX_BD_RING_LEN * MAX_RX_BUF_LENGTH;
  252. for (i = 0; i < RX_BD_RING_LEN; i++) {
  253. if (i < (RX_BD_RING_LEN - 1))
  254. bd_status = R_E_S | R_I_S;
  255. else
  256. bd_status = R_E_S | R_I_S | R_W_S;
  257. priv->rx_bd_base[i].status = cpu_to_be16(bd_status);
  258. priv->rx_bd_base[i].buf = cpu_to_be32(priv->dma_rx_addr + i * MAX_RX_BUF_LENGTH);
  259. }
  260. for (i = 0; i < TX_BD_RING_LEN; i++) {
  261. if (i < (TX_BD_RING_LEN - 1))
  262. bd_status = T_I_S | T_TC_S;
  263. else
  264. bd_status = T_I_S | T_TC_S | T_W_S;
  265. priv->tx_bd_base[i].status = cpu_to_be16(bd_status);
  266. priv->tx_bd_base[i].buf = cpu_to_be32(priv->dma_tx_addr + i * MAX_RX_BUF_LENGTH);
  267. }
  268. dma_wmb();
  269. return 0;
  270. free_tiptr:
  271. qe_muram_free(tiptr);
  272. free_riptr:
  273. qe_muram_free(riptr);
  274. free_tx_skbuff:
  275. kfree(priv->tx_skbuff);
  276. free_rx_skbuff:
  277. kfree(priv->rx_skbuff);
  278. free_ucc_pram:
  279. qe_muram_free(priv->ucc_pram_offset);
  280. free_tx_bd:
  281. dma_free_coherent(priv->dev,
  282. TX_BD_RING_LEN * sizeof(struct qe_bd),
  283. priv->tx_bd_base, priv->dma_tx_bd);
  284. free_rx_bd:
  285. dma_free_coherent(priv->dev,
  286. RX_BD_RING_LEN * sizeof(struct qe_bd),
  287. priv->rx_bd_base, priv->dma_rx_bd);
  288. free_uccf:
  289. ucc_fast_free(priv->uccf);
  290. return ret;
  291. }
  292. static netdev_tx_t ucc_hdlc_tx(struct sk_buff *skb, struct net_device *dev)
  293. {
  294. hdlc_device *hdlc = dev_to_hdlc(dev);
  295. struct ucc_hdlc_private *priv = (struct ucc_hdlc_private *)hdlc->priv;
  296. struct qe_bd *bd;
  297. u16 bd_status;
  298. unsigned long flags;
  299. __be16 *proto_head;
  300. switch (dev->type) {
  301. case ARPHRD_RAWHDLC:
  302. if (skb_headroom(skb) < HDLC_HEAD_LEN) {
  303. dev->stats.tx_dropped++;
  304. dev_kfree_skb(skb);
  305. netdev_err(dev, "No enough space for hdlc head\n");
  306. return -ENOMEM;
  307. }
  308. skb_push(skb, HDLC_HEAD_LEN);
  309. proto_head = (__be16 *)skb->data;
  310. *proto_head = htons(DEFAULT_HDLC_HEAD);
  311. dev->stats.tx_bytes += skb->len;
  312. break;
  313. case ARPHRD_PPP:
  314. proto_head = (__be16 *)skb->data;
  315. if (*proto_head != htons(DEFAULT_PPP_HEAD)) {
  316. dev->stats.tx_dropped++;
  317. dev_kfree_skb(skb);
  318. netdev_err(dev, "Wrong ppp header\n");
  319. return -ENOMEM;
  320. }
  321. dev->stats.tx_bytes += skb->len;
  322. break;
  323. case ARPHRD_ETHER:
  324. dev->stats.tx_bytes += skb->len;
  325. break;
  326. default:
  327. dev->stats.tx_dropped++;
  328. dev_kfree_skb(skb);
  329. return -ENOMEM;
  330. }
  331. netdev_sent_queue(dev, skb->len);
  332. spin_lock_irqsave(&priv->lock, flags);
  333. dma_rmb();
  334. /* Start from the next BD that should be filled */
  335. bd = priv->curtx_bd;
  336. bd_status = be16_to_cpu(bd->status);
  337. /* Save the skb pointer so we can free it later */
  338. priv->tx_skbuff[priv->skb_curtx] = skb;
  339. /* Update the current skb pointer (wrapping if this was the last) */
  340. priv->skb_curtx =
  341. (priv->skb_curtx + 1) & TX_RING_MOD_MASK(TX_BD_RING_LEN);
  342. /* copy skb data to tx buffer for sdma processing */
  343. memcpy(priv->tx_buffer + (be32_to_cpu(bd->buf) - priv->dma_tx_addr),
  344. skb->data, skb->len);
  345. /* set bd status and length */
  346. bd_status = (bd_status & T_W_S) | T_R_S | T_I_S | T_L_S | T_TC_S;
  347. bd->length = cpu_to_be16(skb->len);
  348. bd->status = cpu_to_be16(bd_status);
  349. /* Move to next BD in the ring */
  350. if (!(bd_status & T_W_S))
  351. bd += 1;
  352. else
  353. bd = priv->tx_bd_base;
  354. if (bd == priv->dirty_tx) {
  355. if (!netif_queue_stopped(dev))
  356. netif_stop_queue(dev);
  357. }
  358. priv->curtx_bd = bd;
  359. spin_unlock_irqrestore(&priv->lock, flags);
  360. return NETDEV_TX_OK;
  361. }
  362. static int hdlc_tx_restart(struct ucc_hdlc_private *priv)
  363. {
  364. u32 cecr_subblock;
  365. cecr_subblock =
  366. ucc_fast_get_qe_cr_subblock(priv->ut_info->uf_info.ucc_num);
  367. qe_issue_cmd(QE_RESTART_TX, cecr_subblock,
  368. QE_CR_PROTOCOL_UNSPECIFIED, 0);
  369. return 0;
  370. }
  371. static int hdlc_tx_done(struct ucc_hdlc_private *priv)
  372. {
  373. /* Start from the next BD that should be filled */
  374. struct net_device *dev = priv->ndev;
  375. unsigned int bytes_sent = 0;
  376. int howmany = 0;
  377. struct qe_bd *bd; /* BD pointer */
  378. u16 bd_status;
  379. int tx_restart = 0;
  380. dma_rmb();
  381. bd = priv->dirty_tx;
  382. bd_status = be16_to_cpu(bd->status);
  383. /* Normal processing. */
  384. while ((bd_status & T_R_S) == 0) {
  385. struct sk_buff *skb;
  386. if (bd_status & T_UN_S) { /* Underrun */
  387. dev->stats.tx_fifo_errors++;
  388. tx_restart = 1;
  389. }
  390. if (bd_status & T_CT_S) { /* Carrier lost */
  391. dev->stats.tx_carrier_errors++;
  392. tx_restart = 1;
  393. }
  394. /* BD contains already transmitted buffer. */
  395. /* Handle the transmitted buffer and release */
  396. /* the BD to be used with the current frame */
  397. skb = priv->tx_skbuff[priv->skb_dirtytx];
  398. if (!skb)
  399. break;
  400. howmany++;
  401. bytes_sent += skb->len;
  402. dev->stats.tx_packets++;
  403. memset(priv->tx_buffer +
  404. (be32_to_cpu(bd->buf) - priv->dma_tx_addr),
  405. 0, skb->len);
  406. dev_consume_skb_irq(skb);
  407. priv->tx_skbuff[priv->skb_dirtytx] = NULL;
  408. priv->skb_dirtytx =
  409. (priv->skb_dirtytx +
  410. 1) & TX_RING_MOD_MASK(TX_BD_RING_LEN);
  411. /* We freed a buffer, so now we can restart transmission */
  412. if (netif_queue_stopped(dev))
  413. netif_wake_queue(dev);
  414. /* Advance the confirmation BD pointer */
  415. if (!(bd_status & T_W_S))
  416. bd += 1;
  417. else
  418. bd = priv->tx_bd_base;
  419. bd_status = be16_to_cpu(bd->status);
  420. }
  421. priv->dirty_tx = bd;
  422. if (tx_restart)
  423. hdlc_tx_restart(priv);
  424. netdev_completed_queue(dev, howmany, bytes_sent);
  425. return 0;
  426. }
  427. static int hdlc_rx_done(struct ucc_hdlc_private *priv, int rx_work_limit)
  428. {
  429. struct net_device *dev = priv->ndev;
  430. struct sk_buff *skb = NULL;
  431. hdlc_device *hdlc = dev_to_hdlc(dev);
  432. struct qe_bd *bd;
  433. u16 bd_status;
  434. u16 length, howmany = 0;
  435. u8 *bdbuffer;
  436. dma_rmb();
  437. bd = priv->currx_bd;
  438. bd_status = be16_to_cpu(bd->status);
  439. /* while there are received buffers and BD is full (~R_E) */
  440. while (!((bd_status & (R_E_S)) || (--rx_work_limit < 0))) {
  441. if (bd_status & (RX_BD_ERRORS)) {
  442. dev->stats.rx_errors++;
  443. if (bd_status & R_CD_S)
  444. dev->stats.collisions++;
  445. if (bd_status & R_OV_S)
  446. dev->stats.rx_fifo_errors++;
  447. if (bd_status & R_CR_S)
  448. dev->stats.rx_crc_errors++;
  449. if (bd_status & R_AB_S)
  450. dev->stats.rx_over_errors++;
  451. if (bd_status & R_NO_S)
  452. dev->stats.rx_frame_errors++;
  453. if (bd_status & R_LG_S)
  454. dev->stats.rx_length_errors++;
  455. goto recycle;
  456. }
  457. bdbuffer = priv->rx_buffer +
  458. (priv->currx_bdnum * MAX_RX_BUF_LENGTH);
  459. length = be16_to_cpu(bd->length);
  460. switch (dev->type) {
  461. case ARPHRD_RAWHDLC:
  462. bdbuffer += HDLC_HEAD_LEN;
  463. length -= (HDLC_HEAD_LEN + HDLC_CRC_SIZE);
  464. skb = dev_alloc_skb(length);
  465. if (!skb) {
  466. dev->stats.rx_dropped++;
  467. return -ENOMEM;
  468. }
  469. skb_put(skb, length);
  470. skb->len = length;
  471. skb->dev = dev;
  472. memcpy(skb->data, bdbuffer, length);
  473. break;
  474. case ARPHRD_PPP:
  475. case ARPHRD_ETHER:
  476. length -= HDLC_CRC_SIZE;
  477. skb = dev_alloc_skb(length);
  478. if (!skb) {
  479. dev->stats.rx_dropped++;
  480. return -ENOMEM;
  481. }
  482. skb_put(skb, length);
  483. skb->len = length;
  484. skb->dev = dev;
  485. memcpy(skb->data, bdbuffer, length);
  486. break;
  487. }
  488. dev->stats.rx_packets++;
  489. dev->stats.rx_bytes += skb->len;
  490. howmany++;
  491. if (hdlc->proto)
  492. skb->protocol = hdlc_type_trans(skb, dev);
  493. netif_receive_skb(skb);
  494. recycle:
  495. bd->status = cpu_to_be16((bd_status & R_W_S) | R_E_S | R_I_S);
  496. /* update to point at the next bd */
  497. if (bd_status & R_W_S) {
  498. priv->currx_bdnum = 0;
  499. bd = priv->rx_bd_base;
  500. } else {
  501. if (priv->currx_bdnum < (RX_BD_RING_LEN - 1))
  502. priv->currx_bdnum += 1;
  503. else
  504. priv->currx_bdnum = RX_BD_RING_LEN - 1;
  505. bd += 1;
  506. }
  507. bd_status = be16_to_cpu(bd->status);
  508. }
  509. dma_rmb();
  510. priv->currx_bd = bd;
  511. return howmany;
  512. }
  513. static int ucc_hdlc_poll(struct napi_struct *napi, int budget)
  514. {
  515. struct ucc_hdlc_private *priv = container_of(napi,
  516. struct ucc_hdlc_private,
  517. napi);
  518. int howmany;
  519. /* Tx event processing */
  520. spin_lock(&priv->lock);
  521. hdlc_tx_done(priv);
  522. spin_unlock(&priv->lock);
  523. howmany = 0;
  524. howmany += hdlc_rx_done(priv, budget - howmany);
  525. if (howmany < budget) {
  526. napi_complete_done(napi, howmany);
  527. qe_setbits_be32(priv->uccf->p_uccm,
  528. (UCCE_HDLC_RX_EVENTS | UCCE_HDLC_TX_EVENTS) << 16);
  529. }
  530. return howmany;
  531. }
  532. static irqreturn_t ucc_hdlc_irq_handler(int irq, void *dev_id)
  533. {
  534. struct ucc_hdlc_private *priv = (struct ucc_hdlc_private *)dev_id;
  535. struct net_device *dev = priv->ndev;
  536. struct ucc_fast_private *uccf;
  537. u32 ucce;
  538. u32 uccm;
  539. uccf = priv->uccf;
  540. ucce = ioread32be(uccf->p_ucce);
  541. uccm = ioread32be(uccf->p_uccm);
  542. ucce &= uccm;
  543. iowrite32be(ucce, uccf->p_ucce);
  544. if (!ucce)
  545. return IRQ_NONE;
  546. if ((ucce >> 16) & (UCCE_HDLC_RX_EVENTS | UCCE_HDLC_TX_EVENTS)) {
  547. if (napi_schedule_prep(&priv->napi)) {
  548. uccm &= ~((UCCE_HDLC_RX_EVENTS | UCCE_HDLC_TX_EVENTS)
  549. << 16);
  550. iowrite32be(uccm, uccf->p_uccm);
  551. __napi_schedule(&priv->napi);
  552. }
  553. }
  554. /* Errors and other events */
  555. if (ucce >> 16 & UCC_HDLC_UCCE_BSY)
  556. dev->stats.rx_missed_errors++;
  557. if (ucce >> 16 & UCC_HDLC_UCCE_TXE)
  558. dev->stats.tx_errors++;
  559. return IRQ_HANDLED;
  560. }
  561. static int uhdlc_ioctl(struct net_device *dev, struct if_settings *ifs)
  562. {
  563. const size_t size = sizeof(te1_settings);
  564. te1_settings line;
  565. struct ucc_hdlc_private *priv = netdev_priv(dev);
  566. switch (ifs->type) {
  567. case IF_GET_IFACE:
  568. ifs->type = IF_IFACE_E1;
  569. if (ifs->size < size) {
  570. ifs->size = size; /* data size wanted */
  571. return -ENOBUFS;
  572. }
  573. memset(&line, 0, sizeof(line));
  574. line.clock_type = priv->clocking;
  575. if (copy_to_user(ifs->ifs_ifsu.sync, &line, size))
  576. return -EFAULT;
  577. return 0;
  578. default:
  579. return hdlc_ioctl(dev, ifs);
  580. }
  581. }
  582. static int uhdlc_open(struct net_device *dev)
  583. {
  584. u32 cecr_subblock;
  585. hdlc_device *hdlc = dev_to_hdlc(dev);
  586. struct ucc_hdlc_private *priv = hdlc->priv;
  587. struct ucc_tdm *utdm = priv->utdm;
  588. int rc = 0;
  589. if (priv->hdlc_busy != 1) {
  590. if (request_irq(priv->ut_info->uf_info.irq,
  591. ucc_hdlc_irq_handler, 0, "hdlc", priv))
  592. return -ENODEV;
  593. cecr_subblock = ucc_fast_get_qe_cr_subblock(
  594. priv->ut_info->uf_info.ucc_num);
  595. qe_issue_cmd(QE_INIT_TX_RX, cecr_subblock,
  596. QE_CR_PROTOCOL_UNSPECIFIED, 0);
  597. ucc_fast_enable(priv->uccf, COMM_DIR_RX | COMM_DIR_TX);
  598. /* Enable the TDM port */
  599. if (priv->tsa)
  600. qe_setbits_8(&utdm->si_regs->siglmr1_h, 0x1 << utdm->tdm_port);
  601. priv->hdlc_busy = 1;
  602. netif_device_attach(priv->ndev);
  603. napi_enable(&priv->napi);
  604. netdev_reset_queue(dev);
  605. netif_start_queue(dev);
  606. rc = hdlc_open(dev);
  607. if (rc)
  608. uhdlc_close(dev);
  609. }
  610. return rc;
  611. }
  612. static void uhdlc_memclean(struct ucc_hdlc_private *priv)
  613. {
  614. qe_muram_free(ioread16be(&priv->ucc_pram->riptr));
  615. qe_muram_free(ioread16be(&priv->ucc_pram->tiptr));
  616. if (priv->rx_bd_base) {
  617. dma_free_coherent(priv->dev,
  618. RX_BD_RING_LEN * sizeof(struct qe_bd),
  619. priv->rx_bd_base, priv->dma_rx_bd);
  620. priv->rx_bd_base = NULL;
  621. priv->dma_rx_bd = 0;
  622. }
  623. if (priv->tx_bd_base) {
  624. dma_free_coherent(priv->dev,
  625. TX_BD_RING_LEN * sizeof(struct qe_bd),
  626. priv->tx_bd_base, priv->dma_tx_bd);
  627. priv->tx_bd_base = NULL;
  628. priv->dma_tx_bd = 0;
  629. }
  630. if (priv->ucc_pram) {
  631. qe_muram_free(priv->ucc_pram_offset);
  632. priv->ucc_pram = NULL;
  633. priv->ucc_pram_offset = 0;
  634. }
  635. kfree(priv->rx_skbuff);
  636. priv->rx_skbuff = NULL;
  637. kfree(priv->tx_skbuff);
  638. priv->tx_skbuff = NULL;
  639. if (priv->uf_regs) {
  640. iounmap(priv->uf_regs);
  641. priv->uf_regs = NULL;
  642. }
  643. if (priv->uccf) {
  644. ucc_fast_free(priv->uccf);
  645. priv->uccf = NULL;
  646. }
  647. if (priv->rx_buffer) {
  648. dma_free_coherent(priv->dev,
  649. (RX_BD_RING_LEN + TX_BD_RING_LEN) * MAX_RX_BUF_LENGTH,
  650. priv->rx_buffer, priv->dma_rx_addr);
  651. priv->rx_buffer = NULL;
  652. priv->dma_rx_addr = 0;
  653. priv->tx_buffer = NULL;
  654. priv->dma_tx_addr = 0;
  655. }
  656. }
  657. static int uhdlc_close(struct net_device *dev)
  658. {
  659. struct ucc_hdlc_private *priv = dev_to_hdlc(dev)->priv;
  660. struct ucc_tdm *utdm = priv->utdm;
  661. u32 cecr_subblock;
  662. napi_disable(&priv->napi);
  663. cecr_subblock = ucc_fast_get_qe_cr_subblock(
  664. priv->ut_info->uf_info.ucc_num);
  665. qe_issue_cmd(QE_GRACEFUL_STOP_TX, cecr_subblock,
  666. (u8)QE_CR_PROTOCOL_UNSPECIFIED, 0);
  667. qe_issue_cmd(QE_CLOSE_RX_BD, cecr_subblock,
  668. (u8)QE_CR_PROTOCOL_UNSPECIFIED, 0);
  669. if (priv->tsa)
  670. qe_clrbits_8(&utdm->si_regs->siglmr1_h, 0x1 << utdm->tdm_port);
  671. ucc_fast_disable(priv->uccf, COMM_DIR_RX | COMM_DIR_TX);
  672. free_irq(priv->ut_info->uf_info.irq, priv);
  673. netif_stop_queue(dev);
  674. netdev_reset_queue(dev);
  675. priv->hdlc_busy = 0;
  676. hdlc_close(dev);
  677. return 0;
  678. }
  679. static int ucc_hdlc_attach(struct net_device *dev, unsigned short encoding,
  680. unsigned short parity)
  681. {
  682. struct ucc_hdlc_private *priv = dev_to_hdlc(dev)->priv;
  683. if (encoding != ENCODING_NRZ &&
  684. encoding != ENCODING_NRZI)
  685. return -EINVAL;
  686. if (parity != PARITY_NONE &&
  687. parity != PARITY_CRC32_PR1_CCITT &&
  688. parity != PARITY_CRC16_PR0_CCITT &&
  689. parity != PARITY_CRC16_PR1_CCITT)
  690. return -EINVAL;
  691. priv->encoding = encoding;
  692. priv->parity = parity;
  693. return 0;
  694. }
  695. #ifdef CONFIG_PM
  696. static void store_clk_config(struct ucc_hdlc_private *priv)
  697. {
  698. struct qe_mux __iomem *qe_mux_reg = &qe_immr->qmx;
  699. /* store si clk */
  700. priv->cmxsi1cr_h = ioread32be(&qe_mux_reg->cmxsi1cr_h);
  701. priv->cmxsi1cr_l = ioread32be(&qe_mux_reg->cmxsi1cr_l);
  702. /* store si sync */
  703. priv->cmxsi1syr = ioread32be(&qe_mux_reg->cmxsi1syr);
  704. /* store ucc clk */
  705. memcpy_fromio(priv->cmxucr, qe_mux_reg->cmxucr, 4 * sizeof(u32));
  706. }
  707. static void resume_clk_config(struct ucc_hdlc_private *priv)
  708. {
  709. struct qe_mux __iomem *qe_mux_reg = &qe_immr->qmx;
  710. memcpy_toio(qe_mux_reg->cmxucr, priv->cmxucr, 4 * sizeof(u32));
  711. iowrite32be(priv->cmxsi1cr_h, &qe_mux_reg->cmxsi1cr_h);
  712. iowrite32be(priv->cmxsi1cr_l, &qe_mux_reg->cmxsi1cr_l);
  713. iowrite32be(priv->cmxsi1syr, &qe_mux_reg->cmxsi1syr);
  714. }
  715. static int uhdlc_suspend(struct device *dev)
  716. {
  717. struct ucc_hdlc_private *priv = dev_get_drvdata(dev);
  718. struct ucc_fast __iomem *uf_regs;
  719. if (!priv)
  720. return -EINVAL;
  721. if (!netif_running(priv->ndev))
  722. return 0;
  723. netif_device_detach(priv->ndev);
  724. napi_disable(&priv->napi);
  725. uf_regs = priv->uf_regs;
  726. /* backup gumr guemr*/
  727. priv->gumr = ioread32be(&uf_regs->gumr);
  728. priv->guemr = ioread8(&uf_regs->guemr);
  729. priv->ucc_pram_bak = kmalloc_obj(*priv->ucc_pram_bak);
  730. if (!priv->ucc_pram_bak)
  731. return -ENOMEM;
  732. /* backup HDLC parameter */
  733. memcpy_fromio(priv->ucc_pram_bak, priv->ucc_pram,
  734. sizeof(struct ucc_hdlc_param));
  735. /* store the clk configuration */
  736. store_clk_config(priv);
  737. /* save power */
  738. ucc_fast_disable(priv->uccf, COMM_DIR_RX | COMM_DIR_TX);
  739. return 0;
  740. }
  741. static int uhdlc_resume(struct device *dev)
  742. {
  743. struct ucc_hdlc_private *priv = dev_get_drvdata(dev);
  744. struct ucc_tdm *utdm;
  745. struct ucc_tdm_info *ut_info;
  746. struct ucc_fast __iomem *uf_regs;
  747. struct ucc_fast_private *uccf;
  748. struct ucc_fast_info *uf_info;
  749. int i;
  750. u32 cecr_subblock;
  751. u16 bd_status;
  752. if (!priv)
  753. return -EINVAL;
  754. if (!netif_running(priv->ndev))
  755. return 0;
  756. utdm = priv->utdm;
  757. ut_info = priv->ut_info;
  758. uf_info = &ut_info->uf_info;
  759. uf_regs = priv->uf_regs;
  760. uccf = priv->uccf;
  761. /* restore gumr guemr */
  762. iowrite8(priv->guemr, &uf_regs->guemr);
  763. iowrite32be(priv->gumr, &uf_regs->gumr);
  764. /* Set Virtual Fifo registers */
  765. iowrite16be(uf_info->urfs, &uf_regs->urfs);
  766. iowrite16be(uf_info->urfet, &uf_regs->urfet);
  767. iowrite16be(uf_info->urfset, &uf_regs->urfset);
  768. iowrite16be(uf_info->utfs, &uf_regs->utfs);
  769. iowrite16be(uf_info->utfet, &uf_regs->utfet);
  770. iowrite16be(uf_info->utftt, &uf_regs->utftt);
  771. /* utfb, urfb are offsets from MURAM base */
  772. iowrite32be(uccf->ucc_fast_tx_virtual_fifo_base_offset, &uf_regs->utfb);
  773. iowrite32be(uccf->ucc_fast_rx_virtual_fifo_base_offset, &uf_regs->urfb);
  774. /* Rx Tx and sync clock routing */
  775. resume_clk_config(priv);
  776. iowrite32be(uf_info->uccm_mask, &uf_regs->uccm);
  777. iowrite32be(0xffffffff, &uf_regs->ucce);
  778. ucc_fast_disable(priv->uccf, COMM_DIR_RX | COMM_DIR_TX);
  779. /* rebuild SIRAM */
  780. if (priv->tsa)
  781. ucc_tdm_init(priv->utdm, priv->ut_info);
  782. /* Write to QE CECR, UCCx channel to Stop Transmission */
  783. cecr_subblock = ucc_fast_get_qe_cr_subblock(uf_info->ucc_num);
  784. qe_issue_cmd(QE_STOP_TX, cecr_subblock,
  785. (u8)QE_CR_PROTOCOL_UNSPECIFIED, 0);
  786. /* Set UPSMR normal mode */
  787. iowrite32be(0, &uf_regs->upsmr);
  788. /* init parameter base */
  789. cecr_subblock = ucc_fast_get_qe_cr_subblock(uf_info->ucc_num);
  790. qe_issue_cmd(QE_ASSIGN_PAGE_TO_DEVICE, cecr_subblock,
  791. QE_CR_PROTOCOL_UNSPECIFIED, priv->ucc_pram_offset);
  792. priv->ucc_pram = (struct ucc_hdlc_param __iomem *)
  793. qe_muram_addr(priv->ucc_pram_offset);
  794. /* restore ucc parameter */
  795. memcpy_toio(priv->ucc_pram, priv->ucc_pram_bak,
  796. sizeof(struct ucc_hdlc_param));
  797. kfree(priv->ucc_pram_bak);
  798. /* rebuild BD entry */
  799. for (i = 0; i < RX_BD_RING_LEN; i++) {
  800. if (i < (RX_BD_RING_LEN - 1))
  801. bd_status = R_E_S | R_I_S;
  802. else
  803. bd_status = R_E_S | R_I_S | R_W_S;
  804. priv->rx_bd_base[i].status = cpu_to_be16(bd_status);
  805. priv->rx_bd_base[i].buf = cpu_to_be32(priv->dma_rx_addr + i * MAX_RX_BUF_LENGTH);
  806. }
  807. for (i = 0; i < TX_BD_RING_LEN; i++) {
  808. if (i < (TX_BD_RING_LEN - 1))
  809. bd_status = T_I_S | T_TC_S;
  810. else
  811. bd_status = T_I_S | T_TC_S | T_W_S;
  812. priv->tx_bd_base[i].status = cpu_to_be16(bd_status);
  813. priv->tx_bd_base[i].buf = cpu_to_be32(priv->dma_tx_addr + i * MAX_RX_BUF_LENGTH);
  814. }
  815. dma_wmb();
  816. /* if hdlc is busy enable TX and RX */
  817. if (priv->hdlc_busy == 1) {
  818. cecr_subblock = ucc_fast_get_qe_cr_subblock(
  819. priv->ut_info->uf_info.ucc_num);
  820. qe_issue_cmd(QE_INIT_TX_RX, cecr_subblock,
  821. (u8)QE_CR_PROTOCOL_UNSPECIFIED, 0);
  822. ucc_fast_enable(priv->uccf, COMM_DIR_RX | COMM_DIR_TX);
  823. /* Enable the TDM port */
  824. if (priv->tsa)
  825. qe_setbits_8(&utdm->si_regs->siglmr1_h, 0x1 << utdm->tdm_port);
  826. }
  827. napi_enable(&priv->napi);
  828. netif_device_attach(priv->ndev);
  829. return 0;
  830. }
  831. static const struct dev_pm_ops uhdlc_pm_ops = {
  832. .suspend = uhdlc_suspend,
  833. .resume = uhdlc_resume,
  834. .freeze = uhdlc_suspend,
  835. .thaw = uhdlc_resume,
  836. };
  837. #define HDLC_PM_OPS (&uhdlc_pm_ops)
  838. #else
  839. #define HDLC_PM_OPS NULL
  840. #endif
  841. static void uhdlc_tx_timeout(struct net_device *ndev, unsigned int txqueue)
  842. {
  843. netdev_err(ndev, "%s\n", __func__);
  844. }
  845. static const struct net_device_ops uhdlc_ops = {
  846. .ndo_open = uhdlc_open,
  847. .ndo_stop = uhdlc_close,
  848. .ndo_start_xmit = hdlc_start_xmit,
  849. .ndo_siocwandev = uhdlc_ioctl,
  850. .ndo_tx_timeout = uhdlc_tx_timeout,
  851. };
  852. static int hdlc_map_iomem(char *name, int init_flag, void __iomem **ptr)
  853. {
  854. struct device_node *np;
  855. struct platform_device *pdev;
  856. struct resource *res;
  857. static int siram_init_flag;
  858. int ret = 0;
  859. np = of_find_compatible_node(NULL, NULL, name);
  860. if (!np)
  861. return -EINVAL;
  862. pdev = of_find_device_by_node(np);
  863. if (!pdev) {
  864. pr_err("%pOFn: failed to lookup pdev\n", np);
  865. of_node_put(np);
  866. return -EINVAL;
  867. }
  868. of_node_put(np);
  869. res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
  870. if (!res) {
  871. ret = -EINVAL;
  872. goto error_put_device;
  873. }
  874. *ptr = ioremap(res->start, resource_size(res));
  875. if (!*ptr) {
  876. ret = -ENOMEM;
  877. goto error_put_device;
  878. }
  879. /* We've remapped the addresses, and we don't need the device any
  880. * more, so we should release it.
  881. */
  882. put_device(&pdev->dev);
  883. if (init_flag && siram_init_flag == 0) {
  884. memset_io(*ptr, 0, resource_size(res));
  885. siram_init_flag = 1;
  886. }
  887. return 0;
  888. error_put_device:
  889. put_device(&pdev->dev);
  890. return ret;
  891. }
  892. static int ucc_hdlc_probe(struct platform_device *pdev)
  893. {
  894. struct device_node *np = pdev->dev.of_node;
  895. struct ucc_hdlc_private *uhdlc_priv = NULL;
  896. struct ucc_tdm_info *ut_info;
  897. struct ucc_tdm *utdm = NULL;
  898. struct resource res;
  899. struct net_device *dev;
  900. hdlc_device *hdlc;
  901. int ucc_num;
  902. const char *sprop;
  903. int ret;
  904. u32 val;
  905. ret = of_property_read_u32_index(np, "cell-index", 0, &val);
  906. if (ret) {
  907. dev_err(&pdev->dev, "Invalid ucc property\n");
  908. return -ENODEV;
  909. }
  910. ucc_num = val - 1;
  911. if (ucc_num > (UCC_MAX_NUM - 1) || ucc_num < 0) {
  912. dev_err(&pdev->dev, ": Invalid UCC num\n");
  913. return -EINVAL;
  914. }
  915. memcpy(&utdm_info[ucc_num], &utdm_primary_info,
  916. sizeof(utdm_primary_info));
  917. ut_info = &utdm_info[ucc_num];
  918. ut_info->uf_info.ucc_num = ucc_num;
  919. sprop = of_get_property(np, "rx-clock-name", NULL);
  920. if (sprop) {
  921. ut_info->uf_info.rx_clock = qe_clock_source(sprop);
  922. if ((ut_info->uf_info.rx_clock < QE_CLK_NONE) ||
  923. (ut_info->uf_info.rx_clock > QE_CLK24)) {
  924. dev_err(&pdev->dev, "Invalid rx-clock-name property\n");
  925. return -EINVAL;
  926. }
  927. } else {
  928. dev_err(&pdev->dev, "Invalid rx-clock-name property\n");
  929. return -EINVAL;
  930. }
  931. sprop = of_get_property(np, "tx-clock-name", NULL);
  932. if (sprop) {
  933. ut_info->uf_info.tx_clock = qe_clock_source(sprop);
  934. if ((ut_info->uf_info.tx_clock < QE_CLK_NONE) ||
  935. (ut_info->uf_info.tx_clock > QE_CLK24)) {
  936. dev_err(&pdev->dev, "Invalid tx-clock-name property\n");
  937. return -EINVAL;
  938. }
  939. } else {
  940. dev_err(&pdev->dev, "Invalid tx-clock-name property\n");
  941. return -EINVAL;
  942. }
  943. ret = of_address_to_resource(np, 0, &res);
  944. if (ret)
  945. return -EINVAL;
  946. ut_info->uf_info.regs = res.start;
  947. ut_info->uf_info.irq = irq_of_parse_and_map(np, 0);
  948. uhdlc_priv = kzalloc_obj(*uhdlc_priv);
  949. if (!uhdlc_priv)
  950. return -ENOMEM;
  951. dev_set_drvdata(&pdev->dev, uhdlc_priv);
  952. uhdlc_priv->dev = &pdev->dev;
  953. uhdlc_priv->ut_info = ut_info;
  954. uhdlc_priv->tsa = of_property_read_bool(np, "fsl,tdm-interface");
  955. uhdlc_priv->loopback = of_property_read_bool(np, "fsl,ucc-internal-loopback");
  956. uhdlc_priv->hdlc_bus = of_property_read_bool(np, "fsl,hdlc-bus");
  957. if (uhdlc_priv->tsa == 1) {
  958. utdm = kzalloc_obj(*utdm);
  959. if (!utdm) {
  960. ret = -ENOMEM;
  961. dev_err(&pdev->dev, "No mem to alloc ucc tdm data\n");
  962. goto free_uhdlc_priv;
  963. }
  964. uhdlc_priv->utdm = utdm;
  965. ret = ucc_of_parse_tdm(np, utdm, ut_info);
  966. if (ret)
  967. goto free_utdm;
  968. ret = hdlc_map_iomem("fsl,t1040-qe-si", 0,
  969. (void __iomem **)&utdm->si_regs);
  970. if (ret)
  971. goto free_utdm;
  972. ret = hdlc_map_iomem("fsl,t1040-qe-siram", 1,
  973. (void __iomem **)&utdm->siram);
  974. if (ret)
  975. goto unmap_si_regs;
  976. }
  977. if (of_property_read_u16(np, "fsl,hmask", &uhdlc_priv->hmask))
  978. uhdlc_priv->hmask = DEFAULT_ADDR_MASK;
  979. ret = uhdlc_init(uhdlc_priv);
  980. if (ret) {
  981. dev_err(&pdev->dev, "Failed to init uhdlc\n");
  982. goto undo_uhdlc_init;
  983. }
  984. dev = alloc_hdlcdev(uhdlc_priv);
  985. if (!dev) {
  986. ret = -ENOMEM;
  987. pr_err("ucc_hdlc: unable to allocate memory\n");
  988. goto undo_uhdlc_init;
  989. }
  990. uhdlc_priv->ndev = dev;
  991. hdlc = dev_to_hdlc(dev);
  992. dev->tx_queue_len = 16;
  993. dev->netdev_ops = &uhdlc_ops;
  994. dev->watchdog_timeo = 2 * HZ;
  995. hdlc->attach = ucc_hdlc_attach;
  996. hdlc->xmit = ucc_hdlc_tx;
  997. netif_napi_add_weight(dev, &uhdlc_priv->napi, ucc_hdlc_poll, 32);
  998. if (register_hdlc_device(dev)) {
  999. ret = -ENOBUFS;
  1000. pr_err("ucc_hdlc: unable to register hdlc device\n");
  1001. goto free_dev;
  1002. }
  1003. return 0;
  1004. free_dev:
  1005. free_netdev(dev);
  1006. undo_uhdlc_init:
  1007. if (utdm)
  1008. iounmap(utdm->siram);
  1009. unmap_si_regs:
  1010. if (utdm)
  1011. iounmap(utdm->si_regs);
  1012. free_utdm:
  1013. if (uhdlc_priv->tsa)
  1014. kfree(utdm);
  1015. free_uhdlc_priv:
  1016. kfree(uhdlc_priv);
  1017. return ret;
  1018. }
  1019. static void ucc_hdlc_remove(struct platform_device *pdev)
  1020. {
  1021. struct ucc_hdlc_private *priv = dev_get_drvdata(&pdev->dev);
  1022. uhdlc_memclean(priv);
  1023. if (priv->utdm->si_regs) {
  1024. iounmap(priv->utdm->si_regs);
  1025. priv->utdm->si_regs = NULL;
  1026. }
  1027. if (priv->utdm->siram) {
  1028. iounmap(priv->utdm->siram);
  1029. priv->utdm->siram = NULL;
  1030. }
  1031. kfree(priv);
  1032. dev_info(&pdev->dev, "UCC based hdlc module removed\n");
  1033. }
  1034. static const struct of_device_id fsl_ucc_hdlc_of_match[] = {
  1035. {
  1036. .compatible = "fsl,ucc-hdlc",
  1037. },
  1038. {},
  1039. };
  1040. MODULE_DEVICE_TABLE(of, fsl_ucc_hdlc_of_match);
  1041. static struct platform_driver ucc_hdlc_driver = {
  1042. .probe = ucc_hdlc_probe,
  1043. .remove = ucc_hdlc_remove,
  1044. .driver = {
  1045. .name = DRV_NAME,
  1046. .pm = HDLC_PM_OPS,
  1047. .of_match_table = fsl_ucc_hdlc_of_match,
  1048. },
  1049. };
  1050. module_platform_driver(ucc_hdlc_driver);
  1051. MODULE_LICENSE("GPL");
  1052. MODULE_DESCRIPTION(DRV_DESC);