/*
* ADSP-BF518 Rev 0.0ではアノーマリ05000444の影響でこのファイルを使用できない。
* Rev 0.0 に対しては bf518elf_00.ldを使用すること。
*/
OUTPUT_FORMAT("elf32-bfin","elf32-bfin","elf32-bfin")
OUTPUT_ARCH(bfin)


MEMORY
  {
    MEM_SDRAM (XW)    : ORIGIN = 0x00000000, LENGTH = 128M
    MEM_ASYNC_0 (XW)  : ORIGIN = 0x20000000, LENGTH = 1M
    MEM_ASYNC_1 (XW)  : ORIGIN = 0x20100000, LENGTH = 1M
    MEM_ASYNC_2 (XW)  : ORIGIN = 0x20200000, LENGTH = 1M
    MEM_ASYNC_3 (XW)  : ORIGIN = 0x20300000, LENGTH = 1M

    MEM_L1_DATA_A (W!X)  : ORIGIN = 0xff800000, LENGTH = 32K
    MEM_L1_DATA_B (W!X)  : ORIGIN = 0xff900000, LENGTH = 16K    /* BF518のバンクBは32kBだが、キャッシュ用に16kBあけておく */
    MEM_L1_CODE (XR)   : ORIGIN = 0xffa00000, LENGTH = 32K
/*  MEM_L1_INST_C (XR)   : ORIGIN = 0xffa10000, LENGTH = 16K    BF518のバンクCは16kBだが、キャッシュ用にあけておく */
    MEM_L1_SCRATCH (W!X) : ORIGIN = 0xffb00000, LENGTH = 4K

    MEM_L2              : ORIGIN = 0xffe00000, LENGTH = 0   /* DUMMY */
    
    MEM_SYSMMR (W!X)  : ORIGIN = 0xffc00000, LENGTH = 2M
    MEM_COREMMR (W!X) : ORIGIN = 0xffe00000, LENGTH = 2M
  }

