📄 rominit8xx.s
字号:
/* compute the OR3/OR2 value for a 16M block size */ /* TODO - setup the Bank 3 configuration */ LOADPTR (r5, 0xff000000 | OR_CSNT_SAM) stw r5, OR3(0)(r4) /* Set OR3. Used only when BR3 is valid */ /* TODO - change the Address Multiplexing in MAMR */ lwz r6, MAMR(0)(r4) LOADPTR (r9, ~MAMR_AMA_MSK) and r6, r6, r9 /* clear the AMA bits in MAMR */ LOADPTR (r9, MAMR_AMA_TYPE_3) or r6, r6, r9 /* set the AMA bits */ stw r6, MAMR(0)(r4) b dramInitdram8meg: /* program BR3, for upper 4 MB */ LOADPTR (r5, ((0x00400000 + LOCAL_MEM_LOCAL_ADRS) & BR_BA_MSK) | BR_MS_UPMA | BR_V) stw r5, BR3(0)(r4)dram4meg: /* compute the OR3/OR2 value for a 4M block size */ LOADPTR (r5, 0xffc00000 | OR_CSNT_SAM) stw r5, OR3(0)(r4) /* Set OR3. Used only when BR3 is valid */ b dramInit dramInit: /* Map the bank 2 to the Dram area */ stw r5, OR2(0)(r4) /* set OR2 to the previously computed value */ LOADPTR (r5, (LOCAL_MEM_LOCAL_ADRS & BR_BA_MSK) | BR_MS_UPMA | BR_V) stw r5, BR2(0)(r4) /* TODO - map additional banks as needed */ /* TODO - reset external devices, if possible */ /* initialize the stack pointer */ LOADPTR (sp, STACK_ADRS) /* initialize r2 and r13 according to EABI standard */#if FALSE /* SDA Not supported yet */ LOADPTR (r2, _SDA2_BASE_) LOADPTR (r13, _SDA_BASE_)#endif /* go to C entry point */ addi sp, sp, -FRAMEBASESZ /* get frame stack */ /* * calculate C entry point: routine - entry point + ROM base * routine = romStart * entry point = romInit = R7 * ROM base = ROM_TEXT_ADRS = R8 * C entry point: romStart - R7 + R8 */ LOADPTR (r6, romStart) sub r6, r6, r7 /* routine - entry point */ add r6, r6, r8 /* + ROM base */ mtlr r6 /* move C entry point to LR */ blr /* jump to the C entry point */ /* * The following tables contain the DRAM controller * configurations. There are two versions of each * table. The first is for 50Mhz, the * second is for 25 Mhz. * * TODO - add additional table entries as required. */#if (SPLL_FREQ != FREQ_25_MHZ) /* UPM initialization table, 60ns, 50MHz */upmTable60: /* single read. (offset 0 in upm RAM) */ .long 0x8fffec24, 0x0fffec04, 0x0cffec04, 0x00ffec04 .long 0x00ffec00, 0x37ffec47 .long 0xffffffff, 0xffffffff /* burst read. (offset 8 in upm RAM) */ .long 0x8fffec24, 0x0fffec04, 0x08ffec04, 0x00ffec0c .long 0x03ffec00, 0x00ffec44, 0x00ffcc08, 0x0cffcc44 .long 0x00ffec0c, 0x03ffec00, 0x00ffec44, 0x00ffcc00 .long 0x3fffc847 .long 0xffffffff, 0xffffffff, 0xffffffff /* single write. (offset 18 in upm RAM) */ .long 0x8fafcc24, 0x0fafcc04, 0x0cafcc00, 0x11bfcc47 .long 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff /* burst write. (offset 20 in upm RAM) */ .long 0x8fafcc24, 0x0fafcc04, 0x0cafcc00, 0x03afcc4c .long 0x0cafcc00, 0x03afcc4c, 0x0cafcc00, 0x03afcc4c .long 0x0cafcc00, 0x33bfcc4f .long 0xffffffff, 0xffffffff .long 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff /* refresh. (offset 30 in upm RAM) */ .long 0xc0ffcc84, 0x00ffcc04, 0x07ffcc04, 0x3fffcc06 .long 0xffffcc85, 0xffffcc05 .long 0xffffffff, 0xffffffff .long 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff /* exception. (offset 3c in upm RAM) */ .long 0x33ffcc07 .long 0xffffffff, 0xffffffff, 0xffffffffupmTable60End: /* UPM initialization table, 70ns, 50MHz */upmTable70: /* single read. (offset 0 in upm RAM) */ .long 0x8fffcc24, 0x0fffcc04, 0x0cffcc04, 0x00ffcc04 .long 0x00ffcc00, 0x37ffcc47 .long 0xffffffff, 0xffffffff /* burst read. (offset 8 in upm RAM) */ .long 0x8fffcc24, 0x0fffcc04, 0x0cffcc04, 0x00ffcc04 .long 0x00ffcc08, 0x0cffcc44, 0x00ffec0c, 0x03ffec00 .long 0x00ffec44, 0x00ffcc08, 0x0cffcc44, 0x00ffec04 .long 0x00ffec00, 0x3fffec47 .long 0xffffffff, 0xffffffff /* single write. (offset 18 in upm RAM) */ .long 0x8fafcc24, 0x0fafcc04, 0x0cafcc00, 0x11bfcc47 .long 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff /* burst write. (offset 20 in upm RAM) */ .long 0x8fafcc24, 0x0fafcc04, 0x0cafcc00, 0x03afcc4c .long 0x0cafcc00, 0x03afcc4c, 0x0cafcc00, 0x03afcc4c .long 0x0cafcc00, 0x33bfcc4f .long 0xffffffff, 0xffffffff .long 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff /* refresh. (offset 30 in upm RAM) */ .long 0xe0ffcc84, 0x00ffcc04, 0x00ffcc04, 0x0fffcc04 .long 0x7fffcc06, 0xffffcc85, 0xffffcc05 .long 0xffffffff .long 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff /* exception. (offset 3c in upm RAM) */ .long 0x33ffcc07 .long 0xffffffff, 0xffffffff, 0xffffffffupmTable70End: /* UPM initialization table, EDO, 60ns, 50MHz */upmTableEdo60: /* single read. (offset 0 in upm RAM) */ .long 0x8ffbec24, 0x0ff3ec04, 0x0cf3ec04, 0x00f3ec04 .long 0x00f3ec00, 0x37f7ec47 .long 0xffffffff, 0xffffffff /* burst read. (offset 8 in upm RAM) */ .long 0x8fffec24, 0x0ffbec04, 0x0cf3ec04, 0x00f3ec0c .long 0x0cf3ec00, 0x00f3ec4c, 0x0cf3ec00, 0x00f3ec4c .long 0x0cf3ec00, 0x00f3ec44, 0x03f3ec00, 0x3ff7ec47 .long 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff /* single write. (offset 18 in upm RAM) */ .long 0x8fffcc24, 0x0fefcc04, 0x0cafcc00, 0x11bfcc47 .long 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff /* burst write. (offset 20 in upm RAM) */ .long 0x8fffcc24, 0x0fefcc04, 0x0cafcc00, 0x03afcc4c .long 0x0cafcc00, 0x03afcc4c, 0x0cafcc00, 0x03afcc4c .long 0x0cafcc00, 0x33bfcc4f .long 0xffffffff, 0xffffffff .long 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff /* refresh. (offset 30 in upm RAM) */ .long 0xc0ffcc84, 0x00ffcc04, 0x07ffcc04, 0x3fffcc06 .long 0xffffcc85, 0xffffcc05 .long 0xffffffff, 0xffffffff .long 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff /* exception. (offset 3c in upm RAM) */ .long 0x33ffcc07 .long 0xffffffff, 0xffffffff, 0xffffffffupmTableEdo60End: /* UPM initialization table, EDO, 70ns, 50MHz */upmTableEdo70: /* single read. (offset 0 in upm RAM) */ .long 0x8ffbcc24, 0x0ff3cc04, 0x0cf3cc04, 0x00f3cc04 .long 0x00f3cc00, 0x37f7cc47 .long 0xffffffff, 0xffffffff /* burst read. (offset 8 in upm RAM) */ .long 0x8fffcc24, 0x0ffbcc04, 0x0cf3cc04, 0x00f3cc0c .long 0x03f3cc00, 0x00f3cc44, 0x00f3ec0c, 0x0cf3ec00 .long 0x00f3ec4c, 0x03f3ec00, 0x00f3ec44, 0x00f3cc00 .long 0x33f7cc47 .long 0xffffffff, 0xffffffff, 0xffffffff /* single write. (offset 18 in upm RAM) */ .long 0x8fffcc24, 0x0fefcc04, 0x0cafcc00, 0x11bfcc47 .long 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff /* burst write. (offset 20 in upm RAM) */ .long 0x8fffcc24, 0x0fefcc04, 0x0cafcc00, 0x03afcc4c .long 0x0cafcc00, 0x03afcc4c, 0x0cafcc00, 0x03afcc4c .long 0x0cafcc00, 0x33bfcc47 .long 0xffffffff, 0xffffffff .long 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff /* refresh. (offset 30 in upm RAM) */ .long 0xe0ffcc84, 0x00ffcc04, 0x00ffcc04, 0x0fffcc04 .long 0x7fffcc04, 0xffffcc86, 0xffffcc05 .long 0xffffffff .long 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff /* exception. (offset 3c in upm RAM) */ .long 0x33ffcc07 .long 0xffffffff, 0xffffffff, 0xffffffffupmTableEdo70End:#else /* FALSE/TRUE */ /* UPM initialization table, 60ns, 25MHz */upmTable60: /* single read. (offset 0 in upm RAM) */ .long 0x0fffcc04, 0x08ffcc00, 0x33ffcc47 .long 0xffffffff .long 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff /* burst read. (offset 8 in upm RAM) */ .long 0x0fffcc24, 0x0fffcc04, 0x08ffcc00, 0x03ffcc4c .long 0x08ffcc00, 0x03ffcc4c, 0x08ffcc00, 0x03ffcc4c .long 0x08ffcc00, 0x33ffcc47 .long 0xffffffff, 0xffffffff .long 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff /* single write. (offset 18 in upm RAM) */ .long 0x0fafcc04, 0x08afcc00, 0x3fbfcc47 .long 0xffffffff .long 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff /* burst write. (offset 20 in upm RAM) */ .long 0x0fafcc04, 0x0cafcc00, 0x01afcc4c, 0x0cafcc00 .long 0x01afcc4c, 0x0cafcc00, 0x01afcc4c, 0x0cafcc00 .long 0x31bfcc43 .long 0xffffffff, 0xffffffff, 0xffffffff .long 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff /* refresh. (offset 30 in upm RAM) */ .long 0x80ffcc84, 0x13ffcc04, 0xffffcc87, 0xffffcc05 .long 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff .long 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff /* exception. (offset 3c in upm RAM) */ .long 0x33ffcc07 .long 0xffffffff, 0xffffffff, 0xffffffffupmTable60End: /* UPM initialization table, 70ns, 25MHz */upmTable70: /* single read. (offset 0 in upm RAM) */ .long 0x0fffec04, 0x08ffec04, 0x00ffec00, 0x3fffcc47 .long 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff /* burst read. (offset 8 in upm RAM) */ .long 0x0fffcc24, 0x0fffcc04, 0x08ffcc00, 0x03ffcc4c .long 0x08ffcc00, 0x03ffcc4c, 0x08ffcc00, 0x03ffcc4c .long 0x08ffcc00, 0x33ffcc47 .long 0xffffffff, 0xffffffff .long 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff /* single write. (offset 18 in upm RAM) */ .long 0x0fafcc04, 0x08afcc00, 0x3fbfcc47 .long 0xffffffff .long 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff /* burst write. (offset 20 in upm RAM) */ .long 0x0fafcc04, 0x0cafcc00, 0x01afcc4c, 0x0cafcc00 .long 0x01afcc4c, 0x0cafcc00, 0x01afcc4c, 0x0cafcc00 .long 0x31bfcc43 .long 0xffffffff, 0xffffffff, 0xffffffff .long 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff /* refresh. (offset 30 in upm RAM) */ .long 0xc0ffcc84, 0x01ffcc04, 0x7fffcc86, 0xffffcc05 .long 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff .long 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff /* exception. (offset 3c in upm RAM) */ .long 0x33ffcc07 .long 0xffffffff, 0xffffffff, 0xffffffffupmTable70End: /* UPM initialization table, 60ns EDO DRAMs, 25MHz */upmTableEdo60: /* single read. (offset 0 in upm RAM) */ .long 0x0ffbcc04, 0x0cf3cc04, 0x00f3cc00, 0x33f7cc47 .long 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff /* burst read. (offset 8 in upm RAM) */ .long 0x0ffbcc04, 0x09f3cc0c, 0x09f3cc0c, 0x09f3cc0c .long 0x08f3cc00, 0x3ff7cc47 .long 0xffffffff, 0xffffffff .long 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff .long 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff /* single write. (offset 18 in upm RAM) */ .long 0x0fefcc04, 0x08afcc04, 0x00afcc00, 0x3fbfcc47 .long 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff /* burst write. (offset 20 in upm RAM) */ .long 0x0fefcc04, 0x08afcc00, 0x07afcc48, 0x08afcc48 .long 0x08afcc48, 0x39bfcc47 .long 0xffffffff, 0xffffffff .long 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff .long 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff /* refresh. (offset 30 in upm RAM) */ .long 0x80ffcc84, 0x13ffcc04, 0xffffcc87, 0xffffcc05 .long 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff .long 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff /* exception. (offset 3c in upm RAM) */ .long 0x33ffcc07 .long 0xffffffff, 0xffffffff, 0xffffffffupmTableEdo60End: /* UPM initialization table, EDO, 70ns DRAM, 25MHz */upmTableEdo70: /* single read. (offset 0 in upm RAM) */ .long 0x0ffbcc04, 0x0cf3cc04, 0x00f3cc00, 0x33f7cc47 .long 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff /* burst read. (offset 8 in upm RAM) */ .long 0x0ffbec04, 0x08f3ec04, 0x03f3ec48, 0x08f3cc00 .long 0x0ff3cc4c, 0x08f3cc00, 0x0ff3cc4c, 0x08f3cc00 .long 0x3ff7cc47 .long 0xffffffff, 0xffffffff, 0xffffffff .long 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff /* single write. (offset 18 in upm RAM) */ .long 0x0fefcc04, 0x08afcc04, 0x00afcc00, 0x3fbfcc47 .long 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff /* burst write. (offset 20 in upm RAM) */ .long 0x0fefcc04, 0x08afcc00, 0x07afcc4c, 0x08afcc00 .long 0x07afcc4c, 0x08afcc00, 0x07afcc4c, 0x08afcc00 .long 0x37bfcc47 .long 0xffffffff, 0xffffffff, 0xffffffff .long 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff /* refresh. (offset 30 in upm RAM) */ .long 0xc0ffcc84, 0x01ffcc04, 0x7fffcc86, 0xffffcc05 .long 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff .long 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff /* exception. (offset 3c in upm RAM) */ .long 0x33ffcc07 .long 0xffffffff, 0xffffffff, 0xffffffffupmTableEdo70End: /* TODO - add additional tables for new memory configurations*/#endifFUNC_END(_romInit)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -