コア2の0ページプロテクション対応。

git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-09-30%20-%20paladin.7z/paladin/ctr_firmware@238 b871894f-2f95-9b40-918c-086798483c85
This commit is contained in:
nakasima 2009-01-29 10:15:48 +00:00
parent c090790728
commit d81cc409cc
2 changed files with 19 additions and 15 deletions

View File

@ -22,6 +22,10 @@ static void handler(void)
void BromMain( void ) void BromMain( void )
{ {
osTPrintf( "start mon0 = %08x\n", osGetPerfMonitor( OS_MONITOR_0 ) );
osTPrintf( "start mon1 = %08x\n", osGetPerfMonitor( OS_MONITOR_1 ) );
osTPrintf( "start mon2 = %08x\n", osGetPerfMonitor( OS_MONITOR_2 ) );
osInitException(); osInitException();
osInitBROM(); osInitBROM();
@ -39,18 +43,18 @@ void BromMain( void )
while (1) while (1)
{ {
OSTick tick = osGetTick(); OSTick tick = osGetTick();
u32 mon[OS_MONITOR_NUM]; u32 pmon[OS_MONITOR_NUM];
mon[0] = osGetPerfMonitor( OS_MONITOR_0 ); pmon[0] = osGetPerfMonitor( OS_MONITOR_0 );
mon[1] = osGetPerfMonitor( OS_MONITOR_1 ); pmon[1] = osGetPerfMonitor( OS_MONITOR_1 );
mon[2] = osGetPerfMonitor( OS_MONITOR_2 ); pmon[2] = osGetPerfMonitor( OS_MONITOR_2 );
osWaitInterruptID( TRUE, OSi_ALARM_IE_TIMER_ID ); osWaitInterruptID( TRUE, OSi_ALARM_IE_TIMER_ID );
mon[0] = osGetPerfMonitor( OS_MONITOR_0 ) - mon[0]; pmon[0] = osGetPerfMonitor( OS_MONITOR_0 ) - pmon[0];
mon[1] = osGetPerfMonitor( OS_MONITOR_1 ) - mon[1]; pmon[1] = osGetPerfMonitor( OS_MONITOR_1 ) - pmon[1];
mon[2] = osGetPerfMonitor( OS_MONITOR_2 ) - mon[2]; pmon[2] = osGetPerfMonitor( OS_MONITOR_2 ) - pmon[2];
tick = osGetTick() - tick; tick = osGetTick() - tick;
osTPrintf( "wait mon0 = %llu msec\n", OS_TICK_TO_MSEC(mon[0]) ); // MG20ではパフォーマンスモニタのクロックが違う osTPrintf( "wait mon0 = %llu msec\n", OS_TICK_TO_MSEC(pmon[0]) );
osTPrintf( "wait mon1 = %llu msec\n", OS_TICK_TO_MSEC(mon[1]) ); osTPrintf( "wait mon1 = %llu msec\n", OS_TICK_TO_MSEC(pmon[1]) );
osTPrintf( "wait mon2 = %llu msec\n", OS_TICK_TO_MSEC(mon[2]) ); osTPrintf( "wait mon2 = %llu msec\n", OS_TICK_TO_MSEC(pmon[2]) );
osTPrintf( "wait tick = %llu msec\n", OS_TICK_TO_MSEC(tick) ); osTPrintf( "wait tick = %llu msec\n", OS_TICK_TO_MSEC(tick) );
} }
} }

View File

@ -73,13 +73,13 @@ stupStartHandlerVeneer
LSYM(1) beq BSYM(1) LSYM(1) beq BSYM(1)
//---- enable performance monitor //---- enable performance monitor
// カウンタ0/1は乱数の要素として使えるかもしれないのでリセットしない
mrc p15, 0, r0, c15, c12, 0 mrc p15, 0, r0, c15, c12, 0
ldr r1, =HW_C15_PMN_ENABLE | HW_C15_CYCLE_COUNT_RESET | HW_C15_COUNT01_RESET | \ ldr r1, =HW_C15_PMN_ENABLE | HW_C15_CYCLE_COUNT_RESET | \
(HW_C15_EVT_INC_EACH_CYCLE << HW_C15_COUNT0_EVT_SFT) | \ (HW_C15_EVT_INC_EACH_CYCLE << HW_C15_COUNT0_EVT_SFT) | \
(HW_C15_EVT_INC_EACH_CYCLE << HW_C15_COUNT1_EVT_SFT) | \ (HW_C15_EVT_INC_EACH_CYCLE << HW_C15_COUNT1_EVT_SFT) | \
HW_C15_CYCLE_COUNT_D64 HW_C15_CYCLE_COUNT_D64
orr r0, r0, r1 orr r0, r0, r1
// bic r0, r0, #HW_C15_CYCLE_COUNT_D64
mcr p15, 0, r0, c15, c12, 0 mcr p15, 0, r0, c15, c12, 0
//---- check CPU-ID //---- check CPU-ID
@ -87,14 +87,12 @@ LSYM(1) beq BSYM(1)
tst r2, #HW_C0_AP_CPU_ID_MASK tst r2, #HW_C0_AP_CPU_ID_MASK
beq core0_start beq core0_start
#ifdef SDK_NE1EMU
cmp r2, #1 cmp r2, #1
beq core1_start beq core1_start
LSYM(1) LSYM(1)
wfi wfi
nop nop
b BSYM(1) b BSYM(1)
#endif // SDK_NE1EMU
core1_start core1_start
//---- Wait for IPI //---- Wait for IPI
@ -113,13 +111,15 @@ core1_start
mov r1, r1, lsl r2 mov r1, r1, lsl r2
mov r0, #~0 mov r0, #~0
str r0, [r3] str r0, [r3]
ldr lr, =HW_START_VECTOR1_BUF
// これ以降は0ページプロテクション領域を参照しないこと
LSYM(10) LSYM(10)
wfi wfi
nop nop
ldr r0, [r3] ldr r0, [r3]
tst r0, r1 tst r0, r1
beq BSYM(10) beq BSYM(10)
ldr lr, =HW_START_VECTOR1_BUF
ldr lr, [lr] ldr lr, [lr]
bx lr bx lr