8250_bcm7271.c 33 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234
  1. // SPDX-License-Identifier: GPL-2.0-only
  2. /* Copyright (c) 2020, Broadcom */
  3. /*
  4. * 8250-core based driver for Broadcom ns16550a UARTs
  5. *
  6. * This driver uses the standard 8250 driver core but adds additional
  7. * optional features including the ability to use a baud rate clock
  8. * mux for more accurate high speed baud rate selection and also
  9. * an optional DMA engine.
  10. *
  11. */
  12. #include <linux/module.h>
  13. #include <linux/types.h>
  14. #include <linux/tty.h>
  15. #include <linux/errno.h>
  16. #include <linux/device.h>
  17. #include <linux/io.h>
  18. #include <linux/of.h>
  19. #include <linux/dma-mapping.h>
  20. #include <linux/tty_flip.h>
  21. #include <linux/delay.h>
  22. #include <linux/clk.h>
  23. #include <linux/debugfs.h>
  24. #include <linux/units.h>
  25. #include "8250.h"
  26. /* Register definitions for UART DMA block. Version 1.1 or later. */
  27. #define UDMA_ARB_RX 0x00
  28. #define UDMA_ARB_TX 0x04
  29. #define UDMA_ARB_REQ 0x00000001
  30. #define UDMA_ARB_GRANT 0x00000002
  31. #define UDMA_RX_REVISION 0x00
  32. #define UDMA_RX_REVISION_REQUIRED 0x00000101
  33. #define UDMA_RX_CTRL 0x04
  34. #define UDMA_RX_CTRL_BUF_CLOSE_MODE 0x00010000
  35. #define UDMA_RX_CTRL_MASK_WR_DONE 0x00008000
  36. #define UDMA_RX_CTRL_ENDIAN_OVERRIDE 0x00004000
  37. #define UDMA_RX_CTRL_ENDIAN 0x00002000
  38. #define UDMA_RX_CTRL_OE_IS_ERR 0x00001000
  39. #define UDMA_RX_CTRL_PE_IS_ERR 0x00000800
  40. #define UDMA_RX_CTRL_FE_IS_ERR 0x00000400
  41. #define UDMA_RX_CTRL_NUM_BUF_USED_MASK 0x000003c0
  42. #define UDMA_RX_CTRL_NUM_BUF_USED_SHIFT 6
  43. #define UDMA_RX_CTRL_BUF_CLOSE_CLK_SEL_SYS 0x00000020
  44. #define UDMA_RX_CTRL_BUF_CLOSE_ENA 0x00000010
  45. #define UDMA_RX_CTRL_TIMEOUT_CLK_SEL_SYS 0x00000008
  46. #define UDMA_RX_CTRL_TIMEOUT_ENA 0x00000004
  47. #define UDMA_RX_CTRL_ABORT 0x00000002
  48. #define UDMA_RX_CTRL_ENA 0x00000001
  49. #define UDMA_RX_STATUS 0x08
  50. #define UDMA_RX_STATUS_ACTIVE_BUF_MASK 0x0000000f
  51. #define UDMA_RX_TRANSFER_LEN 0x0c
  52. #define UDMA_RX_TRANSFER_TOTAL 0x10
  53. #define UDMA_RX_BUFFER_SIZE 0x14
  54. #define UDMA_RX_SRC_ADDR 0x18
  55. #define UDMA_RX_TIMEOUT 0x1c
  56. #define UDMA_RX_BUFFER_CLOSE 0x20
  57. #define UDMA_RX_BLOCKOUT_COUNTER 0x24
  58. #define UDMA_RX_BUF0_PTR_LO 0x28
  59. #define UDMA_RX_BUF0_PTR_HI 0x2c
  60. #define UDMA_RX_BUF0_STATUS 0x30
  61. #define UDMA_RX_BUFX_STATUS_OVERRUN_ERR 0x00000010
  62. #define UDMA_RX_BUFX_STATUS_FRAME_ERR 0x00000008
  63. #define UDMA_RX_BUFX_STATUS_PARITY_ERR 0x00000004
  64. #define UDMA_RX_BUFX_STATUS_CLOSE_EXPIRED 0x00000002
  65. #define UDMA_RX_BUFX_STATUS_DATA_RDY 0x00000001
  66. #define UDMA_RX_BUF0_DATA_LEN 0x34
  67. #define UDMA_RX_BUF1_PTR_LO 0x38
  68. #define UDMA_RX_BUF1_PTR_HI 0x3c
  69. #define UDMA_RX_BUF1_STATUS 0x40
  70. #define UDMA_RX_BUF1_DATA_LEN 0x44
  71. #define UDMA_TX_REVISION 0x00
  72. #define UDMA_TX_REVISION_REQUIRED 0x00000101
  73. #define UDMA_TX_CTRL 0x04
  74. #define UDMA_TX_CTRL_ENDIAN_OVERRIDE 0x00000080
  75. #define UDMA_TX_CTRL_ENDIAN 0x00000040
  76. #define UDMA_TX_CTRL_NUM_BUF_USED_MASK 0x00000030
  77. #define UDMA_TX_CTRL_NUM_BUF_USED_1 0x00000010
  78. #define UDMA_TX_CTRL_ABORT 0x00000002
  79. #define UDMA_TX_CTRL_ENA 0x00000001
  80. #define UDMA_TX_DST_ADDR 0x08
  81. #define UDMA_TX_BLOCKOUT_COUNTER 0x10
  82. #define UDMA_TX_TRANSFER_LEN 0x14
  83. #define UDMA_TX_TRANSFER_TOTAL 0x18
  84. #define UDMA_TX_STATUS 0x20
  85. #define UDMA_TX_BUF0_PTR_LO 0x24
  86. #define UDMA_TX_BUF0_PTR_HI 0x28
  87. #define UDMA_TX_BUF0_STATUS 0x2c
  88. #define UDMA_TX_BUFX_LAST 0x00000002
  89. #define UDMA_TX_BUFX_EMPTY 0x00000001
  90. #define UDMA_TX_BUF0_DATA_LEN 0x30
  91. #define UDMA_TX_BUF0_DATA_SENT 0x34
  92. #define UDMA_TX_BUF1_PTR_LO 0x38
  93. #define UDMA_INTR_STATUS 0x00
  94. #define UDMA_INTR_ARB_TX_GRANT 0x00040000
  95. #define UDMA_INTR_ARB_RX_GRANT 0x00020000
  96. #define UDMA_INTR_TX_ALL_EMPTY 0x00010000
  97. #define UDMA_INTR_TX_EMPTY_BUF1 0x00008000
  98. #define UDMA_INTR_TX_EMPTY_BUF0 0x00004000
  99. #define UDMA_INTR_TX_ABORT 0x00002000
  100. #define UDMA_INTR_TX_DONE 0x00001000
  101. #define UDMA_INTR_RX_ERROR 0x00000800
  102. #define UDMA_INTR_RX_TIMEOUT 0x00000400
  103. #define UDMA_INTR_RX_READY_BUF7 0x00000200
  104. #define UDMA_INTR_RX_READY_BUF6 0x00000100
  105. #define UDMA_INTR_RX_READY_BUF5 0x00000080
  106. #define UDMA_INTR_RX_READY_BUF4 0x00000040
  107. #define UDMA_INTR_RX_READY_BUF3 0x00000020
  108. #define UDMA_INTR_RX_READY_BUF2 0x00000010
  109. #define UDMA_INTR_RX_READY_BUF1 0x00000008
  110. #define UDMA_INTR_RX_READY_BUF0 0x00000004
  111. #define UDMA_INTR_RX_READY_MASK 0x000003fc
  112. #define UDMA_INTR_RX_READY_SHIFT 2
  113. #define UDMA_INTR_RX_ABORT 0x00000002
  114. #define UDMA_INTR_RX_DONE 0x00000001
  115. #define UDMA_INTR_SET 0x04
  116. #define UDMA_INTR_CLEAR 0x08
  117. #define UDMA_INTR_MASK_STATUS 0x0c
  118. #define UDMA_INTR_MASK_SET 0x10
  119. #define UDMA_INTR_MASK_CLEAR 0x14
  120. #define UDMA_RX_INTERRUPTS ( \
  121. UDMA_INTR_RX_ERROR | \
  122. UDMA_INTR_RX_TIMEOUT | \
  123. UDMA_INTR_RX_READY_BUF0 | \
  124. UDMA_INTR_RX_READY_BUF1 | \
  125. UDMA_INTR_RX_READY_BUF2 | \
  126. UDMA_INTR_RX_READY_BUF3 | \
  127. UDMA_INTR_RX_READY_BUF4 | \
  128. UDMA_INTR_RX_READY_BUF5 | \
  129. UDMA_INTR_RX_READY_BUF6 | \
  130. UDMA_INTR_RX_READY_BUF7 | \
  131. UDMA_INTR_RX_ABORT | \
  132. UDMA_INTR_RX_DONE)
  133. #define UDMA_RX_ERR_INTERRUPTS ( \
  134. UDMA_INTR_RX_ERROR | \
  135. UDMA_INTR_RX_TIMEOUT | \
  136. UDMA_INTR_RX_ABORT | \
  137. UDMA_INTR_RX_DONE)
  138. #define UDMA_TX_INTERRUPTS ( \
  139. UDMA_INTR_TX_ABORT | \
  140. UDMA_INTR_TX_DONE)
  141. #define UDMA_IS_RX_INTERRUPT(status) ((status) & UDMA_RX_INTERRUPTS)
  142. #define UDMA_IS_TX_INTERRUPT(status) ((status) & UDMA_TX_INTERRUPTS)
  143. /* Current devices have 8 sets of RX buffer registers */
  144. #define UDMA_RX_BUFS_COUNT 8
  145. #define UDMA_RX_BUFS_REG_OFFSET (UDMA_RX_BUF1_PTR_LO - UDMA_RX_BUF0_PTR_LO)
  146. #define UDMA_RX_BUFx_PTR_LO(x) (UDMA_RX_BUF0_PTR_LO + \
  147. ((x) * UDMA_RX_BUFS_REG_OFFSET))
  148. #define UDMA_RX_BUFx_PTR_HI(x) (UDMA_RX_BUF0_PTR_HI + \
  149. ((x) * UDMA_RX_BUFS_REG_OFFSET))
  150. #define UDMA_RX_BUFx_STATUS(x) (UDMA_RX_BUF0_STATUS + \
  151. ((x) * UDMA_RX_BUFS_REG_OFFSET))
  152. #define UDMA_RX_BUFx_DATA_LEN(x) (UDMA_RX_BUF0_DATA_LEN + \
  153. ((x) * UDMA_RX_BUFS_REG_OFFSET))
  154. /* Current devices have 2 sets of TX buffer registers */
  155. #define UDMA_TX_BUFS_COUNT 2
  156. #define UDMA_TX_BUFS_REG_OFFSET (UDMA_TX_BUF1_PTR_LO - UDMA_TX_BUF0_PTR_LO)
  157. #define UDMA_TX_BUFx_PTR_LO(x) (UDMA_TX_BUF0_PTR_LO + \
  158. ((x) * UDMA_TX_BUFS_REG_OFFSET))
  159. #define UDMA_TX_BUFx_PTR_HI(x) (UDMA_TX_BUF0_PTR_HI + \
  160. ((x) * UDMA_TX_BUFS_REG_OFFSET))
  161. #define UDMA_TX_BUFx_STATUS(x) (UDMA_TX_BUF0_STATUS + \
  162. ((x) * UDMA_TX_BUFS_REG_OFFSET))
  163. #define UDMA_TX_BUFx_DATA_LEN(x) (UDMA_TX_BUF0_DATA_LEN + \
  164. ((x) * UDMA_TX_BUFS_REG_OFFSET))
  165. #define UDMA_TX_BUFx_DATA_SENT(x) (UDMA_TX_BUF0_DATA_SENT + \
  166. ((x) * UDMA_TX_BUFS_REG_OFFSET))
  167. #define REGS_8250 0
  168. #define REGS_DMA_RX 1
  169. #define REGS_DMA_TX 2
  170. #define REGS_DMA_ISR 3
  171. #define REGS_DMA_ARB 4
  172. #define REGS_MAX 5
  173. #define TX_BUF_SIZE 4096
  174. #define RX_BUF_SIZE 4096
  175. #define RX_BUFS_COUNT 2
  176. static const u32 brcmstb_rate_table[] = {
  177. 81 * HZ_PER_MHZ,
  178. 108 * HZ_PER_MHZ,
  179. 64 * HZ_PER_MHZ, /* Actually 64285715 for some chips */
  180. 48 * HZ_PER_MHZ,
  181. };
  182. static const u32 brcmstb_rate_table_7278[] = {
  183. 81 * HZ_PER_MHZ,
  184. 108 * HZ_PER_MHZ,
  185. 0,
  186. 48 * HZ_PER_MHZ,
  187. };
  188. struct brcmuart_priv {
  189. int line;
  190. struct clk *baud_mux_clk;
  191. unsigned long default_mux_rate;
  192. u32 real_rates[ARRAY_SIZE(brcmstb_rate_table)];
  193. const u32 *rate_table;
  194. ktime_t char_wait;
  195. struct uart_port *up;
  196. struct hrtimer hrt;
  197. bool shutdown;
  198. bool dma_enabled;
  199. struct uart_8250_dma dma;
  200. void __iomem *regs[REGS_MAX];
  201. dma_addr_t rx_addr;
  202. void *rx_bufs;
  203. size_t rx_size;
  204. int rx_next_buf;
  205. dma_addr_t tx_addr;
  206. void *tx_buf;
  207. size_t tx_size;
  208. bool tx_running;
  209. bool rx_running;
  210. struct dentry *debugfs_dir;
  211. /* stats exposed through debugfs */
  212. u64 dma_rx_partial_buf;
  213. u64 dma_rx_full_buf;
  214. u32 rx_bad_timeout_late_char;
  215. u32 rx_bad_timeout_no_char;
  216. u32 rx_missing_close_timeout;
  217. u32 rx_err;
  218. u32 rx_timeout;
  219. u32 rx_abort;
  220. u32 saved_mctrl;
  221. };
  222. static struct dentry *brcmuart_debugfs_root;
  223. /*
  224. * Register access routines
  225. */
  226. static u32 udma_readl(struct brcmuart_priv *priv,
  227. int reg_type, int offset)
  228. {
  229. return readl(priv->regs[reg_type] + offset);
  230. }
  231. static void udma_writel(struct brcmuart_priv *priv,
  232. int reg_type, int offset, u32 value)
  233. {
  234. writel(value, priv->regs[reg_type] + offset);
  235. }
  236. static void udma_set(struct brcmuart_priv *priv,
  237. int reg_type, int offset, u32 bits)
  238. {
  239. void __iomem *reg = priv->regs[reg_type] + offset;
  240. u32 value;
  241. value = readl(reg);
  242. value |= bits;
  243. writel(value, reg);
  244. }
  245. static void udma_unset(struct brcmuart_priv *priv,
  246. int reg_type, int offset, u32 bits)
  247. {
  248. void __iomem *reg = priv->regs[reg_type] + offset;
  249. u32 value;
  250. value = readl(reg);
  251. value &= ~bits;
  252. writel(value, reg);
  253. }
  254. /*
  255. * The UART DMA engine hardware can be used by multiple UARTS, but
  256. * only one at a time. Sharing is not currently supported so
  257. * the first UART to request the DMA engine will get it and any
  258. * subsequent requests by other UARTS will fail.
  259. */
  260. static int brcmuart_arbitration(struct brcmuart_priv *priv, bool acquire)
  261. {
  262. u32 rx_grant;
  263. u32 tx_grant;
  264. int waits;
  265. int ret = 0;
  266. if (acquire) {
  267. udma_set(priv, REGS_DMA_ARB, UDMA_ARB_RX, UDMA_ARB_REQ);
  268. udma_set(priv, REGS_DMA_ARB, UDMA_ARB_TX, UDMA_ARB_REQ);
  269. waits = 1;
  270. while (1) {
  271. rx_grant = udma_readl(priv, REGS_DMA_ARB, UDMA_ARB_RX);
  272. tx_grant = udma_readl(priv, REGS_DMA_ARB, UDMA_ARB_TX);
  273. if (rx_grant & tx_grant & UDMA_ARB_GRANT)
  274. return 0;
  275. if (waits-- == 0)
  276. break;
  277. msleep(1);
  278. }
  279. ret = 1;
  280. }
  281. udma_unset(priv, REGS_DMA_ARB, UDMA_ARB_RX, UDMA_ARB_REQ);
  282. udma_unset(priv, REGS_DMA_ARB, UDMA_ARB_TX, UDMA_ARB_REQ);
  283. return ret;
  284. }
  285. static void brcmuart_init_dma_hardware(struct brcmuart_priv *priv)
  286. {
  287. u32 daddr;
  288. u32 value;
  289. int x;
  290. /* Start with all interrupts disabled */
  291. udma_writel(priv, REGS_DMA_ISR, UDMA_INTR_MASK_SET, 0xffffffff);
  292. udma_writel(priv, REGS_DMA_RX, UDMA_RX_BUFFER_SIZE, RX_BUF_SIZE);
  293. /*
  294. * Setup buffer close to happen when 32 character times have
  295. * elapsed since the last character was received.
  296. */
  297. udma_writel(priv, REGS_DMA_RX, UDMA_RX_BUFFER_CLOSE, 16*10*32);
  298. value = (RX_BUFS_COUNT << UDMA_RX_CTRL_NUM_BUF_USED_SHIFT)
  299. | UDMA_RX_CTRL_BUF_CLOSE_MODE
  300. | UDMA_RX_CTRL_BUF_CLOSE_ENA;
  301. udma_writel(priv, REGS_DMA_RX, UDMA_RX_CTRL, value);
  302. udma_writel(priv, REGS_DMA_RX, UDMA_RX_BLOCKOUT_COUNTER, 0);
  303. daddr = priv->rx_addr;
  304. for (x = 0; x < RX_BUFS_COUNT; x++) {
  305. /* Set RX transfer length to 0 for unknown */
  306. udma_writel(priv, REGS_DMA_RX, UDMA_RX_TRANSFER_LEN, 0);
  307. udma_writel(priv, REGS_DMA_RX, UDMA_RX_BUFx_PTR_LO(x),
  308. lower_32_bits(daddr));
  309. udma_writel(priv, REGS_DMA_RX, UDMA_RX_BUFx_PTR_HI(x),
  310. upper_32_bits(daddr));
  311. daddr += RX_BUF_SIZE;
  312. }
  313. daddr = priv->tx_addr;
  314. udma_writel(priv, REGS_DMA_TX, UDMA_TX_BUFx_PTR_LO(0),
  315. lower_32_bits(daddr));
  316. udma_writel(priv, REGS_DMA_TX, UDMA_TX_BUFx_PTR_HI(0),
  317. upper_32_bits(daddr));
  318. udma_writel(priv, REGS_DMA_TX, UDMA_TX_CTRL,
  319. UDMA_TX_CTRL_NUM_BUF_USED_1);
  320. /* clear all interrupts then enable them */
  321. udma_writel(priv, REGS_DMA_ISR, UDMA_INTR_CLEAR, 0xffffffff);
  322. udma_writel(priv, REGS_DMA_ISR, UDMA_INTR_MASK_CLEAR,
  323. UDMA_RX_INTERRUPTS | UDMA_TX_INTERRUPTS);
  324. }
  325. static void start_rx_dma(struct uart_8250_port *p)
  326. {
  327. struct brcmuart_priv *priv = p->port.private_data;
  328. int x;
  329. udma_unset(priv, REGS_DMA_RX, UDMA_RX_CTRL, UDMA_RX_CTRL_ENA);
  330. /* Clear the RX ready bit for all buffers */
  331. for (x = 0; x < RX_BUFS_COUNT; x++)
  332. udma_unset(priv, REGS_DMA_RX, UDMA_RX_BUFx_STATUS(x),
  333. UDMA_RX_BUFX_STATUS_DATA_RDY);
  334. /* always start with buffer 0 */
  335. udma_unset(priv, REGS_DMA_RX, UDMA_RX_STATUS,
  336. UDMA_RX_STATUS_ACTIVE_BUF_MASK);
  337. priv->rx_next_buf = 0;
  338. udma_set(priv, REGS_DMA_RX, UDMA_RX_CTRL, UDMA_RX_CTRL_ENA);
  339. priv->rx_running = true;
  340. }
  341. static void stop_rx_dma(struct uart_8250_port *p)
  342. {
  343. struct brcmuart_priv *priv = p->port.private_data;
  344. /* If RX is running, set the RX ABORT */
  345. if (priv->rx_running)
  346. udma_set(priv, REGS_DMA_RX, UDMA_RX_CTRL, UDMA_RX_CTRL_ABORT);
  347. }
  348. static int stop_tx_dma(struct uart_8250_port *p)
  349. {
  350. struct brcmuart_priv *priv = p->port.private_data;
  351. u32 value;
  352. /* If TX is running, set the TX ABORT */
  353. value = udma_readl(priv, REGS_DMA_TX, UDMA_TX_CTRL);
  354. if (value & UDMA_TX_CTRL_ENA)
  355. udma_set(priv, REGS_DMA_TX, UDMA_TX_CTRL, UDMA_TX_CTRL_ABORT);
  356. priv->tx_running = false;
  357. return 0;
  358. }
  359. /*
  360. * NOTE: printk's in this routine will hang the system if this is
  361. * the console tty
  362. */
  363. static int brcmuart_tx_dma(struct uart_8250_port *p)
  364. {
  365. struct brcmuart_priv *priv = p->port.private_data;
  366. struct tty_port *tport = &p->port.state->port;
  367. u32 tx_size;
  368. if (uart_tx_stopped(&p->port) || priv->tx_running ||
  369. kfifo_is_empty(&tport->xmit_fifo)) {
  370. return 0;
  371. }
  372. priv->dma.tx_err = 0;
  373. tx_size = uart_fifo_out(&p->port, priv->tx_buf, UART_XMIT_SIZE);
  374. if (kfifo_len(&tport->xmit_fifo) < WAKEUP_CHARS)
  375. uart_write_wakeup(&p->port);
  376. udma_writel(priv, REGS_DMA_TX, UDMA_TX_TRANSFER_LEN, tx_size);
  377. udma_writel(priv, REGS_DMA_TX, UDMA_TX_BUF0_DATA_LEN, tx_size);
  378. udma_unset(priv, REGS_DMA_TX, UDMA_TX_BUF0_STATUS, UDMA_TX_BUFX_EMPTY);
  379. udma_set(priv, REGS_DMA_TX, UDMA_TX_CTRL, UDMA_TX_CTRL_ENA);
  380. priv->tx_running = true;
  381. return 0;
  382. }
  383. static void brcmuart_rx_buf_done_isr(struct uart_port *up, int index)
  384. {
  385. struct brcmuart_priv *priv = up->private_data;
  386. struct tty_port *tty_port = &up->state->port;
  387. u32 status;
  388. u32 length;
  389. u32 copied;
  390. /* Make sure we're still in sync with the hardware */
  391. status = udma_readl(priv, REGS_DMA_RX, UDMA_RX_BUFx_STATUS(index));
  392. length = udma_readl(priv, REGS_DMA_RX, UDMA_RX_BUFx_DATA_LEN(index));
  393. if ((status & UDMA_RX_BUFX_STATUS_DATA_RDY) == 0) {
  394. dev_err(up->dev, "RX done interrupt but DATA_RDY not found\n");
  395. return;
  396. }
  397. if (status & (UDMA_RX_BUFX_STATUS_OVERRUN_ERR |
  398. UDMA_RX_BUFX_STATUS_FRAME_ERR |
  399. UDMA_RX_BUFX_STATUS_PARITY_ERR)) {
  400. if (status & UDMA_RX_BUFX_STATUS_OVERRUN_ERR) {
  401. up->icount.overrun++;
  402. dev_warn(up->dev, "RX OVERRUN Error\n");
  403. }
  404. if (status & UDMA_RX_BUFX_STATUS_FRAME_ERR) {
  405. up->icount.frame++;
  406. dev_warn(up->dev, "RX FRAMING Error\n");
  407. }
  408. if (status & UDMA_RX_BUFX_STATUS_PARITY_ERR) {
  409. up->icount.parity++;
  410. dev_warn(up->dev, "RX PARITY Error\n");
  411. }
  412. }
  413. copied = (u32)tty_insert_flip_string(
  414. tty_port,
  415. priv->rx_bufs + (index * RX_BUF_SIZE),
  416. length);
  417. if (copied != length) {
  418. dev_warn(up->dev, "Flip buffer overrun of %d bytes\n",
  419. length - copied);
  420. up->icount.overrun += length - copied;
  421. }
  422. up->icount.rx += length;
  423. if (status & UDMA_RX_BUFX_STATUS_CLOSE_EXPIRED)
  424. priv->dma_rx_partial_buf++;
  425. else if (length != RX_BUF_SIZE)
  426. /*
  427. * This is a bug in the controller that doesn't cause
  428. * any problems but will be fixed in the future.
  429. */
  430. priv->rx_missing_close_timeout++;
  431. else
  432. priv->dma_rx_full_buf++;
  433. tty_flip_buffer_push(tty_port);
  434. }
  435. static void brcmuart_rx_isr(struct uart_port *up, u32 rx_isr)
  436. {
  437. struct brcmuart_priv *priv = up->private_data;
  438. struct device *dev = up->dev;
  439. u32 rx_done_isr;
  440. u32 check_isr;
  441. rx_done_isr = (rx_isr & UDMA_INTR_RX_READY_MASK);
  442. while (rx_done_isr) {
  443. check_isr = UDMA_INTR_RX_READY_BUF0 << priv->rx_next_buf;
  444. if (check_isr & rx_done_isr) {
  445. brcmuart_rx_buf_done_isr(up, priv->rx_next_buf);
  446. } else {
  447. dev_err(dev,
  448. "RX buffer ready out of sequence, restarting RX DMA\n");
  449. start_rx_dma(up_to_u8250p(up));
  450. break;
  451. }
  452. if (rx_isr & UDMA_RX_ERR_INTERRUPTS) {
  453. if (rx_isr & UDMA_INTR_RX_ERROR)
  454. priv->rx_err++;
  455. if (rx_isr & UDMA_INTR_RX_TIMEOUT) {
  456. priv->rx_timeout++;
  457. dev_err(dev, "RX TIMEOUT Error\n");
  458. }
  459. if (rx_isr & UDMA_INTR_RX_ABORT)
  460. priv->rx_abort++;
  461. priv->rx_running = false;
  462. }
  463. /* If not ABORT, re-enable RX buffer */
  464. if (!(rx_isr & UDMA_INTR_RX_ABORT))
  465. udma_unset(priv, REGS_DMA_RX,
  466. UDMA_RX_BUFx_STATUS(priv->rx_next_buf),
  467. UDMA_RX_BUFX_STATUS_DATA_RDY);
  468. rx_done_isr &= ~check_isr;
  469. priv->rx_next_buf++;
  470. if (priv->rx_next_buf == RX_BUFS_COUNT)
  471. priv->rx_next_buf = 0;
  472. }
  473. }
  474. static void brcmuart_tx_isr(struct uart_port *up, u32 isr)
  475. {
  476. struct brcmuart_priv *priv = up->private_data;
  477. struct device *dev = up->dev;
  478. struct uart_8250_port *port_8250 = up_to_u8250p(up);
  479. struct tty_port *tport = &port_8250->port.state->port;
  480. if (isr & UDMA_INTR_TX_ABORT) {
  481. if (priv->tx_running)
  482. dev_err(dev, "Unexpected TX_ABORT interrupt\n");
  483. return;
  484. }
  485. priv->tx_running = false;
  486. if (!kfifo_is_empty(&tport->xmit_fifo) && !uart_tx_stopped(up))
  487. brcmuart_tx_dma(port_8250);
  488. }
  489. static irqreturn_t brcmuart_isr(int irq, void *dev_id)
  490. {
  491. struct uart_port *up = dev_id;
  492. struct device *dev = up->dev;
  493. struct brcmuart_priv *priv = up->private_data;
  494. unsigned long flags;
  495. u32 interrupts;
  496. u32 rval;
  497. u32 tval;
  498. interrupts = udma_readl(priv, REGS_DMA_ISR, UDMA_INTR_STATUS);
  499. if (interrupts == 0)
  500. return IRQ_NONE;
  501. uart_port_lock_irqsave(up, &flags);
  502. /* Clear all interrupts */
  503. udma_writel(priv, REGS_DMA_ISR, UDMA_INTR_CLEAR, interrupts);
  504. rval = UDMA_IS_RX_INTERRUPT(interrupts);
  505. if (rval)
  506. brcmuart_rx_isr(up, rval);
  507. tval = UDMA_IS_TX_INTERRUPT(interrupts);
  508. if (tval)
  509. brcmuart_tx_isr(up, tval);
  510. if ((rval | tval) == 0)
  511. dev_warn(dev, "Spurious interrupt: 0x%x\n", interrupts);
  512. uart_port_unlock_irqrestore(up, flags);
  513. return IRQ_HANDLED;
  514. }
  515. static int brcmuart_startup(struct uart_port *port)
  516. {
  517. int res;
  518. struct uart_8250_port *up = up_to_u8250p(port);
  519. struct brcmuart_priv *priv = up->port.private_data;
  520. priv->shutdown = false;
  521. /*
  522. * prevent serial8250_do_startup() from allocating non-existent
  523. * DMA resources
  524. */
  525. up->dma = NULL;
  526. res = serial8250_do_startup(port);
  527. if (!priv->dma_enabled)
  528. return res;
  529. /*
  530. * Disable the Receive Data Interrupt because the DMA engine
  531. * will handle this.
  532. *
  533. * Synchronize UART_IER access against the console.
  534. */
  535. uart_port_lock_irq(port);
  536. up->ier &= ~UART_IER_RDI;
  537. serial_port_out(port, UART_IER, up->ier);
  538. uart_port_unlock_irq(port);
  539. priv->tx_running = false;
  540. priv->dma.rx_dma = NULL;
  541. priv->dma.tx_dma = brcmuart_tx_dma;
  542. up->dma = &priv->dma;
  543. brcmuart_init_dma_hardware(priv);
  544. start_rx_dma(up);
  545. return res;
  546. }
  547. static void brcmuart_shutdown(struct uart_port *port)
  548. {
  549. struct uart_8250_port *up = up_to_u8250p(port);
  550. struct brcmuart_priv *priv = up->port.private_data;
  551. unsigned long flags;
  552. uart_port_lock_irqsave(port, &flags);
  553. priv->shutdown = true;
  554. if (priv->dma_enabled) {
  555. stop_rx_dma(up);
  556. stop_tx_dma(up);
  557. /* disable all interrupts */
  558. udma_writel(priv, REGS_DMA_ISR, UDMA_INTR_MASK_SET,
  559. UDMA_RX_INTERRUPTS | UDMA_TX_INTERRUPTS);
  560. }
  561. /*
  562. * prevent serial8250_do_shutdown() from trying to free
  563. * DMA resources that we never alloc'd for this driver.
  564. */
  565. up->dma = NULL;
  566. uart_port_unlock_irqrestore(port, flags);
  567. serial8250_do_shutdown(port);
  568. }
  569. /*
  570. * Not all clocks run at the exact specified rate, so set each requested
  571. * rate and then get the actual rate.
  572. */
  573. static void init_real_clk_rates(struct device *dev, struct brcmuart_priv *priv)
  574. {
  575. int x;
  576. int rc;
  577. priv->default_mux_rate = clk_get_rate(priv->baud_mux_clk);
  578. for (x = 0; x < ARRAY_SIZE(priv->real_rates); x++) {
  579. if (priv->rate_table[x] == 0) {
  580. priv->real_rates[x] = 0;
  581. continue;
  582. }
  583. rc = clk_set_rate(priv->baud_mux_clk, priv->rate_table[x]);
  584. if (rc) {
  585. dev_err(dev, "Error selecting BAUD MUX clock for %u\n",
  586. priv->rate_table[x]);
  587. priv->real_rates[x] = priv->rate_table[x];
  588. } else {
  589. priv->real_rates[x] = clk_get_rate(priv->baud_mux_clk);
  590. }
  591. }
  592. clk_set_rate(priv->baud_mux_clk, priv->default_mux_rate);
  593. }
  594. static u32 find_quot(struct device *dev, u32 freq, u32 baud, u32 *percent)
  595. {
  596. u32 quot;
  597. u32 rate;
  598. u64 hires_rate;
  599. u64 hires_baud;
  600. u64 hires_err;
  601. rate = freq / 16;
  602. quot = DIV_ROUND_CLOSEST(rate, baud);
  603. if (!quot)
  604. return 0;
  605. /* increase resolution to get xx.xx percent */
  606. hires_rate = div_u64((u64)rate * 10000, (u64)quot);
  607. hires_baud = (u64)baud * 10000;
  608. /* get the delta */
  609. if (hires_rate > hires_baud)
  610. hires_err = (hires_rate - hires_baud);
  611. else
  612. hires_err = (hires_baud - hires_rate);
  613. *percent = (unsigned long)DIV_ROUND_CLOSEST_ULL(hires_err, baud);
  614. dev_dbg(dev, "Baud rate: %u, MUX Clk: %u, Error: %u.%u%%\n",
  615. baud, freq, *percent / 100, *percent % 100);
  616. return quot;
  617. }
  618. static void set_clock_mux(struct uart_port *up, struct brcmuart_priv *priv,
  619. u32 baud)
  620. {
  621. u32 percent;
  622. u32 best_percent = UINT_MAX;
  623. u32 quot;
  624. u32 freq;
  625. u32 best_quot = 1;
  626. u32 best_freq = 0;
  627. int rc;
  628. int i;
  629. int real_baud;
  630. /* If the Baud Mux Clock was not specified, just return */
  631. if (priv->baud_mux_clk == NULL)
  632. return;
  633. /* Try default_mux_rate first */
  634. quot = find_quot(up->dev, priv->default_mux_rate, baud, &percent);
  635. if (quot) {
  636. best_percent = percent;
  637. best_freq = priv->default_mux_rate;
  638. best_quot = quot;
  639. }
  640. /* If more than 1% error, find the closest match for specified baud */
  641. if (best_percent > 100) {
  642. for (i = 0; i < ARRAY_SIZE(priv->real_rates); i++) {
  643. freq = priv->real_rates[i];
  644. if (freq == 0 || freq == priv->default_mux_rate)
  645. continue;
  646. quot = find_quot(up->dev, freq, baud, &percent);
  647. if (!quot)
  648. continue;
  649. if (percent < best_percent) {
  650. best_percent = percent;
  651. best_freq = freq;
  652. best_quot = quot;
  653. }
  654. }
  655. }
  656. if (!best_freq) {
  657. dev_err(up->dev, "Error, %d BAUD rate is too fast.\n", baud);
  658. return;
  659. }
  660. rc = clk_set_rate(priv->baud_mux_clk, best_freq);
  661. if (rc)
  662. dev_err(up->dev, "Error selecting BAUD MUX clock\n");
  663. /* Error over 3 percent will cause data errors */
  664. if (best_percent > 300)
  665. dev_err(up->dev, "Error, baud: %d has %u.%u%% error\n",
  666. baud, percent / 100, percent % 100);
  667. real_baud = best_freq / 16 / best_quot;
  668. dev_dbg(up->dev, "Selecting BAUD MUX rate: %u\n", best_freq);
  669. dev_dbg(up->dev, "Requested baud: %u, Actual baud: %u\n",
  670. baud, real_baud);
  671. /* calc nanoseconds for 1.5 characters time at the given baud rate */
  672. i = NSEC_PER_SEC / real_baud / 10;
  673. i += (i / 2);
  674. priv->char_wait = ns_to_ktime(i);
  675. up->uartclk = best_freq;
  676. }
  677. static void brcmstb_set_termios(struct uart_port *up,
  678. struct ktermios *termios,
  679. const struct ktermios *old)
  680. {
  681. struct uart_8250_port *p8250 = up_to_u8250p(up);
  682. struct brcmuart_priv *priv = up->private_data;
  683. if (priv->dma_enabled)
  684. stop_rx_dma(p8250);
  685. set_clock_mux(up, priv, tty_termios_baud_rate(termios));
  686. serial8250_do_set_termios(up, termios, old);
  687. if (p8250->mcr & UART_MCR_AFE)
  688. p8250->port.status |= UPSTAT_AUTOCTS;
  689. if (priv->dma_enabled)
  690. start_rx_dma(p8250);
  691. }
  692. static int brcmuart_handle_irq(struct uart_port *p)
  693. {
  694. unsigned int iir = serial_port_in(p, UART_IIR);
  695. struct brcmuart_priv *priv = p->private_data;
  696. struct uart_8250_port *up = up_to_u8250p(p);
  697. unsigned int status;
  698. unsigned long flags;
  699. unsigned int ier;
  700. unsigned int mcr;
  701. int handled = 0;
  702. /*
  703. * There's a bug in some 8250 cores where we get a timeout
  704. * interrupt but there is no data ready.
  705. */
  706. if (((iir & UART_IIR_ID) == UART_IIR_RX_TIMEOUT) && !(priv->shutdown)) {
  707. uart_port_lock_irqsave(p, &flags);
  708. status = serial_port_in(p, UART_LSR);
  709. if ((status & UART_LSR_DR) == 0) {
  710. ier = serial_port_in(p, UART_IER);
  711. /*
  712. * if Receive Data Interrupt is enabled and
  713. * we're uing hardware flow control, deassert
  714. * RTS and wait for any chars in the pipeline to
  715. * arrive and then check for DR again.
  716. */
  717. if ((ier & UART_IER_RDI) && (up->mcr & UART_MCR_AFE)) {
  718. ier &= ~(UART_IER_RLSI | UART_IER_RDI);
  719. serial_port_out(p, UART_IER, ier);
  720. mcr = serial_port_in(p, UART_MCR);
  721. mcr &= ~UART_MCR_RTS;
  722. serial_port_out(p, UART_MCR, mcr);
  723. hrtimer_start(&priv->hrt, priv->char_wait,
  724. HRTIMER_MODE_REL);
  725. } else {
  726. serial_port_in(p, UART_RX);
  727. }
  728. handled = 1;
  729. }
  730. uart_port_unlock_irqrestore(p, flags);
  731. if (handled)
  732. return 1;
  733. }
  734. return serial8250_handle_irq(p, iir);
  735. }
  736. static enum hrtimer_restart brcmuart_hrtimer_func(struct hrtimer *t)
  737. {
  738. struct brcmuart_priv *priv = container_of(t, struct brcmuart_priv, hrt);
  739. struct uart_port *p = priv->up;
  740. struct uart_8250_port *up = up_to_u8250p(p);
  741. unsigned int status;
  742. unsigned long flags;
  743. if (priv->shutdown)
  744. return HRTIMER_NORESTART;
  745. uart_port_lock_irqsave(p, &flags);
  746. status = serial_port_in(p, UART_LSR);
  747. /*
  748. * If a character did not arrive after the timeout, clear the false
  749. * receive timeout.
  750. */
  751. if ((status & UART_LSR_DR) == 0) {
  752. serial_port_in(p, UART_RX);
  753. priv->rx_bad_timeout_no_char++;
  754. } else {
  755. priv->rx_bad_timeout_late_char++;
  756. }
  757. /* re-enable receive unless upper layer has disabled it */
  758. if ((up->ier & (UART_IER_RLSI | UART_IER_RDI)) ==
  759. (UART_IER_RLSI | UART_IER_RDI)) {
  760. status = serial_port_in(p, UART_IER);
  761. status |= (UART_IER_RLSI | UART_IER_RDI);
  762. serial_port_out(p, UART_IER, status);
  763. status = serial_port_in(p, UART_MCR);
  764. status |= UART_MCR_RTS;
  765. serial_port_out(p, UART_MCR, status);
  766. }
  767. uart_port_unlock_irqrestore(p, flags);
  768. return HRTIMER_NORESTART;
  769. }
  770. static const struct of_device_id brcmuart_dt_ids[] = {
  771. {
  772. .compatible = "brcm,bcm7278-uart",
  773. .data = brcmstb_rate_table_7278,
  774. },
  775. {
  776. .compatible = "brcm,bcm7271-uart",
  777. .data = brcmstb_rate_table,
  778. },
  779. {},
  780. };
  781. MODULE_DEVICE_TABLE(of, brcmuart_dt_ids);
  782. static void brcmuart_free_bufs(struct device *dev, struct brcmuart_priv *priv)
  783. {
  784. if (priv->rx_bufs)
  785. dma_free_coherent(dev, priv->rx_size, priv->rx_bufs,
  786. priv->rx_addr);
  787. if (priv->tx_buf)
  788. dma_free_coherent(dev, priv->tx_size, priv->tx_buf,
  789. priv->tx_addr);
  790. }
  791. static void brcmuart_throttle(struct uart_port *port)
  792. {
  793. struct brcmuart_priv *priv = port->private_data;
  794. udma_writel(priv, REGS_DMA_ISR, UDMA_INTR_MASK_SET, UDMA_RX_INTERRUPTS);
  795. }
  796. static void brcmuart_unthrottle(struct uart_port *port)
  797. {
  798. struct brcmuart_priv *priv = port->private_data;
  799. udma_writel(priv, REGS_DMA_ISR, UDMA_INTR_MASK_CLEAR,
  800. UDMA_RX_INTERRUPTS);
  801. }
  802. static int debugfs_stats_show(struct seq_file *s, void *unused)
  803. {
  804. struct brcmuart_priv *priv = s->private;
  805. seq_printf(s, "rx_err:\t\t\t\t%u\n",
  806. priv->rx_err);
  807. seq_printf(s, "rx_timeout:\t\t\t%u\n",
  808. priv->rx_timeout);
  809. seq_printf(s, "rx_abort:\t\t\t%u\n",
  810. priv->rx_abort);
  811. seq_printf(s, "rx_bad_timeout_late_char:\t%u\n",
  812. priv->rx_bad_timeout_late_char);
  813. seq_printf(s, "rx_bad_timeout_no_char:\t\t%u\n",
  814. priv->rx_bad_timeout_no_char);
  815. seq_printf(s, "rx_missing_close_timeout:\t%u\n",
  816. priv->rx_missing_close_timeout);
  817. if (priv->dma_enabled) {
  818. seq_printf(s, "dma_rx_partial_buf:\t\t%llu\n",
  819. priv->dma_rx_partial_buf);
  820. seq_printf(s, "dma_rx_full_buf:\t\t%llu\n",
  821. priv->dma_rx_full_buf);
  822. }
  823. return 0;
  824. }
  825. DEFINE_SHOW_ATTRIBUTE(debugfs_stats);
  826. static void brcmuart_init_debugfs(struct brcmuart_priv *priv,
  827. const char *device)
  828. {
  829. priv->debugfs_dir = debugfs_create_dir(device, brcmuart_debugfs_root);
  830. debugfs_create_file("stats", 0444, priv->debugfs_dir, priv,
  831. &debugfs_stats_fops);
  832. }
  833. static int brcmuart_probe(struct platform_device *pdev)
  834. {
  835. struct resource *regs;
  836. const struct of_device_id *of_id = NULL;
  837. struct uart_8250_port *new_port;
  838. struct device *dev = &pdev->dev;
  839. struct brcmuart_priv *priv;
  840. struct clk *baud_mux_clk;
  841. struct uart_8250_port up;
  842. void __iomem *membase = NULL;
  843. resource_size_t mapbase = 0;
  844. int ret;
  845. int x;
  846. int dma_irq;
  847. static const char * const reg_names[REGS_MAX] = {
  848. "uart", "dma_rx", "dma_tx", "dma_intr2", "dma_arb"
  849. };
  850. priv = devm_kzalloc(dev, sizeof(struct brcmuart_priv),
  851. GFP_KERNEL);
  852. if (!priv)
  853. return -ENOMEM;
  854. of_id = of_match_node(brcmuart_dt_ids, dev->of_node);
  855. if (!of_id || !of_id->data)
  856. priv->rate_table = brcmstb_rate_table;
  857. else
  858. priv->rate_table = of_id->data;
  859. for (x = 0; x < REGS_MAX; x++) {
  860. regs = platform_get_resource_byname(pdev, IORESOURCE_MEM,
  861. reg_names[x]);
  862. if (!regs)
  863. break;
  864. priv->regs[x] = devm_ioremap(dev, regs->start,
  865. resource_size(regs));
  866. if (!priv->regs[x])
  867. return -ENOMEM;
  868. if (x == REGS_8250) {
  869. mapbase = regs->start;
  870. membase = priv->regs[x];
  871. }
  872. }
  873. /* We should have just the uart base registers or all the registers */
  874. if (x != 1 && x != REGS_MAX)
  875. return dev_err_probe(dev, -EINVAL, "%s registers not specified\n",
  876. reg_names[x]);
  877. /* if the DMA registers were specified, try to enable DMA */
  878. if (x > REGS_DMA_RX) {
  879. if (brcmuart_arbitration(priv, 1) == 0) {
  880. u32 txrev = 0;
  881. u32 rxrev = 0;
  882. txrev = udma_readl(priv, REGS_DMA_RX, UDMA_RX_REVISION);
  883. rxrev = udma_readl(priv, REGS_DMA_TX, UDMA_TX_REVISION);
  884. if ((txrev >= UDMA_TX_REVISION_REQUIRED) &&
  885. (rxrev >= UDMA_RX_REVISION_REQUIRED)) {
  886. /* Enable the use of the DMA hardware */
  887. priv->dma_enabled = true;
  888. } else {
  889. brcmuart_arbitration(priv, 0);
  890. dev_err(dev,
  891. "Unsupported DMA Hardware Revision\n");
  892. }
  893. } else {
  894. dev_err(dev,
  895. "Timeout arbitrating for UART DMA hardware\n");
  896. }
  897. }
  898. dev_dbg(dev, "DMA is %senabled\n", priv->dma_enabled ? "" : "not ");
  899. memset(&up, 0, sizeof(up));
  900. up.port.type = PORT_BCM7271;
  901. up.port.dev = dev;
  902. up.port.mapbase = mapbase;
  903. up.port.membase = membase;
  904. up.port.handle_irq = brcmuart_handle_irq;
  905. up.port.flags = UPF_BOOT_AUTOCONF | UPF_FIXED_PORT | UPF_FIXED_TYPE;
  906. up.port.private_data = priv;
  907. ret = uart_read_port_properties(&up.port);
  908. if (ret)
  909. goto release_dma;
  910. up.port.regshift = 2;
  911. up.port.iotype = device_is_big_endian(dev) ? UPIO_MEM32BE : UPIO_MEM32;
  912. /* See if a Baud clock has been specified */
  913. baud_mux_clk = devm_clk_get_optional_enabled(dev, "sw_baud");
  914. ret = PTR_ERR_OR_ZERO(baud_mux_clk);
  915. if (ret)
  916. goto release_dma;
  917. if (baud_mux_clk) {
  918. dev_dbg(dev, "BAUD MUX clock found\n");
  919. priv->baud_mux_clk = baud_mux_clk;
  920. init_real_clk_rates(dev, priv);
  921. up.port.uartclk = priv->default_mux_rate;
  922. } else {
  923. dev_dbg(dev, "BAUD MUX clock not specified\n");
  924. }
  925. /* setup HR timer */
  926. hrtimer_setup(&priv->hrt, brcmuart_hrtimer_func, CLOCK_MONOTONIC, HRTIMER_MODE_ABS);
  927. up.port.shutdown = brcmuart_shutdown;
  928. up.port.startup = brcmuart_startup;
  929. up.port.throttle = brcmuart_throttle;
  930. up.port.unthrottle = brcmuart_unthrottle;
  931. up.port.set_termios = brcmstb_set_termios;
  932. if (priv->dma_enabled) {
  933. priv->rx_size = RX_BUF_SIZE * RX_BUFS_COUNT;
  934. priv->rx_bufs = dma_alloc_coherent(dev,
  935. priv->rx_size,
  936. &priv->rx_addr, GFP_KERNEL);
  937. if (!priv->rx_bufs) {
  938. ret = -ENOMEM;
  939. goto err;
  940. }
  941. priv->tx_size = UART_XMIT_SIZE;
  942. priv->tx_buf = dma_alloc_coherent(dev,
  943. priv->tx_size,
  944. &priv->tx_addr, GFP_KERNEL);
  945. if (!priv->tx_buf) {
  946. ret = -ENOMEM;
  947. goto err;
  948. }
  949. }
  950. ret = serial8250_register_8250_port(&up);
  951. if (ret < 0) {
  952. dev_err_probe(dev, ret, "unable to register 8250 port\n");
  953. goto err;
  954. }
  955. priv->line = ret;
  956. new_port = serial8250_get_port(ret);
  957. priv->up = &new_port->port;
  958. if (priv->dma_enabled) {
  959. dma_irq = platform_get_irq_byname(pdev, "dma");
  960. if (dma_irq < 0) {
  961. ret = dev_err_probe(dev, dma_irq, "no IRQ resource info\n");
  962. goto err1;
  963. }
  964. ret = devm_request_irq(dev, dma_irq, brcmuart_isr,
  965. IRQF_SHARED, "uart DMA irq", &new_port->port);
  966. if (ret) {
  967. dev_err_probe(dev, ret, "unable to register IRQ handler\n");
  968. goto err1;
  969. }
  970. }
  971. platform_set_drvdata(pdev, priv);
  972. brcmuart_init_debugfs(priv, dev_name(&pdev->dev));
  973. return 0;
  974. err1:
  975. serial8250_unregister_port(priv->line);
  976. err:
  977. brcmuart_free_bufs(dev, priv);
  978. release_dma:
  979. if (priv->dma_enabled)
  980. brcmuart_arbitration(priv, 0);
  981. return ret;
  982. }
  983. static void brcmuart_remove(struct platform_device *pdev)
  984. {
  985. struct brcmuart_priv *priv = platform_get_drvdata(pdev);
  986. debugfs_remove_recursive(priv->debugfs_dir);
  987. hrtimer_cancel(&priv->hrt);
  988. serial8250_unregister_port(priv->line);
  989. brcmuart_free_bufs(&pdev->dev, priv);
  990. if (priv->dma_enabled)
  991. brcmuart_arbitration(priv, 0);
  992. }
  993. static int __maybe_unused brcmuart_suspend(struct device *dev)
  994. {
  995. struct brcmuart_priv *priv = dev_get_drvdata(dev);
  996. struct uart_8250_port *up = serial8250_get_port(priv->line);
  997. struct uart_port *port = &up->port;
  998. unsigned long flags;
  999. /*
  1000. * This will prevent resume from enabling RTS before the
  1001. * baud rate has been restored.
  1002. */
  1003. uart_port_lock_irqsave(port, &flags);
  1004. priv->saved_mctrl = port->mctrl;
  1005. port->mctrl &= ~TIOCM_RTS;
  1006. uart_port_unlock_irqrestore(port, flags);
  1007. serial8250_suspend_port(priv->line);
  1008. clk_disable_unprepare(priv->baud_mux_clk);
  1009. return 0;
  1010. }
  1011. static int __maybe_unused brcmuart_resume(struct device *dev)
  1012. {
  1013. struct brcmuart_priv *priv = dev_get_drvdata(dev);
  1014. struct uart_8250_port *up = serial8250_get_port(priv->line);
  1015. struct uart_port *port = &up->port;
  1016. unsigned long flags;
  1017. int ret;
  1018. ret = clk_prepare_enable(priv->baud_mux_clk);
  1019. if (ret)
  1020. dev_err(dev, "Error enabling BAUD MUX clock\n");
  1021. /*
  1022. * The hardware goes back to it's default after suspend
  1023. * so get the "clk" back in sync.
  1024. */
  1025. ret = clk_set_rate(priv->baud_mux_clk, priv->default_mux_rate);
  1026. if (ret)
  1027. dev_err(dev, "Error restoring default BAUD MUX clock\n");
  1028. if (priv->dma_enabled) {
  1029. if (brcmuart_arbitration(priv, 1)) {
  1030. dev_err(dev, "Timeout arbitrating for DMA hardware on resume\n");
  1031. return(-EBUSY);
  1032. }
  1033. brcmuart_init_dma_hardware(priv);
  1034. start_rx_dma(serial8250_get_port(priv->line));
  1035. }
  1036. serial8250_resume_port(priv->line);
  1037. if (priv->saved_mctrl & TIOCM_RTS) {
  1038. /* Restore RTS */
  1039. uart_port_lock_irqsave(port, &flags);
  1040. port->mctrl |= TIOCM_RTS;
  1041. port->ops->set_mctrl(port, port->mctrl);
  1042. uart_port_unlock_irqrestore(port, flags);
  1043. }
  1044. return 0;
  1045. }
  1046. static const struct dev_pm_ops brcmuart_dev_pm_ops = {
  1047. SET_SYSTEM_SLEEP_PM_OPS(brcmuart_suspend, brcmuart_resume)
  1048. };
  1049. static struct platform_driver brcmuart_platform_driver = {
  1050. .driver = {
  1051. .name = "bcm7271-uart",
  1052. .pm = &brcmuart_dev_pm_ops,
  1053. .of_match_table = brcmuart_dt_ids,
  1054. },
  1055. .probe = brcmuart_probe,
  1056. .remove = brcmuart_remove,
  1057. };
  1058. static int __init brcmuart_init(void)
  1059. {
  1060. int ret;
  1061. brcmuart_debugfs_root = debugfs_create_dir(
  1062. brcmuart_platform_driver.driver.name, NULL);
  1063. ret = platform_driver_register(&brcmuart_platform_driver);
  1064. if (ret) {
  1065. debugfs_remove_recursive(brcmuart_debugfs_root);
  1066. return ret;
  1067. }
  1068. return 0;
  1069. }
  1070. module_init(brcmuart_init);
  1071. static void __exit brcmuart_deinit(void)
  1072. {
  1073. platform_driver_unregister(&brcmuart_platform_driver);
  1074. debugfs_remove_recursive(brcmuart_debugfs_root);
  1075. }
  1076. module_exit(brcmuart_deinit);
  1077. MODULE_AUTHOR("Al Cooper");
  1078. MODULE_DESCRIPTION("Broadcom NS16550A compatible serial port driver");
  1079. MODULE_LICENSE("GPL v2");