From e70669201ae2aa61e41a05d40ee4f39f7bd38f47 Mon Sep 17 00:00:00 2001 From: nakasima Date: Mon, 3 Dec 2007 02:01:55 +0000 Subject: [PATCH] =?UTF-8?q?REBOOT=E3=83=A9=E3=82=A4=E3=83=96=E3=83=A9?= =?UTF-8?q?=E3=83=AA=E6=9C=80=E6=96=B0=E7=89=88=E3=81=AB=E5=AF=BE=E5=BF=9C?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@299 b08762b0-b915-fc4b-9d8c-17b2551a87ff --- build/libraries/os/common/os_boot.c | 53 ++++++++++++++++------------- 1 file changed, 30 insertions(+), 23 deletions(-) diff --git a/build/libraries/os/common/os_boot.c b/build/libraries/os/common/os_boot.c index 1e8b6c9d..56c428ef 100644 --- a/build/libraries/os/common/os_boot.c +++ b/build/libraries/os/common/os_boot.c @@ -42,44 +42,51 @@ void OS_BootWithRomHeaderFromFIRM( ROM_Header* rom_header ) void *stack_top = (void*)OS_BOOT_STACK_TOP; // (HW_WRAM_AREA_END - HW_PRV_WRAM_SYSRV_SIZE - HW_SVC_STACK_SIZE) #endif void *wram_reg = rom_header->s.main_wram_config_data; - REBOOTTarget target = REBOOT_TARGET_TWL_SYSTEM; + REBOOTTarget target = REBOOT_TARGET_TWL_SECURE_SYSTEM; BOOL scfg = TRUE; // no touch BOOL jtag = FALSE; // no touch - static u32 clr_list[32]; + static u32 mem_list[32]; int i = 0; /* 自身の static & bss のクリア */ - clr_list[i++] = (u32)SDK_STATIC_START; - clr_list[i++] = (u32)SDK_STATIC_BSS_END-(u32)SDK_STATIC_START; + // pre clear + mem_list[i++] = (u32)SDK_STATIC_START; + mem_list[i++] = (u32)SDK_STATIC_BSS_END-(u32)SDK_STATIC_START; #ifdef SDK_ARM9 /* ITCM全クリア */ - clr_list[i++] = (u32)HW_ITCM; - clr_list[i++] = (u32)HW_ITCM_SIZE; + mem_list[i++] = (u32)HW_ITCM; + mem_list[i++] = (u32)HW_ITCM_SIZE; /* PSEG1 Reserved領域のクリア (暫定) */ - clr_list[i++] = (u32)HW_MAIN_MEM_SHARED; // 0x02fff000 - 0x02fff7ff - clr_list[i++] = (u32)HW_PSEG1_RESERVED_0_END - (u32)HW_MAIN_MEM_SHARED; - clr_list[i++] = (u32)HW_PSEG1_RESERVED_1; // 0x02fffa00 - 0x02fffa7f - clr_list[i++] = (u32)HW_PSEG1_RESERVED_1_END - (u32)HW_PSEG1_RESERVED_1; + mem_list[i++] = (u32)HW_MAIN_MEM_SHARED; // 0x02fff000 - 0x02fff7ff + mem_list[i++] = (u32)HW_PSEG1_RESERVED_0_END - (u32)HW_MAIN_MEM_SHARED; + mem_list[i++] = (u32)HW_PSEG1_RESERVED_1; // 0x02fffa00 - 0x02fffa7f + mem_list[i++] = (u32)HW_PSEG1_RESERVED_1_END - (u32)HW_PSEG1_RESERVED_1; /* System Shared領域のクリア (暫定) */ - clr_list[i++] = (u32)HW_BOOT_CHECK_INFO_BUF; // 0x02fffc00 - 0x02fffc1f - clr_list[i++] = (u32)HW_BOOT_CHECK_INFO_BUF_END - (u32)HW_BOOT_CHECK_INFO_BUF; - clr_list[i++] = (u32)HW_BOOT_SHAKEHAND_9; // 0x02fffc24 - 0x02fffd7f - clr_list[i++] = (u32)HW_NVRAM_USER_INFO_END - (u32)HW_BOOT_SHAKEHAND_9; - clr_list[i++] = (u32)HW_ARENA_INFO_BUF; // 0x02fffda0 - 0x02fffdff - clr_list[i++] = (u32)HW_ROM_HEADER_BUF - (u32)HW_ARENA_INFO_BUF; - clr_list[i++] = (u32)HW_PXI_SIGNAL_PARAM_ARM9; // 0x02ffff80 - 0x02fffffd - clr_list[i++] = (u32)HW_CMD_AREA - (u32)HW_PXI_SIGNAL_PARAM_ARM9; + mem_list[i++] = (u32)HW_BOOT_CHECK_INFO_BUF; // 0x02fffc00 - 0x02fffc1f + mem_list[i++] = (u32)HW_BOOT_CHECK_INFO_BUF_END - (u32)HW_BOOT_CHECK_INFO_BUF; + mem_list[i++] = (u32)HW_BOOT_SHAKEHAND_9; // 0x02fffc24 - 0x02fffd7f + mem_list[i++] = (u32)HW_NVRAM_USER_INFO_END - (u32)HW_BOOT_SHAKEHAND_9; + mem_list[i++] = (u32)HW_ARENA_INFO_BUF; // 0x02fffda0 - 0x02fffdff + mem_list[i++] = (u32)HW_ROM_HEADER_BUF - (u32)HW_ARENA_INFO_BUF; + mem_list[i++] = (u32)HW_PXI_SIGNAL_PARAM_ARM9; // 0x02ffff80 - 0x02fffffd + mem_list[i++] = (u32)HW_CMD_AREA - (u32)HW_PXI_SIGNAL_PARAM_ARM9; #else // SDK_ARM7 { /* REBOOT_ExecuteのCODEとSTACKの隙間をクリア */ - u32 stack_bottom = (u32)stack_top - OS_BOOT_STACK_SIZE_MIN - sizeof(clr_list); + u32 stack_bottom = (u32)stack_top - OS_BOOT_STACK_SIZE_MIN - sizeof(mem_list); u32 code_buf_end = OS_BOOT_CODE_BUF + OS_BOOT_CODE_SIZE; SDK_ASSERT( stack_bottom > code_buf_end ); - clr_list[i++] = code_buf_end; - clr_list[i++] = stack_bottom - code_buf_end; + mem_list[i++] = code_buf_end; + mem_list[i++] = stack_bottom - code_buf_end; } #endif // SDK_ARM7 - clr_list[i++] = NULL; - REBOOT_Execute(entry, wram_reg, clr_list, code_buf, stack_top, target, scfg, jtag); + mem_list[i++] = NULL; + // copy forward + mem_list[i++] = NULL; + // copy backward + mem_list[i++] = NULL; + // post clear + mem_list[i++] = NULL; + REBOOT_Execute(entry, wram_reg, mem_list, code_buf, stack_top, target, scfg, jtag); OS_Terminate(); }