platform_uart.c 77 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575
  1. /*
  2. * (C) Copyright 2008
  3. * MediaTek <www.mediatek.com>
  4. * MingHsien Hsieh <minghsien.hsieh@mediatek.com>
  5. *
  6. * MTK UART Driver
  7. *
  8. * This program is free software; you can redistribute it and/or modify
  9. * it under the terms of the GNU General Public License as published by
  10. * the Free Software Foundation; either version 2 of the License, or
  11. * (at your option) any later version.
  12. *
  13. * This program is distributed in the hope that it will be useful,
  14. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  15. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  16. * GNU General Public License for more details.
  17. */
  18. /*---------------------------------------------------------------------------*/
  19. #include <linux/tty.h>
  20. #include <linux/tty_flip.h>
  21. #include <linux/serial_core.h>
  22. #include <linux/serial.h>
  23. #include <mt_idle.h>
  24. #include <mt_clk_id.h>
  25. #if defined(CONFIG_MTK_CLKMGR) && !defined(CONFIG_MTK_FPGA)
  26. #include <mach/mt_clkmgr.h>
  27. #endif /* defined(CONFIG_MTK_CLKMGR) && !defined (CONFIG_MTK_FPGA)*/
  28. #if defined(CONFIG_MTK_LEGACY) && !defined(CONFIG_MTK_FPGA)
  29. #include <mt-plat/mt_gpio.h>
  30. /* #include <cust_gpio_usage.h> */
  31. #endif /* defined(CONFIG_MTK_LEGACY) && !defined (CONFIG_MTK_FPGA)*/
  32. #include <linux/delay.h>
  33. #include "include/mtk_uart.h"
  34. #include "include/mtk_uart_intf.h"
  35. #include <linux/of_irq.h>
  36. #include <linux/of_address.h>
  37. #if !defined(CONFIG_MTK_LEGACY)
  38. struct pinctrl *ppinctrl_uart[UART_NR];
  39. /* pinctrl-names from dtsi.GPIO operations: rx set, rx clear, tx set, tx clear */
  40. char *uart_gpio_cmds[UART_NR][4] = {
  41. {"uart0_rx_set", "uart0_rx_clear", "uart0_tx_set", "uart0_tx_clear"},
  42. {"uart1_rx_set", "uart1_rx_clear", "uart1_tx_set", "uart1_tx_clear"},
  43. #if !defined(CONFIG_MTK_FPGA)
  44. {"uart2_rx_set", "uart2_rx_clear", "uart2_tx_set", "uart2_tx_clear"},
  45. {"uart3_rx_set", "uart3_rx_clear", "uart3_tx_set", "uart3_tx_clear"},
  46. #endif /* !defined (CONFIG_MTK_FPGA) */
  47. };
  48. void set_uart_pinctrl(int idx, struct pinctrl *ppinctrl)
  49. {
  50. pr_debug("[UART%d][CCF]%s(%d,%p), UART_NR:%d\n", idx, __func__, idx, ppinctrl, UART_NR);
  51. if (idx >= UART_NR)
  52. return;
  53. ppinctrl_uart[idx] = ppinctrl;
  54. }
  55. #endif /* !defined(CONFIG_MTK_LEGACY) */
  56. #if !defined(CONFIG_MTK_CLKMGR) && !defined(CONFIG_MTK_FPGA)
  57. /* struct clk *clk_uart_main; */
  58. struct clk *clk_uart_dma;
  59. void set_uart_dma_clk(int idx, struct clk *dma_clk)
  60. {
  61. pr_debug("[UART%d][CCF]enabled clk_uart%d_dma:%p\n", idx, idx, dma_clk);
  62. clk_uart_dma = dma_clk;
  63. }
  64. #endif /* !defined(CONFIG_MTK_LEGACY) && !defined (CONFIG_MTK_FPGA)*/
  65. #ifdef ENABLE_RAW_DATA_DUMP
  66. static void save_tx_raw_data(struct mtk_uart *uart, void *addr);
  67. static void reset_rx_raw_data(struct mtk_uart *uart);
  68. static void save_rx_raw_data(struct mtk_uart *uart, const unsigned char *chars, size_t size);
  69. volatile unsigned int stop_update = 0;
  70. unsigned int curr_record = -1;
  71. volatile unsigned int curr_idx;
  72. #define RECORD_NUMBER 10
  73. #define RECORD_LENGTH 1032
  74. unsigned char uart_history[RECORD_NUMBER][RECORD_LENGTH];
  75. unsigned int uart_history_cnt[RECORD_NUMBER];
  76. spinlock_t tx_history_lock, rx_history_lock;
  77. unsigned int curr_rx_record = -1;
  78. volatile unsigned int curr_rx_idx;
  79. unsigned char uart_rx_history[RECORD_NUMBER][RECORD_LENGTH];
  80. unsigned int uart_rx_history_cnt[RECORD_NUMBER];
  81. #endif
  82. /*---------------------------------------------------------------------------*/
  83. static struct mtk_uart_setting mtk_uart_default_settings[] = {
  84. {
  85. .tx_mode = UART_TX_VFIFO_DMA, .rx_mode = UART_RX_VFIFO_DMA, .dma_mode = UART_DMA_MODE_0,
  86. .tx_trig = UART_FCR_TXFIFO_1B_TRI, .rx_trig = UART_FCR_RXFIFO_12B_TRI,
  87. /* .uart_base = AP_UART0_BASE, .irq_num = UART0_IRQ_BIT_ID, .irq_sen = MT_LEVEL_SENSITIVE, */
  88. #if defined(CONFIG_MTK_CLKMGR) && !defined(CONFIG_MTK_FPGA)
  89. .set_bit = PDN_FOR_UART1, .clr_bit = PDN_FOR_UART1, .pll_id = PDN_FOR_UART1,
  90. #endif
  91. .sysrq = FALSE, .hw_flow = TRUE, .vff = TRUE,
  92. },
  93. {
  94. .tx_mode = UART_TX_VFIFO_DMA, .rx_mode = UART_RX_VFIFO_DMA, .dma_mode = UART_DMA_MODE_0,
  95. .tx_trig = UART_FCR_TXFIFO_1B_TRI, .rx_trig = UART_FCR_RXFIFO_12B_TRI,
  96. /* .uart_base = AP_UART1_BASE, .irq_num = UART1_IRQ_BIT_ID, .irq_sen = MT_LEVEL_SENSITIVE, */
  97. #if defined(CONFIG_MTK_CLKMGR) && !defined(CONFIG_MTK_FPGA)
  98. .set_bit = PDN_FOR_UART2, .clr_bit = PDN_FOR_UART2, .pll_id = PDN_FOR_UART2,
  99. #endif
  100. .sysrq = FALSE, .hw_flow = TRUE, .vff = TRUE,
  101. },
  102. {
  103. .tx_mode = UART_TX_VFIFO_DMA, .rx_mode = UART_RX_VFIFO_DMA, .dma_mode = UART_DMA_MODE_0,
  104. .tx_trig = UART_FCR_TXFIFO_1B_TRI, .rx_trig = UART_FCR_RXFIFO_12B_TRI,
  105. /* .uart_base = AP_UART2_BASE, .irq_num = UART2_IRQ_BIT_ID, .irq_sen = MT_LEVEL_SENSITIVE, */
  106. #if defined(CONFIG_MTK_CLKMGR) && !defined(CONFIG_MTK_FPGA)
  107. .set_bit = PDN_FOR_UART3, .clr_bit = PDN_FOR_UART3, .pll_id = PDN_FOR_UART3,
  108. #endif
  109. .sysrq = FALSE, .hw_flow = FALSE, .vff = TRUE, /* UART3 */
  110. },
  111. {
  112. .tx_mode = UART_NON_DMA, .rx_mode = UART_NON_DMA, .dma_mode = UART_DMA_MODE_0,
  113. .tx_trig = UART_FCR_TXFIFO_1B_TRI, .rx_trig = UART_FCR_RXFIFO_12B_TRI,
  114. /* .uart_base = AP_UART3_BASE, .irq_num = UART3_IRQ_BIT_ID, .irq_sen = MT_LEVEL_SENSITIVE, */
  115. #if defined(CONFIG_MTK_CLKMGR) && !defined(CONFIG_MTK_FPGA)
  116. .set_bit = PDN_FOR_UART4, .clr_bit = PDN_FOR_UART4, .pll_id = PDN_FOR_UART4,
  117. #endif
  118. .sysrq = FALSE, .hw_flow = FALSE, .vff = FALSE, /* UART4 */
  119. },
  120. #ifndef CONFIG_VERSION_D2
  121. {
  122. .tx_mode = UART_NON_DMA, .rx_mode = UART_NON_DMA, .dma_mode = UART_DMA_MODE_0,
  123. .tx_trig = UART_FCR_TXFIFO_1B_TRI, .rx_trig = UART_FCR_RXFIFO_12B_TRI,
  124. /* .uart_base = AP_UART4_BASE, .irq_num = UART3_IRQ_BIT_ID, .irq_sen = MT_LEVEL_SENSITIVE, */
  125. #if defined(CONFIG_MTK_CLKMGR) && !defined(CONFIG_MTK_FPGA)
  126. .set_bit = PDN_FOR_UART5, .clr_bit = PDN_FOR_UART5, .pll_id = PDN_FOR_UART5,
  127. #endif
  128. .sysrq = FALSE, .hw_flow = FALSE, .vff = FALSE, /* UART5 */
  129. },
  130. #endif /* CONFIG_VERSION_D2 */
  131. };
  132. /*---------------------------------------------------------------------------*/
  133. static unsigned long mtk_uart_evt_mask[] = {
  134. DBG_EVT_NONE,
  135. DBG_EVT_NONE,
  136. DBG_EVT_NONE,
  137. DBG_EVT_NONE,
  138. #ifndef CONFIG_VERSION_D2
  139. DBG_EVT_NONE,
  140. #endif /* CONFIG_VERSION_D2 */
  141. };
  142. /*---------------------------------------------------------------------------*/
  143. static unsigned long mtk_uart_lsr_status[] = {
  144. 0, /* UART1 */
  145. 0, /* UART2 */
  146. 0, /* UART3 */
  147. 0, /* UART4 */
  148. #ifndef CONFIG_VERSION_D2
  149. 0, /* UART5 */
  150. #endif /* CONFIG_VERSION_D2 */
  151. };
  152. /*---------------------------------------------------------------------------*/
  153. #if defined(CONFIG_MTK_SERIAL_MODEM_TEST)
  154. /* #define HW_MISC (CONFIG_BASE+0x0020) // mtk does NOT has this register */
  155. /* unsigned char mask[UART_NR] = { 1 << 3, 1 << 4, 1 << 5, 1 << 6}; */
  156. static unsigned int modem_uart[UART_NR] = { 1, 0, 0, 1
  157. #ifndef CONFIG_VERSION_D2
  158. , 1
  159. #endif /* CONFIG_VERSION_D2 */
  160. };
  161. #endif
  162. /*---------------------------------------------------------------------------*/
  163. /* uart control blocks */
  164. static struct mtk_uart mtk_uarts[UART_NR];
  165. /*---------------------------------------------------------------------------*/
  166. struct mtk_uart_setting *get_uart_default_settings(int idx)
  167. {
  168. return &mtk_uart_default_settings[idx];
  169. }
  170. /*---------------------------------------------------------------------------*/
  171. void set_uart_default_settings(int idx)
  172. {
  173. struct device_node *node = NULL;
  174. unsigned int irq_info[3] = { 0, 0, 0 };
  175. u32 phys_base;
  176. switch (idx) {
  177. case 0:
  178. node = of_find_node_by_name(NULL, "apuart0");
  179. break;
  180. case 1:
  181. node = of_find_node_by_name(NULL, "apuart1");
  182. break;
  183. case 2:
  184. node = of_find_node_by_name(NULL, "apuart2");
  185. break;
  186. case 3:
  187. node = of_find_node_by_name(NULL, "apuart3");
  188. break;
  189. #ifndef CONFIG_VERSION_D2
  190. case 4:
  191. node = of_find_node_by_name(NULL, "apuart4");
  192. break;
  193. #endif /* CONFIG_VERSION_2 */
  194. default:
  195. break;
  196. }
  197. if (node) {
  198. /* iomap registers */
  199. mtk_uart_default_settings[idx].uart_base = (unsigned long)of_iomap(node, 0);
  200. /* get IRQ ID */
  201. mtk_uart_default_settings[idx].irq_num = irq_of_parse_and_map(node, 0);
  202. }
  203. /* phys registers */
  204. if (of_property_read_u32_index(node, "reg", 0, &phys_base))
  205. pr_debug("[UART%d] get phys regs from DTS fail!!\n", idx);
  206. mtk_uart_default_settings[idx].uart_phys_base = phys_base;
  207. /* get the interrupt line behaviour */
  208. if (of_property_read_u32_array(node, "interrupts", irq_info, ARRAY_SIZE(irq_info)))
  209. pr_debug("[UART%d] get irq flags from DTS fail!!\n", idx);
  210. mtk_uart_default_settings[idx].irq_flags = (unsigned long)irq_info[2];
  211. pr_debug("[UART%d] phys_regs=0x%lx, regs=0x%lx, irq=%d, irq_flags=0x%lx\n", idx,
  212. mtk_uart_default_settings[idx].uart_phys_base, mtk_uart_default_settings[idx].uart_base,
  213. mtk_uart_default_settings[idx].irq_num, mtk_uart_default_settings[idx].irq_flags);
  214. }
  215. /*---------------------------------------------------------------------------*/
  216. void *get_apdma_uart0_base(void)
  217. {
  218. struct device_node *node = NULL;
  219. void *base;
  220. node = of_find_node_by_name(NULL, "apuart0");
  221. base = of_iomap(node, 1);
  222. pr_debug("[UART] apdma uart0 base=0x%p\n", base);
  223. return base;
  224. }
  225. /*---------------------------------------------------------------------------*/
  226. unsigned int get_uart_vfifo_irq_id(int idx)
  227. {
  228. struct device_node *node = NULL;
  229. unsigned int irq_id;
  230. switch (idx) {
  231. case 0:
  232. case 1:
  233. node = of_find_node_by_name(NULL, "apuart0");
  234. break;
  235. case 2:
  236. case 3:
  237. node = of_find_node_by_name(NULL, "apuart1");
  238. break;
  239. case 4:
  240. case 5:
  241. node = of_find_node_by_name(NULL, "apuart2");
  242. break;
  243. case 6:
  244. case 7:
  245. node = of_find_node_by_name(NULL, "apuart3");
  246. break;
  247. #ifndef CONFIG_VERSION_D2
  248. case 8:
  249. case 9:
  250. node = of_find_node_by_name(NULL, "apuart4");
  251. break;
  252. #endif /* CONFIG_VERSION_2 */
  253. default:
  254. break;
  255. }
  256. if (idx % 2 == 0)
  257. irq_id = irq_of_parse_and_map(node, 1);
  258. else
  259. irq_id = irq_of_parse_and_map(node, 2);
  260. pr_debug("[UART_DMA%d] irq=%d\n", idx, irq_id);
  261. return irq_id;
  262. }
  263. /*---------------------------------------------------------------------------*/
  264. unsigned long get_uart_evt_mask(int idx)
  265. {
  266. return mtk_uart_evt_mask[idx];
  267. }
  268. /*---------------------------------------------------------------------------*/
  269. void set_uart_evt_mask(int idx, int value)
  270. {
  271. mtk_uart_evt_mask[idx] = value;
  272. }
  273. /*---------------------------------------------------------------------------*/
  274. unsigned long get_uart_lsr_status(int idx)
  275. {
  276. return mtk_uart_lsr_status[idx];
  277. }
  278. /*---------------------------------------------------------------------------*/
  279. void set_uart_lsr_status(int idx, int value)
  280. {
  281. mtk_uart_lsr_status[idx] = value;
  282. }
  283. /*---------------------------------------------------------------------------*/
  284. unsigned int get_modem_uart(int idx)
  285. {
  286. #if defined(CONFIG_MTK_SERIAL_MODEM_TEST)
  287. return modem_uart[idx];
  288. #else
  289. return 0;
  290. #endif
  291. }
  292. /*---------------------------------------------------------------------------*/
  293. #ifdef UART_FCR_USING_SW_BACK_UP
  294. static inline void __write_fcr_register(struct mtk_uart *uart, u32 data)
  295. {
  296. unsigned long base = uart->base;
  297. uart->fcr_back_up = data & (~(3 << 1));
  298. reg_sync_writel(data, UART_FCR);
  299. }
  300. static inline void sync_write_fcr_register(struct mtk_uart *uart, u32 data)
  301. {
  302. unsigned long base = uart->base;
  303. uart->fcr_back_up = data & (~(3 << 1));
  304. reg_sync_writel(data, UART_FCR);
  305. }
  306. static inline u32 __read_fcr_register(struct mtk_uart *uart)
  307. {
  308. return uart->fcr_back_up;
  309. }
  310. static inline void __set_fcr_register(struct mtk_uart *uart, u32 mask)
  311. {
  312. unsigned long base = uart->base;
  313. u32 new_setting = (uart->fcr_back_up) | mask;
  314. uart->fcr_back_up = new_setting & (~(3 << 1));
  315. reg_sync_writel(new_setting, UART_FCR);
  316. }
  317. static inline void __clr_fcr_register(struct mtk_uart *uart, u32 mask)
  318. {
  319. unsigned long base = uart->base;
  320. u32 new_setting = (uart->fcr_back_up) & (~mask);
  321. uart->fcr_back_up = new_setting & (~(3 << 1));
  322. reg_sync_writel(new_setting, UART_FCR);
  323. }
  324. #else
  325. static inline void __write_fcr_register(struct mtk_uart *uart, u32 data)
  326. {
  327. unsigned long base = uart->base;
  328. reg_sync_writel(data, UART_FCR);
  329. }
  330. static inline void sync_write_fcr_register(struct mtk_uart *uart, u32 data)
  331. {
  332. unsigned long base = uart->base;
  333. reg_sync_writel(data, UART_FCR);
  334. }
  335. static inline u32 __read_fcr_register(struct mtk_uart *uart)
  336. {
  337. unsigned long base = uart->base;
  338. return UART_READ32(UART_FCR_RD);
  339. }
  340. static inline void __set_fcr_register(struct mtk_uart *uart, u32 mask)
  341. {
  342. unsigned long base = uart->base;
  343. u32 new_setting = UART_READ32(UART_FCR_RD) | mask;
  344. reg_sync_writel(new_setting, UART_FCR);
  345. }
  346. static inline void __clr_fcr_register(struct mtk_uart *uart, u32 mask)
  347. {
  348. unsigned long base = uart->base;
  349. u32 new_setting = UART_READ32(UART_FCR_RD) & (~mask);
  350. reg_sync_writel(new_setting, UART_FCR);
  351. }
  352. #endif /* End of UART_FCR_USING_SW_BACK_UP */
  353. /*---------------------------------------------------------------------------*/
  354. static inline void dump_reg(struct mtk_uart *uart, const char *caller)
  355. {
  356. #ifdef ENABLE_DEBUG
  357. unsigned long flags;
  358. unsigned long base = uart->base;
  359. u32 lcr = UART_READ32(UART_LCR);
  360. u32 uratefix = UART_READ32(UART_RATE_FIX_AD);
  361. u32 uhspeed = UART_READ32(UART_HIGHSPEED);
  362. u32 usamplecnt = UART_READ32(UART_SAMPLE_COUNT);
  363. u32 usamplepnt = UART_READ32(UART_SAMPLE_POINT);
  364. u32 udll, udlh;
  365. u32 ier = UART_READ32(UART_IER);
  366. spin_lock_irqsave(&mtk_console_lock, flags);
  367. reg_sync_writel((lcr | UART_LCR_DLAB), UART_LCR);
  368. udll = UART_READ32(UART_DLL);
  369. udlh = UART_READ32(UART_DLH);
  370. mb(); /* make sure the DLL/DLH have been read */
  371. reg_sync_writel(lcr, UART_LCR); /* DLAB end */
  372. spin_unlock_irqrestore(&mtk_console_lock, flags);
  373. mb();
  374. MSG(CFG, "%s: RATEFIX(%02X); HSPEED(%02X); CNT(%02X); PNT(%02X); DLH(%02X), DLL(%02X), IER(%02X)\n",
  375. caller, uratefix, uhspeed, usamplecnt, usamplepnt, udlh, udll, ier);
  376. #endif
  377. }
  378. void dump_uart_reg(void)
  379. {
  380. struct mtk_uart *uart;
  381. unsigned int i;
  382. unsigned long base;
  383. u32 lsr, escape_en;
  384. for (i = 0; i < UART_NR; i++) {
  385. uart = &mtk_uarts[i];
  386. base = uart->base;
  387. if (uart->poweron_count > 0) {
  388. lsr = UART_READ32(UART_LSR);
  389. escape_en = UART_READ32(UART_ESCAPE_EN);
  390. pr_debug("[UART%d] LSR=0x%x ESCAPE_EN=0x%x\n", uart->nport, lsr, escape_en);
  391. } else
  392. pr_debug("[UART%d] clock is off\n", uart->nport);
  393. }
  394. }
  395. /*---------------------------------------------------------------------------*/
  396. void mtk_uart_console_setting_switch(struct mtk_uart *uart)
  397. {
  398. #ifdef CONFIG_MTK_SERIAL_CONSOLE
  399. /* if(uart->nport == 0){ */ /* UART1 as log port */
  400. uart->setting->tx_mode = UART_NON_DMA;
  401. uart->setting->rx_mode = UART_NON_DMA;
  402. uart->tx_mode = UART_NON_DMA;
  403. uart->rx_mode = UART_NON_DMA;
  404. mtk_uart_enable_dpidle(uart);
  405. /* } */
  406. #endif
  407. }
  408. /******************************************************************************
  409. * Virtual FIFO implementation
  410. ******************************************************************************/
  411. #if defined(ENABLE_VFIFO)
  412. /*---------------------------------------------------------------------------*/
  413. int mtk_uart_vfifo_enable(struct mtk_uart *uart, struct mtk_uart_vfifo *vfifo)
  414. {
  415. unsigned long base = uart->base;
  416. if (!vfifo) {
  417. MSG(ERR, "null\n");
  418. return -EINVAL;
  419. } else if (vfifo->type != UART_RX_VFIFO && vfifo->type != UART_TX_VFIFO) {
  420. MSG(ERR, "unknown type: %d\n", vfifo->type);
  421. return -EINVAL;
  422. }
  423. /*
  424. * NOTE: For FCR is a read only register reason,
  425. * special read/write/set/clr function need to use
  426. */
  427. /*UART_SET_BITS(UART_FCR_FIFO_INIT, UART_FCR);
  428. UART_CLR_BITS(UART_FCR_DMA1, UART_FCR); */
  429. __set_fcr_register(uart, UART_FCR_FIFO_INIT);
  430. __clr_fcr_register(uart, UART_FCR_DMA1);
  431. if (vfifo->type == UART_RX_VFIFO)
  432. UART_SET_BITS(UART_RX_DMA_EN | UART_TO_CNT_AUTORST, UART_DMA_EN);
  433. else if (vfifo->type == UART_TX_VFIFO)
  434. UART_SET_BITS(UART_TX_DMA_EN, UART_DMA_EN);
  435. mb();
  436. return 0;
  437. }
  438. /*---------------------------------------------------------------------------*/
  439. int mtk_uart_vfifo_disable(struct mtk_uart *uart, struct mtk_uart_vfifo *vfifo)
  440. {
  441. unsigned long base = uart->base;
  442. if (!vfifo) {
  443. MSG(ERR, "null\n");
  444. return -EINVAL;
  445. } else if (vfifo->type != UART_RX_VFIFO && vfifo->type != UART_TX_VFIFO) {
  446. MSG(ERR, "unknown type: %d\n", vfifo->type);
  447. return -EINVAL;
  448. } else if (vfifo->type == UART_RX_VFIFO) {
  449. UART_CLR_BITS(UART_RX_DMA_EN | UART_TO_CNT_AUTORST, UART_DMA_EN);
  450. } else if (vfifo->type == UART_TX_VFIFO) {
  451. UART_CLR_BITS(UART_TX_DMA_EN, UART_DMA_EN);
  452. }
  453. mb();
  454. return 0;
  455. }
  456. /*---------------------------------------------------------------------------*/
  457. void mtk_uart_vfifo_enable_tx_intr(struct mtk_uart *uart)
  458. {
  459. reg_sync_writel(VFF_TX_INT_EN_B, VFF_INT_EN(uart->tx_vfifo->base));
  460. }
  461. /*---------------------------------------------------------------------------*/
  462. void mtk_uart_vfifo_disable_tx_intr(struct mtk_uart *uart)
  463. {
  464. reg_sync_writel(0x00, VFF_INT_EN(uart->tx_vfifo->base));
  465. }
  466. /*---------------------------------------------------------------------------*/
  467. void mtk_uart_vfifo_clear_tx_intr(struct mtk_uart_vfifo *vfifo)
  468. {
  469. reg_sync_writel(0x00, VFF_INT_FLAG(vfifo->base));
  470. }
  471. /*---------------------------------------------------------------------------*/
  472. void mtk_uart_vfifo_clear_rx_intr(struct mtk_uart_vfifo *vfifo)
  473. {
  474. reg_sync_writel(0x03, VFF_INT_FLAG(vfifo->base));
  475. }
  476. /*---------------------------------------------------------------------------*/
  477. void mtk_uart_vfifo_enable_rx_intr(struct mtk_uart *uart)
  478. {
  479. reg_sync_writel(VFF_RX_INT_EN0_B | VFF_RX_INT_EN1_B, VFF_INT_EN(uart->rx_vfifo->base));
  480. }
  481. /*---------------------------------------------------------------------------*/
  482. void mtk_uart_vfifo_disable_rx_intr(struct mtk_uart *uart)
  483. {
  484. reg_sync_writel(0x00, VFF_INT_EN(uart->rx_vfifo->base));
  485. }
  486. /*---------------------------------------------------------------------------*/
  487. int mtk_uart_vfifo_is_full(struct mtk_uart_vfifo *vfifo)
  488. {
  489. return (UART_READ32(VFF_LEFT_SIZE(vfifo->base)) <= 16) ? (1) : (0);
  490. }
  491. /*---------------------------------------------------------------------------*/
  492. int mtk_uart_vfifo_is_empty(struct mtk_uart_vfifo *vfifo)
  493. {
  494. return (UART_READ32(VFF_VALID_SIZE(vfifo->base)) == 0) ? (1) : (0);
  495. }
  496. /*---------------------------------------------------------------------------*/
  497. void mtk_uart_vfifo_write_byte(struct mtk_uart *uart, unsigned int byte)
  498. {
  499. void *addr, *base = uart->tx_vfifo->base;
  500. unsigned int wpt = UART_READ32(VFF_WPT(base));
  501. addr = (void *)((wpt & 0xffff) + uart->tx_vfifo->addr);
  502. reg_sync_writeb((unsigned char)byte, addr);
  503. mb(); /* make sure write point updated after VFIFO written. */
  504. #ifdef ENABLE_RAW_DATA_DUMP
  505. save_tx_raw_data(uart, addr);
  506. #endif
  507. if ((wpt & 0xffff) == (UART_READ32(VFF_LEN(base)) - 1))
  508. reg_sync_writel((~wpt) & 0x10000, VFF_WPT(base));
  509. else
  510. reg_sync_writel(wpt + 1, VFF_WPT(base));
  511. }
  512. /*---------------------------------------------------------------------------*/
  513. unsigned int mtk_uart_vfifo_read_byte(struct mtk_uart *uart)
  514. {
  515. void *addr, *base = uart->rx_vfifo->base;
  516. unsigned int ch;
  517. addr = (void *)(UART_READ16(VFF_RPT(base)) + uart->rx_vfifo->addr);
  518. ch = UART_READ8(addr);
  519. mb(); /* make sure read point updated after VFIFO read. */
  520. if (UART_READ16(VFF_RPT(base)) == (UART_READ32(VFF_LEN(base)) - 1))
  521. reg_sync_writel(~(UART_READ32(VFF_RPT(base))) & 0x10000, VFF_RPT(base));
  522. else
  523. reg_sync_writel(UART_READ32(VFF_RPT(base)) + 1, VFF_RPT(base));
  524. return ch;
  525. }
  526. /*---------------------------------------------------------------------------*/
  527. int mtk_uart_vfifo_get_counts(struct mtk_uart_vfifo *vfifo)
  528. {
  529. return UART_READ32(VFF_VALID_SIZE(vfifo->base));
  530. }
  531. /*---------------------------------------------------------------------------*/
  532. void mtk_uart_tx_vfifo_flush(struct mtk_uart *uart, int timeout)
  533. {
  534. struct mtk_uart_dma *dma;
  535. struct mtk_uart_vfifo *vfifo;
  536. void *base;
  537. #ifdef ENABE_HRTIMER_FLUSH
  538. if (uart) {
  539. dma = &uart->dma_tx;
  540. vfifo = dma->vfifo;
  541. base = vfifo->base;
  542. if (UART_READ32(VFF_FLUSH(base)) == 0) {
  543. reg_sync_writel(VFF_FLUSH_B, VFF_FLUSH(base));
  544. if (!timeout)
  545. hrtimer_try_to_cancel(&vfifo->flush);
  546. MSG(MSC, "flush [%5X.%5X]\n", UART_READ32(VFF_RPT(base)), UART_READ32(VFF_WPT(base)));
  547. } else {
  548. /*the ns used to transfer the data in TX VFIFO */
  549. u32 size = UART_READ32(VFF_VALID_SIZE(base));
  550. s64 t = size * 10 * (NSEC_PER_SEC / uart->baudrate);
  551. ktime_t cur = ktime_get();
  552. ktime_t nxt = ktime_add_ns(cur, t);
  553. hrtimer_try_to_cancel(&vfifo->flush);
  554. hrtimer_start(&vfifo->flush, nxt, HRTIMER_MODE_ABS);
  555. #if defined(ENABLE_VFIFO_DEBUG)
  556. {
  557. struct timespec a = ktime_to_timespec(cur);
  558. struct timespec b = ktime_to_timespec(nxt);
  559. MSG(MSC, "start: [%ld %ld] [%ld %ld] [%d %lld]\n",
  560. a.tv_sec, a.tv_nsec, b.tv_sec, b.tv_nsec, size, t);
  561. }
  562. #endif
  563. }
  564. } else {
  565. MSG_ERR("%s dma or uart ptr is null\n", __func__);
  566. /* del_timer(&dma->vfifo->timer); */
  567. }
  568. #else
  569. if (uart) {
  570. dma = &uart->dma_tx;
  571. vfifo = dma->vfifo;
  572. base = vfifo->base;
  573. if (UART_READ32(VFF_FLUSH(base)) == 0) {
  574. reg_sync_writel(VFF_FLUSH_B, VFF_FLUSH(base));
  575. MSG(MSC, "flush [%5X.%5X]\n", UART_READ32(VFF_RPT(base)), UART_READ32(VFF_WPT(base)));
  576. }
  577. } else {
  578. MSG_ERR("%s dma or uart ptr is null\n", __func__);
  579. }
  580. #endif /* ENABE_HRTIMER_FLUSH */
  581. }
  582. /*---------------------------------------------------------------------------*/
  583. static void mtk_uart_dma_vfifo_tx_tasklet_byte(unsigned long arg)
  584. {
  585. struct mtk_uart *uart = (struct mtk_uart *)arg;
  586. struct uart_port *port = &uart->port;
  587. /* struct mtk_uart_dma *dma = &uart->dma_tx; */
  588. struct mtk_uart_vfifo *vfifo = uart->tx_vfifo;
  589. struct circ_buf *xmit = &port->state->xmit;
  590. unsigned int len, count, size, left, chk = 0;
  591. ktime_t begin, end;
  592. struct timespec a, b;
  593. size = CIRC_CNT_TO_END(xmit->head, xmit->tail, UART_XMIT_SIZE);
  594. left = vfifo->size - mtk_uart_vfifo_get_counts(vfifo);
  595. left = (left > 16) ? (left - 16) : (0); /*prevent from CPU lock */
  596. len = count = left < size ? left : size;
  597. if (!len) {
  598. chk = 1;
  599. MSG(DMA, ">>>>> zero size <<<<<\n");
  600. }
  601. DGBUF_INIT(vfifo);
  602. begin = ktime_get();
  603. a = ktime_to_timespec(begin);
  604. while (len--) {
  605. /*DMA limitation.
  606. Workaround: Polling flush bit to zero, set 1s timeout */
  607. while (UART_READ32(VFF_FLUSH(vfifo->base))) {
  608. end = ktime_get();
  609. b = ktime_to_timespec(end);
  610. if ((b.tv_sec - a.tv_sec) > 1 || ((b.tv_sec - a.tv_sec) == 1 && b.tv_nsec > a.tv_nsec)) {
  611. pr_debug("[UART%d] Polling flush timeout\n", port->line);
  612. return;
  613. }
  614. }
  615. DGBUF_PUSH_CH(vfifo, (char)xmit->buf[xmit->tail]);
  616. uart->write_byte(uart, xmit->buf[xmit->tail]);
  617. xmit->tail = (xmit->tail + 1) & (UART_XMIT_SIZE - 1);
  618. port->icount.tx++;
  619. }
  620. #if defined(ENABLE_VFIFO_DEBUG)
  621. if (UART_DEBUG_EVT(DBG_EVT_DMA) && UART_DEBUG_EVT(DBG_EVT_BUF)) {
  622. char str[4] = { 0 };
  623. if (count >= 4) {
  624. str[0] = vfifo->cur->dat[0];
  625. str[1] = vfifo->cur->dat[1];
  626. str[2] = vfifo->cur->dat[vfifo->cur->idx - 2];
  627. str[3] = vfifo->cur->dat[vfifo->cur->idx - 1];
  628. } else {
  629. int idx;
  630. for (idx = 0; idx < count; idx++)
  631. str[idx] = vfifo->cur->dat[idx];
  632. for (; idx < 4; idx++)
  633. str[idx] = 0;
  634. }
  635. MSG(DMA, "TX[%4d]: %4d/%4d [%05X-%05X] (%02X %02X .. %02X %02X)\n",
  636. size, count, left, UART_READ32(VFF_WPT(vfifo->base)), UART_READ32(VFF_RPT(vfifo->base)),
  637. str[0], str[1], str[2], str[3]);
  638. } else {
  639. MSG(DMA, "TX[%4d]: %4d/%4d [%05X-%05X]\n",
  640. size, count, left, UART_READ32(VFF_WPT(vfifo->base)), UART_READ32(VFF_RPT(vfifo->base)));
  641. }
  642. #endif
  643. #if defined(ENABLE_VFIFO_DEBUG)
  644. if (UART_DEBUG_EVT(DBG_EVT_DAT) && UART_DEBUG_EVT(DBG_EVT_BUF)) {
  645. int i;
  646. pr_debug("[UART%d_TX] %4d bytes:", uart->nport, vfifo->cur->idx);
  647. for (i = 0; i < vfifo->cur->idx; i++) {
  648. if (i % 16 == 0)
  649. pr_debug("\n");
  650. pr_debug("%.2x ", (unsigned char)vfifo->cur->dat[i]);
  651. }
  652. pr_debug("\n");
  653. }
  654. #endif
  655. if (uart_circ_chars_pending(xmit) < WAKEUP_CHARS)
  656. uart_write_wakeup(port);
  657. }
  658. /*---------------------------------------------------------------------------*/
  659. /*static int mtk_uart_vfifo_write_string(struct mtk_uart *uart, const unsigned char *chars, size_t size)
  660. {
  661. void *addr, *base = uart->tx_vfifo->base;
  662. unsigned int wpt = UART_READ32(VFF_WPT(base));
  663. unsigned int num_to_end;
  664. addr = (void*)((wpt&0xffff)+uart->tx_vfifo->addr);
  665. num_to_end = UART_READ32(VFF_LEN(base)) - (wpt&0xffff);
  666. if(num_to_end >= size){
  667. memcpy(addr, chars, size);
  668. mb(); //make sure write point updated after VFIFO written.
  669. reg_sync_writel( wpt+(unsigned int)size, VFF_WPT(base));
  670. }else{
  671. memcpy(addr, chars, num_to_end);
  672. memcpy(uart->tx_vfifo->addr, &chars[num_to_end], (unsigned int)size - num_to_end);
  673. mb(); //make sure write point updated after VFIFO written.
  674. wpt = ((~wpt)&0x10000)+ (unsigned int)size - num_to_end;
  675. reg_sync_writel(wpt, VFF_WPT(base));
  676. }
  677. return size;
  678. }*/
  679. /*---------------------------------------------------------------------------*/
  680. /*static void mtk_uart_dma_vfifo_tx_tasklet_str(unsigned long arg)
  681. {
  682. struct mtk_uart *uart = (struct mtk_uart *)arg;
  683. struct uart_port *port = &uart->port;
  684. //struct mtk_uart_dma *dma = &uart->dma_tx;
  685. struct mtk_uart_vfifo *vfifo = uart->tx_vfifo;
  686. struct circ_buf *xmit = &port->state->xmit;
  687. unsigned int len, count, size, left, chk = 0;
  688. size = CIRC_CNT_TO_END(xmit->head, xmit->tail, UART_XMIT_SIZE);
  689. left = vfifo->size - mtk_uart_vfifo_get_counts(vfifo);
  690. left = (left > 16) ? (left-16) : (0);
  691. len = count = left < size ? left : size;
  692. if (!len) {
  693. chk = 1;
  694. MSG(DMA,">>>>> zero size <<<<<\n");
  695. }
  696. DGBUF_INIT(vfifo);
  697. mtk_uart_vfifo_write_string(uart, &xmit->buf[xmit->tail], size);
  698. DGBUF_PUSH_STR(vfifo, &xmit->buf[xmit->tail], size);
  699. xmit->tail = (xmit->tail+size) & (UART_XMIT_SIZE - 1);
  700. port->icount.tx += size;
  701. #if defined(ENABLE_VFIFO_DEBUG)
  702. if (UART_DEBUG_EVT(DBG_EVT_DMA) && UART_DEBUG_EVT(DBG_EVT_BUF)) {
  703. char str[4] = {0};
  704. if (count >= 4) {
  705. str[0] = vfifo->cur->dat[0];
  706. str[1] = vfifo->cur->dat[1];
  707. str[2] = vfifo->cur->dat[vfifo->cur->idx-2];
  708. str[3] = vfifo->cur->dat[vfifo->cur->idx-1];
  709. } else {
  710. int idx;
  711. for (idx = 0; idx < count; idx++)
  712. str[idx] = vfifo->cur->dat[idx];
  713. for (; idx < 4; idx++)
  714. str[idx] = 0;
  715. }
  716. MSG(DMA, "TX[%4d]: %4d/%4d [%05X-%05X] (%02X %02X .. %02X %02X)\n",
  717. size, count, left, UART_READ32(VFF_WPT(vfifo->base)), UART_READ32(VFF_RPT(vfifo->base)),
  718. str[0], str[1], str[2], str[3]);
  719. } else {
  720. MSG(DMA, "TX[%4d]: %4d/%4d [%05X-%05X]\n",
  721. size, count, left, UART_READ32(VFF_WPT(vfifo->base)), UART_READ32(VFF_RPT(vfifo->base)));
  722. }
  723. #endif
  724. #if defined(ENABLE_VFIFO_DEBUG)
  725. if (UART_DEBUG_EVT(DBG_EVT_DAT) && UART_DEBUG_EVT(DBG_EVT_BUF)) {
  726. int i;
  727. pr_debug("[UART%d_TX] %4d bytes:", uart->nport, vfifo->cur->idx);
  728. for (i = 0; i < vfifo->cur->idx; i++) {
  729. if (i % 16 == 0)
  730. pr_debug("\n");
  731. pr_debug("%.2x ", (unsigned char)vfifo->cur->dat[i]);
  732. }
  733. pr_debug("\n");
  734. }
  735. #endif
  736. if (uart_circ_chars_pending(xmit) < WAKEUP_CHARS)
  737. uart_write_wakeup(port);
  738. }*/
  739. /*---------------------------------------------------------------------------*/
  740. void mtk_uart_dma_vfifo_tx_tasklet(unsigned long arg)
  741. {
  742. struct mtk_uart *uart = (struct mtk_uart *)arg;
  743. struct uart_port *port = &uart->port;
  744. struct mtk_uart_dma *dma = &uart->dma_tx;
  745. struct mtk_uart_vfifo *vfifo = uart->tx_vfifo;
  746. struct circ_buf *xmit = &port->state->xmit;
  747. int txcount = port->icount.tx;
  748. void *base = vfifo->base;
  749. unsigned long flags;
  750. spin_lock_irqsave(&vfifo->iolock, flags);
  751. if (atomic_inc_return(&vfifo->entry) > 1) {
  752. MSG(ERR, "tx entry!!\n");
  753. tasklet_schedule(&vfifo->dma->tasklet);
  754. } else {
  755. while (UART_READ32(VFF_LEFT_SIZE(base)) >= vfifo->trig) {
  756. /* deal with x_char first */
  757. if (unlikely(port->x_char)) {
  758. MSG(INFO, "detect x_char!!\n");
  759. uart->write_byte(uart, port->x_char);
  760. port->icount.tx++;
  761. port->x_char = 0;
  762. break;
  763. }
  764. if (uart_circ_empty(xmit) || uart_tx_stopped(port)) {
  765. uart->pending_tx_reqs = 0;
  766. atomic_set(&dma->free, 1);
  767. complete(&dma->done);
  768. break;
  769. }
  770. mtk_uart_dma_vfifo_tx_tasklet_byte(arg);
  771. }
  772. if (txcount != port->icount.tx) {
  773. mtk_uart_vfifo_enable_tx_intr(uart);
  774. mtk_uart_tx_vfifo_flush(uart, 0);
  775. }
  776. }
  777. atomic_dec(&vfifo->entry);
  778. spin_unlock_irqrestore(&vfifo->iolock, flags);
  779. }
  780. /*---------------------------------------------------------------------------*/
  781. /*static void mtk_uart_dma_vfifo_rx_tasklet_byte(unsigned long arg)
  782. {
  783. struct mtk_uart *uart = (struct mtk_uart*)arg;
  784. struct uart_port *port = &uart->port;
  785. struct mtk_uart_vfifo *vfifo = uart->rx_vfifo;
  786. struct tty_struct *tty = uart->port.state->port.tty;
  787. int count, left;
  788. unsigned int ch, flag, status;
  789. unsigned long flags;
  790. MSG_FUNC_ENTRY();
  791. count = left = mtk_uart_vfifo_get_counts(vfifo);
  792. spin_lock_irqsave(&port->lock, flags);
  793. DGBUF_INIT(vfifo);
  794. while (!mtk_uart_vfifo_is_empty(vfifo) && count > 0) {
  795. status = uart->read_status(uart);
  796. status = mtk_uart_filter_line_status(uart);
  797. ch = uart->read_byte(uart);
  798. flag = TTY_NORMAL;
  799. if (status & UART_LSR_BI) {
  800. MSG(INFO, "Break Interrupt!!!\n");
  801. port->icount.brk++;
  802. if (uart_handle_break(port))
  803. continue;
  804. flag = TTY_BREAK;
  805. } else if (status & UART_LSR_PE) {
  806. MSG(INFO, "Parity Error!!!\n");
  807. port->icount.parity++;
  808. flag = TTY_PARITY;
  809. } else if (status & UART_LSR_FE) {
  810. MSG(INFO, "Frame Error!!!\n");
  811. port->icount.frame++;
  812. flag = TTY_FRAME;
  813. } else if (status & UART_LSR_OE) {
  814. MSG(INFO, "Overrun!!!\n");
  815. port->icount.overrun++;
  816. flag = TTY_OVERRUN;
  817. }
  818. port->icount.rx++;
  819. count--;
  820. DGBUF_PUSH_CH(vfifo, ch);
  821. if (!tty_insert_flip_char(tty, ch, flag))
  822. MSG(ERR, "tty_insert_flip_char: no space\n");
  823. }
  824. tty_flip_buffer_push(tty);
  825. #if defined(ENABLE_VFIFO_DEBUG)
  826. if (UART_DEBUG_EVT(DBG_EVT_DMA) && UART_DEBUG_EVT(DBG_EVT_BUF)) {
  827. char str[4] = {0};
  828. if (count >= 4) {
  829. str[0] = vfifo->cur->dat[0];
  830. str[1] = vfifo->cur->dat[1];
  831. str[2] = vfifo->cur->dat[vfifo->cur->idx-2];
  832. str[3] = vfifo->cur->dat[vfifo->cur->idx-1];
  833. } else {
  834. int idx;
  835. for (idx = 0; idx < count; idx++)
  836. str[idx] = vfifo->cur->dat[idx];
  837. for (; idx < 4; idx++)
  838. str[idx] = 0;
  839. }
  840. MSG(DMA, "RX[%4d]: %4d bytes from VFIFO [%4d] (%02X %02X .. %02X %02X) %d\n",
  841. left, left - count, mtk_uart_vfifo_get_counts(vfifo), str[0], str[1], str[2], str[3],
  842. UART_READ32(VFF_VALID_SIZE(vfifo->base)));
  843. } else {
  844. MSG(DMA, "RX[%4d]: %4d bytes from VFIFO [%4d] %d\n",
  845. left, left - count, mtk_uart_vfifo_get_counts(vfifo),
  846. UART_READ32(VFF_VALID_SIZE(vfifo->base)));
  847. }
  848. #endif
  849. spin_unlock_irqrestore(&port->lock, flags);
  850. #if defined(ENABLE_VFIFO_DEBUG)
  851. if (UART_DEBUG_EVT(DBG_EVT_DAT) && UART_DEBUG_EVT(DBG_EVT_BUF)) {
  852. int i;
  853. pr_debug("[UART%d_RX] %4d bytes:", uart->nport, vfifo->cur->idx);
  854. for (i = 0; i < vfifo->cur->idx; i++) {
  855. if (i % 16 == 0)
  856. pr_debug("\n");
  857. pr_debug("%.2x ", (unsigned char)vfifo->cur->dat[i]);
  858. }
  859. pr_debug("\n");
  860. }
  861. #endif
  862. }*/
  863. /*---------------------------------------------------------------------------*/
  864. /* A duplicate of tty_insert_flip_string. */
  865. /* The only difference is the function will accept one extra variable for */
  866. /* indicating the current line status. */
  867. /*---------------------------------------------------------------------------*/
  868. static int mtk_uart_tty_insert_flip_string(struct mtk_uart *uart, const unsigned char *chars, size_t size)
  869. {
  870. struct tty_struct *tty = uart->port.state->port.tty;
  871. struct uart_port *port = &uart->port;
  872. u32 status, flag;
  873. int copied = 0;
  874. status = uart->read_status(uart);
  875. status = mtk_uart_filter_line_status(uart);
  876. flag = TTY_NORMAL;
  877. /* error handling routine */
  878. if (status & UART_LSR_BI) {
  879. MSG(ERR, "Break Interrupt!!\n");
  880. port->icount.brk++;
  881. if (uart_handle_break(port))
  882. return 0;
  883. flag = TTY_BREAK;
  884. } else if (status & UART_LSR_PE) {
  885. MSG(ERR, "Parity Error!!!\n");
  886. port->icount.parity++;
  887. flag = TTY_PARITY;
  888. } else if (status & UART_LSR_FE) {
  889. MSG(ERR, "Frame Error!!!\n");
  890. port->icount.frame++;
  891. flag = TTY_FRAME;
  892. } else if (status & UART_LSR_OE) {
  893. MSG(ERR, "Overrun!!!\n");
  894. port->icount.overrun++;
  895. flag = TTY_OVERRUN;
  896. }
  897. #ifdef ENABLE_RAW_DATA_DUMP
  898. save_rx_raw_data(uart, chars, size);
  899. #endif
  900. if (flag == TTY_NORMAL) {
  901. copied = tty_insert_flip_string(tty->port, chars, size);
  902. } else {
  903. MSG(ERR, "error occurs\n");
  904. copied += tty_insert_flip_string(tty->port, chars, size - 1);
  905. copied += tty_insert_flip_char(tty->port, chars[size - 1], flag);
  906. }
  907. port->icount.rx += copied;
  908. return copied;
  909. }
  910. /*---------------------------------------------------------------------------*/
  911. static void mtk_uart_dma_vfifo_rx_tasklet_str(unsigned long arg)
  912. {
  913. struct mtk_uart *uart = (struct mtk_uart *)arg;
  914. struct uart_port *port = &uart->port;
  915. struct mtk_uart_vfifo *vfifo = uart->rx_vfifo;
  916. struct tty_struct *tty = uart->port.state->port.tty;
  917. int count, left;
  918. unsigned int rxptr, txptr, txreg, rxreg;
  919. unsigned long flags;
  920. unsigned char *ptr;
  921. void *base = vfifo->base;
  922. MSG_FUNC_ENTRY();
  923. spin_lock_irqsave(&port->lock, flags);
  924. rxreg = UART_READ32(VFF_RPT(base));
  925. txreg = UART_READ32(VFF_WPT(base));
  926. rxptr = rxreg & 0x0000FFFF;
  927. txptr = txreg & 0x0000FFFF;
  928. count = left = ((rxreg ^ txreg) & 0x00010000) ? (txptr + vfifo->size - rxptr) : (txptr - rxptr);
  929. DGBUF_INIT(vfifo);
  930. #ifdef ENABLE_RAW_DATA_DUMP
  931. reset_rx_raw_data(uart);
  932. #endif
  933. if ((rxptr + count) <= txptr) {
  934. ptr = (unsigned char *)(rxptr + vfifo->addr);
  935. mtk_uart_tty_insert_flip_string(uart, ptr, count);
  936. DGBUF_PUSH_STR(vfifo, ptr, count);
  937. } else {
  938. ptr = (unsigned char *)(rxptr + vfifo->addr);
  939. mtk_uart_tty_insert_flip_string(uart, ptr, vfifo->size - rxptr);
  940. DGBUF_PUSH_STR(vfifo, ptr, vfifo->size - rxptr);
  941. if (txptr) {
  942. ptr = (unsigned char *)(vfifo->addr);
  943. mtk_uart_tty_insert_flip_string(uart, ptr, txptr);
  944. DGBUF_PUSH_STR(vfifo, ptr, txptr);
  945. }
  946. }
  947. mb(); /* make sure read point updated after VFIFO read. */
  948. reg_sync_writel(txreg, VFF_RPT(base));
  949. tty_flip_buffer_push(tty->port);
  950. #if defined(ENABLE_VFIFO_DEBUG)
  951. if (UART_DEBUG_EVT(DBG_EVT_DMA) && UART_DEBUG_EVT(DBG_EVT_BUF)) {
  952. char str[4] = { 0 };
  953. if (count >= 4) {
  954. str[0] = vfifo->cur->dat[0];
  955. str[1] = vfifo->cur->dat[1];
  956. str[2] = vfifo->cur->dat[vfifo->cur->idx - 2];
  957. str[3] = vfifo->cur->dat[vfifo->cur->idx - 1];
  958. } else {
  959. int idx;
  960. for (idx = 0; idx < count; idx++)
  961. str[idx] = vfifo->cur->dat[idx];
  962. for (; idx < 4; idx++)
  963. str[idx] = 0;
  964. }
  965. MSG(DMA, "RX[%4d]: [%5X..%5X] [%5X..%5X] (%02X %02X .. %02X %02X) [%d]\n",
  966. left, rxreg, txreg, UART_READ32(VFF_RPT(base)), UART_READ32(VFF_WPT(base)),
  967. str[0], str[1], str[2], str[3], UART_READ32(VFF_FLUSH(base)));
  968. } else {
  969. MSG(DMA, "RX[%4d]: [%5X..%5X] [%5X..%5X] [%d] [%4X.%4X]\n",
  970. left, rxreg, txreg, UART_READ32(VFF_RPT(base)), UART_READ32(VFF_WPT(base)),
  971. UART_READ32(VFF_FLUSH(base)), UART_READ32(VFF_VALID_SIZE(base)), UART_READ32(VFF_LEFT_SIZE(base)));
  972. }
  973. #endif
  974. spin_unlock_irqrestore(&port->lock, flags);
  975. #if defined(ENABLE_VFIFO_DEBUG)
  976. if (UART_DEBUG_EVT(DBG_EVT_DAT) && UART_DEBUG_EVT(DBG_EVT_BUF)) {
  977. int i;
  978. pr_debug("[UART%d_RX] %4d bytes:", uart->nport, vfifo->cur->idx);
  979. for (i = 0; i < vfifo->cur->idx; i++) {
  980. if (i % 16 == 0)
  981. pr_debug("\n");
  982. pr_debug("%.2x ", (unsigned char)vfifo->cur->dat[i]);
  983. }
  984. pr_debug("\n");
  985. }
  986. #endif
  987. }
  988. /*---------------------------------------------------------------------------*/
  989. void mtk_uart_dma_vfifo_rx_tasklet(unsigned long arg)
  990. { /*the function will be called through dma irq or tasklet_schedule */
  991. struct mtk_uart *uart = (struct mtk_uart *)arg;
  992. struct mtk_uart_vfifo *vfifo = uart->rx_vfifo;
  993. unsigned long flags;
  994. MSG(DMA, "%d, %x, %x\n", uart->read_allow(uart), UART_READ32(VFF_VALID_SIZE(vfifo->base)), vfifo->trig);
  995. spin_lock_irqsave(&vfifo->iolock, flags);
  996. if (atomic_inc_return(&vfifo->entry) > 1) {
  997. MSG(ERR, "rx entry!!\n");
  998. tasklet_schedule(&vfifo->dma->tasklet);
  999. } else {
  1000. if (uart->read_allow(uart))
  1001. mtk_uart_dma_vfifo_rx_tasklet_str(arg);
  1002. }
  1003. atomic_dec(&vfifo->entry);
  1004. spin_unlock_irqrestore(&vfifo->iolock, flags);
  1005. }
  1006. /*---------------------------------------------------------------------------*/
  1007. void mtk_uart_dma_setup(struct mtk_uart *uart, struct mtk_uart_dma *dma)
  1008. {
  1009. void *base;
  1010. if (!dma)
  1011. return;
  1012. if (dma->mode == UART_RX_VFIFO_DMA || dma->mode == UART_TX_VFIFO_DMA) {
  1013. if (!dma->vfifo) {
  1014. MSG(ERR, "null\n");
  1015. return;
  1016. }
  1017. base = dma->vfifo->base;
  1018. reg_sync_writel(dma->vfifo->dmahd, VFF_ADDR(base));
  1019. reg_sync_writel(dma->vfifo->trig, VFF_THRE(base));
  1020. reg_sync_writel(dma->vfifo->size, VFF_LEN(base));
  1021. if (dma->vfifo->type == UART_RX_VFIFO)
  1022. /* reg_sync_writel(VFF_RX_INT_EN0_B, VFF_INT_EN(base)); */
  1023. reg_sync_writel(VFF_RX_INT_EN0_B | VFF_RX_INT_EN1_B, VFF_INT_EN(base));
  1024. mb();
  1025. }
  1026. }
  1027. /*---------------------------------------------------------------------------*/
  1028. int mtk_uart_dma_start(struct mtk_uart *uart, struct mtk_uart_dma *dma)
  1029. {
  1030. void *base;
  1031. MSG_FUNC_ENTRY();
  1032. if (!dma)
  1033. return -1;
  1034. if (!atomic_read(&dma->free))
  1035. return -1;
  1036. if (dma->mode == UART_TX_VFIFO_DMA || dma->mode == UART_RX_VFIFO_DMA) {
  1037. if (!dma->vfifo) {
  1038. MSG(ERR, "null\n");
  1039. return -EINVAL;
  1040. }
  1041. base = dma->vfifo->base;
  1042. reg_sync_writel(VFF_INT_FLAG_CLR_B, VFF_INT_FLAG(base));
  1043. reg_sync_writel(VFF_EN_B, VFF_EN(base));
  1044. if (UART_READ32(VFF_EN(base)) != VFF_EN_B)
  1045. MSG(ERR, "Start DMA fail\n");
  1046. }
  1047. atomic_set(&dma->free, 0);
  1048. init_completion(&dma->done);
  1049. return 0;
  1050. }
  1051. /*---------------------------------------------------------------------------*/
  1052. void mtk_uart_stop_dma(struct mtk_uart_dma *dma)
  1053. {
  1054. int polling_cnt = 0;
  1055. struct mtk_uart *uart;
  1056. void *base;
  1057. if (!dma)
  1058. return;
  1059. uart = dma->uart;
  1060. if (dma->mode == UART_RX_VFIFO_DMA || dma->mode == UART_TX_VFIFO_DMA) {
  1061. MSG(DMA, "stop dma (%d)\n", dma->mode);
  1062. if (!dma->vfifo) {
  1063. MSG(ERR, "null\n");
  1064. return;
  1065. }
  1066. base = dma->vfifo->base;
  1067. /*set flush as 1 -> wait until flush is 0 */
  1068. reg_sync_writel(VFF_FLUSH_CLR_B, VFF_FLUSH(base));
  1069. while (UART_READ32(VFF_FLUSH(base))) {
  1070. polling_cnt++;
  1071. if (polling_cnt > 10000) {
  1072. pr_debug("mtk_uart_stop_dma: polling VFF_FLUSH fail VFF_DEBUG_STATUS=0x%x\n",
  1073. UART_READ32(VFF_DEBUG_STATUS(base)));
  1074. break;
  1075. }
  1076. }
  1077. polling_cnt = 0;
  1078. /*set stop as 1 -> wait until en is 0 -> set stop as 0 */
  1079. reg_sync_writel(VFF_STOP_B, VFF_STOP(base));
  1080. while (UART_READ32(VFF_EN(base))) {
  1081. polling_cnt++;
  1082. if (polling_cnt > 10000) {
  1083. pr_debug("mtk_uart_stop_dma: polling VFF_EN fail VFF_DEBUG_STATUS=0x%x\n",
  1084. UART_READ32(VFF_DEBUG_STATUS(base)));
  1085. break;
  1086. }
  1087. }
  1088. reg_sync_writel(VFF_STOP_CLR_B, VFF_STOP(base));
  1089. reg_sync_writel(VFF_INT_EN_CLR_B, VFF_INT_EN(base));
  1090. reg_sync_writel(VFF_INT_FLAG_CLR_B, VFF_INT_FLAG(base));
  1091. } else {
  1092. MSG(ERR, "unknown mode: %d\n", dma->mode);
  1093. }
  1094. }
  1095. /*---------------------------------------------------------------------------*/
  1096. void mtk_uart_reset_dma(struct mtk_uart_dma *dma)
  1097. {
  1098. struct mtk_uart *uart;
  1099. void *base;
  1100. if (!dma)
  1101. return;
  1102. uart = dma->uart;
  1103. if (dma->mode == UART_RX_VFIFO_DMA || dma->mode == UART_TX_VFIFO_DMA) {
  1104. if (!dma->vfifo) {
  1105. MSG(ERR, "null\n");
  1106. return;
  1107. }
  1108. base = dma->vfifo->base;
  1109. /* mt65xx_req_vff_dma(dma->vfifo->ch, NULL, NULL); */
  1110. reg_sync_writel(0, VFF_ADDR(base));
  1111. reg_sync_writel(0, VFF_THRE(base));
  1112. reg_sync_writel(0, VFF_LEN(base));
  1113. /*set warm_rst as 1 -> wait until en is 0 */
  1114. reg_sync_writel(VFF_WARM_RST_B, VFF_RST(base));
  1115. while (UART_READ32(VFF_EN(base)))
  1116. ;
  1117. /* Reset write point for tx dma */
  1118. if (dma->mode == UART_TX_VFIFO_DMA)
  1119. reg_sync_writel(0, VFF_WPT(base));
  1120. else if (dma->mode == UART_RX_VFIFO_DMA)
  1121. reg_sync_writel(0, VFF_RPT(base));
  1122. } else
  1123. MSG(ERR, "unknown mode: %d\n", dma->mode);
  1124. }
  1125. #endif /*defined(ENABLE_VFIFO) */
  1126. /*---------------------------------------------------------------------------*/
  1127. void mtk_uart_fifo_init(struct mtk_uart *uart)
  1128. {
  1129. /*
  1130. * NOTE: For FCR is a read only register reason,
  1131. * special read/write/set/clr function need to use
  1132. */
  1133. /* UART_SET_BITS(UART_FCR_FIFO_INIT, UART_FCR); */
  1134. __set_fcr_register(uart, UART_FCR_FIFO_INIT);
  1135. mb();
  1136. }
  1137. /*---------------------------------------------------------------------------*/
  1138. void mtk_uart_fifo_flush(struct mtk_uart *uart)
  1139. {
  1140. /*
  1141. * NOTE: For FCR is a read only register reason,
  1142. * special read/write/set/clr function need to use
  1143. */
  1144. /* UART_SET_BITS(UART_FCR_CLRR | UART_FCR_CLRT, UART_FCR); */
  1145. __set_fcr_register(uart, UART_FCR_CLRR | UART_FCR_CLRT);
  1146. mb();
  1147. }
  1148. /*---------------------------------------------------------------------------*/
  1149. int mtk_uart_data_ready(struct mtk_uart *uart)
  1150. {
  1151. if ((uart->read_status(uart) & UART_LSR_DR))
  1152. return 1;
  1153. else
  1154. return 0;
  1155. }
  1156. /*---------------------------------------------------------------------------*/
  1157. void mtk_uart_fifo_set_trig(struct mtk_uart *uart, int tx_level, int rx_level)
  1158. {
  1159. unsigned long base = uart->base;
  1160. unsigned long tmp1;
  1161. unsigned long flags;
  1162. tmp1 = UART_READ32(UART_LCR);
  1163. spin_lock_irqsave(&mtk_console_lock, flags);
  1164. reg_sync_writel(0xbf, UART_LCR);
  1165. UART_SET_BITS(UART_EFR_EN, UART_EFR);
  1166. reg_sync_writel(tmp1, UART_LCR);
  1167. spin_unlock_irqrestore(&mtk_console_lock, flags);
  1168. MSG(INFO, "%s(EFR) = %04X\n", __func__, UART_READ32(UART_EFR));
  1169. /*
  1170. * NOTE: For FCR is a read only register reason,
  1171. * special read/write/set/clr function need to use
  1172. */
  1173. /* reg_sync_writel(UART_FCR_FIFO_INIT|tx_level|rx_level, UART_FCR); */
  1174. sync_write_fcr_register(uart, UART_FCR_FIFO_INIT | tx_level | rx_level);
  1175. }
  1176. /*---------------------------------------------------------------------------*/
  1177. void mtk_uart_set_mode(struct mtk_uart *uart, int mode)
  1178. {
  1179. /*
  1180. * NOTE: For FCR is a read only register reason,
  1181. * special read/write/set/clr function need to use
  1182. */
  1183. if (mode == UART_DMA_MODE_0) {
  1184. /* UART_CLR_BITS(UART_FCR_DMA1, UART_FCR); */
  1185. __clr_fcr_register(uart, UART_FCR_DMA1);
  1186. } else if (mode == UART_DMA_MODE_1) {
  1187. /* UART_SET_BITS(UART_FCR_DMA1, UART_FCR); */
  1188. __set_fcr_register(uart, UART_FCR_DMA1);
  1189. }
  1190. mb();
  1191. }
  1192. /*---------------------------------------------------------------------------*/
  1193. void mtk_uart_set_auto_baud(struct mtk_uart *uart)
  1194. {
  1195. unsigned long base = uart->base;
  1196. MSG_FUNC_ENTRY();
  1197. switch (uart->sysclk) {
  1198. case MTK_SYSCLK_13:
  1199. reg_sync_writel(UART_AUTOBADUSAM_13M, UART_AUTOBAUD_SAMPLE);
  1200. break;
  1201. case MTK_SYSCLK_26:
  1202. reg_sync_writel(UART_AUTOBADUSAM_26M, UART_AUTOBAUD_SAMPLE);
  1203. break;
  1204. case MTK_SYSCLK_52:
  1205. reg_sync_writel(UART_AUTOBADUSAM_52M, UART_AUTOBAUD_SAMPLE);
  1206. break;
  1207. default:
  1208. dev_err(uart->port.dev, "SYSCLK = %ldMHZ doesn't support autobaud\n", uart->sysclk);
  1209. return;
  1210. }
  1211. reg_sync_writel(0x01, UART_AUTOBAUD_EN); /* Enable Auto Baud */
  1212. }
  1213. /*---------------------------------------------------------------------------*/
  1214. static void mtk_uart_cal_baud(struct mtk_uart *uart, int baudrate, int highspeed)
  1215. {
  1216. unsigned long base = uart->base;
  1217. u32 remainder, uartclk = 0, divisor = 0;
  1218. u32 lcr = UART_READ32(UART_LCR);
  1219. unsigned long flags;
  1220. #ifdef UART_USING_FIX_CLK_ENABLE
  1221. if (baudrate <= 1000000) { /* Using 16.25 fix clock */
  1222. uartclk = uart->sysclk >> 2;
  1223. reg_sync_writel(0x03, UART_RATE_FIX_AD);
  1224. } else { /* >1M, Using 65 clock */
  1225. uartclk = uart->sysclk;
  1226. reg_sync_writel(0x00, UART_RATE_FIX_AD);
  1227. }
  1228. if (3 == highspeed)
  1229. UART_SET_BITS(UART_MCR_DCM_EN, UART_MCR); /* Enable UART DCM */
  1230. else
  1231. UART_CLR_BITS(UART_MCR_DCM_EN, UART_MCR); /* Disable UART DCM */
  1232. #else /* UART_Fix_clk_DISABLE */
  1233. uartclk = uart->sysclk;
  1234. reg_sync_writel(0x00, UART_RATE_FIX_AD);
  1235. #endif /* UART_USING_FIX_CLK_ENABLE */
  1236. spin_lock_irqsave(&mtk_console_lock, flags);
  1237. if (highspeed == 0) {
  1238. /* uartclk = uart->sysclk; */
  1239. /* reg_sync_writel(0x00, UART_RATE_FIX_AD); */
  1240. reg_sync_writel(0x00, UART_HIGHSPEED); /*divider is 16 */
  1241. divisor = (uartclk >> 4) / (u32) baudrate;
  1242. remainder = (uartclk >> 4) % (u32) baudrate;
  1243. if (remainder >= (u32) (baudrate * 8))
  1244. divisor += 1;
  1245. reg_sync_writel(lcr | UART_LCR_DLAB, UART_LCR);
  1246. reg_sync_writel((divisor & 0xFF), UART_DLL);
  1247. reg_sync_writel(((divisor >> 8) & 0xFF), UART_DLH);
  1248. reg_sync_writel(lcr, UART_LCR);
  1249. } else if (highspeed == 1) {
  1250. /* uartclk = uart->sysclk; */
  1251. /* reg_sync_writel(0x00, UART_RATE_FIX_AD); */
  1252. reg_sync_writel(0x01, UART_HIGHSPEED); /*divider is 8 */
  1253. divisor = (uartclk >> 3) / (u32) baudrate;
  1254. remainder = (uartclk >> 3) % (u32) baudrate;
  1255. if (remainder >= (u32) (baudrate * 4))
  1256. divisor += 1;
  1257. reg_sync_writel(lcr | UART_LCR_DLAB, UART_LCR);
  1258. reg_sync_writel((divisor & 0xFF), UART_DLL);
  1259. reg_sync_writel(((divisor >> 8) & 0xFF), UART_DLH);
  1260. reg_sync_writel(lcr, UART_LCR);
  1261. } else if (highspeed == 2) {
  1262. /* uartclk = uart->sysclk; */
  1263. /* reg_sync_writel(0x00, UART_RATE_FIX_AD); */
  1264. reg_sync_writel(0x02, UART_HIGHSPEED); /*divider is 4 */
  1265. divisor = (uartclk >> 2) / (u32) baudrate;
  1266. remainder = (uartclk >> 2) % (u32) baudrate;
  1267. if (remainder >= (u32) (baudrate * 2))
  1268. divisor += 1;
  1269. reg_sync_writel(lcr | UART_LCR_DLAB, UART_LCR);
  1270. reg_sync_writel((divisor & 0x00FF), UART_DLL);
  1271. reg_sync_writel(((divisor >> 8) & 0x00FF), UART_DLH);
  1272. reg_sync_writel(lcr, UART_LCR);
  1273. } else if (highspeed == 3) {
  1274. u32 sample_count, sample_point, high_div, tmp;
  1275. #if defined(ENABLE_FRACTIONAL)
  1276. u32 fraction;
  1277. u16 fraction_L_mapping[] = { 0, 1, 0x5, 0x15, 0x55, 0x57, 0x57, 0x77, 0x7F, 0xFF, 0xFF };
  1278. u16 fraction_M_mapping[] = { 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0x3 };
  1279. #endif
  1280. /* uartclk = uart->sysclk; */
  1281. /* reg_sync_writel(0x00, UART_RATE_FIX_AD); */
  1282. reg_sync_writel(0x03, UART_HIGHSPEED);
  1283. tmp = (uartclk) / (u32) baudrate;
  1284. high_div = (tmp >> 8) + 1;
  1285. divisor = (uartclk) / (baudrate * high_div);
  1286. #if defined(ENABLE_FRACTIONAL)
  1287. fraction = ((uartclk * 10) / baudrate) % 10; /*count fraction to set fractoin register */
  1288. reg_sync_writel(fraction_L_mapping[fraction], UART_FRACDIV_L);
  1289. reg_sync_writel(fraction_M_mapping[fraction], UART_FRACDIV_M);
  1290. #else
  1291. remainder = (uartclk) % (baudrate * high_div);
  1292. if (remainder >= ((baudrate * high_div) >> 1))
  1293. divisor += 1;
  1294. #endif
  1295. sample_count = divisor - 1;
  1296. sample_point = (sample_count - 1) >> 1;
  1297. reg_sync_writel(lcr | UART_LCR_DLAB, UART_LCR);
  1298. reg_sync_writel((high_div & 0x00FF), UART_DLL);
  1299. reg_sync_writel(((high_div >> 8) & 0x00FF), UART_DLH);
  1300. reg_sync_writel(lcr, UART_LCR);
  1301. reg_sync_writel(sample_count, UART_SAMPLE_COUNT);
  1302. reg_sync_writel(sample_point, UART_SAMPLE_POINT);
  1303. /*
  1304. * NOTICE: We found some chip, that is using lower clock, may not have enough time to check stop bit.
  1305. * In order to improve compatibility, the guard time register
  1306. * is enabled which is used to extend the stop bit.
  1307. */
  1308. if (baudrate >= 3000000)
  1309. reg_sync_writel(0x12, UART_GUARD);
  1310. }
  1311. spin_unlock_irqrestore(&mtk_console_lock, flags);
  1312. MSG(CFG, "BaudRate = %d, SysClk = %d, Divisor = %d, %04X/%04X\n", baudrate, uartclk, divisor,
  1313. UART_READ32(UART_IER), UART_READ32(UART_LCR));
  1314. dump_reg(uart, __func__);
  1315. mb(); /*to ensure the setting is written */
  1316. }
  1317. /*---------------------------------------------------------------------------*/
  1318. void mtk_uart_baud_setting(struct mtk_uart *uart, int baudrate)
  1319. {
  1320. u32 uartclk;
  1321. #if defined(CONFIG_MTK_FPGA)
  1322. u32 tmp_div;
  1323. #endif
  1324. uartclk = uart->sysclk;
  1325. #if defined(CONFIG_MTK_FPGA)
  1326. tmp_div = (uartclk) / (unsigned int)baudrate;
  1327. if (tmp_div > 255)
  1328. mtk_uart_cal_baud(uart, baudrate, 2);
  1329. else
  1330. mtk_uart_cal_baud(uart, baudrate, 3);
  1331. #else
  1332. /* Fix clock, using new settings */
  1333. #ifdef UART_USING_FIX_CLK_ENABLE
  1334. if (baudrate < 115200)
  1335. mtk_uart_cal_baud(uart, baudrate, 0);
  1336. else
  1337. mtk_uart_cal_baud(uart, baudrate, 3);
  1338. #else /* UART_Fix_Clock_DISABLE */
  1339. if (baudrate <= 115200)
  1340. mtk_uart_cal_baud(uart, baudrate, 0);
  1341. else if (baudrate <= 460800)
  1342. mtk_uart_cal_baud(uart, baudrate, 2);
  1343. else
  1344. mtk_uart_cal_baud(uart, baudrate, 3);
  1345. #endif /* End of UART_DCM_CONFIG */
  1346. #endif /* defined (CONFIG_MTK_FPGA) */
  1347. }
  1348. /*---------------------------------------------------------------------------*/
  1349. #if defined(ENABLE_DEBUG)
  1350. /*---------------------------------------------------------------------------*/
  1351. static u32 UART_READ_EFR(struct mtk_uart *uart)
  1352. {
  1353. unsigned long base = uart->base;
  1354. u32 efr, lcr = UART_READ32(UART_LCR);
  1355. unsigned long flags;
  1356. spin_lock_irqsave(&mtk_console_lock, flags);
  1357. reg_sync_writel(0xbf, UART_LCR);
  1358. efr = UART_READ32(UART_EFR);
  1359. reg_sync_writel(lcr, UART_LCR);
  1360. spin_unlock_irqrestore(&mtk_console_lock, flags);
  1361. return efr;
  1362. }
  1363. /*---------------------------------------------------------------------------*/
  1364. #endif
  1365. /*---------------------------------------------------------------------------*/
  1366. void mtk_uart_set_flow_ctrl(struct mtk_uart *uart, int mode)
  1367. {
  1368. unsigned long base = uart->base, old;
  1369. unsigned int tmp = UART_READ32(UART_LCR);
  1370. unsigned long flags;
  1371. MSG(CFG, "%s: %04X\n", __func__, UART_READ_EFR(uart));
  1372. spin_lock_irqsave(&mtk_console_lock, flags);
  1373. switch (mode) {
  1374. case UART_FC_NONE:
  1375. reg_sync_writel(UART_ESCAPE_CH, UART_ESCAPE_DAT);
  1376. reg_sync_writel(0x00, UART_ESCAPE_EN);
  1377. reg_sync_writel(0xbf, UART_LCR);
  1378. old = UART_READ32(UART_EFR);
  1379. old &= ~(UART_EFR_AUTO_RTSCTS | UART_EFR_XON12_XOFF12);
  1380. reg_sync_writel(old, UART_EFR);
  1381. reg_sync_writel(tmp, UART_LCR);
  1382. mtk_uart_disable_intrs(uart, UART_IER_XOFFI | UART_IER_RTSI | UART_IER_CTSI);
  1383. break;
  1384. case UART_FC_HW:
  1385. reg_sync_writel(UART_ESCAPE_CH, UART_ESCAPE_DAT);
  1386. reg_sync_writel(0x00, UART_ESCAPE_EN);
  1387. UART_SET_BITS(UART_MCR_RTS, UART_MCR);
  1388. reg_sync_writel(0xbf, UART_LCR);
  1389. /*disable all flow control setting */
  1390. old = UART_READ32(UART_EFR);
  1391. old &= ~(UART_EFR_AUTO_RTSCTS | UART_EFR_XON12_XOFF12);
  1392. reg_sync_writel(old, UART_EFR);
  1393. /*enable hw flow control */
  1394. old = UART_READ32(UART_EFR);
  1395. reg_sync_writel(old | UART_EFR_AUTO_RTSCTS, UART_EFR);
  1396. reg_sync_writel(tmp, UART_LCR);
  1397. mtk_uart_disable_intrs(uart, UART_IER_XOFFI);
  1398. mtk_uart_enable_intrs(uart, UART_IER_CTSI | UART_IER_RTSI);
  1399. break;
  1400. case UART_FC_SW: /*MTK software flow control */
  1401. reg_sync_writel(UART_ESCAPE_CH, UART_ESCAPE_DAT);
  1402. reg_sync_writel(0x01, UART_ESCAPE_EN);
  1403. reg_sync_writel(0xbf, UART_LCR);
  1404. /*dsiable all flow control setting */
  1405. old = UART_READ32(UART_EFR);
  1406. old &= ~(UART_EFR_AUTO_RTSCTS | UART_EFR_XON12_XOFF12);
  1407. reg_sync_writel(old, UART_EFR);
  1408. /*enable sw flow control */
  1409. old = UART_READ32(UART_EFR);
  1410. reg_sync_writel(old | UART_EFR_XON1_XOFF1, UART_EFR);
  1411. reg_sync_writel(START_CHAR(uart->port.state->port.tty), UART_XON1);
  1412. reg_sync_writel(STOP_CHAR(uart->port.state->port.tty), UART_XOFF1);
  1413. reg_sync_writel(tmp, UART_LCR);
  1414. mtk_uart_disable_intrs(uart, UART_IER_CTSI | UART_IER_RTSI);
  1415. mtk_uart_enable_intrs(uart, UART_IER_XOFFI);
  1416. break;
  1417. }
  1418. spin_unlock_irqrestore(&mtk_console_lock, flags);
  1419. mb(); /*to ensure the setting is written */
  1420. uart->fctl_mode = mode;
  1421. }
  1422. /*---------------------------------------------------------------------------*/
  1423. void mtk_uart_power_up(struct mtk_uart *uart)
  1424. {
  1425. #ifndef CONFIG_MTK_FPGA
  1426. struct mtk_uart_setting *setting;
  1427. #if !defined(CONFIG_MTK_CLKMGR)
  1428. int clk_en_ret = 0;
  1429. #endif /* !defined(CONFIG_MTK_CLKMGR) */
  1430. if (!uart || uart->nport >= UART_NR)
  1431. return;
  1432. setting = uart->setting;
  1433. if (uart->poweron_count > 0) {
  1434. MSG(FUC, "%s(%d)\n", __func__, uart->poweron_count);
  1435. } else {
  1436. #ifdef POWER_FEATURE
  1437. #if !defined(CONFIG_MTK_CLKMGR)
  1438. clk_en_ret = clk_prepare_enable(setting->clk_uart_main);
  1439. if (clk_en_ret) {
  1440. pr_err("[UART%d][CCF]enable clk_uart_main failed. ret:%d, clk_main:%p\n", uart->nport,
  1441. clk_en_ret, setting->clk_uart_main);
  1442. } else {
  1443. pr_debug("[UART%d][CCF]enabled clk_uart%d_main:%p\n", uart->nport, uart->nport,
  1444. setting->clk_uart_main);
  1445. if ((uart != console_port)
  1446. && (uart->tx_mode == UART_TX_VFIFO_DMA || uart->rx_mode == UART_RX_VFIFO_DMA)) {
  1447. clk_en_ret = clk_prepare_enable(clk_uart_dma);
  1448. if (clk_en_ret) {
  1449. pr_err("[UART%d][CCF]enable clk_uart_main failed. ret:%d, clk_dma:%p\n",
  1450. uart->nport, clk_en_ret, clk_uart_dma);
  1451. } else {
  1452. pr_debug("[UART%d][CCF]enabled clk_uart_dma:%p\n", uart->nport, clk_uart_dma);
  1453. }
  1454. }
  1455. }
  1456. #else /* !defined(CONFIG_MTK_CLKMGR) */
  1457. if (0 != enable_clock(setting->pll_id, "UART"))
  1458. MSG(ERR, "power on fail!!\n");
  1459. if ((uart != console_port)
  1460. && (uart->tx_mode == UART_TX_VFIFO_DMA || uart->rx_mode == UART_RX_VFIFO_DMA)) {
  1461. if (0 != enable_clock(PDN_FOR_DMA, "VFIFO"))
  1462. MSG(ERR, "power on dma fail!\n");
  1463. }
  1464. #endif /* !defined(CONFIG_MTK_CLKMGR) */
  1465. uart->poweron_count++;
  1466. #endif
  1467. }
  1468. MSG(FUC, "%s(%d) => up\n", __func__, uart->poweron_count);
  1469. #endif /* End of CONFIG_MTK_FPGA */
  1470. }
  1471. /*---------------------------------------------------------------------------*/
  1472. void mtk_uart_power_down(struct mtk_uart *uart)
  1473. {
  1474. #ifndef CONFIG_MTK_FPGA
  1475. struct mtk_uart_setting *setting;
  1476. if (!uart || uart->nport >= UART_NR)
  1477. return;
  1478. setting = uart->setting;
  1479. if (uart->poweron_count == 0) {
  1480. MSG(FUC, "%s(%d)\n", __func__, uart->poweron_count);
  1481. } else {
  1482. #ifdef POWER_FEATURE
  1483. #if !defined(CONFIG_MTK_CLKMGR)
  1484. pr_debug("[UART%d][CCF]disable clk_uart%d_main:%p\n", uart->nport, uart->nport,
  1485. setting->clk_uart_main);
  1486. clk_disable_unprepare(setting->clk_uart_main);
  1487. if ((uart != console_port)
  1488. && (uart->tx_mode == UART_TX_VFIFO_DMA || uart->rx_mode == UART_RX_VFIFO_DMA)) {
  1489. clk_disable_unprepare(clk_uart_dma);
  1490. pr_debug("[UART%d][CCF]disable clk_uart_dma:%p\n", uart->nport, clk_uart_dma);
  1491. }
  1492. #else /* !defined(CONFIG_MTK_CLKMGR) */
  1493. if (0 != disable_clock(setting->pll_id, "UART"))
  1494. MSG(ERR, "power off fail!!\n");
  1495. if ((uart != console_port)
  1496. && (uart->tx_mode == UART_TX_VFIFO_DMA || uart->rx_mode == UART_RX_VFIFO_DMA)) {
  1497. if (0 != disable_clock(PDN_FOR_DMA, "VFIFO"))
  1498. MSG(ERR, "power off dma fail!\n");
  1499. }
  1500. #endif /* !defined(CONFIG_MTK_CLKMGR) */
  1501. uart->poweron_count--;
  1502. #endif
  1503. MSG(FUC, "%s(%d) => dn\n", __func__, uart->poweron_count);
  1504. }
  1505. #endif /* End of CONFIG_MTK_FPGA */
  1506. }
  1507. /*---------------------------------------------------------------------------*/
  1508. void mtk_uart_config(struct mtk_uart *uart, int datalen, int stop, int parity)
  1509. {
  1510. unsigned long base = uart->base;
  1511. unsigned int val = 0;
  1512. switch (datalen) {
  1513. case 5:
  1514. val |= UART_WLS_5;
  1515. break;
  1516. case 6:
  1517. val |= UART_WLS_6;
  1518. break;
  1519. case 7:
  1520. val |= UART_WLS_7;
  1521. break;
  1522. case 8:
  1523. default:
  1524. val |= UART_WLS_8;
  1525. break;
  1526. }
  1527. if (stop == 2 || (datalen == 5 && stop == 1))
  1528. val |= UART_2_STOP;
  1529. if (parity == 1)
  1530. val |= UART_ODD_PARITY;
  1531. else if (parity == 2)
  1532. val |= UART_EVEN_PARITY;
  1533. reg_sync_writel(val, UART_LCR);
  1534. }
  1535. /*---------------------------------------------------------------------------*/
  1536. unsigned int mtk_uart_read_status(struct mtk_uart *uart)
  1537. {
  1538. unsigned long base = uart->base;
  1539. uart->line_status = UART_READ32(UART_LSR);
  1540. return uart->line_status;
  1541. }
  1542. /*---------------------------------------------------------------------------*/
  1543. unsigned int mtk_uart_read_allow(struct mtk_uart *uart)
  1544. {
  1545. return uart->line_status & UART_LSR_DR;
  1546. }
  1547. /*---------------------------------------------------------------------------*/
  1548. /* Note:
  1549. * 1. FIFO mode:
  1550. * -THRE=1 : when free space in FIFO is reduced blow its trigger level
  1551. * -THRE=0 : when free space in FIFO is more than its trigger level
  1552. * 2. non-FIFO mode:
  1553. * -THRE=1 : when tx holding register is empty
  1554. * -THRE=0 : when tx holding register is not empty
  1555. */
  1556. unsigned int mtk_uart_write_allow(struct mtk_uart *uart)
  1557. {
  1558. unsigned long base = uart->base;
  1559. return UART_READ32(UART_LSR) & UART_LSR_THRE;
  1560. }
  1561. /*---------------------------------------------------------------------------*/
  1562. void mtk_uart_enable_intrs(struct mtk_uart *uart, long mask)
  1563. { /*assume UART_EFR_EN is on */
  1564. unsigned long base = uart->base;
  1565. UART_SET_BITS(mask, UART_IER);
  1566. mb();
  1567. }
  1568. /*---------------------------------------------------------------------------*/
  1569. void mtk_uart_disable_intrs(struct mtk_uart *uart, long mask)
  1570. { /*assume UART_EFR_EN is on */
  1571. unsigned long base = uart->base;
  1572. UART_CLR_BITS(mask, UART_IER);
  1573. mb();
  1574. }
  1575. /*---------------------------------------------------------------------------*/
  1576. unsigned int mtk_uart_read_byte(struct mtk_uart *uart)
  1577. {
  1578. unsigned long base = uart->base;
  1579. return UART_READ32(UART_RBR);
  1580. }
  1581. /*---------------------------------------------------------------------------*/
  1582. void mtk_uart_write_byte(struct mtk_uart *uart, unsigned int byte)
  1583. {
  1584. unsigned long base = uart->base;
  1585. reg_sync_writel(byte, UART_THR);
  1586. }
  1587. /*---------------------------------------------------------------------------*/
  1588. void mtk_uart_usb_rx_sel(unsigned int uart_port, unsigned int enable)
  1589. {
  1590. unsigned long base = mtk_uart_default_settings[uart_port - 1].uart_base;
  1591. reg_sync_writel(enable, UART_RX_SEL);
  1592. }
  1593. /*---------------------------------------------------------------------------*/
  1594. unsigned int mtk_uart_filter_line_status(struct mtk_uart *uart)
  1595. {
  1596. struct uart_port *port = &uart->port;
  1597. unsigned int status;
  1598. unsigned int lsr = uart->line_status;
  1599. mtk_uart_lsr_status[uart->nport] |= lsr;
  1600. status = UART_LSR_BI | UART_LSR_PE | UART_LSR_FE | UART_LSR_OE;
  1601. #ifdef ENABLE_DEBUG
  1602. if ((lsr & UART_LSR_BI) || (lsr & UART_LSR_PE) || (lsr & UART_LSR_FE) || (lsr & UART_LSR_OE)) {
  1603. MSG(ERR, "LSR: BI=%d, FE=%d, PE=%d, OE=%d, DR=%d\n",
  1604. (lsr & UART_LSR_BI) >> 4, (lsr & UART_LSR_FE) >> 3,
  1605. (lsr & UART_LSR_PE) >> 2, (lsr & UART_LSR_OE) >> 1, lsr & UART_LSR_DR);
  1606. }
  1607. #endif
  1608. status &= port->read_status_mask;
  1609. status &= ~port->ignore_status_mask;
  1610. status &= lsr;
  1611. return status;
  1612. }
  1613. /*---------------------------------------------------------------------------*/
  1614. int mtk_uart_get_interrupt(struct mtk_uart *uart)
  1615. {
  1616. unsigned int intrs;
  1617. unsigned long base = uart->base;
  1618. intrs = UART_READ32(UART_IIR);
  1619. return intrs;
  1620. }
  1621. /*---------------------------------------------------------------------------*/
  1622. void mtk_uart_intr_last_check(struct mtk_uart *uart, int intrs)
  1623. {
  1624. }
  1625. /*---------------------------------------------------------------------------*/
  1626. void mtk_uart_get_modem_status(struct mtk_uart *uart)
  1627. {
  1628. unsigned long base = uart->base;
  1629. struct uart_port *port = &uart->port;
  1630. unsigned int status, delta;
  1631. status = UART_READ32(UART_MSR);
  1632. status &= UART_MSR_DSR | UART_MSR_CTS | UART_MSR_DCD | UART_MSR_RI;
  1633. MSG(INFO, "MSR: DCD(%d), RI(%d), DSR(%d), CTS(%d)\n",
  1634. status & UART_MSR_DCD ? 1 : 0,
  1635. status & UART_MSR_RI ? 1 : 0, status & UART_MSR_DSR ? 1 : 0, status & UART_MSR_CTS ? 1 : 0);
  1636. delta = status ^ uart->old_status;
  1637. if (!delta)
  1638. return;
  1639. if (uart->ms_enable) {
  1640. if (delta & UART_MSR_DCD)
  1641. uart_handle_dcd_change(port, status & UART_MSR_DCD);
  1642. if (delta & UART_MSR_CTS)
  1643. uart_handle_cts_change(port, status & UART_MSR_CTS);
  1644. if (delta & UART_MSR_DSR)
  1645. port->icount.dsr++;
  1646. if (delta & UART_MSR_RI)
  1647. port->icount.rng++;
  1648. }
  1649. uart->old_status = status;
  1650. }
  1651. /*---------------------------------------------------------------------------*/
  1652. void mtk_uart_rx_pre_handler(struct mtk_uart *uart, int intrs)
  1653. {
  1654. unsigned long base = uart->base;
  1655. u32 tmp, lsr_status;
  1656. if (intrs == UART_IIR_CTI) {
  1657. /* IMPORTANT: this is a fix for HW Bug.
  1658. * Without the function call, the RX data timeout interrupt will be
  1659. * triggered again and again.Hence, the purpose of this function call
  1660. * is to clear Rx data timeout interrupt
  1661. */
  1662. tmp = UART_READ32(UART_DMA_EN);
  1663. #if defined(ENABLE_VFIFO)
  1664. MSG(DMA, "rx timeout: %x, %4d\n", tmp, mtk_uart_vfifo_get_counts(uart->rx_vfifo));
  1665. #endif
  1666. /* mtk_uart_dma_vfifo_rx_tasklet((unsigned long)uart); */
  1667. } else if ((intrs == UART_IIR_RLS) && !uart->read_allow(uart)) {
  1668. tmp = UART_READ32(UART_LSR);
  1669. MSG(DMA, "LSR=%X\n", tmp);
  1670. lsr_status = get_uart_lsr_status(uart->nport);
  1671. lsr_status |= tmp;
  1672. set_uart_lsr_status(uart->nport, lsr_status);
  1673. } else {
  1674. #if defined(ENABLE_VFIFO)
  1675. MSG(DMA, "RX = %4d, [%4x]\n", mtk_uart_vfifo_get_counts(uart->rx_vfifo), intrs);
  1676. #endif
  1677. }
  1678. }
  1679. /* set the modem control lines. */
  1680. void mtk_uart_set_mctrl(struct uart_port *port, unsigned int mctrl)
  1681. {
  1682. struct mtk_uart *uart = (struct mtk_uart *)port;
  1683. unsigned long base = uart->base;
  1684. unsigned int val;
  1685. val = UART_READ32(UART_MCR);
  1686. if (mctrl & TIOCM_DTR)
  1687. val |= UART_MCR_DTR;
  1688. else
  1689. val &= ~UART_MCR_DTR;
  1690. if (mctrl & TIOCM_RTS)
  1691. val |= UART_MCR_RTS;
  1692. else
  1693. val &= ~UART_MCR_RTS;
  1694. if (mctrl & TIOCM_OUT1)
  1695. val |= UART_MCR_OUT1;
  1696. else
  1697. val &= ~UART_MCR_OUT1;
  1698. if (mctrl & TIOCM_OUT2)
  1699. val |= UART_MCR_OUT2;
  1700. else
  1701. val &= ~UART_MCR_OUT2;
  1702. if (mctrl & TIOCM_LOOP)
  1703. val |= UART_MCR_LOOP;
  1704. else
  1705. val &= ~UART_MCR_LOOP;
  1706. reg_sync_writel(val, UART_MCR);
  1707. MSG(CFG, "MCR: DTR(%d), RTS(%d), OUT1(%d), OUT2(%d), LOOP(%d)\n",
  1708. val & UART_MCR_DTR ? 1 : 0,
  1709. val & UART_MCR_RTS ? 1 : 0,
  1710. val & UART_MCR_OUT1 ? 1 : 0, val & UART_MCR_OUT2 ? 1 : 0, val & UART_MCR_LOOP ? 1 : 0);
  1711. }
  1712. /*---------------------------------------------------------------------------*/
  1713. /* return the current state of modem contrl inputs */
  1714. unsigned int mtk_uart_get_mctrl(struct uart_port *port)
  1715. {
  1716. struct mtk_uart *uart = (struct mtk_uart *)port;
  1717. unsigned long base = uart->base;
  1718. unsigned int status;
  1719. unsigned int result = 0;
  1720. status = UART_READ32(UART_MSR);
  1721. MSG(INFO, "MSR: DCD(%d), RI(%d), DSR(%d), CTS(%d)\n",
  1722. status & UART_MSR_DCD ? 1 : 0,
  1723. status & UART_MSR_RI ? 1 : 0, status & UART_MSR_DSR ? 1 : 0, status & UART_MSR_CTS ? 1 : 0);
  1724. if (status & UART_MSR_DCD)
  1725. result |= TIOCM_CAR; /* DCD. (data carrier detect) */
  1726. if (status & UART_MSR_RI)
  1727. result |= TIOCM_RI;
  1728. if (status & UART_MSR_DSR)
  1729. result |= TIOCM_DSR;
  1730. if (status & UART_MSR_CTS)
  1731. result |= TIOCM_CTS;
  1732. status = UART_READ32(UART_MCR);
  1733. MSG(INFO, "MSR: OUT1(%d), OUT2(%d), LOOP(%d)\n",
  1734. status & UART_MCR_OUT1 ? 1 : 0, status & UART_MCR_OUT2 ? 1 : 0, status & UART_MCR_LOOP ? 1 : 0);
  1735. if (status & UART_MCR_OUT2)
  1736. result |= TIOCM_OUT2;
  1737. if (status & UART_MCR_OUT1)
  1738. result |= TIOCM_OUT1;
  1739. if (status & UART_MCR_LOOP)
  1740. result |= TIOCM_LOOP;
  1741. return result;
  1742. }
  1743. /*---------------------------------------------------------------------------*/
  1744. /* stop receiving characters
  1745. * note: port->lock has been taken by serial core layer
  1746. */
  1747. void mtk_uart_stop_rx(struct uart_port *port)
  1748. {
  1749. struct mtk_uart *uart = (struct mtk_uart *)port;
  1750. MSG_FUNC_ENTRY();
  1751. if (uart->rx_mode == UART_NON_DMA) {
  1752. mtk_uart_disable_intrs(uart, UART_IER_ERBFI);
  1753. } else {
  1754. #if defined(ENABLE_VFIFO)
  1755. struct mtk_uart_dma *dma = &uart->dma_rx;
  1756. /* According to serial_core.c, stop_rx is to stop interrupt
  1757. * Hence, RX received interrupt and dma interrupt is clear
  1758. */
  1759. mtk_uart_disable_intrs(uart, UART_IER_ERBFI);
  1760. reg_sync_writel(VFF_INT_EN_CLR_B, VFF_INT_EN(dma->vfifo->base));
  1761. atomic_set(&dma->free, 1);
  1762. complete(&dma->done);
  1763. #endif
  1764. }
  1765. uart->rx_stop = 1;
  1766. }
  1767. /*---------------------------------------------------------------------------*/
  1768. /* control the transmission of a break signal */
  1769. void mtk_uart_break_ctl(struct uart_port *port, int break_state)
  1770. {
  1771. struct mtk_uart *uart = (struct mtk_uart *)port;
  1772. unsigned long base = uart->base;
  1773. unsigned long flags;
  1774. MSG_FUNC_ENTRY();
  1775. spin_lock_irqsave(&port->lock, flags);
  1776. if (break_state)
  1777. UART_SET_BITS(UART_LCR_BREAK, UART_LCR);
  1778. else
  1779. UART_CLR_BITS(UART_LCR_BREAK, UART_LCR);
  1780. mb();
  1781. spin_unlock_irqrestore(&port->lock, flags);
  1782. }
  1783. /*---------------------------------------------------------------------------*/
  1784. #ifdef ATE_FACTORY_ENABLE
  1785. void mtk_uart_is_ate_factory_mode(struct mtk_uart *uart)
  1786. {
  1787. if ((0 == uart->nport) && (ATE_FACTORY_MODE == get_boot_mode())) {
  1788. unsigned long base = uart->base;
  1789. /* MD may set these bit, reset it */
  1790. UART_CLR_BITS(UART_RX_DMA_EN | UART_TO_CNT_AUTORST | UART_TX_DMA_EN, UART_DMA_EN);
  1791. mb();
  1792. }
  1793. }
  1794. #endif /* ATE_FACTORY_ENABLE */
  1795. /*---------------------------------------------------------------------------*/
  1796. void mtk_uart_enable_sleep(struct mtk_uart *uart)
  1797. {
  1798. unsigned long base = uart->base;
  1799. reg_sync_writel(0x1, UART_SLEEP_EN);
  1800. pr_debug("SLEEP_EN = 0x%x\n", UART_READ32(UART_SLEEP_EN));
  1801. }
  1802. /*---------------------------------------------------------------------------*/
  1803. #ifdef ENABLE_RAW_DATA_DUMP
  1804. void mtk_uart_init_debug_spinlock(void)
  1805. {
  1806. spin_lock_init(&tx_history_lock);
  1807. spin_lock_init(&rx_history_lock);
  1808. }
  1809. void reset_tx_raw_data(struct mtk_uart *uart)
  1810. {
  1811. unsigned long flags;
  1812. if (uart->nport == 2) {
  1813. spin_lock_irqsave(&tx_history_lock, flags);
  1814. if (!stop_update) {
  1815. curr_record++;
  1816. curr_idx = 0;
  1817. if (curr_record >= RECORD_NUMBER)
  1818. curr_record = 0;
  1819. uart_history_cnt[curr_record] = 0;
  1820. for (curr_idx = 0; curr_idx < RECORD_LENGTH; curr_idx++)
  1821. uart_history[curr_record][curr_idx] = 0;
  1822. curr_idx = 0;
  1823. }
  1824. spin_unlock_irqrestore(&tx_history_lock, flags);
  1825. }
  1826. }
  1827. static void save_tx_raw_data(struct mtk_uart *uart, void *addr)
  1828. {
  1829. unsigned long flags;
  1830. if (uart->nport == 2) {
  1831. spin_lock_irqsave(&tx_history_lock, flags);
  1832. if (!stop_update) {
  1833. if (curr_idx < RECORD_LENGTH) {
  1834. uart_history[curr_record][curr_idx] = UART_READ8(addr);
  1835. curr_idx++;
  1836. uart_history_cnt[curr_record] = curr_idx;
  1837. }
  1838. }
  1839. spin_unlock_irqrestore(&tx_history_lock, flags);
  1840. }
  1841. }
  1842. static void reset_rx_raw_data(struct mtk_uart *uart)
  1843. {
  1844. unsigned long flags;
  1845. if (uart->nport == 2) {
  1846. spin_lock_irqsave(&rx_history_lock, flags);
  1847. if (!stop_update) {
  1848. curr_rx_record++;
  1849. curr_rx_idx = 0;
  1850. if (curr_rx_record >= RECORD_NUMBER)
  1851. curr_rx_record = 0;
  1852. uart_rx_history_cnt[curr_rx_record] = 0;
  1853. for (curr_rx_idx = 0; curr_rx_idx < RECORD_LENGTH; curr_rx_idx++)
  1854. uart_rx_history[curr_rx_record][curr_rx_idx] = 0;
  1855. curr_rx_idx = 0;
  1856. }
  1857. spin_unlock_irqrestore(&rx_history_lock, flags);
  1858. }
  1859. }
  1860. static void save_rx_raw_data(struct mtk_uart *uart, const unsigned char *chars, size_t size)
  1861. {
  1862. unsigned long flags;
  1863. int i;
  1864. if (uart->nport == 2) {
  1865. spin_lock_irqsave(&rx_history_lock, flags);
  1866. if (!stop_update) {
  1867. for (i = 0; (curr_rx_idx < RECORD_LENGTH) && (i < size); i++, curr_rx_idx++)
  1868. uart_rx_history[curr_rx_record][curr_rx_idx] = chars[i];
  1869. uart_rx_history_cnt[curr_rx_record] = curr_rx_idx;
  1870. }
  1871. spin_unlock_irqrestore(&rx_history_lock, flags);
  1872. }
  1873. }
  1874. void stop_log(void)
  1875. {
  1876. unsigned long flags;
  1877. unsigned long rx_flags;
  1878. spin_lock_irqsave(&tx_history_lock, flags);
  1879. spin_lock_irqsave(&rx_history_lock, rx_flags);
  1880. stop_update = 1;
  1881. spin_unlock_irqrestore(&rx_history_lock, rx_flags);
  1882. spin_unlock_irqrestore(&tx_history_lock, flags);
  1883. }
  1884. EXPORT_SYMBOL(stop_log);
  1885. void dump_uart_history(void)
  1886. {
  1887. int i, j;
  1888. unsigned long flags;
  1889. unsigned long rx_flags;
  1890. int curr, rx_curr;
  1891. spin_lock_irqsave(&tx_history_lock, flags);
  1892. spin_lock_irqsave(&rx_history_lock, rx_flags);
  1893. stop_update = 1;
  1894. spin_unlock_irqrestore(&rx_history_lock, rx_flags);
  1895. spin_unlock_irqrestore(&tx_history_lock, flags);
  1896. curr = curr_record + 1;
  1897. if (curr >= RECORD_NUMBER)
  1898. curr = 0;
  1899. rx_curr = curr_rx_record + 1;
  1900. if (rx_curr >= RECORD_NUMBER)
  1901. rx_curr = 0;
  1902. for (i = 0; i < RECORD_NUMBER; i++) {
  1903. pr_debug("\nTX rec%03d:", i);
  1904. for (j = 0; j < uart_history_cnt[curr]; j++) {
  1905. if ((j % 0xF) == 0)
  1906. pr_debug("\n");
  1907. pr_debug("%02x ", uart_history[curr][j]);
  1908. }
  1909. msleep(20);
  1910. curr++;
  1911. if (curr >= RECORD_NUMBER)
  1912. curr = 0;
  1913. }
  1914. for (i = 0; i < RECORD_NUMBER; i++) {
  1915. pr_debug("\nRX rec%03d:", i);
  1916. for (j = 0; j < uart_rx_history_cnt[rx_curr]; j++) {
  1917. if ((j % 0xF) == 0)
  1918. pr_debug("\n");
  1919. pr_debug("%02x ", uart_rx_history[rx_curr][j]);
  1920. }
  1921. msleep(20);
  1922. rx_curr++;
  1923. if (rx_curr >= RECORD_NUMBER)
  1924. rx_curr = 0;
  1925. }
  1926. }
  1927. EXPORT_SYMBOL(dump_uart_history);
  1928. #else
  1929. void stop_log(void)
  1930. {
  1931. /* dummy API */
  1932. }
  1933. void dump_uart_history(void)
  1934. {
  1935. /* dummy API */
  1936. }
  1937. #endif
  1938. /*---------------------------------------------------------------------------*/
  1939. void mtk_uart_save(struct mtk_uart *uart)
  1940. {
  1941. #ifdef CONFIG_PM
  1942. unsigned long base;
  1943. unsigned long flags;
  1944. base = uart->base;
  1945. /* DLL may be changed by console write. To avoid this, use spinlock */
  1946. spin_lock_irqsave(&mtk_console_lock, flags);
  1947. uart->registers.lcr = UART_READ32(UART_LCR);
  1948. reg_sync_writel(0xbf, UART_LCR);
  1949. uart->registers.efr = UART_READ32(UART_EFR);
  1950. reg_sync_writel(uart->registers.lcr, UART_LCR);
  1951. uart->registers.fcr = UART_READ32(UART_FCR_RD);
  1952. /* baudrate */
  1953. uart->registers.highspeed = UART_READ32(UART_HIGHSPEED);
  1954. uart->registers.fracdiv_l = UART_READ32(UART_FRACDIV_L);
  1955. uart->registers.fracdiv_m = UART_READ32(UART_FRACDIV_M);
  1956. reg_sync_writel(uart->registers.lcr | UART_LCR_DLAB, UART_LCR);
  1957. uart->registers.dll = UART_READ32(UART_DLL);
  1958. uart->registers.dlh = UART_READ32(UART_DLH);
  1959. reg_sync_writel(uart->registers.lcr, UART_LCR);
  1960. uart->registers.sample_count = UART_READ32(UART_SAMPLE_COUNT);
  1961. uart->registers.sample_point = UART_READ32(UART_SAMPLE_POINT);
  1962. uart->registers.guard = UART_READ32(UART_GUARD);
  1963. /* flow control */
  1964. uart->registers.escape_en = UART_READ32(UART_ESCAPE_EN);
  1965. uart->registers.mcr = UART_READ32(UART_MCR);
  1966. uart->registers.ier = UART_READ32(UART_IER);
  1967. uart->registers.rx_sel = UART_READ32(UART_RX_SEL);
  1968. spin_unlock_irqrestore(&mtk_console_lock, flags);
  1969. #endif
  1970. }
  1971. void mtk_uart_restore(void)
  1972. {
  1973. #ifdef CONFIG_PM
  1974. unsigned long base;
  1975. unsigned long flags;
  1976. struct mtk_uart *uart;
  1977. uart = console_port;
  1978. base = uart->base;
  1979. mtk_uart_power_up(uart);
  1980. spin_lock_irqsave(&mtk_console_lock, flags);
  1981. reg_sync_writel(0xbf, UART_LCR);
  1982. reg_sync_writel(uart->registers.efr, UART_EFR);
  1983. reg_sync_writel(uart->registers.lcr, UART_LCR);
  1984. reg_sync_writel(uart->registers.fcr, UART_FCR);
  1985. /* baudrate */
  1986. reg_sync_writel(uart->registers.highspeed, UART_HIGHSPEED);
  1987. reg_sync_writel(uart->registers.fracdiv_l, UART_FRACDIV_L);
  1988. reg_sync_writel(uart->registers.fracdiv_m, UART_FRACDIV_M);
  1989. reg_sync_writel(uart->registers.lcr | UART_LCR_DLAB, UART_LCR);
  1990. reg_sync_writel(uart->registers.dll, UART_DLL);
  1991. reg_sync_writel(uart->registers.dlh, UART_DLH);
  1992. reg_sync_writel(uart->registers.lcr, UART_LCR);
  1993. reg_sync_writel(uart->registers.sample_count, UART_SAMPLE_COUNT);
  1994. reg_sync_writel(uart->registers.sample_point, UART_SAMPLE_POINT);
  1995. reg_sync_writel(uart->registers.guard, UART_GUARD);
  1996. /* flow control */
  1997. reg_sync_writel(uart->registers.escape_en, UART_ESCAPE_EN);
  1998. reg_sync_writel(uart->registers.mcr, UART_MCR);
  1999. reg_sync_writel(uart->registers.ier, UART_IER);
  2000. reg_sync_writel(uart->registers.rx_sel, UART_RX_SEL);
  2001. spin_unlock_irqrestore(&mtk_console_lock, flags);
  2002. #endif
  2003. }
  2004. #if defined(CONFIG_PM) && !defined(CONFIG_MTK_FPGA) && !defined(CONFIG_MTK_LEGACY)
  2005. void switch_uart_gpio(int uartport, int gpioopid)
  2006. {
  2007. struct pinctrl *ppinctrl = NULL;
  2008. struct pinctrl_state *pins_uart = NULL;
  2009. /*pr_debug("[UART%d][PinC]%s(%d, %d)+\n", uartport, __func__, uartport, gpioopid);*/
  2010. if ((uartport >= UART_NR) || (uartport > 3)) {
  2011. pr_err("[UART%d][PinC]%s: port error!!\n", uartport, __func__);
  2012. return;
  2013. }
  2014. ppinctrl = ppinctrl_uart[uartport];
  2015. if (IS_ERR(ppinctrl)) {
  2016. pr_err("[UART%d][PinC]%s get pinctrl fail!! err:%ld\n", uartport, __func__, PTR_ERR(ppinctrl));
  2017. return;
  2018. }
  2019. pins_uart = pinctrl_lookup_state(ppinctrl, uart_gpio_cmds[uartport][gpioopid]);
  2020. /*pr_debug("[UART%d][PinC]pinctrl_lookup_state[%s] - pins_uart[%p]\n", uartport,
  2021. uart_gpio_cmds[uartport][gpioopid], pins_uart);*/
  2022. if (IS_ERR(pins_uart)) {
  2023. pr_err("[UART%d][PinC]%s pinctrl_lockup(%d, %s) fail!! pctrl:%p, err:%ld\n", uartport, __func__,
  2024. uartport, uart_gpio_cmds[uartport][gpioopid], ppinctrl, PTR_ERR(pins_uart));
  2025. return;
  2026. }
  2027. pinctrl_select_state(ppinctrl, pins_uart);
  2028. /*pr_debug("[UART%d][PinC]%s(%d, %d)- Succeeded!\n", uartport, __func__, uartport, gpioopid);*/
  2029. }
  2030. #endif /* !defined(CONFIG_MTK_LEGACY) && !defined(CONFIG_MTK_FPGA) */
  2031. void mtk_uart_switch_tx_to_gpio(struct mtk_uart *uart)
  2032. {
  2033. #if defined(CONFIG_PM) && !defined(CONFIG_MTK_FPGA) && !defined(CONFIG_MTK_LEGACY)
  2034. int uart_gpio_op = 0; /* URAT RX SET */
  2035. #endif
  2036. int uartport = uart->nport;
  2037. /*pr_debug("[UART]%s port:0x%x\n", __func__, uartport);*/
  2038. if (uartport > 3) {
  2039. pr_err("[UART%d] %s fail!! port:%d", uartport, __func__, uartport);
  2040. return;
  2041. }
  2042. #if defined(CONFIG_PM) && !defined(CONFIG_MTK_FPGA)
  2043. #if defined(CONFIG_MTK_LEGACY)
  2044. switch (uart->nport) {
  2045. case 0:
  2046. #ifdef GPIO_UART_UTXD0_PIN
  2047. mt_set_gpio_out(GPIO_UART_UTXD0_PIN, GPIO_OUT_ONE);
  2048. mt_set_gpio_mode(GPIO_UART_UTXD0_PIN, GPIO_UART_UTXD0_PIN_M_GPIO);
  2049. #else
  2050. pr_debug("GPIO_UART_UTXD0_PIN is not properly set\n");
  2051. #endif
  2052. break;
  2053. case 1:
  2054. #ifdef GPIO_UART_UTXD1_PIN
  2055. mt_set_gpio_out(GPIO_UART_UTXD1_PIN, GPIO_OUT_ONE);
  2056. mt_set_gpio_mode(GPIO_UART_UTXD1_PIN, GPIO_UART_UTXD1_PIN_M_GPIO);
  2057. #else
  2058. pr_debug("GPIO_UART_UTXD1_PIN is not properly set\n");
  2059. #endif
  2060. break;
  2061. case 2:
  2062. #ifdef GPIO_UART_UTXD2_PIN
  2063. mt_set_gpio_out(GPIO_UART_UTXD2_PIN, GPIO_OUT_ONE);
  2064. mt_set_gpio_mode(GPIO_UART_UTXD2_PIN, GPIO_UART_UTXD2_PIN_M_GPIO);
  2065. #else
  2066. pr_debug("GPIO_UART_UTXD2_PIN is not properly set\n");
  2067. #endif
  2068. break;
  2069. case 3:
  2070. #ifdef GPIO_UART_UTXD3_PIN
  2071. mt_set_gpio_out(GPIO_UART_UTXD3_PIN, GPIO_OUT_ONE);
  2072. mt_set_gpio_mode(GPIO_UART_UTXD3_PIN, GPIO_UART_UTXD3_PIN_M_GPIO);
  2073. #else
  2074. pr_debug("GPIO_UART_UTXD3_PIN is not properly set\n");
  2075. #endif
  2076. break;
  2077. default:
  2078. break;
  2079. }
  2080. #else /* defined(CONFIG_MTK_LEGACY)*/
  2081. /*pr_debug("[UART%d][PinC]%s call switch_uart_gpio(%d, %d)\n", uartport,
  2082. __func__, uartport, uart_gpio_op);*/
  2083. switch_uart_gpio(uartport, uart_gpio_op);
  2084. #endif /* defined(CONFIG_MTK_LEGACY) */
  2085. #endif
  2086. }
  2087. /*---------------------------------------------------------------------------*/
  2088. void mtk_uart_switch_to_tx(struct mtk_uart *uart)
  2089. {
  2090. #if defined(CONFIG_PM) && !defined(CONFIG_MTK_FPGA) && !defined(CONFIG_MTK_LEGACY)
  2091. int uart_gpio_op = 0; /* URAT RX SET */
  2092. #endif
  2093. int uartport = uart->nport;
  2094. /*pr_debug("[UART]%s port:0x%x\n", __func__, uartport);*/
  2095. if (uartport > 3) {
  2096. pr_err("[UART%d] %s fail!! port:%d", uartport, __func__, uartport);
  2097. return;
  2098. }
  2099. #if defined(CONFIG_PM) && !defined(CONFIG_MTK_FPGA)
  2100. #if defined(CONFIG_MTK_LEGACY)
  2101. switch (uart->nport) {
  2102. case 0:
  2103. #ifdef GPIO_UART_UTXD0_PIN
  2104. mt_set_gpio_mode(GPIO_UART_UTXD0_PIN, GPIO_UART_UTXD0_PIN_M_UTXD);
  2105. #else
  2106. pr_debug("GPIO_UART_UTXD0_PIN is not properly set p2\n");
  2107. #endif
  2108. break;
  2109. case 1:
  2110. #ifdef GPIO_UART_UTXD1_PIN
  2111. mt_set_gpio_mode(GPIO_UART_UTXD1_PIN, GPIO_UART_UTXD1_PIN_M_UTXD);
  2112. #else
  2113. pr_debug("GPIO_UART_UTXD1_PIN is not properly set p2\n");
  2114. #endif
  2115. break;
  2116. case 2:
  2117. #ifdef GPIO_UART_UTXD2_PIN
  2118. mt_set_gpio_mode(GPIO_UART_UTXD2_PIN, GPIO_UART_UTXD2_PIN_M_UTXD);
  2119. #else
  2120. pr_debug("GPIO_UART_UTXD2_PIN is not properly set p2\n");
  2121. #endif
  2122. break;
  2123. case 3:
  2124. #ifdef GPIO_UART_UTXD3_PIN
  2125. mt_set_gpio_mode(GPIO_UART_UTXD3_PIN, GPIO_UART_UTXD3_PIN_M_UTXD);
  2126. #else
  2127. pr_debug("GPIO_UART_UTXD3_PIN is not properly set p3\n");
  2128. #endif
  2129. break;
  2130. default:
  2131. break;
  2132. }
  2133. #else /* defined(CONFIG_MTK_LEGACY) */
  2134. /*pr_debug("[UART%d][PinC]%s call switch_uart_gpio(%d, %d)\n", uartport,
  2135. __func__, uartport, uart_gpio_op);*/
  2136. switch_uart_gpio(uartport, uart_gpio_op);
  2137. #endif /* defined(CONFIG_MTK_LEGACY) */
  2138. #endif
  2139. }
  2140. /*---------------------------------------------------------------------------*/
  2141. void mtk_uart_switch_rx_to_gpio(struct mtk_uart *uart)
  2142. {
  2143. #if defined(CONFIG_PM) && !defined(CONFIG_MTK_FPGA) && !defined(CONFIG_MTK_LEGACY)
  2144. int uart_gpio_op = 1; /* URAT RX Clear */
  2145. #endif
  2146. int uartport = uart->nport;
  2147. /*pr_debug("[UART]%s port:0x%x\n", __func__, uartport);*/
  2148. if (uartport > 3) {
  2149. pr_err("[UART%d] %s fail!! port:%d", uartport, __func__, uartport);
  2150. return;
  2151. }
  2152. #if defined(CONFIG_PM) && !defined(CONFIG_MTK_FPGA)
  2153. #if defined(CONFIG_MTK_LEGACY)
  2154. switch (uart->nport) {
  2155. case 0:
  2156. #ifdef GPIO_UART_URXD0_PIN
  2157. mt_set_gpio_mode(GPIO_UART_URXD0_PIN, GPIO_UART_URXD0_PIN_M_GPIO);
  2158. #else
  2159. pr_debug("GPIO_UART_URXD0_PIN is not properly set\n");
  2160. #endif
  2161. break;
  2162. case 1:
  2163. #ifdef GPIO_UART_URXD1_PIN
  2164. mt_set_gpio_mode(GPIO_UART_URXD1_PIN, GPIO_UART_URXD1_PIN_M_GPIO);
  2165. #else
  2166. pr_debug("GPIO_UART_URXD1_PIN is not properly set\n");
  2167. #endif
  2168. break;
  2169. case 2:
  2170. #ifdef GPIO_UART_URXD2_PIN
  2171. mt_set_gpio_mode(GPIO_UART_URXD2_PIN, GPIO_UART_URXD2_PIN_M_GPIO);
  2172. #else
  2173. pr_debug("GPIO_UART_URXD2_PIN is not properly set\n");
  2174. #endif
  2175. break;
  2176. case 3:
  2177. #ifdef GPIO_UART_URXD3_PIN
  2178. mt_set_gpio_mode(GPIO_UART_URXD3_PIN, GPIO_UART_URXD3_PIN_M_GPIO);
  2179. #else
  2180. pr_debug("GPIO_UART_URXD3_PIN is not properly set\n");
  2181. #endif
  2182. break;
  2183. default:
  2184. break;
  2185. }
  2186. #else /* defined(CONFIG_MTK_LEGACY) */
  2187. /*pr_debug("[UART%d][PinC]%s call switch_uart_gpio(%d, %d)\n", uartport,
  2188. __func__, uartport, uart_gpio_op);*/
  2189. switch_uart_gpio(uartport, uart_gpio_op);
  2190. #endif /* defined(CONFIG_MTK_LEGACY) */
  2191. #endif
  2192. }
  2193. /*---------------------------------------------------------------------------*/
  2194. void mtk_uart_switch_to_rx(struct mtk_uart *uart)
  2195. {
  2196. #if defined(CONFIG_PM) && !defined(CONFIG_MTK_FPGA) && !defined(CONFIG_MTK_LEGACY)
  2197. int uart_gpio_op = 0; /* URAT RX SET */
  2198. #endif
  2199. int uartport = uart->nport;
  2200. /*pr_debug("[UART]%s port:0x%x\n", __func__, uartport);*/
  2201. if (uartport > 3) {
  2202. pr_err("[UART%d] %s fail!! port:%d", uartport, __func__, uartport);
  2203. return;
  2204. }
  2205. #if defined(CONFIG_PM) && !defined(CONFIG_MTK_FPGA)
  2206. #if defined(CONFIG_MTK_LEGACY)
  2207. switch (uartport) {
  2208. case 0:
  2209. #ifdef GPIO_UART_URXD0_PIN
  2210. mt_set_gpio_mode(GPIO_UART_URXD0_PIN, GPIO_UART_URXD0_PIN_M_URXD);
  2211. #else /* GPIO_UART_URXD0_PIN */
  2212. pr_debug("GPIO_UART_URXD0_PIN is not properly set p2\n");
  2213. #endif /* GPIO_UART_URXD0_PIN */
  2214. break;
  2215. case 1:
  2216. #ifdef GPIO_UART_URXD1_PIN
  2217. mt_set_gpio_mode(GPIO_UART_URXD1_PIN, GPIO_UART_URXD1_PIN_M_URXD);
  2218. #else /* GPIO_UART_URXD1_PIN */
  2219. pr_debug("GPIO_UART_URXD1_PIN is not properly set p2\n");
  2220. #endif /* GPIO_UART_URXD1_PIN */
  2221. break;
  2222. case 2:
  2223. #ifdef GPIO_UART_URXD2_PIN
  2224. mt_set_gpio_mode(GPIO_UART_URXD2_PIN, GPIO_UART_URXD2_PIN_M_URXD);
  2225. #else
  2226. pr_debug("GPIO_UART_URXD2_PIN is not properly set p2\n");
  2227. #endif
  2228. break;
  2229. case 3:
  2230. #ifdef GPIO_UART_URXD3_PIN
  2231. mt_set_gpio_mode(GPIO_UART_URXD3_PIN, GPIO_UART_URXD3_PIN_M_URXD);
  2232. #else
  2233. pr_debug("GPIO_UART_URXD3_PIN is not properly set p2\n");
  2234. #endif
  2235. break;
  2236. default:
  2237. break;
  2238. }
  2239. #else /* defined(CONFIG_MTK_LEGACY) */
  2240. /*pr_debug("[UART%d][PinC]%s call switch_uart_gpio(%d, %d)\n", uartport,
  2241. __func__, uartport, uart_gpio_op);*/
  2242. switch_uart_gpio(uartport, uart_gpio_op);
  2243. #endif /* defined(CONFIG_MTK_LEGACY) */
  2244. #endif
  2245. }
  2246. /*---------------------------------------------------------------------------*/
  2247. void mtk_uart_enable_dpidle(struct mtk_uart *uart)
  2248. {
  2249. enable_dpidle_by_bit(uart->setting->pll_id);
  2250. enable_soidle_by_bit(uart->setting->pll_id);
  2251. }
  2252. /*---------------------------------------------------------------------------*/
  2253. void mtk_uart_disable_dpidle(struct mtk_uart *uart)
  2254. {
  2255. disable_dpidle_by_bit(uart->setting->pll_id);
  2256. disable_soidle_by_bit(uart->setting->pll_id);
  2257. }
  2258. /*---------------------------------------------------------------------------*/
  2259. int mtk_uart_plat_info_query(const char str[])
  2260. {
  2261. return 0;
  2262. }