rom_macro.h 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774
  1. /*** ***********************************************************
  2. * rom_macro.h
  3. *
  4. * 1. define all macros here
  5. *
  6. *
  7. ************************************************************************/
  8. #ifndef _ROM_MACRO
  9. #define _ROM_MACRO
  10. #ifdef __ASSEMBLY__
  11. #include <rom_def.h>
  12. #define BIT00 (1<<0)
  13. #define BIT01 (1<<1)
  14. #define BIT02 (1<<2)
  15. #define BIT03 (1<<3)
  16. #define BIT04 (1<<4)
  17. #define BIT05 (1<<5)
  18. #define BIT06 (1<<6)
  19. #define BIT07 (1<<7)
  20. #define BIT08 (1<<8)
  21. #define BIT09 (1<<9)
  22. #define BIT10 (1<<10)
  23. #define BIT11 (1<<11)
  24. #define BIT12 (1<<12)
  25. #define BIT13 (1<<13)
  26. #define BIT14 (1<<14)
  27. #define BIT15 (1<<15)
  28. #define BIT16 (1<<16)
  29. #define BIT17 (1<<17)
  30. #define BIT18 (1<<18)
  31. #define BIT19 (1<<19)
  32. #define BIT20 (1<<20)
  33. #define BIT21 (1<<21)
  34. #define BIT22 (1<<22)
  35. #define BIT23 (1<<23)
  36. #define BIT24 (1<<24)
  37. #define BIT25 (1<<25)
  38. #define BIT26 (1<<26)
  39. #define BIT27 (1<<27)
  40. #define BIT28 (1<<28)
  41. #define BIT29 (1<<29)
  42. #define BIT30 (1<<30)
  43. #define BIT31 (1<<31)
  44. #define AUX_BASE_USE_REG s0
  45. #define MAIN1_BASE_USE_REG s1
  46. #define MAIN2_BASE_USE_REG s2
  47. #define ROM_DATA_BASE_USE_REG s3
  48. #define DRAM_PHY_BASE_USE_REG s4
  49. #define DRAM_CTRL_BASE_USE_REG s5
  50. .macro MACRO_NONE
  51. .endm
  52. .macro B1B
  53. 78:
  54. b 78b
  55. nop
  56. .endm
  57. .macro LOOP_DELAY, DELAY
  58. li v0, \DELAY
  59. 79:
  60. bnez v0, 79b
  61. addiu v0, -1
  62. .endm
  63. .macro WD_DIS_WATCHDOG0
  64. /* Disable Watch dog 0, which is default enabled */
  65. li t0, WDT_MMIO
  66. lw t1, WDT0_Control_Offset(t0)
  67. or t1, WDT0_DisableBit
  68. sw t1, WDT0_Control_Offset(t0)
  69. .endm
  70. .macro WD_EN_WATCHDOG3, WDT3_ResetType
  71. /* sis326 Enable Dog 3 to Warm/Cold/RTC reset */
  72. li t0, WDT_MMIO
  73. li t1, \WDT3_ResetType // it could be set to WDT3_WarmReset, WDT3_ColdReset, or WDT3_RTCReset
  74. sw t1, WDT3_Control_Offset(t0)
  75. .endm
  76. .macro WD_EN_WATCHDOG1, WDT1_ResetType, WDT1_TimeTicks
  77. /* sis326 Enable Dog 1 to Warm/Cold/RTC reset and set TimeTickets*/
  78. //li v0, WDT_MMIO
  79. //li v1, (\WDT1_ResetType | \WDT1_TimeTicks | WDT1_EnableBit)
  80. //sw v1, WDT1_Control_Offset(v0)
  81. li v0, WDT_MMIO
  82. lw v1, WDT1_Control_Offset(v0)
  83. and v1, ~(0x80000000)
  84. sw v1, WDT1_Control_Offset(v0) //disable WDT1 first
  85. li v1, (\WDT1_ResetType | \WDT1_TimeTicks)
  86. sw v1, WDT1_Control_Offset(v0)
  87. or v1, WDT1_EnableBit
  88. sw v1, WDT1_Control_Offset(v0)
  89. .endm
  90. .macro WD_EN_WATCHDOG2, WDT2_ResetType, WDT2_TimeTicks
  91. /* sis326 Enable Dog 2 to Warm/Cold/RTC reset and set TimeTickets*/
  92. //li v0, WDT_MMIO
  93. //li v1, (\WDT2_ResetType | \WDT2_TimeTicks | WDT2_EnableBit)
  94. //sw v1, WDT2_Control_Offset(v0)
  95. li v0, WDT_MMIO
  96. lw v1, WDT2_Control_Offset(v0)
  97. and v1, ~(0x80000000)
  98. sw v1, WDT2_Control_Offset(v0) //disable WDT2 first
  99. li v1, (\WDT2_ResetType | \WDT2_TimeTicks)
  100. sw v1, WDT2_Control_Offset(v0)
  101. or v1, WDT2_EnableBit
  102. sw v1, WDT2_Control_Offset(v0)
  103. .endm
  104. .macro WD_RE_WATCHDOG1
  105. /* Refresh Watch dog 1 */
  106. li v0, WDT_MMIO
  107. lw v1, WDT0_Control_Offset(v0)
  108. or v1, WDT1_RefreshBit
  109. sw v1, WDT0_Control_Offset(v0)
  110. .endm
  111. .macro WD_RE_WATCHDOG2
  112. /* Refresh Watch dog 2 */
  113. li v0, WDT_MMIO
  114. lw v1, WDT0_Control_Offset(v0)
  115. or v1, WDT2_RefreshBit
  116. sw v1, WDT0_Control_Offset(v0)
  117. .endm
  118. .macro WD_DIS_WATCHDOG1
  119. /* Disable Watch dog 1 */
  120. li v0, WDT_MMIO
  121. lw v1, WDT1_Control_Offset(v0)
  122. and v1, ~(WDT1_EnableBit)
  123. sw v1, WDT1_Control_Offset(v0)
  124. .endm
  125. .macro WD_DIS_WATCHDOG2
  126. /* Disable Watch dog 2 */
  127. li v0, WDT_MMIO
  128. lw v1, WDT2_Control_Offset(v0)
  129. and v1, ~(WDT2_EnableBit)
  130. sw v1, WDT2_Control_Offset(v0)
  131. .endm
  132. .macro CPU_DIS_CPU1
  133. li t0, HWDevResetMMIO
  134. lw t1, 0(t0)
  135. or t1, CPU1_RSTN_Bit
  136. xor t1, CPU1_RSTN_Bit
  137. sw t1, 0x0(t0)
  138. .endm
  139. .macro CPU_EN_CPU1
  140. li t0, HWDevResetMMIO
  141. lw t1, 0(t0)
  142. or t1, CPU1_RSTN_Bit
  143. sw t1, 0x0(t0)
  144. .endm
  145. .macro rom_setting_read8, data_offset, data_in
  146. lbu \data_in, \data_offset(ROM_DATA_BASE_USE_REG)
  147. .endm
  148. .macro rom_setting_read16, data_offset, data_in
  149. lh \data_in, \data_offset(ROM_DATA_BASE_USE_REG)
  150. .endm
  151. .macro rom_setting_read32, data_offset, data_in
  152. lw \data_in, \data_offset(ROM_DATA_BASE_USE_REG)
  153. .endm
  154. .macro aux_write8, aux_offset, value
  155. li t0, \value
  156. sb t0, \aux_offset(AUX_BASE_USE_REG)
  157. .endm
  158. .macro aux_write16, aux_offset, value
  159. li t0, \value
  160. sh t0, \aux_offset(AUX_BASE_USE_REG)
  161. .endm
  162. .macro aux_write32, aux_offset, value
  163. li t0, \value
  164. sw t0, \aux_offset(AUX_BASE_USE_REG)
  165. .endm
  166. .macro aux_read8, aux_offset, ret_value_reg
  167. lbu \ret_value_reg, \aux_offset(AUX_BASE_USE_REG)
  168. .endm
  169. .macro aux_read16, aux_offset, ret_value_reg
  170. lh \ret_value_reg, \aux_offset(AUX_BASE_USE_REG)
  171. .endm
  172. .macro aux_read32, aux_offset, ret_value_reg
  173. lw \ret_value_reg, \aux_offset(AUX_BASE_USE_REG)
  174. .endm
  175. .macro aux_mask8, aux_offset, mask
  176. li t0, \mask
  177. lbu t1, \aux_offset(AUX_BASE_USE_REG)
  178. or t1, t1, t0
  179. sb t1, \aux_offset(AUX_BASE_USE_REG)
  180. .endm
  181. .macro aux_mask32, aux_offset, mask
  182. li t0, \mask
  183. lw t1, \aux_offset(AUX_BASE_USE_REG)
  184. or t1, t1, t0
  185. sw t1, \aux_offset(AUX_BASE_USE_REG)
  186. .endm
  187. .macro aux_unmask8, aux_offset, unmask
  188. li t0, ~\unmask
  189. lbu t1, \aux_offset(AUX_BASE_USE_REG)
  190. and t1, t1, t0
  191. sb t1, \aux_offset(AUX_BASE_USE_REG)
  192. .endm
  193. .macro aux_unmask32, aux_offset, unmask
  194. li t0, ~\unmask
  195. lw t1, \aux_offset(AUX_BASE_USE_REG)
  196. and t1, t1, t0
  197. sw t1, \aux_offset(AUX_BASE_USE_REG)
  198. .endm
  199. .macro aux_clear_and_set8, aux_offset, unmask, mask
  200. lbu t1, \aux_offset(AUX_BASE_USE_REG)
  201. li t0, ~\unmask
  202. and t1, t1, t0
  203. li t0, \mask
  204. or t1, t1, t0
  205. sb t1, \aux_offset(AUX_BASE_USE_REG)
  206. .endm
  207. .macro aux_clear_and_set16, aux_offset, unmask, mask
  208. lh t1, \aux_offset(AUX_BASE_USE_REG)
  209. li t0, ~\unmask
  210. and t1, t1, t0
  211. li t0, \mask
  212. or t1, t1, t0
  213. sh t1, \aux_offset(AUX_BASE_USE_REG)
  214. .endm
  215. .macro aux_clear_and_set32, aux_offset, unmask, mask
  216. lw t1, \aux_offset(AUX_BASE_USE_REG)
  217. li t0, ~\unmask
  218. and t1, t1, t0
  219. li t0, \mask
  220. or t1, t1, t0
  221. sw t1, \aux_offset(AUX_BASE_USE_REG)
  222. .endm
  223. .macro main1_write8, main_offset, value
  224. li t0, \value
  225. sb t0, \main_offset(MAIN1_BASE_USE_REG)
  226. .endm
  227. .macro main1_write16, main_offset, value
  228. li t0, \value
  229. sh t0, \main_offset(MAIN1_BASE_USE_REG)
  230. .endm
  231. .macro main1_write32, main_offset, value
  232. li t0, \value
  233. sw t0, \main_offset(MAIN1_BASE_USE_REG)
  234. .endm
  235. .macro main1_read8, main1_offset, ret_value_reg
  236. lbu \ret_value_reg, \main1_offset(MAIN1_BASE_USE_REG)
  237. .endm
  238. .macro main1_read16, main1_offset, ret_value_reg
  239. lh \ret_value_reg, \main1_offset(MAIN1_BASE_USE_REG)
  240. .endm
  241. .macro main1_read32, main1_offset, ret_value_reg
  242. lw \ret_value_reg, \main1_offset(MAIN1_BASE_USE_REG)
  243. .endm
  244. .macro main1_mask8, main_offset, mask
  245. li t0, \mask
  246. lbu t1, \main_offset(MAIN1_BASE_USE_REG)
  247. or t1, t1, t0
  248. sb t1, \main_offset(MAIN1_BASE_USE_REG)
  249. .endm
  250. .macro main1_mask32, main_offset, mask
  251. li t0, \mask
  252. lw t1, \main_offset(MAIN1_BASE_USE_REG)
  253. or t1, t1, t0
  254. sw t1, \main_offset(MAIN1_BASE_USE_REG)
  255. .endm
  256. .macro main1_unmask8, main_offset, unmask
  257. li t0, ~\unmask
  258. lbu t1, \main_offset(MAIN1_BASE_USE_REG)
  259. and t1, t1, t0
  260. sb t1, \main_offset(MAIN1_BASE_USE_REG)
  261. .endm
  262. .macro main1_unmask32, main_offset, unmask
  263. li t0, ~\unmask
  264. lw t1, \main_offset(MAIN1_BASE_USE_REG)
  265. and t1, t1, t0
  266. sw t1, \main_offset(MAIN1_BASE_USE_REG)
  267. .endm
  268. .macro main1_clear_and_set8, main1_offset, unmask, mask
  269. lbu t1, \main1_offset(MAIN1_BASE_USE_REG)
  270. li t0, ~\unmask
  271. and t1, t1, t0
  272. li t0, \mask
  273. or t1, t1, t0
  274. sb t1, \main1_offset(MAIN1_BASE_USE_REG)
  275. .endm
  276. .macro main1_clear_and_set16, main1_offset, unmask, mask
  277. lh t1, \main1_offset(MAIN1_BASE_USE_REG)
  278. li t0, ~\unmask
  279. and t1, t1, t0
  280. li t0, \mask
  281. or t1, t1, t0
  282. sh t1, \main1_offset(MAIN1_BASE_USE_REG)
  283. .endm
  284. .macro main1_clear_and_set32, main1_offset, unmask, mask
  285. lw t1, \main1_offset(MAIN1_BASE_USE_REG)
  286. li t0, ~\unmask
  287. and t1, t1, t0
  288. li t0, \mask
  289. or t1, t1, t0
  290. sw t1, \main1_offset(MAIN1_BASE_USE_REG)
  291. .endm
  292. .macro main1_rom_value_set8, main1_offset, rom_offset
  293. lbu t1, \rom_offset(ROM_DATA_BASE_USE_REG)
  294. sb t1, \main1_offset(MAIN1_BASE_USE_REG)
  295. .endm
  296. .macro main1_rom_value_set16, main1_offset, rom_offset
  297. lh t1, \rom_offset(ROM_DATA_BASE_USE_REG)
  298. sh t1, \main1_offset(MAIN1_BASE_USE_REG)
  299. .endm
  300. .macro main1_rom_value_set32, main1_offset, rom_offset
  301. lw t1, \rom_offset(ROM_DATA_BASE_USE_REG)
  302. sw t1, \main1_offset(MAIN1_BASE_USE_REG)
  303. .endm
  304. .macro main2_write8, main2_offset, value
  305. li t0, \value
  306. sb t0, \main2_offset(MAIN2_BASE_USE_REG)
  307. .endm
  308. .macro main2_write16, main2_offset, value
  309. li t0, \value
  310. sh t0, \main2_offset(MAIN2_BASE_USE_REG)
  311. .endm
  312. .macro main2_write32, main2_offset, value
  313. li t0, \value
  314. sw t0, \main2_offset(MAIN2_BASE_USE_REG)
  315. .endm
  316. .macro main2_read8, main2_offset, ret_value_reg
  317. lbu \ret_value_reg, \main2_offset(MAIN2_BASE_USE_REG)
  318. .endm
  319. .macro main2_read16, main2_offset, ret_value_reg
  320. lh \ret_value_reg, \main2_offset(MAIN2_BASE_USE_REG)
  321. .endm
  322. .macro main2_read32, main2_offset, ret_value_reg
  323. lw \ret_value_reg, \main2_offset(MAIN2_BASE_USE_REG)
  324. .endm
  325. .macro main2_mask8, main2_offset, mask
  326. li t0, \mask
  327. lbu t1, \main2_offset(MAIN2_BASE_USE_REG)
  328. or t1, t1, t0
  329. sb t1, \main2_offset(MAIN2_BASE_USE_REG)
  330. .endm
  331. .macro main2_mask32, main2_offset, mask
  332. li t0, \mask
  333. lw t1, \main2_offset(MAIN2_BASE_USE_REG)
  334. or t1, t1, t0
  335. sw t1, \main2_offset(MAIN2_BASE_USE_REG)
  336. .endm
  337. .macro main2_unmask8, main2_offset, unmask
  338. li t0, ~\unmask
  339. lbu t1, \main2_offset(MAIN2_BASE_USE_REG)
  340. and t1, t1, t0
  341. sb t1, \main2_offset(MAIN2_BASE_USE_REG)
  342. .endm
  343. .macro main2_unmask32, main2_offset, unmask
  344. li t0, ~\unmask
  345. lw t1, \main2_offset(MAIN2_BASE_USE_REG)
  346. and t1, t1, t0
  347. sw t1, \main2_offset(MAIN2_BASE_USE_REG)
  348. .endm
  349. .macro main2_clear_and_set8, main2_offset, unmask, mask
  350. lbu t1, \main2_offset(MAIN2_BASE_USE_REG)
  351. li t0, ~\unmask
  352. and t1, t1, t0
  353. li t0, \mask
  354. or t1, t1, t0
  355. sb t1, \main2_offset(MAIN2_BASE_USE_REG)
  356. .endm
  357. .macro main2_clear_and_set16, main2_offset, unmask, mask
  358. lh t1, \main2_offset(MAIN2_BASE_USE_REG)
  359. li t0, ~\unmask
  360. and t1, t1, t0
  361. li t0, \mask
  362. or t1, t1, t0
  363. sh t1, \main2_offset(MAIN2_BASE_USE_REG)
  364. .endm
  365. .macro main2_clear_and_set32, main2_offset, unmask, mask
  366. lw t1, \main2_offset(MAIN2_BASE_USE_REG)
  367. li t0, ~\unmask
  368. and t1, t1, t0
  369. li t0, \mask
  370. or t1, t1, t0
  371. sw t1, \main2_offset(MAIN2_BASE_USE_REG)
  372. .endm
  373. .macro main2_rom_value_set8, main2_offset, rom_offset
  374. lbu t1, \rom_offset(ROM_DATA_BASE_USE_REG)
  375. sb t1, \main2_offset(MAIN1_BASE_USE_REG)
  376. .endm
  377. .macro main2_rom_value_set16, main2_offset, rom_offset
  378. lh t1, \rom_offset(ROM_DATA_BASE_USE_REG)
  379. sh t1, \main2_offset(MAIN1_BASE_USE_REG)
  380. .endm
  381. .macro main2_rom_value_set32, main2_offset, rom_offset
  382. lw t1, \rom_offset(ROM_DATA_BASE_USE_REG)
  383. sw t1, \main2_offset(MAIN1_BASE_USE_REG)
  384. .endm
  385. .macro phy_write8, phy_offset, value
  386. li t0, \value
  387. sb t0, \phy_offset(DRAM_PHY_BASE_USE_REG)
  388. .endm
  389. .macro phy_write16, phy_offset, value
  390. li t0, \value
  391. sh t0, \phy_offset(DRAM_PHY_BASE_USE_REG)
  392. .endm
  393. .macro phy_write32, phy_offset, value
  394. li t0, \value
  395. sw t0, \phy_offset(DRAM_PHY_BASE_USE_REG)
  396. .endm
  397. .macro phy_read8, phy_offset, ret_value_reg
  398. lbu \ret_value_reg, \phy_offset(DRAM_PHY_BASE_USE_REG)
  399. .endm
  400. .macro phy_read16, phy_offset, ret_value_reg
  401. lh \ret_value_reg, \phy_offset(DRAM_PHY_BASE_USE_REG)
  402. .endm
  403. .macro phy_read32, phy_offset, ret_value_reg
  404. lw \ret_value_reg, \phy_offset(DRAM_PHY_BASE_USE_REG)
  405. .endm
  406. .macro phy_mask8, phy_offset, mask
  407. li t0, \mask
  408. lbu t1, \phy_offset(DRAM_PHY_BASE_USE_REG)
  409. or t1, t1, t0
  410. sb t1, \phy_offset(DRAM_PHY_BASE_USE_REG)
  411. .endm
  412. .macro phy_mask32, phy_offset, mask
  413. li t0, \mask
  414. lw t1, \phy_offset(DRAM_PHY_BASE_USE_REG)
  415. or t1, t1, t0
  416. sw t1, \phy_offset(DRAM_PHY_BASE_USE_REG)
  417. .endm
  418. .macro phy_unmask8, phy_offset, unmask
  419. li t0, ~\unmask
  420. lbu t1, \phy_offset(DRAM_PHY_BASE_USE_REG)
  421. and t1, t1, t0
  422. sb t1, \phy_offset(DRAM_PHY_BASE_USE_REG)
  423. .endm
  424. .macro phy_unmask32, phy_offset, unmask
  425. li t0, ~\unmask
  426. lw t1, \phy_offset(DRAM_PHY_BASE_USE_REG)
  427. and t1, t1, t0
  428. sw t1, \phy_offset(DRAM_PHY_BASE_USE_REG)
  429. .endm
  430. .macro phy_clear_and_set8, phy_offset, unmask, mask
  431. lbu t1, \phy_offset(DRAM_PHY_BASE_USE_REG)
  432. li t0, ~\unmask
  433. and t1, t1, t0
  434. li t0, \mask
  435. or t1, t1, t0
  436. sb t1, \phy_offset(DRAM_PHY_BASE_USE_REG)
  437. .endm
  438. .macro phy_clear_and_set16, phy_offset, unmask, mask
  439. lh t1, \phy_offset(DRAM_PHY_BASE_USE_REG)
  440. li t0, ~\unmask
  441. and t1, t1, t0
  442. li t0, \mask
  443. or t1, t1, t0
  444. sh t1, \phy_offset(DRAM_PHY_BASE_USE_REG)
  445. .endm
  446. .macro phy_clear_and_set32, phy_offset, unmask, mask
  447. lw t1, \phy_offset(DRAM_PHY_BASE_USE_REG)
  448. li t0, ~\unmask
  449. and t1, t1, t0
  450. li t0, \mask
  451. or t1, t1, t0
  452. sw t1, \phy_offset(DRAM_PHY_BASE_USE_REG)
  453. .endm
  454. .macro phy_rom_value_set8, phy_offset, rom_offset
  455. lbu t1, \rom_offset(ROM_DATA_BASE_USE_REG)
  456. sb t1, \phy_offset(DRAM_PHY_BASE_USE_REG)
  457. .endm
  458. .macro phy_rom_value_set16, phy_offset, rom_offset
  459. lh t1, \rom_offset(ROM_DATA_BASE_USE_REG)
  460. sh t1, \phy_offset(DRAM_PHY_BASE_USE_REG)
  461. .endm
  462. .macro phy_rom_value_set32, phy_offset, rom_offset
  463. lw t1, \rom_offset(ROM_DATA_BASE_USE_REG)
  464. sw t1, \phy_offset(DRAM_PHY_BASE_USE_REG)
  465. .endm
  466. .macro ctrl_write8, ctrl_offset, value
  467. addiu t1, DRAM_CTRL_BASE_USE_REG, \ctrl_offset
  468. li t0, \value
  469. sb t0, 0(t1)
  470. .endm
  471. .macro ctrl_write16, ctrl_offset, value
  472. addiu t1, DRAM_CTRL_BASE_USE_REG, \ctrl_offset
  473. li t0, \value
  474. sh t0, 0(t1)
  475. .endm
  476. .macro ctrl_write32, ctrl_offset, value
  477. addiu t1, DRAM_CTRL_BASE_USE_REG, \ctrl_offset
  478. li t0, \value
  479. sw t0, 0(t1)
  480. .endm
  481. .macro ctrl_read8, ctrl_offset, ret_value_reg
  482. addiu t1, DRAM_CTRL_BASE_USE_REG, \ctrl_offset
  483. lbu \ret_value_reg, 0(t1)
  484. .endm
  485. .macro ctrl_read16, ctrl_offset, ret_value_reg
  486. addiu t1, DRAM_CTRL_BASE_USE_REG, \ctrl_offset
  487. lh \ret_value_reg, 0(t1)
  488. .endm
  489. .macro ctrl_read32, ctrl_offset, ret_value_reg
  490. addiu t1, DRAM_CTRL_BASE_USE_REG, \ctrl_offset
  491. lw \ret_value_reg, 0(t1)
  492. .endm
  493. .macro ctrl_mask8, ctrl_offset, mask
  494. addiu t1, DRAM_CTRL_BASE_USE_REG, \ctrl_offset
  495. li t0, \mask
  496. lbu t2, 0(t1)
  497. or t2, t2, t0
  498. sb t2, 0(t1)
  499. .endm
  500. .macro ctrl_mask32, ctrl_offset, mask
  501. addiu t1, DRAM_CTRL_BASE_USE_REG, \ctrl_offset
  502. li t0, \mask
  503. lw t2, 0(t1)
  504. or t2, t2, t0
  505. sw t2, 0(t1)
  506. .endm
  507. .macro ctrl_unmask8, ctrl_offset, unmask
  508. addiu t1, DRAM_CTRL_BASE_USE_REG, \ctrl_offset
  509. li t0, ~\unmask
  510. lbu t2, 0(t1)
  511. and t2,t2, t0
  512. sb t2, 0(t1)
  513. .endm
  514. .macro ctrl_unmask32, ctrl_offset, unmask
  515. addiu t1, DRAM_CTRL_BASE_USE_REG, \ctrl_offset
  516. li t0, ~\unmask
  517. lw t2, 0(t1)
  518. and t2, t2, t0
  519. sw t2, 0(t1)
  520. .endm
  521. .macro ctrl_clear_and_set8, ctrl_offset, unmask, mask
  522. addiu t2, DRAM_CTRL_BASE_USE_REG, \ctrl_offset
  523. lbu t1, 0(t2)
  524. li t0, ~\unmask
  525. and t1, t1, t0
  526. li t0, \mask
  527. or t1, t1, t0
  528. sb t1, 0(t2)
  529. .endm
  530. .macro ctrl_clear_and_set16, ctrl_offset, unmask, mask
  531. addiu t2, DRAM_CTRL_BASE_USE_REG, \ctrl_offset
  532. lh t1, 0(t2)
  533. li t0, ~\unmask
  534. and t1, t1, t0
  535. li t0, \mask
  536. or t1, t1, t0
  537. sh t1, 0(t2)
  538. .endm
  539. .macro ctrl_clear_and_set32, ctrl_offset, unmask, mask
  540. addiu t2, DRAM_CTRL_BASE_USE_REG, \ctrl_offset
  541. lw t1, 0(t2)
  542. li t0, ~\unmask
  543. and t1, t1, t0
  544. li t0, \mask
  545. or t1, t1, t0
  546. sw t1, 0(t2)
  547. .endm
  548. .macro ctrl_rom_value_set8, ctrl_offset, rom_offset
  549. addiu t0, DRAM_CTRL_BASE_USE_REG, \ctrl_offset
  550. lbu t1, \rom_offset(ROM_DATA_BASE_USE_REG)
  551. sb t1, 0(t0)
  552. .endm
  553. .macro ctrl_rom_value_set16, ctrl_offset, rom_offset
  554. addiu t0, DRAM_CTRL_BASE_USE_REG, \ctrl_offset
  555. lh t1, \rom_offset(ROM_DATA_BASE_USE_REG)
  556. sh t1, 0(t0)
  557. .endm
  558. .macro ctrl_rom_value_set32, ctrl_offset, rom_offset
  559. addiu t0, DRAM_CTRL_BASE_USE_REG, \ctrl_offset
  560. lw t1, \rom_offset(ROM_DATA_BASE_USE_REG)
  561. sw t1, 0(t0)
  562. .endm
  563. .macro write8_i, reg, value
  564. li t0, \value
  565. li t1, \reg
  566. sb t0, 0(t1)
  567. .endm
  568. .macro write16_i, reg, value
  569. li t0, \value
  570. li t1, \reg
  571. sh t0, 0(t1)
  572. .endm
  573. .macro write32_i, reg, value
  574. li t0, \value
  575. li t1, \reg
  576. sw t0, 0(t1)
  577. .endm
  578. .macro write8_r, reg, value_reg
  579. li t1, \reg
  580. sb \value_reg, 0(t1)
  581. .endm
  582. .macro write16_r, reg, value_reg
  583. li t1, \reg
  584. sh \value_reg, 0(t1)
  585. .endm
  586. .macro write32_r, reg, value_reg
  587. li t1, \reg
  588. sw \value_reg, 0(t1)
  589. .endm
  590. .macro read8, reg, ret_vaule_reg
  591. li t0, \reg
  592. lbu \ret_vaule_reg, 0(t0)
  593. .endm
  594. .macro read16, reg, ret_vaule_reg
  595. li t0, \reg
  596. lhu \ret_vaule_reg, 0(t0)
  597. .endm
  598. .macro read32, reg, ret_vaule_reg
  599. li t0, \reg
  600. lw \ret_vaule_reg, 0(t0)
  601. .endm
  602. .macro mask8, reg, mask
  603. li t0, \mask
  604. li t1, \reg
  605. lbu t2, 0(t1)
  606. or t2, t2, t0
  607. sb t2, 0(t1)
  608. .endm
  609. .macro mask32, reg, mask
  610. li t0, \mask
  611. li t1, \reg
  612. lw t2, 0(t1)
  613. or t2, t2, t0
  614. sw t2, 0(t1)
  615. .endm
  616. .macro unmask8, reg, unmask
  617. li t0, ~\unmask
  618. li t1, \reg
  619. lbu t2, 0(t1)
  620. and t2, t2, t0
  621. sb t2, 0(t1)
  622. .endm
  623. .macro unmask32, reg, unmask
  624. li t0, ~\unmask
  625. li t1, \reg
  626. lw t2, 0(t1)
  627. and t2, t2, t0
  628. sw t2, 0(t1)
  629. .endm
  630. .macro clear_and_set_bit, ret_value_reg, unmask, mask
  631. li t0, ~\unmask
  632. and \ret_value_reg, \ret_value_reg, t0
  633. li t0, \mask
  634. or \ret_value_reg, \ret_value_reg, t0
  635. .endm
  636. .macro rom_value_set8, reg, rom_offset
  637. li t0, \reg
  638. lbu t1, \rom_offset(ROM_DATA_BASE_USE_REG)
  639. sb t1, 0(t0)
  640. .endm
  641. .macro rom_value_set16, reg, rom_offset
  642. li t0, \reg
  643. lh t1, \rom_offset(ROM_DATA_BASE_USE_REG)
  644. sh t1, 0(t0)
  645. .endm
  646. .macro rom_value_set32, reg, rom_offset
  647. li t0, \reg
  648. lw t1, \rom_offset(ROM_DATA_BASE_USE_REG)
  649. sw t1, 0(t0)
  650. .endm
  651. #endif /* __ASSEMBLY__ */
  652. #endif /* _ROM_MACRO */