MT6755_DSI0_B60384.cmm 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670
  1. ;------------------------------------------------------------------------
  2. ; PHY Timing Control
  3. ;------------------------------------------------------------------------
  4. ;PLL freq = 26x(fbkdiv)x(prediv)/(posdiv)
  5. ; prediv = 0:/1, 1:/2, 2,3:/4
  6. ; posdiv = 0:/1, 1:/2, 2:/4, 3:/8, 4:/16
  7. ; txdiv0,txdiv1 is removed from B60384
  8. &fbkdiv=0x09
  9. &prediv=0x00
  10. &posdiv=0x03
  11. ;------------------------------------------------------------------------
  12. ; Address define (Project dependant)
  13. ;------------------------------------------------------------------------
  14. ;;do K2_DSI0_address_def.cmm
  15. ;------------------------------------------------------------------------
  16. ; MMSYS register map
  17. ;------------------------------------------------------------------------
  18. &mmsys_base=0x14000000
  19. &MMSYS_CG_CLR0=&mmsys_base+0x00108
  20. &MMSYS_CG_CLR1=&mmsys_base+0x00118
  21. &LCM_RST_B=&mmsys_base+0x00150
  22. ;------------------------------------------------------------------------
  23. ; I2C register map
  24. ;------------------------------------------------------------------------
  25. &i2c_base=0x14019000
  26. ;------------------------------------------------------------------------
  27. ; MIPI TX config register map
  28. ;------------------------------------------------------------------------
  29. &mipi_tx_config_base=0x10215000
  30. &DSI_CON=&mipi_tx_config_base+0x000
  31. &DSI_CLOCK_LANE=&mipi_tx_config_base+0x004
  32. &DSI_DATA_LANE_0=&mipi_tx_config_base+0x008
  33. &DSI_DATA_LANE_1=&mipi_tx_config_base+0x00c
  34. &DSI_DATA_LANE_2=&mipi_tx_config_base+0x010
  35. &DSI_DATA_LANE_3=&mipi_tx_config_base+0x014
  36. &DSI_TOP_CON=&mipi_tx_config_base+0x040
  37. &DSI_BG_CON=&mipi_tx_config_base+0x044
  38. &DSI_PLL_CON0=&mipi_tx_config_base+0x050
  39. &DSI_PLL_CON1=&mipi_tx_config_base+0x054
  40. &DSI_PLL_CON2=&mipi_tx_config_base+0x058
  41. &DSI_PLL_CON3=&mipi_tx_config_base+0x05c
  42. &DSI_PLL_CHG=&mipi_tx_config_base+0x060
  43. &DSI_PLL_TOP=&mipi_tx_config_base+0x064
  44. &DSI_PLL_PWR=&mipi_tx_config_base+0x068
  45. &DSI_GPI_EN=&mipi_tx_config_base+0x074
  46. &DSI_GPI_PULL=&mipi_tx_config_base+0x078
  47. &DSI_PHY_SEL=&mipi_tx_config_base+0x07c
  48. &DSI_SW_CTRL_EN=&mipi_tx_config_base+0x080
  49. &DSI_SW_CTRL_CON0=&mipi_tx_config_base+0x084
  50. &DSI_SW_CTRL_CON1=&mipi_tx_config_base+0x088
  51. &DSI_SW_CTRL_CON2=&mipi_tx_config_base+0x08c
  52. &DSI_DBG_CON=&mipi_tx_config_base+0x090
  53. &DSI_DBG_OUT=&mipi_tx_config_base+0x094
  54. &DSI_APB_ASYNC_STA=&mipi_tx_config_base+0x098
  55. ;------------------------------------------------------------------------
  56. ; MIPI RX config register map
  57. ;------------------------------------------------------------------------
  58. &mipi_rx_ana_base=0x10217000
  59. &mipi_rx_config_base=0x15008000
  60. ;------------------------------------------------------------------------
  61. ; DSI register map
  62. ;------------------------------------------------------------------------
  63. &DSI_BASE=&mmsys_base+0x00011000
  64. &DSI_START=&DSI_BASE+0x00
  65. &DSI_INTSTA=&DSI_BASE+0x0c
  66. &DSI_COM_CON=&DSI_BASE+0x10
  67. &DSI_MODE_CON=&DSI_BASE+0x14
  68. &DSI_TXRX_CON=&DSI_BASE+0x18
  69. &DSI_PSCON=&DSI_BASE+0x1C
  70. &DSI_VSA_NL=&DSI_BASE+0x20
  71. &DSI_VBP_NL=&DSI_BASE+0x24
  72. &DSI_VFP_NL=&DSI_BASE+0x28
  73. &DSI_VACT_NL=&DSI_BASE+0x2c
  74. &DSI_HSA_WC=&DSI_BASE+0x50
  75. &DSI_HBP_WC=&DSI_BASE+0x54
  76. &DSI_HFP_WC=&DSI_BASE+0x58
  77. &DSI_BLLP_WC=&DSI_BASE+0x5c
  78. &DSI_CMDQ_CON=&DSI_BASE+0x60
  79. &DSI_HSTX_CKLP_WC=&DSI_BASE+0x64
  80. &DSI_RACK=&DSI_BASE+0x84
  81. &DSI_MEM_CONTI=&DSI_BASE+0x90
  82. &DSI_PHY_CON=&DSI_BASE+0x100
  83. &DSI_PHY_LCCON=&DSI_BASE+0x104
  84. &DSI_PHY_LD0CON=&DSI_BASE+0x108
  85. &DSI_PHY_TIMCON0=&DSI_BASE+0x110
  86. &DSI_PHY_TIMCON1=&DSI_BASE+0x114
  87. &DSI_PHY_TIMCON2=&DSI_BASE+0x118
  88. &DSI_PHY_TIMCON3=&DSI_BASE+0x11C
  89. &DSI_PHY_TIMCON4=&DSI_BASE+0x120
  90. &DSI_VM_CMD_CON=&DSI_BASE+0x130
  91. &DSI_VM_CMD_DATA0=&DSI_BASE+0x134
  92. &DSI_VM_CMD_DATA4=&DSI_BASE+0x138
  93. &DSI_VM_CMD_DATA8=&DSI_BASE+0x13c
  94. &DSI_VM_CMD_DATAC=&DSI_BASE+0x140
  95. &DSI_VM_CMD_DATA10=&DSI_BASE+0x180
  96. &DSI_VM_CMD_DATA14=&DSI_BASE+0x184
  97. &DSI_VM_CMD_DATA18=&DSI_BASE+0x188
  98. &DSI_VM_CMD_DATA1C=&DSI_BASE+0x18C
  99. &DSI_DEBUG_SEL=&DSI_BASE+0x170
  100. &DSI_BIST_PATTERN=&DSI_BASE+0x178
  101. &DSI_BIST_CON=&DSI_BASE+0x17c
  102. &DSI_CMDQ_BASE=&DSI_BASE+0x200
  103. &DSI_CMDQ_0=&DSI_CMDQ_BASE+0x00
  104. &DSI_CMDQ_1=&DSI_CMDQ_BASE+0x04
  105. &DSI_CMDQ_2=&DSI_CMDQ_BASE+0x08
  106. &DSI_CMDQ_3=&DSI_CMDQ_BASE+0x0c
  107. &DSI_CMDQ_4=&DSI_CMDQ_BASE+0x10
  108. &DSI_CMDQ_5=&DSI_CMDQ_BASE+0x14
  109. &DSI_CMDQ_6=&DSI_CMDQ_BASE+0x18
  110. &DSI_CMDQ_7=&DSI_CMDQ_BASE+0x1c
  111. &DSI_CMDQ_8=&DSI_CMDQ_BASE+0x20
  112. &DSI_CMDQ_9=&DSI_CMDQ_BASE+0x24
  113. ;------------------------------------------------------------------------
  114. ; RDMA register map
  115. ;------------------------------------------------------------------------
  116. &disp_rdma_base=&mmsys_base+0x00008000
  117. &DISP_RDMA_INT_ENABLE=&disp_rdma_base+0x000
  118. &DISP_RDMA_INT_STATUS=&disp_rdma_base+0x004
  119. &DISP_RDMA_GLOBAL_CON=&disp_rdma_base+0x010
  120. &DISP_RDMA_SIZE_CON_0=&disp_rdma_base+0x014
  121. &DISP_RDMA_SIZE_CON_1=&disp_rdma_base+0x018
  122. &DISP_RDMA_TARGET_LINE=&disp_rdma_base+0x01c
  123. &DISP_RDMA_MEM_CON=&disp_rdma_base+0x024
  124. &DISP_RDMA_MEM_SRC_PITCH=&disp_rdma_base+0x02c
  125. &DISP_RDMA_GMC_SETTING_0=&disp_rdma_base+0x030
  126. &DISP_RDMA_SLOW_CON=&disp_rdma_base+0x034
  127. &DISP_RDMA_GMC_SETTING_1=&disp_rdma_base+0x038
  128. &DISP_RDMA_FIFO_CON=&disp_rdma_base+0x040
  129. &DISP_RDMA_MEM_START_ADDR=&disp_rdma_base+0xf00
  130. ;------------------------------------------------------------------------
  131. ; UFOE register map
  132. ;------------------------------------------------------------------------
  133. &disp_ufoe_base=&mmsys_base+0x00010000
  134. &DISP_UFO_START=&mmsys_base+0x00
  135. ;------------------------------------------------------------------------
  136. ; DISP Split
  137. ;------------------------------------------------------------------------
  138. &disp_split0_base=&mmsys_base+0x00018000
  139. &disp_split1_base=&mmsys_base+0x00019000
  140. &DISP_SPLIT0_SPLIT_ENABLE=&disp_split0_base+0x00
  141. &DISP_SPLIT0_SPLIT_SW_RESET=&disp_split0_base+0x04
  142. &DISP_SPLIT1_SPLIT_ENABLE=&disp_split1_base+0x00
  143. &DISP_SPLIT1_SPLIT_SW_RESET=&disp_split1_base+0x04
  144. ;------------------------------------------------------------------------
  145. ; Mutex register map
  146. ;------------------------------------------------------------------------
  147. &disp_mutex_base=&mmsys_base+0x00014000
  148. &DISP_MUTEX_INTEN=&disp_mutex_base+0x00
  149. &DISP_MUTEX_INTSTA=&disp_mutex_base+0x04
  150. &DISP_MUTEX0_SOF=&disp_mutex_base+0x30
  151. &DISP_MUTEX0_MOD=&disp_mutex_base+0x2c
  152. &DISP_MUTEX0_EN=&disp_mutex_base+0x20
  153. &DISP_MUTEX0_RST=&disp_mutex_base+0x28
  154. &DISP_MUTEX1_SOF=&disp_mutex_base+0x50
  155. &DISP_MUTEX1_MOD=&disp_mutex_base+0x4c
  156. &DISP_MUTEX1_EN=&disp_mutex_base+0x40
  157. &DISP_MUTEX1_RST=&disp_mutex_base+0x48
  158. ;------------------------------------------------------------------------
  159. ; Mux sel
  160. ;------------------------------------------------------------------------
  161. &DISP_UFOE_MOUT_EN=&mmsys_base+0x03c
  162. &DISP_PATH0_SEL_IN=&mmsys_base+0x090
  163. &DISP_PATH1_SEL_IN=&mmsys_base+0x094
  164. &DISP_UFOE_SEL_IN=&mmsys_base+0x060
  165. &DISP_DSI0_SEL_IN=&mmsys_base+0x064
  166. &DISP_DSI1_SEL_IN=&mmsys_base+0x0a8
  167. &DISP_RDMA0_SOUT_SEL_IN=&mmsys_base+0x06c
  168. &DISP_RDMA1_SOUT_SEL_IN=&mmsys_base+0x0b4
  169. &DISP_RDMA2_SOUT_SEL_IN=&mmsys_base+0x0b8
  170. &DISP_PATH0_SOUT_SEL_IN=&mmsys_base+0x0c4
  171. &DISP_PATH1_SOUT_SEL_IN=&mmsys_base+0x0c8
  172. ;------------------------------------------------------------------------
  173. ; Clock source and debug settings
  174. ;------------------------------------------------------------------------
  175. D.S SD:&MMSYS_CG_CLR0 %LE %LONG 0xffffffff ; clear cg0
  176. D.S SD:&MMSYS_CG_CLR1 %LE %LONG 0xffffffff ; clear cg1
  177. ;;D.S SD:&mmsys_base+0x00c08 %LE %LONG 0x00000201 ; fpga con
  178. ;;D.S SD:&mmsys_base+0x0004c %LE %LONG 0x00000000 ; dsi out
  179. ;------------------------------------------------------------------------
  180. ;; I2c write function
  181. ;------------------------------------------------------------------------
  182. &i2c_write_loop=0;
  183. &i2c_slave_addr=0;
  184. &i2c_write_addr=0;
  185. &i2c_write_data=0;
  186. &i2c_read_data=0;
  187. while (&i2c_write_loop<0x19)
  188. (
  189. ; DSI GPIO mux select
  190. ;----------------------------
  191. if (&i2c_write_loop==0x00)
  192. (
  193. &i2c_slave_addr=0x18;
  194. &i2c_write_addr=0x00;
  195. &i2c_write_data=0x10;
  196. )
  197. ; ABB reference clock LPF
  198. ;----------------------------
  199. if (&i2c_write_loop==0x01)
  200. (
  201. &i2c_slave_addr=0x20;
  202. &i2c_write_addr=0x42;
  203. &i2c_write_data=0x01;
  204. )
  205. ; Reference clock from ARMPLL
  206. ;----------------------------
  207. if (&i2c_write_loop==0x02)
  208. (
  209. &i2c_slave_addr=0x20;
  210. &i2c_write_addr=0x43;
  211. &i2c_write_data=0x01;
  212. )
  213. if (&i2c_write_loop==0x03)
  214. (
  215. &i2c_slave_addr=0x20;
  216. &i2c_write_addr=0x05;
  217. &i2c_write_data=0x01;
  218. )
  219. if (&i2c_write_loop==0x04)
  220. (
  221. &i2c_slave_addr=0x20;
  222. &i2c_write_addr=0x22;
  223. &i2c_write_data=0x01;
  224. )
  225. ; MIPI TX Config
  226. ;----------------------------
  227. ; DSI_BG_CON (fast_charge=0)
  228. if (&i2c_write_loop==0x05)
  229. (
  230. &i2c_slave_addr=0x30;
  231. &i2c_write_addr=0x44;
  232. &i2c_write_data=0x83;
  233. )
  234. ; DSI_TOP_CON
  235. if (&i2c_write_loop==0x06)
  236. (
  237. &i2c_slave_addr=0x30;
  238. &i2c_write_addr=0x40;
  239. &i2c_write_data=0x82;
  240. )
  241. ; DSI0_CON
  242. if (&i2c_write_loop==0x07)
  243. (
  244. &i2c_slave_addr=0x30;
  245. &i2c_write_addr=0x00;
  246. &i2c_write_data=0x03;
  247. )
  248. ; DSI_PLL_PWR (pwr_on=1)
  249. if (&i2c_write_loop==0x08)
  250. (
  251. &i2c_slave_addr=0x30;
  252. &i2c_write_addr=0x68;
  253. &i2c_write_data=0x03;
  254. )
  255. ; DSI_PLL_PWR (iso_en=0)
  256. if (&i2c_write_loop==0x09)
  257. (
  258. &i2c_slave_addr=0x30;
  259. &i2c_write_addr=0x68;
  260. &i2c_write_data=0x01;
  261. )
  262. ; DSI_PLL0_CON0
  263. ; [2:1] prediv
  264. ; [4:3] txdiv0 (not used)
  265. ; [6:5] txdiv1 (not used)
  266. ; [9:7] posdiv
  267. if (&i2c_write_loop==0x0a)
  268. (
  269. &i2c_slave_addr=0x30;
  270. &i2c_write_addr=0x50;
  271. &i2c_write_data=((&posdiv&0x1)<<0x7)|(&prediv<<0x1);
  272. )
  273. if (&i2c_write_loop==0x0b)
  274. (
  275. &i2c_slave_addr=0x30;
  276. &i2c_write_addr=0x51;
  277. &i2c_write_data=(&posdiv>>0x1)&0x3;
  278. )
  279. ; DSI_PLL0_CON1
  280. ; [0] fra_en
  281. ; [2] ssc_en
  282. if (&i2c_write_loop==0x0c)
  283. (
  284. &i2c_slave_addr=0x30;
  285. &i2c_write_addr=0x54;
  286. &i2c_write_data=0x01;
  287. )
  288. ; DSI_PLL0_CON2
  289. ; [23:0] pcw (fractional)
  290. ; [30:24] pcw (integer)
  291. if (&i2c_write_loop==0x0d)
  292. (
  293. &i2c_slave_addr=0x30;
  294. &i2c_write_addr=0x58;
  295. &i2c_write_data=0x00;
  296. )
  297. if (&i2c_write_loop==0x0e)
  298. (
  299. &i2c_slave_addr=0x30;
  300. &i2c_write_addr=0x59;
  301. &i2c_write_data=0x00;
  302. )
  303. if (&i2c_write_loop==0x0f)
  304. (
  305. &i2c_slave_addr=0x30;
  306. &i2c_write_addr=0x5a;
  307. &i2c_write_data=0x00;
  308. )
  309. if (&i2c_write_loop==0x10)
  310. (
  311. &i2c_slave_addr=0x30;
  312. &i2c_write_addr=0x5b;
  313. &i2c_write_data=(&fbkdiv<<2)
  314. )
  315. ; DSI_CLOCK_LANE, [4]:CKLANE_EN=1
  316. if (&i2c_write_loop==0x11)
  317. (
  318. &i2c_slave_addr=0x30;
  319. &i2c_write_addr=0x04;
  320. &i2c_write_data=0x11;
  321. )
  322. ; DSI_DATA_LANE_0
  323. if (&i2c_write_loop==0x12)
  324. (
  325. &i2c_slave_addr=0x30;
  326. &i2c_write_addr=0x08;
  327. &i2c_write_data=0x01;
  328. )
  329. ; DSI_DATA_LANE_1
  330. if (&i2c_write_loop==0x13)
  331. (
  332. &i2c_slave_addr=0x30;
  333. &i2c_write_addr=0x0c;
  334. &i2c_write_data=0x01;
  335. )
  336. ; DSI_DATA_LANE_2
  337. if (&i2c_write_loop==0x14)
  338. (
  339. &i2c_slave_addr=0x30;
  340. &i2c_write_addr=0x10;
  341. &i2c_write_data=0x01;
  342. )
  343. ; DSI_DATA_LANE_3
  344. if (&i2c_write_loop==0x15)
  345. (
  346. &i2c_slave_addr=0x30;
  347. &i2c_write_addr=0x14;
  348. &i2c_write_data=0x01;
  349. )
  350. ; DSI_PLL_TOP
  351. ; [9:8] mppll_preserve (s2q_div)
  352. if (&i2c_write_loop==0x16)
  353. (
  354. &i2c_slave_addr=0x30;
  355. &i2c_write_addr=0x64;
  356. &i2c_write_data=0x20;
  357. )
  358. ; MPPLL starts
  359. ;----------------------------
  360. ; DSI_PLL0_CON0
  361. ; [0] pll_en
  362. if (&i2c_write_loop==0x17)
  363. (
  364. &i2c_slave_addr=0x30;
  365. &i2c_write_addr=0x50;
  366. &i2c_write_data=((&posdiv&0x1)<<0x7)|(&prediv<<0x1)|0x1;
  367. )
  368. ; MIPI TX source control
  369. ;----------------------------
  370. if (&i2c_write_loop==0x18)
  371. (
  372. &i2c_slave_addr=0x30;
  373. &i2c_write_addr=0x28;
  374. &i2c_write_data=0x00;
  375. )
  376. ;;------------------------------------------
  377. ;; I2C write
  378. ;;------------------------------------------
  379. ;set 2 byte transfer (address + data)
  380. D.S SD:&i2c_base+0x014 %LE %LONG 0x002;
  381. ;1 transac
  382. D.S SD:&i2c_base+0x018 %LE %LONG 0x01;
  383. ;set slave address
  384. D.S SD:&i2c_base+0x004 %LE %LONG (&i2c_slave_addr<<0x1);
  385. ;prepare data to fifo
  386. D.S SD:&i2c_base+0x000 %LE %LONG &i2c_write_addr;
  387. D.S SD:&i2c_base+0x000 %LE %LONG &i2c_write_data;
  388. ;trigger
  389. D.S SD:&i2c_base+0x024 %LE %LONG 0x01;
  390. ;wait i2c done
  391. while ((data.long(SD:&i2c_base+0x00C)&0x1)!=0x1)
  392. (
  393. wait 10.ms
  394. )
  395. ;write 1 clear
  396. D.S SD:&i2c_base+0x00C %LE %LONG 0xff;
  397. ;;------------------------------------------
  398. ;; I2C read (write address + read data)
  399. ;;------------------------------------------
  400. ;set 1 byte transfer (address)
  401. D.S SD:&i2c_base+0x014 %LE %LONG 0x001;
  402. ;1 transac
  403. D.S SD:&i2c_base+0x018 %LE %LONG 0x01;
  404. ;set slave address
  405. D.S SD:&i2c_base+0x004 %LE %LONG (&i2c_slave_addr<<0x1);
  406. ;prepare data to fifo
  407. D.S SD:&i2c_base+0x000 %LE %LONG &i2c_write_addr;
  408. ;trigger
  409. D.S SD:&i2c_base+0x024 %LE %LONG 0x01;
  410. ;wait i2c done
  411. while ((data.long(SD:&i2c_base+0x00C)&0x1)!=0x1)
  412. (
  413. wait 10.ms
  414. )
  415. ;write 1 clear
  416. D.S SD:&i2c_base+0x00C %LE %LONG 0xff;
  417. ;set 1 byte transfer (data)
  418. D.S SD:&i2c_base+0x014 %LE %LONG 0x001;
  419. ;1 transac
  420. D.S SD:&i2c_base+0x018 %LE %LONG 0x01;
  421. ;set slave address
  422. D.S SD:&i2c_base+0x004 %LE %LONG ((&i2c_slave_addr<<0x1)+0x1) ;[0]:write or read
  423. ;trigger
  424. D.S SD:&i2c_base+0x024 %LE %LONG 0x01;
  425. ;wait i2c done
  426. while ((data.long(SD:&i2c_base+0x00C)&0x1)!=0x1)
  427. (
  428. wait 10.ms
  429. )
  430. ;write 1 clear
  431. D.S SD:&i2c_base+0x00C %LE %LONG 0xff;
  432. &i2c_read_data=data.long(SD:&i2c_base+0x000);
  433. if (&i2c_read_data==&i2c_write_data)
  434. (
  435. PRINT "I2C Success, write addr = " &i2c_write_addr ", read_data=" &i2c_read_data
  436. )
  437. else
  438. (
  439. PRINT "I2C Fail, write addr = " &i2c_write_addr ", write data = " &i2c_write_data ", read_data=" &i2c_read_data
  440. wait 5000.ms
  441. )
  442. &i2c_write_loop=&i2c_write_loop+0x01;
  443. )
  444. wait 500.ms ;wait pll stable
  445. PRINT "PLL setting finish!!"
  446. ;------------------------------------------------------------------------
  447. ; DSI / LCM Reset
  448. ;------------------------------------------------------------------------
  449. D.S SD:&LCM_RST_B %LE %LONG 0x00000000
  450. D.S SD:&LCM_RST_B %LE %LONG 0x00000001
  451. ;dsi reset - must reset after DSI clock is on
  452. ;dig_mipi_tx reset
  453. D.S SD:&DSI_COM_CON %LE %LONG 0x00000005
  454. D.S SD:&DSI_COM_CON %LE %LONG 0x00000000
  455. ;------------------------------------------------------------------------
  456. ; DSI Timing Parameters
  457. ;------------------------------------------------------------------------
  458. &posdiv_real=0
  459. &prediv_real=0
  460. if (&posdiv==0x0)
  461. (
  462. &posdiv_real=0x01
  463. )
  464. else if (&posdiv==0x1)
  465. (
  466. &posdiv_real=0x02
  467. )
  468. else if (&posdiv==0x2)
  469. (
  470. &posdiv_real=0x04
  471. )
  472. else if (&posdiv==0x3)
  473. (
  474. &posdiv_real=0x08
  475. )
  476. else
  477. (
  478. &posdiv_real=0x10
  479. )
  480. if (&prediv==0x0)
  481. (
  482. &prediv_real=0x01
  483. )
  484. else if (&prediv==0x1)
  485. (
  486. &prediv_real=0x02
  487. )
  488. else if (&prediv==0x2)
  489. (
  490. &prediv_real=0x04
  491. )
  492. print "posdiv=" &posdiv
  493. print "posdiv_real=" &posdiv_real
  494. print "prediv=" &prediv
  495. print "prediv_real=" &prediv_real
  496. ; cycle time = 1000/(PLL freq/4)
  497. ;--------------------------------------------------------------------
  498. &cycle_time=0
  499. &cycle_time=(0x3E8*0x4*&posdiv_real)/(&fbkdiv*&prediv_real*0x1a)+1
  500. print "CYCLE TIME = " &cycle_time
  501. ; ui = cycle_time/8
  502. ;--------------------------------------------------------------------
  503. &ui=0
  504. &ui=(0x3E8*&posdiv_real)/(&fbkdiv*&prediv_real*0x1a*0x2)+1
  505. print "UI = " &ui
  506. ; lpx = 100ns (HW limit: not less than 2)
  507. ;--------------------------------------------------------------------
  508. &lpx=0;
  509. &lpx=(0x64/&cycle_time)+0x1
  510. if (&lpx<0x02)
  511. (
  512. &lpx=0x02
  513. )
  514. print "LPX = " &lpx
  515. ; hs_prep : 40ns+4*UI ~ 85ns+6*UI
  516. ; hs_prep = 64ns+5*UI
  517. ;--------------------------------------------------------------------
  518. &hs_prep=((0x40+0x05*&ui)/&cycle_time);
  519. if (&hs_prep<0x1)
  520. (
  521. &hs_prep=0x1
  522. )
  523. print "hs_prep = " &hs_prep
  524. ; hs_prep+hs_zero : > 145ns+10*UI
  525. ; hs_zero = (200+10*UI) - hs_prep
  526. ;--------------------------------------------------------------------
  527. &hs_zero=((0xc8+0x0a*&ui)/&cycle_time)-&hs_prep;
  528. print "hs_zero = " &hs_zero
  529. ; hs_trail : max(8*UI, 60ns+4*UI) ~ 105ns+12*UI (T_eot)
  530. ; hs_trail = 96ns+4*UI
  531. ;--------------------------------------------------------------------
  532. &hs_trail=0
  533. &hs_trail_pre=0x60+0x04*&ui
  534. if (&hs_trail_pre>&cycle_time)
  535. (
  536. &hs_trail=(&hs_trail_pre/&cycle_time)+1
  537. )
  538. else
  539. (
  540. &hs_trail=0x2
  541. )
  542. print "hs_trail = " &hs_trail
  543. ; hs_exit : > 100ns
  544. ; hs_exit = 200ns
  545. ;--------------------------------------------------------------------
  546. &hs_exit=(0xc8/&cycle_time)+0x1
  547. print "hs_exit = " &hs_exit
  548. ; ta_go = 4*lpx
  549. ; ta_get = 5*lpx
  550. ; ta_sure : lpx ~ 2*lpx
  551. ;--------------------------------------------------------------------
  552. &ta_go=4*&lpx
  553. &ta_get=5*&lpx
  554. &ta_sure=&lpx+(&lpx/0x02)
  555. print "ta_go = " &ta_go
  556. print "ta_get = " &ta_get
  557. print "ta_sure = " &ta_sure
  558. ; clk_hs_prep : 38ns ~ 95ns
  559. ; clk_hs_prep = 64ns
  560. ;--------------------------------------------------------------------
  561. &clk_hs_prep=(0x40/&cycle_time)
  562. if (&clk_hs_prep<0x1)
  563. (
  564. &clk_hs_prep=0x1
  565. )
  566. print "clk_prep=" &clk_hs_prep
  567. ; clk_hs_prep+clk_zero : > 300ns
  568. ; clk_zero = 400ns - clk_hs_perp
  569. ;--------------------------------------------------------------------
  570. &clk_zero=(0x190/&cycle_time)-&clk_hs_prep
  571. print "clk_zero = " &clk_zero
  572. ; clk_trail : 60ns ~ 105ns+12*UI (T_eot)
  573. ; clk_trail = 64ns
  574. ;--------------------------------------------------------------------
  575. &clk_trail=(0x60/&cycle_time)+1
  576. if (&clk_trail<0x2)
  577. (
  578. &clk_trail=0x2
  579. )
  580. print "clk_trail = " &clk_trail
  581. ; clk_exit : > 100ns
  582. ; clk_exit = 200ns
  583. ;--------------------------------------------------------------------
  584. &clk_exit=(0xc8/&cycle_time)+0x1
  585. print "clk_exit = " &clk_exit
  586. ; clk_post : > 60ns+52*UI
  587. ; clk_post = 64ns+52*UI
  588. ;--------------------------------------------------------------------
  589. &clk_post=((0x40+0x34*&ui)/&cycle_time)+0x1
  590. print "clk_post=" &clk_post
  591. &timcon0=(&hs_trail<<0x018)|(&hs_zero<<0x10)|(&hs_prep<<0x08)|&lpx;
  592. &timcon1=(&hs_exit<<0x18)|(&ta_get<<0x10)|(&ta_sure<<0x08)|&ta_go;
  593. &timcon2=(&clk_trail<<0x018)|(&clk_zero<<0x10)|(0x1<<0x08);
  594. &timcon3=(&clk_exit<<0x10)|(&clk_post<<0x08)|&clk_hs_prep;
  595. D.S SD:&DSI_PHY_TIMCON0 %LE %LONG &timcon0 ; DSI_PHY_TIMCON0
  596. D.S SD:&DSI_PHY_TIMCON1 %LE %LONG &timcon1 ; DSI_PHY_TIMCON1
  597. D.S SD:&DSI_PHY_TIMCON2 %LE %LONG &timcon2 ; DSI_PHY_TIMCON2
  598. D.S SD:&DSI_PHY_TIMCON3 %LE %LONG &timcon3 ; DSI_PHY_TIMCON3
  599. ;------------------------------------------------------------------------
  600. ; DSI Global Settings
  601. ;------------------------------------------------------------------------
  602. ;D.S SD:&DSI_COM_CON %LE %LONG 0x00000002 ;; dsi_en