SECTIONS
{



/* ADSP-BF518依存のSYSTEM MMR */
    .bss.sysmmr (NOLOAD) : { . = 0x0000; *.o(SYSMMR0)}>MEM_SYSMMR
    .bss.sysmmr (NOLOAD) : { . = 0x0100; *.o(SYSMMR1)}>MEM_SYSMMR
    .bss.sysmmr (NOLOAD) : { . = 0x010C; *.o(SYSMMR2)}>MEM_SYSMMR
    .bss.sysmmr (NOLOAD) : { . = 0x014C; *.o(SYSMMR3)}>MEM_SYSMMR
    .bss.sysmmr (NOLOAD) : { . = 0x0200; *.o(SYSMMR4)}>MEM_SYSMMR
    .bss.sysmmr (NOLOAD) : { . = 0x0300; *.o(SYSMMR5)}>MEM_SYSMMR
    .bss.sysmmr (NOLOAD) : { . = 0x0400; *.o(SYSMMR6)}>MEM_SYSMMR
    .bss.sysmmr (NOLOAD) : { . = 0x041C; *.o(SYSMMR7)}>MEM_SYSMMR
    .bss.sysmmr (NOLOAD) : { . = 0x0424; *.o(SYSMMR8)}>MEM_SYSMMR
    .bss.sysmmr (NOLOAD) : { . = 0x0500; *.o(SYSMMR9)}>MEM_SYSMMR
    .bss.sysmmr (NOLOAD) : { . = 0x0600; *.o(SYSMMR10)}>MEM_SYSMMR
    .bss.sysmmr (NOLOAD) : { . = 0x0700; *.o(SYSMMR11)}>MEM_SYSMMR
    .bss.sysmmr (NOLOAD) : { . = 0x0800; *.o(SYSMMR12)}>MEM_SYSMMR
    .bss.sysmmr (NOLOAD) : { . = 0x0818; *.o(SYSMMR13)}>MEM_SYSMMR
    .bss.sysmmr (NOLOAD) : { . = 0x0820; *.o(SYSMMR14)}>MEM_SYSMMR
    .bss.sysmmr (NOLOAD) : { . = 0x0900; *.o(SYSMMR15)}>MEM_SYSMMR
    .bss.sysmmr (NOLOAD) : { . = 0x0918; *.o(SYSMMR16)}>MEM_SYSMMR
    .bss.sysmmr (NOLOAD) : { . = 0x0920; *.o(SYSMMR17)}>MEM_SYSMMR
    .bss.sysmmr (NOLOAD) : { . = 0x0A00; *.o(SYSMMR18)}>MEM_SYSMMR
    .bss.sysmmr (NOLOAD) : { . = 0x0A10; *.o(SYSMMR19)}>MEM_SYSMMR
    .bss.sysmmr (NOLOAD) : { . = 0x0B0C; *.o(SYSMMR20)}>MEM_SYSMMR
    .bss.sysmmr (NOLOAD) : { . = 0x0C00; *.o(SYSMMR21)}>MEM_SYSMMR
    .bss.sysmmr (NOLOAD) : { . = 0x0C10; *.o(SYSMMR22)}>MEM_SYSMMR
    .bss.sysmmr (NOLOAD) : { . = 0x0C38; *.o(SYSMMR23)}>MEM_SYSMMR
    .bss.sysmmr (NOLOAD) : { . = 0x0C40; *.o(SYSMMR24)}>MEM_SYSMMR
    .bss.sysmmr (NOLOAD) : { . = 0x0C50; *.o(SYSMMR25)}>MEM_SYSMMR
    .bss.sysmmr (NOLOAD) : { . = 0x0C78; *.o(SYSMMR26)}>MEM_SYSMMR
    .bss.sysmmr (NOLOAD) : { . = 0x0C80; *.o(SYSMMR27)}>MEM_SYSMMR
    .bss.sysmmr (NOLOAD) : { . = 0x0C90; *.o(SYSMMR28)}>MEM_SYSMMR
    .bss.sysmmr (NOLOAD) : { . = 0x0CB8; *.o(SYSMMR29)}>MEM_SYSMMR
    .bss.sysmmr (NOLOAD) : { . = 0x0CC0; *.o(SYSMMR30)}>MEM_SYSMMR
    .bss.sysmmr (NOLOAD) : { . = 0x0CD0; *.o(SYSMMR31)}>MEM_SYSMMR
    .bss.sysmmr (NOLOAD) : { . = 0x0CF8; *.o(SYSMMR32)}>MEM_SYSMMR
    .bss.sysmmr (NOLOAD) : { . = 0x0D00; *.o(SYSMMR33)}>MEM_SYSMMR
    .bss.sysmmr (NOLOAD) : { . = 0x0D10; *.o(SYSMMR34)}>MEM_SYSMMR
    .bss.sysmmr (NOLOAD) : { . = 0x0D38; *.o(SYSMMR35)}>MEM_SYSMMR
    .bss.sysmmr (NOLOAD) : { . = 0x0D40; *.o(SYSMMR36)}>MEM_SYSMMR
    .bss.sysmmr (NOLOAD) : { . = 0x0D50; *.o(SYSMMR37)}>MEM_SYSMMR
    .bss.sysmmr (NOLOAD) : { . = 0x0D78; *.o(SYSMMR38)}>MEM_SYSMMR
    .bss.sysmmr (NOLOAD) : { . = 0x0D80; *.o(SYSMMR39)}>MEM_SYSMMR
    .bss.sysmmr (NOLOAD) : { . = 0x0D90; *.o(SYSMMR40)}>MEM_SYSMMR
    .bss.sysmmr (NOLOAD) : { . = 0x0DB8; *.o(SYSMMR41)}>MEM_SYSMMR
    .bss.sysmmr (NOLOAD) : { . = 0x0DC0; *.o(SYSMMR42)}>MEM_SYSMMR
    .bss.sysmmr (NOLOAD) : { . = 0x0DD0; *.o(SYSMMR43)}>MEM_SYSMMR
    .bss.sysmmr (NOLOAD) : { . = 0x0DF8; *.o(SYSMMR44)}>MEM_SYSMMR
    .bss.sysmmr (NOLOAD) : { . = 0x0E00; *.o(SYSMMR45)}>MEM_SYSMMR
    .bss.sysmmr (NOLOAD) : { . = 0x0E10; *.o(SYSMMR46)}>MEM_SYSMMR
    .bss.sysmmr (NOLOAD) : { . = 0x0E38; *.o(SYSMMR47)}>MEM_SYSMMR
    .bss.sysmmr (NOLOAD) : { . = 0x0E40; *.o(SYSMMR48)}>MEM_SYSMMR
    .bss.sysmmr (NOLOAD) : { . = 0x0E50; *.o(SYSMMR49)}>MEM_SYSMMR
    .bss.sysmmr (NOLOAD) : { . = 0x0E78; *.o(SYSMMR50)}>MEM_SYSMMR
    .bss.sysmmr (NOLOAD) : { . = 0x0E80; *.o(SYSMMR51)}>MEM_SYSMMR
    .bss.sysmmr (NOLOAD) : { . = 0x0E90; *.o(SYSMMR52)}>MEM_SYSMMR
    .bss.sysmmr (NOLOAD) : { . = 0x0EB8; *.o(SYSMMR53)}>MEM_SYSMMR
    .bss.sysmmr (NOLOAD) : { . = 0x0EC0; *.o(SYSMMR54)}>MEM_SYSMMR
    .bss.sysmmr (NOLOAD) : { . = 0x0ED0; *.o(SYSMMR55)}>MEM_SYSMMR
    .bss.sysmmr (NOLOAD) : { . = 0x0EF8; *.o(SYSMMR56)}>MEM_SYSMMR
    .bss.sysmmr (NOLOAD) : { . = 0x0F00; *.o(SYSMMR57)}>MEM_SYSMMR
    .bss.sysmmr (NOLOAD) : { . = 0x0F10; *.o(SYSMMR58)}>MEM_SYSMMR
    .bss.sysmmr (NOLOAD) : { . = 0x0F38; *.o(SYSMMR59)}>MEM_SYSMMR
    .bss.sysmmr (NOLOAD) : { . = 0x0F40; *.o(SYSMMR60)}>MEM_SYSMMR
    .bss.sysmmr (NOLOAD) : { . = 0x0F50; *.o(SYSMMR61)}>MEM_SYSMMR
    .bss.sysmmr (NOLOAD) : { . = 0x0F78; *.o(SYSMMR62)}>MEM_SYSMMR
    .bss.sysmmr (NOLOAD) : { . = 0x0F80; *.o(SYSMMR63)}>MEM_SYSMMR
    .bss.sysmmr (NOLOAD) : { . = 0x0F90; *.o(SYSMMR64)}>MEM_SYSMMR
    .bss.sysmmr (NOLOAD) : { . = 0x0FB8; *.o(SYSMMR65)}>MEM_SYSMMR
    .bss.sysmmr (NOLOAD) : { . = 0x0FC0; *.o(SYSMMR66)}>MEM_SYSMMR
    .bss.sysmmr (NOLOAD) : { . = 0x0FD0; *.o(SYSMMR67)}>MEM_SYSMMR
    .bss.sysmmr (NOLOAD) : { . = 0x0FF8; *.o(SYSMMR68)}>MEM_SYSMMR
    .bss.sysmmr (NOLOAD) : { . = 0x1000; *.o(SYSMMR69)}>MEM_SYSMMR
    .bss.sysmmr (NOLOAD) : { . = 0x1400; *.o(SYSMMR70)}>MEM_SYSMMR
    .bss.sysmmr (NOLOAD) : { . = 0x1480; *.o(SYSMMR71)}>MEM_SYSMMR
    .bss.sysmmr (NOLOAD) : { . = 0x1500; *.o(SYSMMR72)}>MEM_SYSMMR
    .bss.sysmmr (NOLOAD) : { . = 0x1700; *.o(SYSMMR73)}>MEM_SYSMMR
    .bss.sysmmr (NOLOAD) : { . = 0x2000; *.o(SYSMMR74)}>MEM_SYSMMR
    .bss.sysmmr (NOLOAD) : { . = 0x201C; *.o(SYSMMR75)}>MEM_SYSMMR
    .bss.sysmmr (NOLOAD) : { . = 0x2024; *.o(SYSMMR76)}>MEM_SYSMMR
    .bss.sysmmr (NOLOAD) : { . = 0x3000; *.o(SYSMMR77)}>MEM_SYSMMR
    .bss.sysmmr (NOLOAD) : { . = 0x302C; *.o(SYSMMR78)}>MEM_SYSMMR
    .bss.sysmmr (NOLOAD) : { . = 0x3060; *.o(SYSMMR79)}>MEM_SYSMMR
    .bss.sysmmr (NOLOAD) : { . = 0x30A0; *.o(SYSMMR80)}>MEM_SYSMMR
    .bss.sysmmr (NOLOAD) : { . = 0x3100; *.o(SYSMMR81)}>MEM_SYSMMR
    .bss.sysmmr (NOLOAD) : { . = 0x3180; *.o(SYSMMR82)}>MEM_SYSMMR
    .bss.sysmmr (NOLOAD) : { . = 0x3200; *.o(SYSMMR83)}>MEM_SYSMMR
    .bss.sysmmr (NOLOAD) : { . = 0x3210; *.o(SYSMMR84)}>MEM_SYSMMR
    .bss.sysmmr (NOLOAD) : { . = 0x3220; *.o(SYSMMR85)}>MEM_SYSMMR
    .bss.sysmmr (NOLOAD) : { . = 0x3240; *.o(SYSMMR86)}>MEM_SYSMMR
    .bss.sysmmr (NOLOAD) : { . = 0x3280; *.o(SYSMMR87)}>MEM_SYSMMR
    .bss.sysmmr (NOLOAD) : { . = 0x3288; *.o(SYSMMR88)}>MEM_SYSMMR
    .bss.sysmmr (NOLOAD) : { . = 0x3300; *.o(SYSMMR89)}>MEM_SYSMMR
    .bss.sysmmr (NOLOAD) : { . = 0x3340; *.o(SYSMMR90)}>MEM_SYSMMR
    .bss.sysmmr (NOLOAD) : { . = 0x3400; *.o(SYSMMR91)}>MEM_SYSMMR
    .bss.sysmmr (NOLOAD) : { . = 0x3500; *.o(SYSMMR92)}>MEM_SYSMMR
    .bss.sysmmr (NOLOAD) : { . = 0x3620; *.o(SYSMMR93)}>MEM_SYSMMR
    .bss.sysmmr (NOLOAD) : { . = 0x3680; *.o(SYSMMR94)}>MEM_SYSMMR
    .bss.sysmmr (NOLOAD) : { . = 0x3700; *.o(SYSMMR95)}>MEM_SYSMMR
    .bss.sysmmr (NOLOAD) : { . = 0x3800; *.o(SYSMMR96)}>MEM_SYSMMR
    .bss.sysmmr (NOLOAD) : { . = 0x3848; *.o(SYSMMR97)}>MEM_SYSMMR
    .bss.sysmmr (NOLOAD) : { . = 0x3880; *.o(SYSMMR98)}>MEM_SYSMMR
    .bss.sysmmr (NOLOAD) : { . = 0x38C0; *.o(SYSMMR99)}>MEM_SYSMMR





/* Blackfin 共有のCORE MMR */    
    .bss.coremmr (NOLOAD) : {                    *.o(DMEMCTL)}> MEM_COREMMR
    .bss.coremmr (NOLOAD) : { . = ALIGN(0x0100); *.o(DCPLBA)}> MEM_COREMMR
    .bss.coremmr (NOLOAD) : { . = ALIGN(0x0100); *.o(DCPLBD)}> MEM_COREMMR
    .bss.coremmr (NOLOAD) : { . = ALIGN(0x0100); *.o(DTESTC)}> MEM_COREMMR
    .bss.coremmr (NOLOAD) : { . = ALIGN(0x0100); *.o(DTESTD)}> MEM_COREMMR
    .bss.coremmr (NOLOAD) : { . = ALIGN(0x1000); *.o(IMEMCTL)}> MEM_COREMMR
    .bss.coremmr (NOLOAD) : { . = ALIGN(0x0100); *.o(ICPLBA)}> MEM_COREMMR
    .bss.coremmr (NOLOAD) : { . = ALIGN(0x0100); *.o(ICPLBD)}> MEM_COREMMR
    .bss.coremmr (NOLOAD) : { . = ALIGN(0x0100); *.o(ITESTC)}> MEM_COREMMR
    .bss.coremmr (NOLOAD) : { . = ALIGN(0x0100); *.o(ITESTD)}> MEM_COREMMR
    .bss.coremmr (NOLOAD) : { . = ALIGN(0x1000); *.o(EVT)}> MEM_COREMMR
    .bss.coremmr (NOLOAD) : { . = ALIGN(0x0100); *.o(CEC)}> MEM_COREMMR
    .bss.coremmr (NOLOAD) : { . = ALIGN(0x1000); *.o(CTMR)}> MEM_COREMMR
    .bss.coremmr (NOLOAD) : { . = ALIGN(0x1000)+0x1000; *.o(DBG)}> MEM_COREMMR  /* 1000飛ばす */
    .bss.coremmr (NOLOAD) : { . = ALIGN(0x1000); *.o(TBCTL)}> MEM_COREMMR
    .bss.coremmr (NOLOAD) : { . = ALIGN(0x0100); *.o(TBUF)}> MEM_COREMMR
    .bss.coremmr (NOLOAD) : { . = ALIGN(0x1000); *.o(WPICTL)}> MEM_COREMMR
    .bss.coremmr (NOLOAD) : { . = ALIGN(0x0040); *.o(WPIADDR)}> MEM_COREMMR
    .bss.coremmr (NOLOAD) : { . = ALIGN(0x0040); *.o(WPICNT)}> MEM_COREMMR
    .bss.coremmr (NOLOAD) : { . = ALIGN(0x0100); *.o(WPDCTL)}> MEM_COREMMR
    .bss.coremmr (NOLOAD) : { . = ALIGN(0x0040); *.o(WPDADDR)}> MEM_COREMMR
    .bss.coremmr (NOLOAD) : { . = ALIGN(0x0040); *.o(WPDCNT)}> MEM_COREMMR
    .bss.coremmr (NOLOAD) : { . = ALIGN(0x0100); *.o(WPSTAT)}> MEM_COREMMR
    .bss.coremmr (NOLOAD) : { . = ALIGN(0x1000); *.o(PFCTL)}> MEM_COREMMR
    .bss.coremmr (NOLOAD) : { . = ALIGN(0x0100); *.o(PFCNT)}> MEM_COREMMR

    .comment        0 : { *(.comment) }
    .debug          0 : { *(.debug) }
    .line           0 : { *(.line) }
    .debug_srcinfo  0 : { *(.debug_srcinfo) }
    .debug_sfnames  0 : { *(.debug_sfnames) }
    .debug_aranges  0 : { *(.debug_aranges) }
    .debug_pubnames 0 : { *(.debug_pubnames) }
}
