OUTPUT_ARCH( "riscv" )

ENTRY( bl702_start )

__EM_SIZE = DEFINED(ble_controller_init) ? 8K : 0K;
__CACHE_SIZE = DEFINED(__CACHE_SIZE) ? __CACHE_SIZE : 16K;
__stack_size = DEFINED(__stack_size) ? __stack_size : 2K;

MEMORY
{
  flash  (rxai!w) : ORIGIN = 0x23000000, LENGTH = (2M)
  tcm_ocram (wxa) : ORIGIN = 0x42010000 + __CACHE_SIZE, LENGTH = (64K - __CACHE_SIZE + 64K - __EM_SIZE - __stack_size)
  sys_stack (wxa) : ORIGIN = ORIGIN(tcm_ocram) + LENGTH(tcm_ocram), LENGTH = __stack_size
  hbnram    (wxa) : ORIGIN = 0x40010000, LENGTH = (4K)
  psram     (wxa) : ORIGIN = 0x26000000, LENGTH = (2M)
}

SECTIONS
{
  __stack_size = DEFINED(__stack_size) ? __stack_size : 2K;
  BOOT2_PT_ADDR = 0x4202DC00;

  .init :
  {
    KEEP (*(SORT_NONE(.init)))
  } >flash

  .text :
  {
    *(.text.unlikely .text.unlikely.*)
    *(.text.startup .text.startup.*)
    *(.text .text.*)
    *(.gnu.linkonce.t.*)
  } >flash

  .rodata :
  {
    *(.rdata)
    *(.rodata .rodata.*)
    *(.sdata2.*)
    *(.gcc_except_table.*)

    /* camera driver */
    . = ALIGN(4);
    _bl_driver_camera_start = .;
    KEEP(*(.camera_desc))
    *(.camera_desc)
    _bl_driver_camera_end = .;

    /* static cli cmds */
    . = ALIGN(4);
    _bl_static_cli_cmds_start = .;
    KEEP(*(.static_cli_cmds))
    *(.static_cli_cmds)
    _bl_static_cli_cmds_end = .;

    /* static blog code1 */
    . = ALIGN(4);
    _bl_static_blogcomponent_code_start = .;
    KEEP(SORT(*)(.static_blogcomponent_code*))
    *(.static_blogcomponent_code*)
    _bl_static_blogcomponent_code_end = .;

    /* static blog code2 */
    . = ALIGN(4);
    _bl_static_blogfile_code_start = .;
    KEEP(SORT(*)(.static_blogfile_code*))
    *(.static_blogfile_code*)
    _bl_static_blogfile_code_end = .;

    /* static blog code3 */
    . = ALIGN(4);
    _bl_static_blogpri_code_start = .;
    KEEP(SORT(*)(.static_blogpri_code*))
    *(.static_blogpri_code*)
    _bl_static_blogpri_code_end = .;

    *(.gnu.linkonce.r.*)
  } >flash

  .init_array :
  {
    __init_array_start = .;
    KEEP(*(.init_array))
    __init_array_end = .;
  } >flash

  .bleromro :
  {
    KEEP(*(.bleromro))
  } >flash

  .bleromrw (NOLOAD) :
  {
    KEEP(*(.bleromrw))
  } >tcm_ocram

  .hbn : ALIGN(4)
  {
    PROVIDE( _hbn_load = LOADADDR(.hbn) );
    PROVIDE( _hbn_run = ADDR(.hbn) );
    PROVIDE( _hbn_run_end = ADDR(.hbn) + SIZEOF(.hbn));

    /* put bl702_rf_private.o in hbnram to avoid ocram conflict during rf calibration */
    *libbl702_rf.a:bl702_rf_private.o(.retention .retention_noinit)
    *libbl702_rf.a:bl702_rf_private.o(.sdata.* .srodata.* .sbss.* .bss.* COMMON)
    PROVIDE ( _rf_data_end = . );

    /* tcm code that should be retentive after hbn wakeup */
    *libbl702_std.a:bl702_romapi.o(.tcm_code.* .sclock_rlt_code.*)
    *libbl702_std.a:bl702_glb.o(.tcm_code.* .sclock_rlt_code.*)
    PROVIDE ( _hbn_restore_tcm_run_end = . );

    /* data that should be retentive after hbn wakeup */
    *liblmac154.a:*(.sdata.* .srodata.* .sbss.* .bss.* COMMON)
    *libbl702_std.a:*(.sdata.* .srodata.* .sbss.* .bss.* COMMON)
    *libhosal.a:bl_adc.o(.sdata.* .srodata.* .sbss.* .bss.* COMMON)
    *libhosal.a:bl_gpio.o(.sdata.* .srodata.* .sbss.* .bss.* COMMON)
    *libhosal.a:bl_sys.o(.sdata.* .srodata.* .sbss.* .bss.* COMMON)
    *libhosal.a:bl_timer.o(.sdata.* .srodata.* .sbss.* .bss.* COMMON)
    *libhosal.a:bl_uart.o(.sdata.* .srodata.* .sbss.* .bss.* COMMON)
    *libhosal.a:hosal_uart.o(.sdata.* .srodata.* .sbss.* .bss.* COMMON)
    PROVIDE ( _hbn_restore_data_run_end = . );
    *(.hbn_code.*)
    *(.hbn_data)
    *(.retention)
  } >hbnram AT > flash

  .hbn_noinit (NOLOAD) :
  {
    *(.hbn_noinit)
    *(.retention_noinit)

    /* PDS backup address */
    . = ALIGN(4);
    PROVIDE ( __ld_pds_bak_addr = . );
    . = . + 256;
  } >hbnram

  .rsvd (NOLOAD) :
  {
    *(.rsvd_data)
    *(.ble_rsvd_mem)

    KEEP(*AppTask.cpp.o(.bss.*appStack*))
    KEEP(*main.cpp.o(.bss.*IdleTaskStack*))
    KEEP(*main.cpp.o(.bss.*TimerTaskStack*))
    
    /*KEEP(*MemMonitoring.cpp.o(.bss.*monitoringStack*))*/
    /*KEEP(*out.uart.c.o(.bss.chipUart_var*))*/
    
  } >hbnram

  .tcmcode : ALIGN(4)
  {
    PROVIDE( _tcm_load = LOADADDR(.tcmcode) );
    PROVIDE( _tcm_run = ADDR(.tcmcode) );
    PROVIDE( _tcm_run_end = ADDR(.tcmcode) + SIZEOF(.tcmcode));

    *(.tcm_code.*)
    *(.tcm_const.*)
    *(.sclock_rlt_code.*)
    *(.sclock_rlt_const.*)
  } >tcm_ocram AT > flash

  .data : ALIGN(4)
  {
    PROVIDE( _data_load = LOADADDR(.data) );
    PROVIDE( _data_run = ADDR(.data) );
    PROVIDE( _data_run_end = ADDR(.data) + SIZEOF(.data));

    *(.pds_code.*)
    *(.data .data.*)
    *(.gnu.linkonce.d.*)

    . = ALIGN(8);
    /*always put freetos under global_pointer with the following order. No change!*/
    PROVIDE( __global_pointer$ = . + 0x7F0 );
    KEEP(*libbl702_freertos.a:*(.sdata.*))
    KEEP(*libbl702_freertos.a:*(.sbss.*))
    KEEP(*libbl702_freertos.a:*(.bss.*))
    KEEP(*libbl702_freertos.a:*(COMMON))
    *(.sdata .sdata.*)
    *(.gnu.linkonce.s.*)

    . = ALIGN(8);
    *(.srodata.cst16)
    *(.srodata.cst8)
    *(.srodata.cst4)
    *(.srodata.cst2)
    *(.srodata .srodata.*)
    
    . = ALIGN(8);
    *(._k_queue.static.*)
    *(._k_sem.static.*)
    *(._k_mutex.static.*)
    _bt_gatt_service_static_list_start = .;
    KEEP(*(SORT_BY_NAME("._bt_gatt_service_static.static.*")))
    _bt_gatt_service_static_list_end = .;
    _bt_l2cap_fixed_chan_list_start = .;
    KEEP(*(SORT_BY_NAME("._bt_l2cap_fixed_chan.static.*")))
    _bt_l2cap_fixed_chan_list_end = .;
  } >tcm_ocram AT > flash

  .boot2 (NOLOAD) :
  {
    PROVIDE ( __boot2_pt_addr_start = . );
    *(.bss.boot2_partition_table)
    PROVIDE ( __boot2_pt_addr_end   = . );

    PROVIDE ( __boot2_flashCfg_start = . );
    *(.bss.boot2_flashCfg)
    PROVIDE ( __boot2_flashCfg_end = . );
  } >tcm_ocram

  .bss_psram (NOLOAD) :
  {
    PROVIDE( __bss_psram_start = ADDR(.bss_psram) );
    PROVIDE( __bss_psram_end = ADDR(.bss_psram) + SIZEOF(.bss_psram) );

    PROVIDE ( __psram_bss_init_start = . );
    /** put the bss data in psram between __psram_bss_init_start and __psram_bss_init_end will bet reset to 0 after psram init*/
    . = ALIGN(8);
    KEEP(*lighting-common.*.cpp.o(.bss.*ttributeData*))
    . = ALIGN(8);
    KEEP(*lighting-common.*.cpp.o(.bss.*bindingTable*))
    . = ALIGN(8);
    KEEP(*lighting-common.*.cpp.o(.bss.appResponseData*))
    . = ALIGN(8);
    KEEP(*lighting-common.*.cpp.o(.bss.*NetworkCommissioning*))
    
    . = ALIGN(8);
    KEEP(*dnssd.Advertiser_ImplMinimalMdns.cpp.o(.bss.*gAdvertiser*))
    . = ALIGN(8);
    KEEP(*dnssd.MinimalMdnsServer.cpp.o(.bss.*GlobalMinimalMdnsServer*_instance))
    . = ALIGN(8);
    KEEP(*dnssd.Resolver_ImplMinimalMdns.cpp.o(.bss.*gResolver*))

    /*. = ALIGN(8);*/
    /*KEEP(*libCHIPAppServer.Server.cpp.o(.bss.*sServer*))*/

    . = ALIGN(8);
    KEEP(*bridge-common.*.cpp.o(.bss.*))
    /* . = ALIGN(8); */
    /* # KEEP(*bridge-common.*.cpp.o(.bss.*bindingTable*)) */
    /* # . = ALIGN(8); */
    /* # KEEP(*bridge-common.*.cpp.o(.bss.appResponseData*)) */
    /* # . = ALIGN(8); */
    /* # KEEP(*bridge-common.*.cpp.o(.bss.*NetworkCommissioning*)) */

    . = ALIGN(8);
    KEEP(*libopenthread-cli-*.cli.cpp.o(.bss.*sInterpreterRaw*))

    . = ALIGN(8);
    KEEP(*libopenthread-cli-*.cli_dataset.cpp.o(.bss.*sDataset*))

    . = ALIGN(8);
    KEEP(*libopenthread-ftd.instance.cpp.o(.bss.*gInstanceRaw*))

    . = ALIGN(8);
    KEEP(*commands.Dns.cpp.o(.bss.*))

    . = ALIGN(8);
    KEEP(*commands.BLE.cpp.o(.bss.*))

    . = ALIGN(8);
    KEEP(*commands.Device.cpp.o(.bss.*))

    . = ALIGN(8);
    KEEP(*commands.Base64.cpp.o(.bss.*))

    . = ALIGN(8);
    KEEP(*commands.Base64.cpp.o(.bss.*))

    . = ALIGN(8);
/*    KEEP(*shell_common.cmd_*.cpp.o(.bss.*))*/

    . = ALIGN(8);
    KEEP(*shell_core.Engine.cpp.o(.bss.*theEngineRoot*)) 

    . = ALIGN(8);
    /* KEEP(*shell_common.globals.cpp.o(.bss.*))               */

    PROVIDE ( __psram_bss_init_end = . );
    
    . = ALIGN(8);
    KEEP(*lwip.memp.c.o(.bss.lwip_PBUF_POOL))
    . = ALIGN(8);
    KEEP(*sdk_lwip.dns.c.o(.bss.dns_table))

    . = ALIGN(8);
    KEEP(*virt_net_spi.c.o(.bss.tx_buffer))

    *(.wifi_ram*)
    . = ALIGN(16);
  } >psram

  . = ALIGN(8);
  PROVIDE( _heap3_start = .);
  PROVIDE( _heap3_size = ORIGIN(psram) + LENGTH(psram) - _heap3_start );

  .bss (NOLOAD) :
  {
    PROVIDE( __bss_start = ADDR(.bss) );
    PROVIDE( __bss_end = ADDR(.bss) + SIZEOF(.bss) );

    *(.sbss*)
    *(.gnu.linkonce.sb.*)
    *(.bss .bss.*)
    *(.gnu.linkonce.b.*)
    *(COMMON)
  } >tcm_ocram

  . = ALIGN(8);
  PROVIDE( _heap_start = . );
  PROVIDE( _heap_size = ADDR(.stack) - _heap_start );

  PROVIDE( _heap2_start = 0 );
  PROVIDE( _heap2_size = 0 );

  .psram   (NOLOAD) :
  {
    *(.wifi_ram*)
    . = ALIGN(16);
  } > psram

  . = ALIGN(8);
  PROVIDE( _heap3_start = .);
  PROVIDE( _heap3_size = ORIGIN(psram) + LENGTH(psram) - _heap3_start );

  .stack (NOLOAD) :
  {
    PROVIDE ( _sp_base = . );
    . = . + __stack_size;
    PROVIDE( _sp_main = . );
    __freertos_irq_stack_top = .;
  } > sys_stack

  /* camera driver */
  PROVIDE( _ld_bl_driver_camera_start = _bl_driver_camera_start );
  PROVIDE( _ld_bl_driver_camera_end   = _bl_driver_camera_end );

  /* cli */
  PROVIDE( _ld_bl_static_cli_cmds_start = _bl_static_cli_cmds_start );
  PROVIDE( _ld_bl_static_cli_cmds_end   = _bl_static_cli_cmds_end );

  /* blog */
  PROVIDE( _ld_bl_static_blogcomponent_code_start = _bl_static_blogcomponent_code_start );
  PROVIDE( _ld_bl_static_blogcomponent_code_end   = _bl_static_blogcomponent_code_end );
  PROVIDE( _ld_bl_static_blogfile_code_start = _bl_static_blogfile_code_start );
  PROVIDE( _ld_bl_static_blogfile_code_end   = _bl_static_blogfile_code_end );
  PROVIDE( _ld_bl_static_blogpri_code_start = _bl_static_blogpri_code_start );
  PROVIDE( _ld_bl_static_blogpri_code_end   = _bl_static_blogpri_code_end );

  /* ram information */
  PROVIDE( _ld_ram_size0 = LENGTH(flash) );
  PROVIDE( _ld_ram_addr0 = ORIGIN(flash) );
  PROVIDE( _ld_ram_size1 = LENGTH(tcm_ocram) - SIZEOF(.stack) );
  PROVIDE( _ld_ram_addr1 = ORIGIN(tcm_ocram) );
  PROVIDE( _ld_ram_size2 = LENGTH(hbnram) );
  PROVIDE( _ld_ram_addr2 = ORIGIN(hbnram) );
  PROVIDE( _ld_ram_size3 = SIZEOF(.stack) );
  PROVIDE( _ld_ram_addr3 = ADDR(.stack) );

  /* BOOT2 parameter */
  PROVIDE ( __boot2_pt_addr_src = BOOT2_PT_ADDR );

  /* EM size */
  PROVIDE(__LD_CONFIG_EM_SEL = __EM_SIZE);
}
