MEMORY
{
  /* NOTE 1 K = 1 KiBi = 1024 bytes */
  BOOT2                             : ORIGIN = 0x10000000, LENGTH = 0x100
  FLASH                             : ORIGIN = 0x10000100, LENGTH = 24K
  BOOTLOADER_STATE                  : ORIGIN = 0x10006000, LENGTH = 4K
  ACTIVE                            : ORIGIN = 0x10007000, LENGTH = 512K
  DFU                               : ORIGIN = 0x10087000, LENGTH = 516K

  /* Pick one of the two options for RAM layout     */

  /* OPTION A: Use all RAM banks as one big block   */
  /* Reasonable, unless you are doing something     */
  /* really particular with DMA or other concurrent */
  /* access that would benefit from striping        */
  RAM   : ORIGIN = 0x20000000, LENGTH = 264K

  /* OPTION B: Keep the unstriped sections separate */
  /* RAM: ORIGIN = 0x20000000, LENGTH = 256K        */
  /* SCRATCH_A: ORIGIN = 0x20040000, LENGTH = 4K    */
  /* SCRATCH_B: ORIGIN = 0x20041000, LENGTH = 4K    */
}

__bootloader_state_start = ORIGIN(BOOTLOADER_STATE) - ORIGIN(BOOT2);
__bootloader_state_end = ORIGIN(BOOTLOADER_STATE) + LENGTH(BOOTLOADER_STATE) - ORIGIN(BOOT2);

__bootloader_active_start = ORIGIN(ACTIVE) - ORIGIN(BOOT2);
__bootloader_active_end = ORIGIN(ACTIVE) + LENGTH(ACTIVE) - ORIGIN(BOOT2);

__bootloader_dfu_start = ORIGIN(DFU) - ORIGIN(BOOT2);
__bootloader_dfu_end = ORIGIN(DFU) + LENGTH(DFU) - ORIGIN(BOOT2);