regconfig_pi_start_3200.c 43 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757
  1. /* SPDX-License-Identifier: GPL-2.0-or-later */
  2. /**
  3. ******************************************************************************
  4. * @file regconfig_pi_start_3200.c
  5. * @author StarFive Technology
  6. * @version V1.0
  7. * @date 07/20/2020
  8. * @brief
  9. ******************************************************************************
  10. * @copy
  11. *
  12. * THE PRESENT SOFTWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
  13. * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
  14. * TIME. AS A RESULT, STARFIVE SHALL NOT BE HELD LIABLE FOR ANY
  15. * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
  16. * FROM THE CONTENT OF SUCH SOFTWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
  17. * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
  18. *
  19. * COPYRIGHT 2020 Shanghai StarFive Technology Co., Ltd.
  20. */
  21. #include <regconfig.h.sim_PI.h>
  22. #include <regconfig.h.sim_PHY.h>
  23. #include <sys.h>
  24. #include <clkgen_ctrl_macro.h>
  25. #include <comdef.h>
  26. #include <ddr_define.h>
  27. void regconfig_pi_start(uint32_t OMC_APB_BASE_ADDR, uint32_t OMC_SECURE_APB_BASE_ADDR, uint32_t PHY_APB_BASE_ADDR, u32 ddr_num)
  28. {
  29. u32 tmp = 0;
  30. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +89 <<2));//`DENALI_PHY_89_DATA
  31. apb_write(PHY_APB_BASE_ADDR + (4096 +89 <<2), tmp&0xffffff00|0x00000051); //0x51->0x61
  32. //disable RDLVL VREF
  33. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +78 <<2));//`DENALI_PHY_78_DATA
  34. apb_write(PHY_APB_BASE_ADDR + (4096 +78 <<2), tmp&0xfffffcff);
  35. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +345 <<2));//`DENALI_PHY_345_DATA
  36. apb_write(PHY_APB_BASE_ADDR + (4096 +345 <<2), tmp&0xffffff00|0x00000051);//0x51->0x61
  37. //disable RDLVL VREF
  38. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +334 <<2));//`DENALI_PHY_334_DATA
  39. apb_write(PHY_APB_BASE_ADDR + (4096 +334 <<2), tmp&0xfffffcff);
  40. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +601 <<2));//`DENALI_PHY_601_DATA
  41. apb_write(PHY_APB_BASE_ADDR + (4096 +601 <<2), tmp&0xffffff00|0x00000051);//0x51->0x61
  42. //disable RDLVL VREF
  43. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +590 <<2));//`DENALI_PHY_590_DATA
  44. apb_write(PHY_APB_BASE_ADDR + (4096 +590 <<2), tmp&0xfffffcff);
  45. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +857 <<2));//`DENALI_PHY_857_DATA
  46. apb_write(PHY_APB_BASE_ADDR + (4096 +857 <<2), tmp&0xffffff00|0x00000051);//0x51->0x61
  47. //disable RDLVL VREF
  48. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +846 <<2));//`DENALI_PHY_846_DATA
  49. apb_write(PHY_APB_BASE_ADDR + (4096 +846 <<2), tmp&0xfffffcff);
  50. //turn off multicast
  51. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +1793 <<2));//`DENALI_PHY_1793_DATA
  52. apb_write(PHY_APB_BASE_ADDR + (4096 +1793 <<2), tmp&0xfffffeff);
  53. //set to freq copy 0
  54. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +1793 <<2));//`DENALI_PHY_1793_DATA
  55. apb_write(PHY_APB_BASE_ADDR + (4096 +1793 <<2), tmp&0xfffcffff);
  56. //data slice registers
  57. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +125 <<2));//`DENALI_PHY_125_DATA
  58. apb_write(PHY_APB_BASE_ADDR + (4096 +125 <<2), tmp&0xfff0ffff|0x00010000);
  59. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +102 <<2));//`DENALI_PHY_102_DATA
  60. apb_write(PHY_APB_BASE_ADDR + (4096 +102 <<2), tmp&0xfffffffc|0x00000001);
  61. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +105 <<2));//`DENALI_PHY_105_DATA
  62. apb_write(PHY_APB_BASE_ADDR + (4096 +105 <<2), tmp&0xffffffe0|0x00000001);
  63. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +92 <<2));//`DENALI_PHY_92_DATA
  64. apb_write(PHY_APB_BASE_ADDR + (4096 +92 <<2), tmp&0xfffffffe|0x00000001);
  65. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +94 <<2));//`DENALI_PHY_94_DATA
  66. apb_write(PHY_APB_BASE_ADDR + (4096 +94 <<2), tmp&0xffffe0ff|0x00000200);
  67. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +96 <<2));//`DENALI_PHY_96_DATA
  68. apb_write(PHY_APB_BASE_ADDR + (4096 +96 <<2), tmp&0xfffff0ff|0x00000400);
  69. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +89 <<2));//`DENALI_PHY_89_DATA
  70. apb_write(PHY_APB_BASE_ADDR + (4096 +89 <<2), tmp&0xffffff00|0x00000051);
  71. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +381 <<2));//`DENALI_PHY_381_DATA
  72. apb_write(PHY_APB_BASE_ADDR + (4096 +381 <<2), tmp&0xfff0ffff|0x00010000);
  73. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +358 <<2));//`DENALI_PHY_358_DATA
  74. apb_write(PHY_APB_BASE_ADDR + (4096 +358 <<2), tmp&0xfffffffc|0x00000001);
  75. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +361 <<2));//`DENALI_PHY_361_DATA
  76. apb_write(PHY_APB_BASE_ADDR + (4096 +361 <<2), tmp&0xffffffe0|0x00000001);
  77. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +348 <<2));//`DENALI_PHY_348_DATA
  78. apb_write(PHY_APB_BASE_ADDR + (4096 +348 <<2), tmp&0xfffffffe|0x00000001);
  79. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +350 <<2));//`DENALI_PHY_350_DATA
  80. apb_write(PHY_APB_BASE_ADDR + (4096 +350 <<2), tmp&0xffffe0ff|0x00000200);
  81. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +352 <<2));//`DENALI_PHY_352_DATA
  82. apb_write(PHY_APB_BASE_ADDR + (4096 +352 <<2), tmp&0xfffff0ff|0x00000400);
  83. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +345 <<2));//`DENALI_PHY_345_DATA
  84. apb_write(PHY_APB_BASE_ADDR + (4096 +345 <<2), tmp&0xffffff00|0x00000051);
  85. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +637 <<2));//`DENALI_PHY_637_DATA
  86. apb_write(PHY_APB_BASE_ADDR + (4096 +637 <<2), tmp&0xfff0ffff|0x00010000);
  87. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +614 <<2));//`DENALI_PHY_614_DATA
  88. apb_write(PHY_APB_BASE_ADDR + (4096 +614 <<2), tmp&0xfffffffc|0x00000001);
  89. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +617 <<2));//`DENALI_PHY_617_DATA
  90. apb_write(PHY_APB_BASE_ADDR + (4096 +617 <<2), tmp&0xffffffe0|0x00000001);
  91. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +604 <<2));//`DENALI_PHY_604_DATA
  92. apb_write(PHY_APB_BASE_ADDR + (4096 +604 <<2), tmp&0xfffffffe|0x00000001);
  93. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +606 <<2));//`DENALI_PHY_606_DATA
  94. apb_write(PHY_APB_BASE_ADDR + (4096 +606 <<2), tmp&0xffffe0ff|0x00000200);
  95. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +608 <<2));//`DENALI_PHY_608_DATA
  96. apb_write(PHY_APB_BASE_ADDR + (4096 +608 <<2), tmp&0xfffff0ff|0x00000400);
  97. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +601 <<2));//`DENALI_PHY_601_DATA
  98. apb_write(PHY_APB_BASE_ADDR + (4096 +601 <<2), tmp&0xffffff00|0x00000051);
  99. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +893 <<2));//`DENALI_PHY_893_DATA
  100. apb_write(PHY_APB_BASE_ADDR + (4096 +893 <<2), tmp&0xfff0ffff|0x00010000);
  101. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +870 <<2));//`DENALI_PHY_870_DATA
  102. apb_write(PHY_APB_BASE_ADDR + (4096 +870 <<2), tmp&0xfffffffc|0x00000001);
  103. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +873 <<2));//`DENALI_PHY_873_DATA
  104. apb_write(PHY_APB_BASE_ADDR + (4096 +873 <<2), tmp&0xffffffe0|0x00000001);
  105. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +860 <<2));//`DENALI_PHY_860_DATA
  106. apb_write(PHY_APB_BASE_ADDR + (4096 +860 <<2), tmp&0xfffffffe|0x00000001);
  107. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +862 <<2));//`DENALI_PHY_862_DATA
  108. apb_write(PHY_APB_BASE_ADDR + (4096 +862 <<2), tmp&0xffffe0ff|0x00000200);
  109. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +864 <<2));//`DENALI_PHY_864_DATA
  110. apb_write(PHY_APB_BASE_ADDR + (4096 +864 <<2), tmp&0xfffff0ff|0x00000400);
  111. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +857 <<2));//`DENALI_PHY_857_DATA
  112. apb_write(PHY_APB_BASE_ADDR + (4096 +857 <<2), tmp&0xffffff00|0x00000051);
  113. //phy level registers
  114. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +1895 <<2));//`DENALI_PHY_1895_DATA
  115. apb_write(PHY_APB_BASE_ADDR + (4096 +1895 <<2), tmp&0xffffe000|0x00001342);
  116. //apb_read(PHY_APB_BASE_ADDR + (16'd4096 +16'd1895 <<2), tmp);//`DENALI_PHY_1895_DATA
  117. //apb_write(PHY_APB_BASE_ADDR + (16'd4096 +16'd1895 <<2), tmp&32'hfffe_ffff|32'h0001_0000); //for memory clock<=400M
  118. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +1835 <<2));//`DENALI_PHY_1835_DATA
  119. apb_write(PHY_APB_BASE_ADDR + (4096 +1835 <<2), tmp&0xfffff0ff|0x00000200);
  120. //turn on multicast
  121. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +1793 <<2));//`DENALI_PHY_1793_DATA
  122. apb_write(PHY_APB_BASE_ADDR + (4096 +1793 <<2), tmp&0xfffffeff|0x00000100);
  123. tmp = apb_read(PHY_APB_BASE_ADDR + (2048 +62 <<2));//`DENALI_PI_62_DATA
  124. apb_write(PHY_APB_BASE_ADDR + (2048 +62 <<2), tmp&0xfffffeff);
  125. tmp = apb_read(PHY_APB_BASE_ADDR + (2048 +66 <<2));//`DENALI_PI_66_DATA
  126. apb_write(PHY_APB_BASE_ADDR + (2048 +66 <<2), tmp&0xfffffeff);
  127. tmp = apb_read(PHY_APB_BASE_ADDR + (2048 +166 <<2));//`DENALI_PI_166_DATA
  128. apb_write(PHY_APB_BASE_ADDR + (2048 +166 <<2), tmp&0xffffff80|0x00000001);
  129. tmp = apb_read(PHY_APB_BASE_ADDR + (2048 +62 <<2));//`DENALI_PI_62_DATA
  130. apb_write(PHY_APB_BASE_ADDR + (2048 +62 <<2), tmp&0xfff0ffff|0x00010000);//PI_CALVL_VREF_INITIAL_STEPSIZE[19:16]=0x1
  131. tmp = apb_read(PHY_APB_BASE_ADDR + (2048 +62 <<2));//`DENALI_PI_62_DATA
  132. apb_write(PHY_APB_BASE_ADDR + (2048 +62 <<2), tmp&0xf0ffffff|0x01000000);
  133. tmp = apb_read(PHY_APB_BASE_ADDR + (2048 +166 <<2));//`DENALI_PI_166_DATA
  134. apb_write(PHY_APB_BASE_ADDR + (2048 +166 <<2), tmp&0xffff80ff|0x00000100);
  135. tmp = apb_read(PHY_APB_BASE_ADDR + (2048 +179 <<2));//`DENALI_PI_179_DATA
  136. apb_write(PHY_APB_BASE_ADDR + (2048 +179 <<2), tmp&0xff80ffff|0x00010000);
  137. tmp = apb_read(PHY_APB_BASE_ADDR + (2048 +67 <<2));//`DENALI_PI_67_DATA
  138. apb_write(PHY_APB_BASE_ADDR + (2048 +67 <<2), tmp&0xffe0ffff|0x00010000);//PI_CALVL_VREF_INITIAL_STEPSIZE[20:16]=0x01
  139. tmp = apb_read(PHY_APB_BASE_ADDR + (2048 +67 <<2));//`DENALI_PI_67_DATA
  140. apb_write(PHY_APB_BASE_ADDR + (2048 +67 <<2), tmp&0xe0ffffff|0x01000000);
  141. tmp = apb_read(PHY_APB_BASE_ADDR + (2048 +179 <<2));//`DENALI_PI_179_DATA
  142. apb_write(PHY_APB_BASE_ADDR + (2048 +179 <<2), tmp&0x80ffffff|0x01000000);
  143. tmp = apb_read(PHY_APB_BASE_ADDR + (2048 +166 <<2));//`DENALI_PI_166_DATA
  144. apb_write(PHY_APB_BASE_ADDR + (2048 +166 <<2), tmp&0xff80ffff|0x00010000);
  145. tmp = apb_read(PHY_APB_BASE_ADDR + (2048 +62 <<2));//`DENALI_PI_62_DATA
  146. apb_write(PHY_APB_BASE_ADDR + (2048 +62 <<2), tmp&0xfff0ffff|0x00010000);//PI_CALVL_VREF_INITIAL_STEPSIZE[19:16]=0x1
  147. tmp = apb_read(PHY_APB_BASE_ADDR + (2048 +62 <<2));//`DENALI_PI_62_DATA
  148. apb_write(PHY_APB_BASE_ADDR + (2048 +62 <<2), tmp&0xf0ffffff|0x01000000);
  149. tmp = apb_read(PHY_APB_BASE_ADDR + (2048 +166 <<2));//`DENALI_PI_166_DATA
  150. apb_write(PHY_APB_BASE_ADDR + (2048 +166 <<2), tmp&0x80ffffff|0x01000000);
  151. tmp = apb_read(PHY_APB_BASE_ADDR + (2048 +182 <<2));//`DENALI_PI_182_DATA
  152. apb_write(PHY_APB_BASE_ADDR + (2048 +182 <<2), tmp&0xff80ffff|0x00010000);
  153. tmp = apb_read(PHY_APB_BASE_ADDR + (2048 +67 <<2));//`DENALI_PI_67_DATA
  154. apb_write(PHY_APB_BASE_ADDR + (2048 +67 <<2), tmp&0xffe0ffff|0x00010000);//PI_CALVL_VREF_INITIAL_STEPSIZE[20:16]=0x01
  155. tmp = apb_read(PHY_APB_BASE_ADDR + (2048 +67 <<2));//`DENALI_PI_67_DATA
  156. apb_write(PHY_APB_BASE_ADDR + (2048 +67 <<2), tmp&0xe0ffffff|0x01000000);
  157. tmp = apb_read(PHY_APB_BASE_ADDR + (2048 +182 <<2));//`DENALI_PI_182_DATA
  158. apb_write(PHY_APB_BASE_ADDR + (2048 +182 <<2), tmp&0x80ffffff|0x01000000);
  159. tmp = apb_read(PHY_APB_BASE_ADDR + (2048 +167 <<2));//`DENALI_PI_167_DATA
  160. apb_write(PHY_APB_BASE_ADDR + (2048 +167 <<2), tmp&0xffffff80|0x00000015);//PI_CALVL_VREF_INITIAL_START_POINT_F2[6:0]:0x01->0x15
  161. tmp = apb_read(PHY_APB_BASE_ADDR + (2048 +62 <<2));//`DENALI_PI_62_DATA
  162. apb_write(PHY_APB_BASE_ADDR + (2048 +62 <<2), tmp&0xfff0ffff|0x00010000);//PI_CALVL_VREF_INITIAL_STEPSIZE[19:16]=0x1
  163. tmp = apb_read(PHY_APB_BASE_ADDR + (2048 +62 <<2));//`DENALI_PI_62_DATA
  164. apb_write(PHY_APB_BASE_ADDR + (2048 +62 <<2), tmp&0xf0ffffff|0x01000000);
  165. tmp = apb_read(PHY_APB_BASE_ADDR + (2048 +167 <<2));//`DENALI_PI_167_DATA
  166. apb_write(PHY_APB_BASE_ADDR + (2048 +167 <<2), tmp&0xffff80ff|0x00001500);//PI_CALVL_VREF_INITIAL_STOP_POINT_F2[14:8]:0x01->0x15
  167. tmp = apb_read(PHY_APB_BASE_ADDR + (2048 +185 <<2));//`DENALI_PI_185_DATA
  168. apb_write(PHY_APB_BASE_ADDR + (2048 +185 <<2), tmp&0xff80ffff|0x001a0000);//PI_WDQLVL_VREF_INITIAL_START_POINT_F2[22:16]:0x01->0x1a
  169. tmp = apb_read(PHY_APB_BASE_ADDR + (2048 +67 <<2));//`DENALI_PI_67_DATA
  170. apb_write(PHY_APB_BASE_ADDR + (2048 +67 <<2), tmp&0xffe0ffff|0x00010000);//PI_CALVL_VREF_INITIAL_STEPSIZE[20:16]=0x01
  171. tmp = apb_read(PHY_APB_BASE_ADDR + (2048 +67 <<2));//`DENALI_PI_67_DATA
  172. apb_write(PHY_APB_BASE_ADDR + (2048 +67 <<2), tmp&0xe0ffffff|0x01000000);
  173. tmp = apb_read(PHY_APB_BASE_ADDR + (2048 +185 <<2));//`DENALI_PI_185_DATA
  174. apb_write(PHY_APB_BASE_ADDR + (2048 +185 <<2), tmp&0x80ffffff|0x1a000000);//PI_WDQLVL_VREF_INITIAL_STOP_POINT_F2[30:24]:0x01->0x1a
  175. tmp = apb_read(PHY_APB_BASE_ADDR + (2048 +10 <<2));//`DENALI_PI_10_DATA
  176. apb_write(PHY_APB_BASE_ADDR + (2048 +10 <<2), tmp&0xffffffe0|0x00000002);
  177. tmp = apb_read(PHY_APB_BASE_ADDR + (2048 +0 <<2));//`DENALI_PI_00_DATA
  178. apb_write(PHY_APB_BASE_ADDR + (2048 +0 <<2), tmp&0xfffffffe|0x00000001);
  179. //Reduce time for IO pad calibration TODO
  180. //tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +1860 <<2));//`DENALI_PHY_1860_DATA
  181. //apb_write(PHY_APB_BASE_ADDR + (4096 +1860 <<2), tmp&0x80ffffff|0x01000000);
  182. //PI_CS_MAP: 0xf->0x3
  183. //apb_read(PHY_APB_BASE_ADDR + (16'd2048 +16'd11 <<2), tmp);
  184. //if(tmp != 32'h0300080f) $stop; //`DENALI_PI_11_DATA
  185. //apb_write(PHY_APB_BASE_ADDR + (16'd2048 +16'd11 <<2), 32'h03000803);
  186. //set CS0 MR13.VRCG=1
  187. tmp = apb_read(PHY_APB_BASE_ADDR + (2048 +247 <<2));//`DENALI_PI_247_DATA
  188. apb_write(PHY_APB_BASE_ADDR + (2048 +247 <<2), tmp | 0x00000008);
  189. //set CS1 MR13.VRCG=1
  190. tmp = apb_read(PHY_APB_BASE_ADDR + (2048 +249 <<2));//`DENALI_PI_249_DATA
  191. apb_write(PHY_APB_BASE_ADDR + (2048 +249 <<2), tmp | 0x00000800);
  192. //set CS2 MR13.VRCG=1
  193. tmp = apb_read(PHY_APB_BASE_ADDR + (2048 +252 <<2));//`DENALI_PI_252_DATA
  194. apb_write(PHY_APB_BASE_ADDR + (2048 +252 <<2), tmp | 0x00000008);
  195. //set CS3 MR13.VRCG=1
  196. tmp = apb_read(PHY_APB_BASE_ADDR + (2048 +254 <<2));//`DENALI_PI_254_DATA
  197. apb_write(PHY_APB_BASE_ADDR + (2048 +254 <<2), tmp | 0x00000800);
  198. //PI_MR11_DATA_F1_X
  199. tmp = apb_read(PHY_APB_BASE_ADDR + (2048 +281 <<2)); //DENALI_PI_281_DATA
  200. apb_write(PHY_APB_BASE_ADDR + (2048 +281 <<2), tmp|0x66000000); //DENALI_PI_281_DATA
  201. tmp = apb_read(PHY_APB_BASE_ADDR + (2048 +305 <<2)); //DENALI_PI_313_DATA
  202. apb_write(PHY_APB_BASE_ADDR + (2048 +305 <<2), tmp|0x66000000); //DENALI_PI_305_DATA
  203. tmp = apb_read(PHY_APB_BASE_ADDR + (2048 +329 <<2)); //DENALI_PI_337_DATA
  204. apb_write(PHY_APB_BASE_ADDR + (2048 +329 <<2), tmp|0x66000000); //DENALI_PI_329_DATA
  205. tmp = apb_read(PHY_APB_BASE_ADDR + (2048 +353 <<2)); //DENALI_PI_361_DATA
  206. apb_write(PHY_APB_BASE_ADDR + (2048 +353 <<2), tmp|0x66000000); //DENALI_PI_353_DATA
  207. //PI_MR11_DATA_F2_X
  208. tmp = apb_read(PHY_APB_BASE_ADDR + (2048 +289 <<2)); //DENALI_PI_289_DATA
  209. apb_write(PHY_APB_BASE_ADDR + (2048 +289 <<2), tmp|0x66000000); //DENALI_PI_289_DATA
  210. tmp = apb_read(PHY_APB_BASE_ADDR + (2048 +313 <<2)); //DENALI_PI_313_DATA
  211. apb_write(PHY_APB_BASE_ADDR + (2048 +313 <<2), tmp|0x66000000); //DENALI_PI_313_DATA
  212. tmp = apb_read(PHY_APB_BASE_ADDR + (2048 +337 <<2)); //DENALI_PI_337_DATA
  213. apb_write(PHY_APB_BASE_ADDR + (2048 +337 <<2), tmp|0x66000000); //DENALI_PI_337_DATA
  214. tmp = apb_read(PHY_APB_BASE_ADDR + (2048 +361 <<2)); //DENALI_PI_361_DATA
  215. apb_write(PHY_APB_BASE_ADDR + (2048 +361 <<2), tmp|0x66000000); //DENALI_PI_361_DATA
  216. //PI_MR22_DATA_F1_X
  217. tmp = apb_read(PHY_APB_BASE_ADDR + (2048 +282 <<2)); //DENALI_PI_282_DATA
  218. apb_write(PHY_APB_BASE_ADDR + (2048 +282 <<2), tmp|0x00160000); //DENALI_PI_282_DATA
  219. tmp = apb_read(PHY_APB_BASE_ADDR + (2048 +306 <<2)); //DENALI_PI_313_DATA
  220. apb_write(PHY_APB_BASE_ADDR + (2048 +306 <<2), tmp|0x00160000); //DENALI_PI_306_DATA
  221. tmp = apb_read(PHY_APB_BASE_ADDR + (2048 +330 <<2)); //DENALI_PI_330_DATA
  222. apb_write(PHY_APB_BASE_ADDR + (2048 +330 <<2), tmp|0x00160000); //DENALI_PI_330_DATA
  223. tmp = apb_read(PHY_APB_BASE_ADDR + (2048 +354 <<2)); //DENALI_PI_361_DATA
  224. apb_write(PHY_APB_BASE_ADDR + (2048 +354 <<2), tmp|0x00160000); //DENALI_PI_354_DATA
  225. //PI_MR22_DATA_F2_X
  226. tmp = apb_read(PHY_APB_BASE_ADDR + (2048 +290 <<2)); //DENALI_PI_290_DATA
  227. apb_write(PHY_APB_BASE_ADDR + (2048 +290 <<2), tmp|0x00160000); //DENALI_PI_290_DATA
  228. tmp = apb_read(PHY_APB_BASE_ADDR + (2048 +314 <<2)); //DENALI_PI_314_DATA
  229. apb_write(PHY_APB_BASE_ADDR + (2048 +314 <<2), tmp|0x00160000); //DENALI_PI_314_DATA
  230. tmp = apb_read(PHY_APB_BASE_ADDR + (2048 +338 <<2)); //DENALI_PI_330_DATA
  231. apb_write(PHY_APB_BASE_ADDR + (2048 +338 <<2), tmp|0x00160000); //DENALI_PI_338_DATA
  232. tmp = apb_read(PHY_APB_BASE_ADDR + (2048 +362 <<2)); //DENALI_PI_362_DATA
  233. apb_write(PHY_APB_BASE_ADDR + (2048 +362 <<2), tmp|0x00160000); //DENALI_PI_362_DATA
  234. #if 1
  235. //PI_MR12_DATA_F1_X
  236. tmp = apb_read(PHY_APB_BASE_ADDR + (2048 +282 <<2)); //DENALI_PI_282_DATA
  237. apb_write(PHY_APB_BASE_ADDR + (2048 +282 <<2), tmp&0xffffff00|0x15); //DENALI_PI_282_DATA
  238. tmp = apb_read(PHY_APB_BASE_ADDR + (2048 +306 <<2)); //DENALI_PI_313_DATA
  239. apb_write(PHY_APB_BASE_ADDR + (2048 +306 <<2), tmp&0xffffff00|0x15); //DENALI_PI_306_DATA
  240. tmp = apb_read(PHY_APB_BASE_ADDR + (2048 +330 <<2)); //DENALI_PI_330_DATA
  241. apb_write(PHY_APB_BASE_ADDR + (2048 +330 <<2), tmp&0xffffff00|0x15); //DENALI_PI_330_DATA
  242. tmp = apb_read(PHY_APB_BASE_ADDR + (2048 +354 <<2)); //DENALI_PI_361_DATA
  243. apb_write(PHY_APB_BASE_ADDR + (2048 +354 <<2), tmp&0xffffff00|0x15); //DENALI_PI_354_DATA
  244. //PI_MR12_DATA_F2_X
  245. tmp = apb_read(PHY_APB_BASE_ADDR + (2048 +290 <<2)); //DENALI_PI_290_DATA
  246. apb_write(PHY_APB_BASE_ADDR + (2048 +290 <<2), tmp&0xffffff00|0x15); //DENALI_PI_290_DATA
  247. tmp = apb_read(PHY_APB_BASE_ADDR + (2048 +314 <<2)); //DENALI_PI_314_DATA
  248. apb_write(PHY_APB_BASE_ADDR + (2048 +314 <<2), tmp&0xffffff00|0x15); //DENALI_PI_314_DATA
  249. tmp = apb_read(PHY_APB_BASE_ADDR + (2048 +338 <<2)); //DENALI_PI_330_DATA
  250. apb_write(PHY_APB_BASE_ADDR + (2048 +338 <<2), tmp&0xffffff00|0x15); //DENALI_PI_338_DATA
  251. tmp = apb_read(PHY_APB_BASE_ADDR + (2048 +362 <<2)); //DENALI_PI_362_DATA
  252. apb_write(PHY_APB_BASE_ADDR + (2048 +362 <<2), tmp&0xffffff00|0x15); //DENALI_PI_362_DATA
  253. //PI_MR14_DATA_F1_X
  254. tmp = apb_read(PHY_APB_BASE_ADDR + (2048 +282 <<2)); //DENALI_PI_282_DATA
  255. apb_write(PHY_APB_BASE_ADDR + (2048 +282 <<2), tmp&0xffff00ff|0x1700); //DENALI_PI_282_DATA
  256. tmp = apb_read(PHY_APB_BASE_ADDR + (2048 +306 <<2)); //DENALI_PI_313_DATA
  257. apb_write(PHY_APB_BASE_ADDR + (2048 +306 <<2), tmp&0xffff00ff|0x1700); //DENALI_PI_306_DATA
  258. tmp = apb_read(PHY_APB_BASE_ADDR + (2048 +330 <<2)); //DENALI_PI_330_DATA
  259. apb_write(PHY_APB_BASE_ADDR + (2048 +330 <<2), tmp&0xffff00ff|0x1700); //DENALI_PI_330_DATA
  260. tmp = apb_read(PHY_APB_BASE_ADDR + (2048 +354 <<2)); //DENALI_PI_361_DATA
  261. apb_write(PHY_APB_BASE_ADDR + (2048 +354 <<2), tmp&0xffff00ff|0x1700); //DENALI_PI_354_DATA
  262. //PI_MR14_DATA_F2_X
  263. tmp = apb_read(PHY_APB_BASE_ADDR + (2048 +290 <<2)); //DENALI_PI_290_DATA
  264. apb_write(PHY_APB_BASE_ADDR + (2048 +290 <<2), tmp&0xffff00ff|0x1700); //DENALI_PI_290_DATA
  265. tmp = apb_read(PHY_APB_BASE_ADDR + (2048 +314 <<2)); //DENALI_PI_314_DATA
  266. apb_write(PHY_APB_BASE_ADDR + (2048 +314 <<2), tmp&0xffff00ff|0x1700); //DENALI_PI_314_DATA
  267. tmp = apb_read(PHY_APB_BASE_ADDR + (2048 +338 <<2)); //DENALI_PI_330_DATA
  268. apb_write(PHY_APB_BASE_ADDR + (2048 +338 <<2), tmp&0xffff00ff|0x1700); //DENALI_PI_338_DATA
  269. tmp = apb_read(PHY_APB_BASE_ADDR + (2048 +362 <<2)); //DENALI_PI_362_DATA
  270. apb_write(PHY_APB_BASE_ADDR + (2048 +362 <<2), tmp&0xffff00ff|0x1700); //DENALI_PI_362_DATA
  271. #endif
  272. /*
  273. //set PHY_LP4_WDQS_OE_EXTEND_x
  274. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +65 <<2));//`DENALI_PHY_65_DATA
  275. apb_write(PHY_APB_BASE_ADDR + (4096 +65 <<2), tmp | 0x00000100);
  276. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +321 <<2));//`DENALI_PHY_321_DATA
  277. apb_write(PHY_APB_BASE_ADDR + (4096 +321 <<2), tmp | 0x00000100);
  278. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +577 <<2));//`DENALI_PHY_577_DATA
  279. apb_write(PHY_APB_BASE_ADDR + (4096 +577 <<2), tmp | 0x00000100);
  280. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +833 <<2));//`DENALI_PHY_833_DATA
  281. apb_write(PHY_APB_BASE_ADDR + (4096 +833 <<2), tmp | 0x00000100);
  282. */
  283. //PHY_RPTR_UPDATE_x: bit[11:8]+=3
  284. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +96 <<2));//`DENALI_PHY_96_DATA
  285. apb_write(PHY_APB_BASE_ADDR + (4096 +96 <<2), tmp+0x0300);
  286. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +352 <<2));//`DENALI_PHY_352_DATA
  287. apb_write(PHY_APB_BASE_ADDR + (4096 +352 <<2), tmp+0x0300);
  288. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +608 <<2));//`DENALI_PHY_608_DATA
  289. apb_write(PHY_APB_BASE_ADDR + (4096 +608 <<2), tmp+0x0300);
  290. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +864 <<2));//`DENALI_PHY_864_DATA
  291. apb_write(PHY_APB_BASE_ADDR + (4096 +864 <<2), tmp+0x0300);
  292. #ifdef G_SPEED_3200
  293. //PHY_WRLVL_DLY_STEP_X: 8'hC -> 8'h18
  294. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +96 <<2));//`DENALI_PHY_96_DATA
  295. apb_write(PHY_APB_BASE_ADDR + (4096 +96 <<2), tmp&0xff00ffff|0x00180000);
  296. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +352 <<2));//`DENALI_PHY_352_DATA
  297. apb_write(PHY_APB_BASE_ADDR + (4096 +352 <<2), tmp&0xff00ffff|0x00180000);
  298. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +608 <<2));//`DENALI_PHY_608_DATA
  299. apb_write(PHY_APB_BASE_ADDR + (4096 +608 <<2), tmp&0xff00ffff|0x00180000);
  300. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +864 <<2));//`DENALI_PHY_864_DATA
  301. apb_write(PHY_APB_BASE_ADDR + (4096 +864 <<2), tmp&0xff00ffff|0x00180000);
  302. #elif defined G_SPEED_2666
  303. //PHY_WRLVL_DLY_STEP_X: 8'hC -> 8'h14
  304. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +96 <<2));//`DENALI_PHY_96_DATA
  305. apb_write(PHY_APB_BASE_ADDR + (4096 +96 <<2), tmp&0xff00ffff|0x00140000);
  306. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +352 <<2));//`DENALI_PHY_352_DATA
  307. apb_write(PHY_APB_BASE_ADDR + (4096 +352 <<2), tmp&0xff00ffff|0x00140000);
  308. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +608 <<2));//`DENALI_PHY_608_DATA
  309. apb_write(PHY_APB_BASE_ADDR + (4096 +608 <<2), tmp&0xff00ffff|0x00140000);
  310. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +864 <<2));//`DENALI_PHY_864_DATA
  311. apb_write(PHY_APB_BASE_ADDR + (4096 +864 <<2), tmp&0xff00ffff|0x00140000);
  312. #elif defined G_SPEED_2133
  313. //PHY_WRLVL_DLY_STEP_X: 8'hC -> 8'h12
  314. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +96 <<2));//`DENALI_PHY_96_DATA
  315. apb_write(PHY_APB_BASE_ADDR + (4096 +96 <<2), tmp&0xff00ffff|0x00120000);
  316. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +352 <<2));//`DENALI_PHY_352_DATA
  317. apb_write(PHY_APB_BASE_ADDR + (4096 +352 <<2), tmp&0xff00ffff|0x00120000);
  318. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +608 <<2));//`DENALI_PHY_608_DATA
  319. apb_write(PHY_APB_BASE_ADDR + (4096 +608 <<2), tmp&0xff00ffff|0x00120000);
  320. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +864 <<2));//`DENALI_PHY_864_DATA
  321. apb_write(PHY_APB_BASE_ADDR + (4096 +864 <<2), tmp&0xff00ffff|0x00120000);
  322. //`elsif G_SPEED_1600
  323. #endif
  324. //PHY_WDQLVL_CLK_JITTER_TOLERANCE_X: 8'h20 -> 8'h40
  325. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +33 <<2));//`DENALI_PHY_33_DATA
  326. apb_write(PHY_APB_BASE_ADDR + (4096 +33 <<2), tmp&0xffffff00|0x0040);
  327. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +289 <<2));//`DENALI_PHY_289_DATA
  328. apb_write(PHY_APB_BASE_ADDR + (4096 +289 <<2), tmp&0xffffff00|0x0040);
  329. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +545 <<2));//`DENALI_PHY_545_DATA
  330. apb_write(PHY_APB_BASE_ADDR + (4096 +545 <<2), tmp&0xffffff00|0x0040);
  331. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +801 <<2));//`DENALI_PHY_801_DATA
  332. apb_write(PHY_APB_BASE_ADDR + (4096 +801 <<2), tmp&0xffffff00|0x0040);
  333. //PHY_ADR_CALVL_NUM_PATTERNS_X: 2'h0 -> 2'h01 TODO
  334. //apb_read(PHY_APB_BASE_ADDR + (16'd4096 +16'd1039 <<2), tmp);//`DENALI_PHY_1039_DATA
  335. //apb_write(PHY_APB_BASE_ADDR + (16'd4096 +16'd1039 <<2), tmp|32'h01);
  336. //
  337. //apb_read(PHY_APB_BASE_ADDR + (16'd4096 +16'd1295 <<2), tmp);//`DENALI_PHY_1295_DATA
  338. //apb_write(PHY_APB_BASE_ADDR + (16'd4096 +16'd1295 <<2), tmp|32'h01);
  339. //
  340. //apb_read(PHY_APB_BASE_ADDR + (16'd4096 +16'd1551 <<2), tmp);//`DENALI_PHY_1551_DATA
  341. //apb_write(PHY_APB_BASE_ADDR + (16'd4096 +16'd1551 <<2), tmp|32'h01);
  342. //PHY_ADR_CALVL_RANK_CTRL_x: 2'b11 -> 2'b10
  343. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +1038 <<2));//`DENALI_PHY_1038_DATA
  344. apb_write(PHY_APB_BASE_ADDR + (4096 +1038 <<2), tmp&0xfcffffff|0x02000000);
  345. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +1294 <<2));//`DENALI_PHY_1294_DATA
  346. apb_write(PHY_APB_BASE_ADDR + (4096 +1294 <<2), tmp&0xfcffffff|0x02000000);
  347. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +1550 <<2));//`DENALI_PHY_1550_DATA
  348. apb_write(PHY_APB_BASE_ADDR + (4096 +1550 <<2), tmp&0xfcffffff|0x02000000);
  349. #if 1//0807
  350. //PHY_PAD_DSLICE_IO_CFG_x:0->7
  351. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +83 <<2)); //DENALI_PHY_83_DATA
  352. apb_write(PHY_APB_BASE_ADDR + (4096 +83 <<2), tmp&0xffc0ffff|0x70000); //DENALI_PHY_83_DATA
  353. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +339 <<2)); //DENALI_PHY_339_DATA
  354. apb_write(PHY_APB_BASE_ADDR + (4096 +339 <<2), tmp&0xffc0ffff|0x70000); //DENALI_PHY_339_DATA
  355. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +595 <<2)); //DENALI_PHY_595_DATA
  356. apb_write(PHY_APB_BASE_ADDR + (4096 +595 <<2), tmp&0xffc0ffff|0x70000); //DENALI_PHY_595_DATA
  357. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +851 <<2)); //DENALI_PHY_851_DATA
  358. apb_write(PHY_APB_BASE_ADDR + (4096 +851 <<2), tmp&0xffc0ffff|0x70000); //DENALI_PHY_851_DATA
  359. //PHY_PAD_ADR_IO_CFG_x:0->7
  360. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +1062 <<2)); //DENALI_PHY_1062_DATA
  361. apb_write(PHY_APB_BASE_ADDR + (4096 +1062 <<2), tmp&0xf800ffff|0x70000); //DENALI_PHY_1062_DATA
  362. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +1318 <<2)); //DENALI_PHY_1318_DATA
  363. apb_write(PHY_APB_BASE_ADDR + (4096 +1318 <<2), tmp&0xf800ffff|0x70000); //DENALI_PHY_1318_DATA
  364. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +1574 <<2)); //DENALI_PHY_1574_DATA
  365. apb_write(PHY_APB_BASE_ADDR + (4096 +1574 <<2), tmp&0xf800ffff|0x70000); //DENALI_PHY_1574_DATA
  366. //PHY_PAD_CAL_IO_CFG_0:0->7->0x15547 VREFSEL_CAL/CAL2[5:0]=0x15
  367. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +1892 <<2)); //DENALI_PHY_1892_DATA
  368. apb_write(PHY_APB_BASE_ADDR + (4096 +1892 <<2), tmp&0xfffc0000|0x15547); //DENALI_PHY_1892_DATA
  369. //PHY_ADRCTL_PVT_MAP_0:0x35->0x14
  370. //tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +1864 <<2)); //DENALI_PHY_1864_DATA
  371. //apb_write(PHY_APB_BASE_ADDR + (4096 +1864 <<2), tmp&0xffffff00|0x14); //DENALI_PHY_1864_DATA
  372. //PHY_PAD_ACS_IO_CFG:0->7
  373. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +1893 <<2)); //DENALI_PHY_1893_DATA
  374. apb_write(PHY_APB_BASE_ADDR + (4096 +1893 <<2), tmp&0xfffc0000|0x7); //DENALI_PHY_1893_DATA
  375. //PHY_CAL_MODE_0 TODO: 0x78->0x7a, periodic_enable
  376. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +1852 <<2)); //DENALI_PHY_1852_DATA
  377. apb_write(PHY_APB_BASE_ADDR + (4096 +1852 <<2), tmp&0xffffe000|0x07a); //DENALI_PHY_1852_DATA
  378. //PHY_CAL_INTERVAL_COUNT_0
  379. apb_write(PHY_APB_BASE_ADDR + (4096 +1853 <<2), tmp&0x8000); //DENALI_PHY_1853_DATA
  380. //PHY_PLL_WAIT
  381. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +1822 <<2)); //DENALI_PHY_1822_DATA
  382. apb_write(PHY_APB_BASE_ADDR + (4096 +1822 <<2), tmp|0xFF); //DENALI_PHY_1822_DATA
  383. //PHY_PAD_VREF_CTRL_AC:10'h0100->10'h3d5
  384. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +1896 <<2)); //DENALI_PHY_1896_DATA
  385. apb_write(PHY_APB_BASE_ADDR + (4096 +1896 <<2), tmp&0xfffffc00|0x03d5); //DENALI_PHY_1896_DATA
  386. //PHY_PAD_VREF_CTRL_DQ_x:10'h11f->10'h3d5
  387. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +91 <<2)); //DENALI_PHY_91_DATA
  388. apb_write(PHY_APB_BASE_ADDR + (4096 +91 <<2), tmp&0xfc00ffff|0x03d50000); //DENALI_PHY_91_DATA
  389. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +347 <<2)); //DENALI_PHY_347_DATA
  390. apb_write(PHY_APB_BASE_ADDR + (4096 +347 <<2), tmp&0xfc00ffff|0x03d50000); //DENALI_PHY_347_DATA
  391. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +603 <<2)); //DENALI_PHY_603_DATA
  392. apb_write(PHY_APB_BASE_ADDR + (4096 +603 <<2), tmp&0xfc00ffff|0x03d50000); //DENALI_PHY_603_DATA
  393. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +859 <<2)); //DENALI_PHY_859_DATA
  394. apb_write(PHY_APB_BASE_ADDR + (4096 +859 <<2), tmp&0xfc00ffff|0x03d50000); //DENALI_PHY_859_DATA
  395. //PHY_PAD_FDBK_DRIVE:bit[7:0]:{ENSLICEP_DRV,ENSLICEN_DRV}
  396. apb_write(PHY_APB_BASE_ADDR + (4096 +1912 <<2), 0xcc3bfc7); //DENALI_PHY_1912_DATA //RX_CTLE[25:24], SPEED[23:22]=3, tx_pulldwn[21:20]=2'b00, MODE[17:15]=7, SLEWP[13:11]=7, SLEWN[10:8]=7
  397. //PHY_PAD_FDBK_DRIVE2:bit[7:0]:{ENSLICEP_ODT,ENSLICEN_ODT}
  398. apb_write(PHY_APB_BASE_ADDR + (4096 +1913 <<2), 0xff8f); //DENALI_PHY_1913_DATA //BOOSTP[15:12]=F, BOOSTN[11:18]=F
  399. //PHY_PAD_DATA_DRIVE
  400. apb_write(PHY_APB_BASE_ADDR + (4096 +1914 <<2), 0x33f07ff); //DENALI_PHY_1914_DATA //tx_pulldwn[21:20]=2'b11, SPEED[10:9]=3, MODE[8:6]=7, SLEWP[5:3]=7, SLEWN[2:0]=7
  401. //PHY_PAD_DQS_DRIVE
  402. apb_write(PHY_APB_BASE_ADDR + (4096 +1915 <<2), 0xc3c37ff); //DENALI_PHY_1915_DATA //tx_pulldwn[13:12]=2'b11, SPEED[10:9]=3, MODE[8:6]=7, SLEWP[5:3]=7, SLEWN[2:0]=7
  403. //PHY_PAD_ADDR_DRIVE
  404. apb_write(PHY_APB_BASE_ADDR + (4096 +1916 <<2), 0x1fffff10); //DENALI_PHY_1916_DATA //BOOSTP[26:23]=F, BOOSTN[22:19]=F, SPEED[18:17]=3, MODE[16:14]=7, SLEWP[13:11]=7, SLEWN[10:8]=7, tx_pulldwn[6:5]=2'b00
  405. //PHY_PAD_ADDR_DRIVE2
  406. apb_write(PHY_APB_BASE_ADDR + (4096 +1917 <<2), 0x230070); //DENALI_PHY_1917_DATA //RX_CTLE[6:5]=2'b11
  407. //PHY_PAD_CLK_DRIVE //ENSLICEP_DRV/ODT[7:4], ENSLICEN_DRV/ODT[3:0]
  408. apb_write(PHY_APB_BASE_ADDR + (4096 +1918 <<2), 0x3ff7ffff); //DENALI_PHY_1918_DATA //BOOSTP[29:26]=F, BOOSTN[25:22]=F, tx_pulldwn[21:20]=2'b11, SPEED[18:17]=3, MODE[16:14]=7, SLEWP[13:11]=7, SLEWN[10:8]=7
  409. //PHY_PAD_CLK_DRIVE2
  410. apb_write(PHY_APB_BASE_ADDR + (4096 +1919 <<2), 0xe10); //DENALI_PHY_1919_DATA
  411. //PHY_PAD_ERR_DRIVE
  412. apb_write(PHY_APB_BASE_ADDR + (4096 +1920 <<2), 0x1fffffff); //DENALI_PHY_1920_DATA //tx_pulldwn[28:27]=2'b11, BOOSTP[26:23]=F, BOOSTN[22:19]=F, SPEED[18:17]=3, MODE[16:14]=7, SLEWP[13:11]=7, SLEWN[10:8]=7
  413. //PHY_PAD_ERR_DRIVE2
  414. apb_write(PHY_APB_BASE_ADDR + (4096 +1921 <<2), 0x188411); //DENALI_PHY_1921_DATA //RX_CTLE[18:17]
  415. //PHY_PAD_CKE_DRIVE
  416. apb_write(PHY_APB_BASE_ADDR + (4096 +1922 <<2), 0x1fffffff); //DENALI_PHY_1922_DATA //tx_pulldwn[28:27]=2'b11, BOOSTP[26:23]=F, BOOSTN[22:19]=F, SPEED[18:17]=3, MODE[16:14]=7, SLEWP[13:11]=7, SLEWN[10:8]=7
  417. //PHY_PAD_CKE_DRIVE2
  418. apb_write(PHY_APB_BASE_ADDR + (4096 +1923 <<2), 0x180400); //DENALI_PHY_1923_DATA //RX_CTLE[18:17]
  419. //PHY_PAD_RST_DRIVE
  420. apb_write(PHY_APB_BASE_ADDR + (4096 +1924 <<2), 0x1fffffff); //DENALI_PHY_1924_DATA //tx_pulldwn[28:27]=2'b11, BOOSTP[26:23]=F, BOOSTN[22:19]=F, SPEED[18:17]=3, MODE[16:14]=7, SLEWP[13:11]=7, SLEWN[10:8]=7
  421. //PHY_PAD_RST_DRIVE2
  422. apb_write(PHY_APB_BASE_ADDR + (4096 +1925 <<2), 0x180400); //DENALI_PHY_1925_DATA //RX_CTLE[18:17]
  423. //PHY_PAD_CS_DRIVE //ENSLICEP_DRV/ODT[7:4], ENSLICEN_DRV/ODT[3:0]
  424. apb_write(PHY_APB_BASE_ADDR + (4096 +1926 <<2), 0x1fffffcf); //DENALI_PHY_1926_DATA //tx_pulldwn[28:27]=2'b11, BOOSTP[26:23]=F, BOOSTN[22:19]=F, SPEED[18:17]=3, MODE[16:14]=7, SLEWP[13:11]=7, SLEWN[10:8]=7
  425. //PHY_PAD_CS_DRIVE2
  426. apb_write(PHY_APB_BASE_ADDR + (4096 +1927 <<2), 0x188400); //DENALI_PHY_1927_DATA //RX_CTLE[18:17]
  427. //PHY_PAD_ODT_DRIVE
  428. apb_write(PHY_APB_BASE_ADDR + (4096 +1928 <<2), 0x1fffffff); //DENALI_PHY_1928_DATA //tx_pulldwn[28:27]=2'b11, BOOSTP[26:23]=F, BOOSTN[22:19]=F, SPEED[18:17]=3, MODE[16:14]=7, SLEWP[13:11]=7, SLEWN[10:8]=7
  429. //PHY_CAL_CLK_SELECT_0[26:24],PHY_PAD_ODT_DRIVE2[21:0]:1->4
  430. apb_write(PHY_APB_BASE_ADDR + (4096 +1929 <<2), 0x4188411); //DENALI_PHY_1929_DATA //PHY_CAL_CLK_SELECT_0[26:24], RX_CTLE[18:17]
  431. //PHY_PAD_FDBK_TERM
  432. apb_write(PHY_APB_BASE_ADDR + (4096 +1837 <<2), 0x24410); //DENALI_PHY_1837_DATA //TSEL[17]=1
  433. //PHY_PAD_ADDR_TERM
  434. apb_write(PHY_APB_BASE_ADDR + (4096 +1840 <<2), 0x24410); //DENALI_PHY_1840_DATA //TSEL[17]=1
  435. //PHY_PAD_ERR_TERM
  436. apb_write(PHY_APB_BASE_ADDR + (4096 +1842 <<2), 0x2ffff); //DENALI_PHY_1842_DATA //TSEL[17]=1
  437. //PHY_DQ_TSEL_SELECT_X bit[15:8]={ENSLICEP_DRV,ENSLICEN_DRV}:tsel_wr_select bit[7:0]={ENSLICEP_ODT,ENSLICEN_ODT}:tsel_rd_select
  438. if(ddr_num == 0) //ddr0
  439. {
  440. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +76 <<2)); //DENALI_PHY_76_DATA
  441. apb_write(PHY_APB_BASE_ADDR + (4096 +76 <<2), tmp&0xff0000f8|0x00ff8f07); //DENALI_PHY_76_DATA //dqs0/dm0/dq0:tsel_idle_enp[2]=1, tsel_rd_en[1]=1, tsel_wr_en[0]=1
  442. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +332 <<2)); //DENALI_PHY_332_DATA
  443. apb_write(PHY_APB_BASE_ADDR + (4096 +332 <<2), tmp&0xff0000f8|0x00ff7c07); //DENALI_PHY_332_DATA //dqs1/dm1/dq8:tsel_idle_enp[2]=1, tsel_rd_en[1]=1, tsel_wr_en[0]=1
  444. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +588 <<2)); //DENALI_PHY_588_DATA
  445. apb_write(PHY_APB_BASE_ADDR + (4096 +588 <<2), tmp&0xff0000f8|0x00ff8f07); //DENALI_PHY_588_DATA //dqs2/dm2/dq16:tsel_idle_enp[2]=1, tsel_rd_en[1]=1, tsel_wr_en[0]=1
  446. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +844 <<2)); //DENALI_PHY_844_DATA
  447. apb_write(PHY_APB_BASE_ADDR + (4096 +844 <<2), tmp&0xff0000f8|0x00ff8f07); //DENALI_PHY_844_DATA //dqs3/dm3/dq24:tsel_idle_enp[2]=1, tsel_rd_en[1]=1, tsel_wr_en[0]=1
  448. }
  449. else //ddr1
  450. {
  451. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +76 <<2)); //DENALI_PHY_76_DATA
  452. apb_write(PHY_APB_BASE_ADDR + (4096 +76 <<2), tmp&0xff0000f8|0x00ff4f07); //DENALI_PHY_76_DATA //dqs0/dm0/dq0:tsel_idle_enp[2]=1, tsel_rd_en[1]=1, tsel_wr_en[0]=1
  453. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +332 <<2)); //DENALI_PHY_332_DATA
  454. apb_write(PHY_APB_BASE_ADDR + (4096 +332 <<2), tmp&0xff0000f8|0x00ff7c07); //DENALI_PHY_332_DATA //dqs1/dm1/dq8:tsel_idle_enp[2]=1, tsel_rd_en[1]=1, tsel_wr_en[0]=1
  455. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +588 <<2)); //DENALI_PHY_588_DATA
  456. apb_write(PHY_APB_BASE_ADDR + (4096 +588 <<2), tmp&0xff0000f8|0x00ff4f07); //DENALI_PHY_588_DATA //dqs2/dm2/dq16:tsel_idle_enp[2]=1, tsel_rd_en[1]=1, tsel_wr_en[0]=1
  457. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +844 <<2)); //DENALI_PHY_844_DATA
  458. apb_write(PHY_APB_BASE_ADDR + (4096 +844 <<2), tmp&0xff0000f8|0x00ff7c07); //DENALI_PHY_844_DATA //dqs3/dm3/dq24:tsel_idle_enp[2]=1, tsel_rd_en[1]=1, tsel_wr_en[0]=1
  459. }
  460. //PHY_DQS_TSEL_SELECT_X bit[15:8]={ENSLICEP_DRV,ENSLICEN_DRV}:tsel_wr_select bit[7:0]={ENSLICEP_ODT,ENSLICEN_ODT}:tsel_rd_select
  461. if(ddr_num == 0) //ddr0
  462. {
  463. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +77 <<2)); //DENALI_PHY_77_DATA
  464. apb_write(PHY_APB_BASE_ADDR + (4096 +77 <<2), tmp&0xffff0000|0xff7c); //DENALI_PHY_77_DATA
  465. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +333 <<2)); //DENALI_PHY_333_DATA
  466. apb_write(PHY_APB_BASE_ADDR + (4096 +333 <<2), tmp&0xffff0000|0xff7c); //DENALI_PHY_333_DATA
  467. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +589 <<2)); //DENALI_PHY_589_DATA
  468. apb_write(PHY_APB_BASE_ADDR + (4096 +589 <<2), tmp&0xffff0000|0xff7c); //DENALI_PHY_589_DATA
  469. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +845 <<2)); //DENALI_PHY_845_DATA
  470. apb_write(PHY_APB_BASE_ADDR + (4096 +845 <<2), tmp&0xffff0000|0xff7c); //DENALI_PHY_845_DATA
  471. }
  472. else //ddr1
  473. {
  474. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +77 <<2)); //DENALI_PHY_77_DATA
  475. apb_write(PHY_APB_BASE_ADDR + (4096 +77 <<2), tmp&0xffff0000|0xff8f); //DENALI_PHY_77_DATA
  476. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +333 <<2)); //DENALI_PHY_333_DATA
  477. apb_write(PHY_APB_BASE_ADDR + (4096 +333 <<2), tmp&0xffff0000|0xff8f); //DENALI_PHY_333_DATA
  478. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +589 <<2)); //DENALI_PHY_589_DATA
  479. apb_write(PHY_APB_BASE_ADDR + (4096 +589 <<2), tmp&0xffff0000|0xff8f); //DENALI_PHY_589_DATA
  480. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +845 <<2)); //DENALI_PHY_845_DATA
  481. apb_write(PHY_APB_BASE_ADDR + (4096 +845 <<2), tmp&0xffff0000|0xff8f); //DENALI_PHY_845_DATA
  482. }
  483. //PHY_ADR_TSEL_SELECT_X:bit[7:0]:{ENSLICEP_ODT/DRV,PENSLICEN_ODT/DRV}
  484. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +1062 <<2)); //DENALI_PHY_1062_DATA for addr5-0
  485. apb_write(PHY_APB_BASE_ADDR + (4096 +1062 <<2), tmp&0xffffff00|0xff); //DENALI_PHY_1062_DATA
  486. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +1318 <<2)); //DENALI_PHY_1318_DATA for addr11-6
  487. apb_write(PHY_APB_BASE_ADDR + (4096 +1318 <<2), tmp&0xffffff00|0xff); //DENALI_PHY_1318_DATA
  488. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +1574 <<2)); //DENALI_PHY_1574_DATA for addr15-12
  489. apb_write(PHY_APB_BASE_ADDR + (4096 +1574 <<2), tmp&0xffffff00|0xff); //DENALI_PHY_1574_DATA
  490. //PHY_ADR_TSEL_ENABLE_X
  491. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +1028 <<2)); //DENALI_PHY_1028_DATA for addr5-0
  492. apb_write(PHY_APB_BASE_ADDR + (4096 +1028 <<2), tmp|0x1000000); //DENALI_PHY_1028_DATA //addr5-0:TSEL[24]=1
  493. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +1284 <<2)); //DENALI_PHY_1284_DATA for addr11-6
  494. apb_write(PHY_APB_BASE_ADDR + (4096 +1284 <<2), tmp|0x1000000); //DENALI_PHY_1284_DATA //addr11-6:TSEL[24]=1
  495. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +1540 <<2)); //DENALI_PHY_1540_DATA for addr15-12
  496. apb_write(PHY_APB_BASE_ADDR + (4096 +1540 <<2), tmp|0x1000000); //DENALI_PHY_1540_DATA //addr15-12:TSEL[24]=1
  497. //PHY_TST_CLK_PAD_CTRL_x tst_clk_pad/tst_refclk_pad
  498. apb_write(PHY_APB_BASE_ADDR + (4096 +1848 <<2), 0x3cf07f8); //DENALI_PHY_1848_DATA //tx_pulldwn[31:30]=2'b00, ENSLICEP_DRV[10:7], ENSLICEN_DRV[6:3], IE[2], TSEL[1], OE[0]
  499. apb_write(PHY_APB_BASE_ADDR + (4096 +1849 <<2), 0x3f); //DENALI_PHY_1849_DATA //SLEWP[5:3]=7, SLEWN[2:0]=7
  500. apb_write(PHY_APB_BASE_ADDR + (4096 +1850 <<2), 0x1fffff); //DENALI_PHY_1850_DATA //SPEED[20:19]=3, MODE[18:16]=7, BOOSTN[15:12]=F, BOOSTP[11:8]=F, ENSLICEP_ODT[7:4], ENSLICEN_ODT[3:0]
  501. apb_write(PHY_APB_BASE_ADDR + (4096 +1851 <<2), 0x190000); //DENALI_PHY_1851_DATA //RX_CTLE[18:17]=3
  502. //PHY_DSLICE_PAD_BOOSTPN_SETTING_x
  503. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +130 <<2)); //DENALI_PI_130_DATA
  504. apb_write(PHY_APB_BASE_ADDR + (4096 +130 <<2), tmp&0x0000ffff|0xffff0000); //DENALI_PI_130_DATA //dqs0_BOOSTP[31:28]=F, dqs0_BOOSTN[27:24]=F, dq0/dm0_BOOSTP[23:20]=F, dq0/dm0_BOOSTN[19:16]=F
  505. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +386 <<2)); //DENALI_PI_386_DATA
  506. apb_write(PHY_APB_BASE_ADDR + (4096 +386 <<2), tmp&0x0000ffff|0xffff0000); //DENALI_PI_386_DATA //dqs1_BOOSTP[31:28]=F, dqs1_BOOSTN[27:24]=F, dq8/dm1_BOOSTP[23:20]=F, dq8/dm1_BOOSTN[19:16]=F
  507. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +642 <<2)); //DENALI_PI_642_DATA
  508. apb_write(PHY_APB_BASE_ADDR + (2048 +642 <<2), tmp&0x0000ffff|0xffff0000); //DENALI_PI_642_DATA //dqs2_BOOSTP[31:28]=F, dqs2_BOOSTN[27:24]=F, dq16/dm2_BOOSTP[23:20]=F, dq16/dm2_BOOSTN[19:16]=F
  509. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +898 <<2)); //DENALI_PI_898_DATA
  510. apb_write(PHY_APB_BASE_ADDR + (4096 +898 <<2), tmp&0x0000ffff|0xffff0000); //DENALI_PI_898_DATA //dqs3_BOOSTP[31:28]=F, dqs3_BOOSTN[27:24]=F, dq24/dm3_BOOSTP[23:20]=F, dq24/dm3_BOOSTN[19:16]=F
  511. //PHY_DSLICE_PAD_RX_CTLE_SETTING_x
  512. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +131 <<2)); //DENALI_PI_131_DATA
  513. apb_write(PHY_APB_BASE_ADDR + (4096 +131 <<2), tmp&0xfffffff0|0xf); //DENALI_PI_131_DATA //dqs0_RX_CTLE[3:2]=3, dq0/dm0_RX_CTLE[1:0]=3
  514. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +387 <<2)); //DENALI_PI_387_DATA
  515. apb_write(PHY_APB_BASE_ADDR + (4096 +387 <<2), tmp&0xfffffff0|0xf); //DENALI_PI_387_DATA //dqs1_RX_CTLE[3:2]=3, dq8/dm1_RX_CTLE[1:0]=3
  516. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +643 <<2)); //DENALI_PI_643_DATA
  517. apb_write(PHY_APB_BASE_ADDR + (4096 +643 <<2), tmp&0xfffffff0|0xf); //DENALI_PI_643_DATA //dqs2_RX_CTLE[3:2]=3, dq16/dm2_RX_CTLE[1:0]=3
  518. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +899 <<2)); //DENALI_PI_899_DATA
  519. apb_write(PHY_APB_BASE_ADDR + (4096 +899 <<2), tmp&0xfffffff0|0xf); //DENALI_PI_899_DATA //dqs3_RX_CTLE[3:2]=3, dq24/dm3_RX_CTLE[1:0]=3
  520. #if 1
  521. //PHY_WRLVL_CAPTURE_CNT_X
  522. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +29 <<2)); //DENALI_PHY_29_DATA
  523. apb_write(PHY_APB_BASE_ADDR + (4096 +29 <<2), ((tmp & 0xc0ffffff)|0x10000000)); //DENALI_PHY_29_DATA
  524. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +285 <<2)); //DENALI_PHY_285_DATA
  525. apb_write(PHY_APB_BASE_ADDR + (4096 +285 <<2), ((tmp & 0xc0ffffff)|0x10000000)); //DENALI_PHY_285_DATA
  526. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +541 <<2)); //DENALI_PHY_541_DATA
  527. apb_write(PHY_APB_BASE_ADDR + (4096 +541 <<2), ((tmp & 0xc0ffffff)|0x10000000)); //DENALI_PHY_541_DATA
  528. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +797 <<2)); //DENALI_PHY_797_DATA
  529. apb_write(PHY_APB_BASE_ADDR + (4096 +797 <<2), ((tmp & 0xc0ffffff)|0x10000000)); //DENALI_PHY_797_DATA
  530. //PHY_GTLVL_CAPTURE_CNT_X
  531. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +30 <<2)); //DENALI_PHY_30_DATA
  532. apb_write(PHY_APB_BASE_ADDR + (4096 +30 <<2), (tmp |0x00080000)); //DENALI_PHY_30_DATA
  533. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +286 <<2)); //DENALI_PHY_286_DATA
  534. apb_write(PHY_APB_BASE_ADDR + (4096 +286 <<2), (tmp |0x00080000)); //DENALI_PHY_286_DATA
  535. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +542 <<2)); //DENALI_PHY_542_DATA
  536. apb_write(PHY_APB_BASE_ADDR + (4096 +542 <<2), (tmp |0x00080000)); //DENALI_PHY_542_DATA
  537. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +798 <<2)); //DENALI_PHY_798_DATA
  538. apb_write(PHY_APB_BASE_ADDR + (4096 +798 <<2), (tmp |0x00080000)); //DENALI_PHY_797_DATA
  539. //PHY_RDLVL_CAPTURE_CNT_X
  540. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +31 <<2)); //DENALI_PHY_31_DATA
  541. apb_write(PHY_APB_BASE_ADDR + (4096 +31 <<2), ((tmp & 0xFFFFFFC0)|0X00000010)); //DENALI_PHY_31_DATA
  542. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +287 <<2)); //DENALI_PHY_287_DATA
  543. apb_write(PHY_APB_BASE_ADDR + (4096 +287 <<2), ((tmp & 0xFFFFFFC0)|0X00000010)); //DENALI_PHY_287_DATA
  544. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +543 <<2)); //DENALI_PHY_543_DATA
  545. apb_write(PHY_APB_BASE_ADDR + (4096 +543 <<2), ((tmp & 0xFFFFFFC0)|0X00000010)); //DENALI_PHY_543_DATA
  546. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +799 <<2)); //DENALI_PHY_799_DATA
  547. apb_write(PHY_APB_BASE_ADDR + (4096 +799 <<2), ((tmp & 0xFFFFFFC0)|0X00000010)); //DENALI_PHY_799_DATA
  548. //PHY_ADRLVL_CAPTURE_CNT_X
  549. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +1071 <<2)); //DENALI_PHY_1071_DATA
  550. apb_write(PHY_APB_BASE_ADDR + (4096 +1071 <<2), ((tmp & 0xFFFFFFF0)|0X00000008)); //DENALI_PHY_1071_DATA
  551. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +1327 <<2)); //DENALI_PHY_1327_DATA
  552. apb_write(PHY_APB_BASE_ADDR + (4096 +1327 <<2), ((tmp & 0xFFFFFFF0)|0X00000008)); //DENALI_PHY_1327_DATA
  553. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +1583 <<2)); //DENALI_PHY_1583_DATA
  554. apb_write(PHY_APB_BASE_ADDR + (4096 +1583 <<2), ((tmp & 0xFFFFFFF0)|0X00000008)); //DENALI_PHY_1583_DATA
  555. //PHY_CSLVL_COARSECAPTURE_CNT
  556. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +1808 <<2)); //DENALI_PHY_1808_DATA
  557. apb_write(PHY_APB_BASE_ADDR + (4096 +1808 <<2), ((tmp & 0xFFFFFFF0)|0X00000008)); //DENALI_PHY_1808_DATA
  558. //PHY_CSLVL_CAPTURE_CNT_X
  559. tmp = apb_read(PHY_APB_BASE_ADDR + (4096 +1896 <<2)); //DENALI_PHY_1896_DATA
  560. apb_write(PHY_APB_BASE_ADDR + (4096 +1896 <<2), ((tmp & 0xFFFFFFF0)|0X00080000)); //DENALI_PHY_1896DATA
  561. #endif
  562. #endif
  563. }
  564. //PHY_WRLVL_DELAY_EARLY_THRESHOLD_X: 10'h1A0 -> 10'h00 TODO:need deleted
  565. //apb_read(PHY_APB_BASE_ADDR + (16'd4096 +16'd123 <<2), tmp);//`DENALI_PHY_123_DATA
  566. //apb_write(PHY_APB_BASE_ADDR + (16'd4096 +16'd123 <<2), tmp&32'hfc00_ffff);
  567. //
  568. //apb_read(PHY_APB_BASE_ADDR + (16'd4096 +16'd379 <<2), tmp);//`DENALI_PHY_379_DATA
  569. //apb_write(PHY_APB_BASE_ADDR + (16'd4096 +16'd379 <<2), tmp&32'hfc00_ffff);
  570. //
  571. //apb_read(PHY_APB_BASE_ADDR + (16'd4096 +16'd635 <<2), tmp);//`DENALI_PHY_635_DATA
  572. //apb_write(PHY_APB_BASE_ADDR + (16'd4096 +16'd635 <<2), tmp&32'hfc00_ffff);
  573. //
  574. //apb_read(PHY_APB_BASE_ADDR + (16'd4096 +16'd891 <<2), tmp);//`DENALI_PHY_891_DATA
  575. //apb_write(PHY_APB_BASE_ADDR + (16'd4096 +16'd891 <<2), tmp&32'hfc00_ffff);
  576. //release dll_rst_n
  577. //apb_write(PHY_APB_BASE_ADDR + (16'd0000 +16'd00 << 2), 32'h01);