📄 rominit.s
字号:
addis r5,0,0x692E /*xiyong: EB2E */ ori r5,r5,0xB452 lis r6, HIADJ (M8260_PSDMR (INTERNAL_MEM_MAP_ADDR)) addi r6, r6, LO (M8260_PSDMR (INTERNAL_MEM_MAP_ADDR)) stw r5, 0 (r6) addis r0,0,0 /* do a single write to an arbitrary location */ addi r5,0,0x00FF /* Load 0x000000FF into r5 */ stb r5,0(r0) /* Write 0xFF to address 0 - bits [24-31] */ /* issue a "CBR Refresh" command to SDRAM */ addis r5,0,0x492E /* xiyong: CB2E */ ori r5,r5,0xB452 stw r5, 0 (r6) /* Loop 8 times, writing 0xFF to address 0 */ addi r7,0,0x0008 mtspr 9,r7 /* Load spr CTR with 8 */ addi r8,0,0x00FF /* Load 0x000000FF into r8 */ SdramWrLoop: stb r8,0(r0) /* Write 0xFF to address 0 */ bc 16,0,SdramWrLoop /* Decrement CTR, and possibly branch */ /* issue a "Mode Register Write" command to SDRAM */ addis r5,0,0x592E /*xiyong: DB2E */ ori r5,r5,0xB452 stw r5, 0 (r6) /* do a single write to an arbitrary location */ addi r8,0,0x00FF /* Load 0x000000FF into r8 */ stb r8,0(r0) /* Write 0xFF to address 0 - bits [24-31] */ /* enable refresh services and put SDRAM into normal operation */ /* this was changed for PILOT but will work for the ENG as well */ addis r5,0,0x412E /*xiyong :C32EB452*/ ori r5,r5,0xB452 stw r5, 0 (r6) lis r4, HIADJ (INTERNAL_MEM_MAP_ADDR+0x10000) /*xiyong here: */ addi r4, r4, LO (INTERNAL_MEM_MAP_ADDR+0x10000)#ifdef INCLUDE_LOC_SDRAM /*xiyong:cpm local sdram use cs3 */ addi r5,0,0x0010 /* load 0x10 or 16 */ stb r5,0x01a4(r4) /* store byte - bits[24-31] reg: LSTR*/ addis r8,0,0x4000 /* R3 holds the value temporarily xiyong:base 0x4000000*/ /* lis r8, HIADJ (LOC_BASE_ADRS) */ ori r8,r8,0x1861 addis r5,0,0xFe00 /* R5 holds the value temporarily xiyong:*/ ori r5,r5,0x2cc0 stw r5,0x011C(r4) /* xiyong: OR3 */ stw r8,0x0118(r4) /* xiyong: BR3 */ addis r8,0,0x696a ori r8,r8,0x2562 stw r8,0x0194 (r4) addis r2,0,0x4000 addi r8,0,0xFFFF stb r8,0(r2) /* Write 0xFF to address 0x40000000 */ addis r8,0,0x496a ori r8,r8,0x2562 stw r8,0x0194 (r4) addis r6,0,0 ori r6,r6,8 mtspr 9,r6 /* Load CTR with 8. */ addi r8,0,0xFFFF /* Load 0xFs into r8 */ locSdramWrLoop: stb r8,0(r2) /* Write 0 to address 0x40000000 */ bc 16,0,locSdramWrLoop /* Decrement CTR, then branch if the decremented CTR */ /* is not equal to 0 */ addis r8,0,0x596a ori r8,r8,0x2562 stw r8,0x0194 (r4) addi r8,0,0xFFFF stb r8,0(r2) /* Write 0xFF to address 0x40000000 */ addis r8,0,0x416A ori r8,r8,0x2562 stw r8,0x0194 (r4) #endif /* INCLUDE_LOC_SDRAM */#ifdef BOOT_FILE_ROM /* Map the bank 2 to the flash area */ /* CS2 is 4Mbytes flash */ lis r5, HIADJ (0XFF800954) addi r5, r5, LO (0XFF800954) lis r6, HIADJ (M8260_OR2 (INTERNAL_MEM_MAP_ADDR)) addi r6, r6, LO (M8260_OR2 (INTERNAL_MEM_MAP_ADDR)) stw r5, 0 (r6) lis r5, HIADJ (0X70001001) addi r5, r5, LO (0X70001001) lis r6, HIADJ (M8260_BR2 (INTERNAL_MEM_MAP_ADDR)) addi r6, r6, LO (M8260_BR2 (INTERNAL_MEM_MAP_ADDR)) stw r5, 0 (r6)#else /* CS2 is 512kbytes flash */ lis r5, HIADJ (0XFF800856) addi r5, r5, LO (0XFF800856) lis r6, HIADJ (M8260_OR2 (INTERNAL_MEM_MAP_ADDR)) addi r6, r6, LO (M8260_OR2 (INTERNAL_MEM_MAP_ADDR)) stw r5, 0 (r6) lis r5, HIADJ (0X70000801) addi r5, r5, LO (0X70000801) lis r6, HIADJ (M8260_BR2 (INTERNAL_MEM_MAP_ADDR)) addi r6, r6, LO (M8260_BR2 (INTERNAL_MEM_MAP_ADDR)) stw r5, 0 (r6)#endif /* INCLUDE_FLASH_CS2 */ /* cubit-3 use CS4,xiyong*/ lis r5, HIADJ (0XFFFF80f6) addi r5, r5, LO (0XFFFF80f6) lis r6, HIADJ (M8260_OR4 (INTERNAL_MEM_MAP_ADDR)) addi r6, r6, LO (M8260_OR4 (INTERNAL_MEM_MAP_ADDR)) stw r5, 0 (r6) lis r5, HIADJ (0X50000801) /* BASE ADDRESS:0x50000000, 8 bit port */ addi r5, r5, LO (0X50000801) lis r6, HIADJ (M8260_BR4 (INTERNAL_MEM_MAP_ADDR)) addi r6, r6, LO (M8260_BR4 (INTERNAL_MEM_MAP_ADDR)) stw r5, 0 (r6) /* Zero-out registers: SPRGs */ addis r0,0,0 isync /* synchronize */ mtspr 272,r0 mtspr 273,r0 mtspr 274,r0 mtspr 275,r0 isync /* synchronize */ /* zero-out the Segment registers */ mtsr 0,r0 isync mtsr 1,r0 isync mtsr 2,r0 isync mtsr 3,r0 isync mtsr 4,r0 isync mtsr 5,r0 isync mtsr 6,r0 isync mtsr 7,r0 isync mtsr 8,r0 isync mtsr 9,r0 isync mtsr 10,r0 isync mtsr 11,r0 isync mtsr 12,r0 isync mtsr 13,r0 isync mtsr 14,r0 isync mtsr 15,r0 isync /* invalidate DBATs: clear VP and VS bits */ mtspr 536,r0 /* Data bat register 0 upper */ isync mtspr 538,r0 /* Data bat register 1 upper */ isync mtspr 540,r0 /* Data bat register 2 upper */ isync mtspr 542,r0 /* Data bat register 3 upper */ isync /* invalidate IBATs: clear VP and VS bits */ mtspr 528,r0 /* Instruction bat register 0 upper */ isync mtspr 530,r0 /* Instruction bat register 1 upper */ isync mtspr 532,r0 /* Instruction bat register 2 upper */ isync mtspr 534,r0 /* Instruction bat register 3 upper */ isync /* invalidate TLBs: loop on all TLB entries using r7 as an index */ addi r0,0,0x0020 mtspr 9,r0 /* Load CTR with 32 */ addi r7,0,0 /* Use r7 as the tlb index */ tlb_write_loop: tlbie r7 /* invalidate the tlb entry */ sync addi r7,r7,0x1000 /* increment the index */ bc 16,0,tlb_write_loop /* Decrement CTR, then branch if the */ /* decremented CTR is not equal to 0 */ /* Turn off data and instruction cache control bits */ mfspr r7, HID0 isync sync /* synchronize */ andi. r7,r7,0x3FFF /* Clear DCE and ICE bits */ mtspr HID0,r7 isync sync /* synchronize */ /*****************************************************************/ /* added by wangyan , open led ,mod by xiyong,we have four led, */ /* lis r5, HIADJ (0X00000000) addi r5, r5, LO (0X00000000) lis r6, HIADJ (M8260_PPARC (INTERNAL_MEM_MAP_ADDR)) addi r6, r6, LO (M8260_PPARC (INTERNAL_MEM_MAP_ADDR)) stw r5, 0 (r6) lis r5, HIADJ (0X00000000) addi r5, r5, LO (0X00000000) lis r6, HIADJ (M8260_PSORC (INTERNAL_MEM_MAP_ADDR)) addi r6, r6, LO (M8260_PSORC (INTERNAL_MEM_MAP_ADDR)) stw r5, 0 (r6) lis r5, HIADJ (0X00000000) addi r5, r5, LO (0X00000000) lis r6, HIADJ (M8260_PODRC (INTERNAL_MEM_MAP_ADDR)) addi r6, r6, LO (M8260_PODRC (INTERNAL_MEM_MAP_ADDR)) stw r5, 0 (r6) lis r5, HIADJ (0Xf0000000) addi r5, r5, LO (0Xf0000000) lis r6, HIADJ (M8260_PDIRC (INTERNAL_MEM_MAP_ADDR)) addi r6, r6, LO (M8260_PDIRC (INTERNAL_MEM_MAP_ADDR)) stw r5, 0 (r6) lis r5, HIADJ (0Xa0000000) addi r5, r5, LO (0Xa0000000) lis r6, HIADJ (M8260_PDATC (INTERNAL_MEM_MAP_ADDR)) addi r6, r6, LO (M8260_PDATC (INTERNAL_MEM_MAP_ADDR)) stw r5, 0 (r6) */ /* two led on ,two led off */ /**********************************************************/ /* initialize the stack pointer */ lis sp, HIADJ(STACK_ADRS) addi sp, sp, LO(STACK_ADRS) /* 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 */ lis r7, HIADJ(romInit) addi r7, r7, LO(romInit) lis r8, HIADJ(ROM_TEXT_ADRS) addi r8, r8, LO(ROM_TEXT_ADRS) lis r6, HIADJ(romStart) addi r6, r6, LO(romStart) /* load R6 with C entry point */ sub r6, r6, r7 /* routine - entry point */ add r6, r6, r8 /* + ROM base */ mtspr LR, r6 /* save destination address*/ /* into LR register */ blr /* jump to the C entry point */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -