ht7315.ld 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447
  1. OUTPUT_ARCH(mips)
  2. /**** Start point ****/
  3. ENTRY(__reset_vector)
  4. PROVIDE(__boot_stack_size = 0x200);
  5. PROVIDE(__ebase_size = 0x200);
  6. PROVIDE(__isr_vec_space = 32);
  7. PROVIDE(__isr_vec_count = 64);
  8. PROVIDE(__boot_mem_reserved = 0x1000);
  9. __mergebin_offset = 0x9000;
  10. /* ROM data and text*/
  11. __rom_start = 0xBFC00000 + __mergebin_offset;
  12. __rom_size = 0x40000;
  13. __rom_end = __rom_start + __rom_size;
  14. _text_lma = 0xBFC27000;
  15. /* 64K IRAM */
  16. __ram_start = 0x90000000;
  17. __ram_size = 0x10000 - 0x1000;
  18. __ram_end = __ram_start + __ram_size;
  19. /* 8M DDR */
  20. __ddr_size = 0x00800000;
  21. __cached_ddr_start = 0x80000000;
  22. __cached_ddr_end = __cached_ddr_start + __ddr_size;
  23. _risc_code_end = 0x01000000;
  24. __uncached_ddr_size = 0x00800000;
  25. __uncached_ddr_start = 0x70000000 + _risc_code_end;
  26. __uncached_ddr_end = __uncached_ddr_start + __uncached_ddr_size;
  27. __ddr_start = __cached_ddr_start;
  28. EXTERN(__exception_entry)
  29. EXTERN(__isr_vec)
  30. MEMORY
  31. {
  32. ROM : ORIGIN = __rom_start, LENGTH = __rom_size
  33. RAM : ORIGIN = __ram_start, LENGTH = __ram_size
  34. DDR : ORIGIN = __ddr_start, LENGTH = __ddr_size
  35. UNCACHED_DDR : ORIGIN = __uncached_ddr_start, LENGTH = __uncached_ddr_size
  36. }
  37. REGION_ALIAS("REGION_ROM_TEXT", ROM);
  38. /*
  39. REGION_ALIAS("REGION_BOOT_TEXT", ISPRAM);
  40. REGION_ALIAS("REGION_BOOT_RODATA", DSPRAM);
  41. REGION_ALIAS("REGION_BOOT_DATA", DSPRAM);
  42. REGION_ALIAS("REGION_BOOT_BSS", DSPRAM);
  43. */
  44. REGION_ALIAS("REGION_BOOT_TEXT", RAM);
  45. REGION_ALIAS("REGION_BOOT_RODATA", RAM);
  46. REGION_ALIAS("REGION_BOOT_DATA", RAM);
  47. REGION_ALIAS("REGION_BOOT_BSS", RAM);
  48. /*
  49. PROVIDE(__heap_size = 0x1200);
  50. REGION_ALIAS("REGION_TEXT", RAM);
  51. REGION_ALIAS("REGION_RODATA", RAM);
  52. REGION_ALIAS("REGION_DATA", RAM);
  53. REGION_ALIAS("REGION_BSS", RAM);
  54. */
  55. PROVIDE(__heap_size = 0x200000);
  56. REGION_ALIAS("REGION_TEXT", DDR);
  57. REGION_ALIAS("REGION_RODATA", DDR);
  58. REGION_ALIAS("REGION_DATA", DDR);
  59. REGION_ALIAS("REGION_BSS", DDR);
  60. REGION_ALIAS("REGION_UNCACHED_DATA", UNCACHED_DDR);
  61. SECTIONS
  62. {
  63. .boot_rom_text : {
  64. __boot_rom_text_start = ABSOLUTE(.) ; /* Start of init code. */
  65. start.*(.text) /* Reset entry point */
  66. set_gpr_boot_values.*(.text)
  67. init_gpr.*(.text)
  68. init_cp0.*(.text)
  69. init_tlb.*(.text)
  70. init_caches.*(.text)
  71. copy_c2_ram.*(.text)
  72. init_itc.*(.text)
  73. init_vpe1.*(.text)
  74. start.*(.text.*) /* Reset entry point */
  75. set_gpr_boot_values.*(.text.*)
  76. init_gpr.*(.text.*)
  77. init_cp0.*(.text.*)
  78. init_tlb.*(.text.*)
  79. init_caches.*(.text.*)
  80. copy_c2_ram.*(.text.*)
  81. init_itc.*(.text.*)
  82. init_vpe1.*(.text.*)
  83. . = ALIGN(8);
  84. __boot_rom_text_end = ABSOLUTE(.); /* End of init code. */
  85. } > REGION_ROM_TEXT
  86. _boot_text_lma = __boot_rom_text_end - __boot_rom_text_start + __rom_start;
  87. .boot_text : AT(_boot_text_lma)
  88. {
  89. __boot_text_start = ABSOLUTE(.);
  90. /* entry point */
  91. hv_boot_Main.*(.text)
  92. hv_boot_Common.*(.text)
  93. hv_boot_DDRInit.*(.text)
  94. hv_boot_DDRTest.*(.text)
  95. hv_boot_Lzss.*(.text)
  96. risc_clean_cache.*(.text)
  97. risc_excpt_entry.*(.text)
  98. risc_excpt_handler.*(.text)
  99. risc_excpt_register.*(.text)
  100. risc_flush_cache.*(.text)
  101. risc_fp.*(.text)
  102. risc_isr_handler.*(.text)
  103. risc_l2size.*(.text)
  104. risc_lock_cache.*(.text)
  105. risc_size_cache.*(.text)
  106. risc_sync_cache.*(.text)
  107. risc_tlb.*(.text)
  108. set_gpr_boot_values.*(.text)
  109. hv_boot_Main.*(.text.*)
  110. copy_c2_ram.*(.text.*)
  111. hv_boot_Common.*(.text.*)
  112. hv_boot_DDRInit.*(.text.*)
  113. hv_boot_DDRTest.*(.text.*)
  114. hv_boot_Lzss.*(.text.*)
  115. risc_clean_cache.*(.text.*)
  116. risc_excpt_entry.*(.text.__exception_save)
  117. risc_excpt_entry.*(.text.__exception_restore)
  118. risc_excpt_handler.*(.text.*)
  119. risc_excpt_register.*(.text.*)
  120. risc_flush_cache.*(.text.*)
  121. risc_fp.*(.text.*)
  122. risc_isr_handler.*(.text.*)
  123. risc_l2size.*(.text.*)
  124. risc_lock_cache.*(.text.*)
  125. risc_size_cache.*(.text.*)
  126. risc_sync_cache.*(.text.*)
  127. risc_tlb.*(.text.*)
  128. set_gpr_boot_values.*(.text.*)
  129. . = ALIGN(16);
  130. __boot_text_end = ABSOLUTE(.);
  131. } > REGION_BOOT_TEXT
  132. _boot_rodata_lma = __boot_text_end - __boot_text_start + _boot_text_lma ;
  133. .boot_rodata : AT(_boot_rodata_lma)
  134. {
  135. __boot_rodata_start = ABSOLUTE(.);
  136. start.*(.rodata)
  137. hv_boot_Main.*(.rodata)
  138. copy_c2_ram.*(.rodata)
  139. hv_boot_Common.*(.rodata)
  140. hv_boot_DDRInit.*(.rodata)
  141. hv_boot_DDRTest.*(.rodata)
  142. hv_boot_Lzss.*(.rodata)
  143. excpt_isr.*(.rodata)
  144. init_caches.*(.rodata)
  145. init_cp0.*(.rodata)
  146. init_gpr.*(.rodata)
  147. init_itc.*(.rodata)
  148. init_tlb.*(.rodata)
  149. init_vpe1.*(.rodata)
  150. risc_clean_cache.*(.rodata)
  151. risc_excpt_entry.*(.rodata)
  152. risc_excpt_handler.*(.rodata)
  153. risc_excpt_register.*(.rodata)
  154. risc_flush_cache.*(.rodata)
  155. risc_fp.*(.rodata)
  156. risc_isr_handler.*(.rodata)
  157. risc_l2size.*(.rodata)
  158. risc_lock_cache.*(.rodata)
  159. risc_size_cache.*(.rodata)
  160. risc_sync_cache.*(.rodata)
  161. risc_tlb.*(.rodata)
  162. set_gpr_boot_values.*(.rodata)
  163. start.*(.rodata.*)
  164. hv_boot_Main.*(.rodata.*)
  165. copy_c2_ram.*(.rodata.*)
  166. hv_boot_Common.*(.rodata.*)
  167. hv_boot_DDRInit.*(.rodata.*)
  168. hv_boot_DDRTest.*(.rodata.*)
  169. hv_boot_Lzss.*(.rodata.*)
  170. excpt_isr.*(.rodata.*)
  171. init_caches.*(.rodata.*)
  172. init_cp0.*(.rodata.*)
  173. init_gpr.*(.rodata.*)
  174. init_itc.*(.rodata.*)
  175. init_tlb.*(.rodata.*)
  176. init_vpe1.*(.rodata.*)
  177. risc_clean_cache.*(.rodata.*)
  178. risc_excpt_entry.*(.rodata.*)
  179. risc_excpt_handler.*(.rodata.*)
  180. risc_excpt_register.*(.rodata.*)
  181. risc_flush_cache.*(.rodata.*)
  182. risc_fp.*(.rodata.*)
  183. risc_isr_handler.*(.rodata.*)
  184. risc_l2size.*(.rodata.*)
  185. risc_lock_cache.*(.rodata.*)
  186. risc_size_cache.*(.rodata.*)
  187. risc_sync_cache.*(.rodata.*)
  188. risc_tlb.*(.rodata.*)
  189. set_gpr_boot_values.*(.rodata.*)
  190. . = ALIGN(16);
  191. __boot_rodata_end = ABSOLUTE(.);
  192. } > REGION_BOOT_RODATA
  193. _boot_data_lma = __boot_rodata_end - __boot_rodata_start + _boot_rodata_lma ;
  194. .boot_data : AT(_boot_data_lma)
  195. {
  196. __boot_data_start = ABSOLUTE(.);
  197. start.*(.data)
  198. hv_boot_Main.*(.data)
  199. copy_c2_ram.*(.data)
  200. hv_boot_Common.*(.data)
  201. hv_boot_DDRInit.*(.data)
  202. hv_boot_DDRTest.*(.data)
  203. hv_boot_Lzss.*(.data)
  204. excpt_isr.*(.data)
  205. init_caches.*(.data)
  206. init_cp0.*(.data)
  207. init_gpr.*(.data)
  208. init_itc.*(.data)
  209. init_tlb.*(.data)
  210. init_vpe1.*(.data)
  211. risc_clean_cache.*(.data)
  212. risc_excpt_entry.*(.data)
  213. risc_excpt_handler.*(.data)
  214. risc_excpt_register.*(.data)
  215. risc_flush_cache.*(.data)
  216. risc_fp.*(.data)
  217. risc_isr_handler.*(.data)
  218. risc_l2size.*(.data)
  219. risc_lock_cache.*(.data)
  220. risc_size_cache.*(.data)
  221. risc_sync_cache.*(.data)
  222. risc_tlb.*(.data)
  223. set_gpr_boot_values.*(.data)
  224. start.*(.data.*)
  225. hv_boot_Main.*(.data.*)
  226. copy_c2_ram.*(.data.*)
  227. hv_boot_Common.*(.data.*)
  228. hv_boot_DDRInit.*(.data.*)
  229. hv_boot_DDRTest.*(.data.*)
  230. hv_boot_Lzss.*(.data.*)
  231. excpt_isr.*(.data.*)
  232. init_caches.*(.data.*)
  233. init_cp0.*(.data.*)
  234. init_gpr.*(.data.*)
  235. init_itc.*(.data.*)
  236. init_tlb.*(.data.*)
  237. init_vpe1.*(.data.*)
  238. risc_clean_cache.*(.data.*)
  239. risc_excpt_entry.*(.data.*)
  240. risc_excpt_handler.*(.data.*)
  241. risc_excpt_register.*(.data.*)
  242. risc_flush_cache.*(.data.*)
  243. risc_fp.*(.data.*)
  244. risc_isr_handler.*(.data.*)
  245. risc_l2size.*(.data.*)
  246. risc_lock_cache.*(.data.*)
  247. risc_size_cache.*(.data.*)
  248. risc_sync_cache.*(.data.*)
  249. risc_tlb.*(.data.*)
  250. set_gpr_boot_values.*(.data.*)
  251. . = ALIGN(0x1000);
  252. __boot_data_end = ABSOLUTE(.);
  253. } > REGION_BOOT_DATA
  254. _boot_vector_lma = __boot_data_end - __boot_data_start + _boot_data_lma ;
  255. .boot_vector : AT(_boot_vector_lma)
  256. {
  257. boot_vector_start = ABSOLUTE(.);
  258. _ebase_ram = ABSOLUTE(.);
  259. _base = .;
  260. KEEP(*(.text.__exception_entry))
  261. . = _base + __ebase_size;
  262. KEEP(* (SORT(.text.__isr_vec*)))
  263. /* Leave space for all the vector entries */
  264. . = _base + __ebase_size + (__isr_vec_space * __isr_vec_count);
  265. . = ALIGN(16);
  266. boot_vector_end = ABSOLUTE(.);
  267. } > REGION_BOOT_DATA
  268. .boot_bss (NOLOAD): {
  269. __boot_bss_start = ABSOLUTE(.);
  270. LONG(0x55AA55AD);
  271. start.*(.bss)
  272. hv_boot_Main.*(.bss)
  273. copy_c2_ram.*(.bss)
  274. hv_boot_Common.*(.bss)
  275. hv_boot_DDRInit.*(.bss)
  276. hv_boot_DDRTest.*(.bss)
  277. hv_boot_Lzss.*(.bss)
  278. excpt_isr.*(.bss)
  279. init_caches.*(.bss)
  280. init_cp0.*(.bss)
  281. init_gpr.*(.bss)
  282. init_itc.*(.bss)
  283. init_tlb.*(.bss)
  284. init_vpe1.*(.bss)
  285. ddrmc_tmg_cfg.*(.bss)
  286. risc_clean_cache.*(.bss)
  287. risc_excpt_entry.*(.bss)
  288. risc_excpt_handler.*(.bss)
  289. risc_excpt_register.*(.bss)
  290. risc_flush_cache.*(.bss)
  291. risc_fp.*(.bss)
  292. risc_isr_handler.*(.bss)
  293. risc_l2size.*(.bss)
  294. risc_lock_cache.*(.bss)
  295. risc_size_cache.*(.bss)
  296. risc_sync_cache.*(.bss)
  297. risc_tlb.*(.bss)
  298. set_gpr_boot_values.*(.bss)
  299. start.*(.bss.*)
  300. hv_boot_Main.*(.bss.*)
  301. copy_c2_ram.*(.bss.*)
  302. hv_boot_Common.*(.bss.*)
  303. hv_boot_DDRInit.*(.bss.*)
  304. hv_boot_DDRTest.*(.bss.*)
  305. hv_boot_Lzss.*(.bss.*)
  306. excpt_isr.*(.bss.*)
  307. init_caches.*(.bss.*)
  308. init_cp0.*(.bss.*)
  309. init_gpr.*(.bss.*)
  310. init_itc.*(.bss.*)
  311. init_tlb.*(.bss.*)
  312. init_vpe1.*(.bss.*)
  313. ddrmc_tmg_cfg.*(.bss.*)
  314. risc_clean_cache.*(.bss.*)
  315. risc_excpt_entry.*(.bss.*)
  316. risc_excpt_handler.*(.bss.*)
  317. risc_excpt_register.*(.bss.*)
  318. risc_flush_cache.*(.bss.*)
  319. risc_fp.*(.bss.*)
  320. risc_isr_handler.*(.bss.*)
  321. risc_l2size.*(.bss.*)
  322. risc_lock_cache.*(.bss.*)
  323. risc_size_cache.*(.bss.*)
  324. risc_sync_cache.*(.bss.*)
  325. risc_tlb.*(.bss.*)
  326. set_gpr_boot_values.*(.bss.*)
  327. __boot_bss_end = ABSOLUTE(.);
  328. . += __boot_stack_size;
  329. __boot_stack = ABSOLUTE(.);
  330. } > REGION_BOOT_BSS
  331. .uncached_ddr (NOLOAD) :{
  332. *(.uncached_data)
  333. } > REGION_UNCACHED_DATA
  334. /*_text_lma = boot_vector_end - boot_vector_start + _boot_vector_lma ;*/
  335. .text : AT(_text_lma)
  336. {
  337. __text_start = ABSOLUTE(.);
  338. *(.text)
  339. *(.text.*)
  340. . = ALIGN(512);
  341. __text_end = ABSOLUTE(.);
  342. } > REGION_TEXT
  343. _rodata_lma = __text_end - __text_start + _text_lma ;
  344. .rodata : AT(_rodata_lma)
  345. {
  346. __rodata_start = ABSOLUTE(.);
  347. _shell_command_start = ABSOLUTE(.);
  348. KEEP(*(shellCommand))
  349. _shell_command_end = ABSOLUTE(.);
  350. *(.rodata)
  351. *(.rodata.*)
  352. . = ALIGN(16);
  353. __rodata_end = ABSOLUTE(.);
  354. } > REGION_RODATA
  355. _data_lma = __rodata_end - __rodata_start + _rodata_lma ;
  356. .data : AT(_data_lma)
  357. {
  358. __data_start = ABSOLUTE(.);
  359. *(.data)
  360. *(.data.*)
  361. _gp = ABSOLUTE(. + 0x7ff0); /* Base of small data */
  362. *(.lit8)
  363. *(.lit8.*)
  364. *(.lit4)
  365. *(.lit4.*)
  366. *(.sdata)
  367. *(.sdata.*)
  368. . = ALIGN(16);
  369. __data_end = ABSOLUTE(.);
  370. } > REGION_DATA
  371. .bss(NOLOAD) : {
  372. __bss_start = ABSOLUTE(.);
  373. *(.sbss)
  374. *(.sbss.*)
  375. *(.scommon)
  376. *(.bss)
  377. *(.bss.*)
  378. *(COMMON)
  379. . = ALIGN(16);
  380. __bss_end = ABSOLUTE(.);
  381. } > REGION_BSS
  382. .heap (NOLOAD) : {
  383. _heap_start = ABSOLUTE(.);
  384. . += __heap_size;
  385. . = ALIGN(16);
  386. _heap_end = ABSOLUTE(.);
  387. } > REGION_BSS
  388. .stack (NOLOAD) :{
  389. __stack_top = ABSOLUTE(.);
  390. __stack_size = ORIGIN(REGION_BSS) + LENGTH(REGION_BSS) - ABSOLUTE(.) - 4;
  391. . += __stack_size;
  392. . = ALIGN(16);
  393. __stack = ABSOLUTE(.);
  394. } > REGION_BSS
  395. .gptab.sdata : { *(.gptab.data) *(.gptab.sdata) }
  396. .gptab.sbss : { *(.gptab.bss) *(.gptab.sbss) }
  397. /DISCARD/ :
  398. {
  399. *(.reginfo)
  400. *(.MIPS.abiflags)
  401. }
  402. _freemem = .;
  403. }