diff --git a/demo/hpm/usb_host/flash_xip.icf b/demo/hpm/usb_host/flash_xip.icf new file mode 100644 index 00000000..a338d96d --- /dev/null +++ b/demo/hpm/usb_host/flash_xip.icf @@ -0,0 +1,109 @@ +/* + * Copyright 2021 hpmicro + * SPDX-License-Identifier: BSD-3-Clause + */ + + +define memory with size = 4G; + +/* Regions */ +define region NOR_CFG_OPTION = [ from 0x80000400 size 0x1000 ]; +define region BOOT_HEADER = [ from 0x80001000 size 0x3000 ]; +define region XPI0 = [from 0x80003000 size _flash_size - 0x3000 ]; /* XPI0 */ +define region ILM_SLV = [from 0x1000000 size 256k]; /* ILM slave */ +define region DLM = [from 0x80000 size 256k]; /* DLM */ +define region AXI_SRAM = [from 0x1080000 size 700k]; /* reserve 256K for noncacheable region */ +define region SDRAM = [from 0x40000000 size _extram_size]; +define region NONCACHEABLE_RAM = [from 0x1140000 size 256k]; +define region CHERRYUSB_FLASH = [start(XPI0)+4096k size 72]; + +/* Blocks */ +define block vectors { section .isr_vector, section .vector_table }; +define block ctors { section .ctors, section .ctors.*, block with alphabetical order { init_array } }; +define block dtors { section .dtors, section .dtors.*, block with reverse alphabetical order { fini_array } }; +define block eh_frame { section .eh_frame, section .eh_frame.* }; +define block tbss { section .tbss, section .tbss.* }; +define block tdata { section .tdata, section .tdata.* }; +define block tls { block tbss, block tdata }; +define block tdata_load { copy of block tdata }; +define block heap with size = __HEAPSIZE__, alignment = 8, /* fill =0x00, */ readwrite access { }; +define block stack with size = __STACKSIZE__, alignment = 8, /* fill =0xCD, */ readwrite access { }; + +define block framebuffer with alignment = 8 { section .framebuffer }; +define block safe_stack with size = 512, readwrite access {}; + +define block boot_header with fixed order { section .boot_header, section .fw_info_table, section .dc_info }; + +/* Symbols */ +define exported symbol __nor_cfg_option_load_addr__ = start of region NOR_CFG_OPTION; +define exported symbol __boot_header_load_addr__ = start of region BOOT_HEADER; +define exported symbol __app_load_addr__ = start of region XPI0; +define exported symbol __app_offset__ = __app_load_addr__ - __boot_header_load_addr__; +define exported symbol __boot_header_length__ = size of block boot_header; +define exported symbol __fw_size__ = 0x1000; + +define exported symbol __noncacheable_start__ = start of region NONCACHEABLE_RAM; +define exported symbol __noncacheable_end__ = end of region NONCACHEABLE_RAM + 1; + +define exported symbol __usbh_class_info_start__ = start of region CHERRYUSB_FLASH; +define exported symbol __usbh_class_info_end__ = end of region CHERRYUSB_FLASH + 1; + +define exported symbol _stack_safe = end of block safe_stack + 1; +define exported symbol _stack = end of block stack + 1; + +do not initialize { section .noncacheable }; +do not initialize { section .non_init, section .non_init.*, section .*.non_init, section .*.non_init.* }; +do not initialize { section .no_init, section .no_init.*, section .*.no_init, section .*.no_init.* }; // Legacy sections, kept for backwards compatibility +do not initialize { section .noinit, section .noinit.*, section .*.noinit, section .*.noinit.* }; // Legacy sections, used by some SDKs/HALs + +initialize by copy with packing=auto { section .noncacheable.init }; +initialize by copy with packing=none { section .data, section .data.*, section .*.data, section .*.data.* }; // Static data sections +initialize by copy with packing=auto { section .sdata, section .sdata.* }; +initialize by copy with packing=auto { section .fast, section .fast.*, section .*.fast, section .*.fast.* }; // "RAM Code" sections + +initialize by symbol __SEGGER_init_heap { block heap }; // Init the heap if there is one +initialize by symbol __SEGGER_init_ctors { block ctors }; // Call constructors for global objects which need to be constructed before reaching main (if any). Make sure this is done after setting up heap. + +keep { section .nor_cfg_option, section .boot_header, section .fw_info_table, section .dc_info }; +place in NOR_CFG_OPTION { section .nor_cfg_option }; +place in BOOT_HEADER with fixed order { block boot_header }; +place at start of XPI0 with fixed order { symbol _start}; + +place at start of ILM_SLV with fixed order { block vectors }; +initialize by copy { block vectors }; + +place in XPI0 with minimum size order { + block tdata_load, // Thread-local-storage load image + block ctors, // Constructors block + block dtors, // Destructors block + block eh_frame, // Exception frames placed directly into flash overriding default placement (sections writable) + readonly, // Catch-all for readonly data (e.g. .rodata, .srodata) + readexec // Catch-all for (readonly) executable code (e.g. .text) + }; + +// +// The GNU compiler creates these exception-related sections as writeable. +// Override the section header flag and make them readonly so they can be +// placed into flash. +// +define access readonly { section .gcc_except_table, section .gcc_except_table.* }; +define access readonly { section .eh_frame, section .eh_frame.* }; +define access readonly { section .sdata.DW.* }; + +place in ILM_SLV { + section .fast, section .fast.*, // "ramfunc" section + }; + +place in DLM with auto order { + block tls, // Thread-local-storage block + readwrite, // Catch-all for initialized/uninitialized data sections (e.g. .data, .noinit) + zeroinit // Catch-all for zero-initialized data sections (e.g. .bss) + }; + +place in AXI_SRAM { block framebuffer }; +place in NONCACHEABLE_RAM { section .noncacheable, section .noncacheable.init, section .noncacheable.bss }; +place in AXI_SRAM { block heap }; // Heap reserved block +place at end of AXI_SRAM { block stack }; // Stack reserved block at the end +place at end of DLM { block safe_stack }; // Safe stack reserved block at the end +place in CHERRYUSB_FLASH { section .usbh_class_info }; +keep { section .usbh_class_info}; \ No newline at end of file diff --git a/demo/hpm/usb_host/替换 ram.icf 到 hpm_sdk 中.txt b/demo/hpm/usb_host/替换 icf 到 hpm sdk 中.txt similarity index 100% rename from demo/hpm/usb_host/替换 ram.icf 到 hpm_sdk 中.txt rename to demo/hpm/usb_host/替换 icf 到 hpm sdk 中.txt