コア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 )
{
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();
osInitBROM();
@ -39,18 +43,18 @@ void BromMain( void )
while (1)
{
OSTick tick = osGetTick();
u32 mon[OS_MONITOR_NUM];
mon[0] = osGetPerfMonitor( OS_MONITOR_0 );
mon[1] = osGetPerfMonitor( OS_MONITOR_1 );
mon[2] = osGetPerfMonitor( OS_MONITOR_2 );
u32 pmon[OS_MONITOR_NUM];
pmon[0] = osGetPerfMonitor( OS_MONITOR_0 );
pmon[1] = osGetPerfMonitor( OS_MONITOR_1 );
pmon[2] = osGetPerfMonitor( OS_MONITOR_2 );
osWaitInterruptID( TRUE, OSi_ALARM_IE_TIMER_ID );
mon[0] = osGetPerfMonitor( OS_MONITOR_0 ) - mon[0];
mon[1] = osGetPerfMonitor( OS_MONITOR_1 ) - mon[1];
mon[2] = osGetPerfMonitor( OS_MONITOR_2 ) - mon[2];
pmon[0] = osGetPerfMonitor( OS_MONITOR_0 ) - pmon[0];
pmon[1] = osGetPerfMonitor( OS_MONITOR_1 ) - pmon[1];
pmon[2] = osGetPerfMonitor( OS_MONITOR_2 ) - pmon[2];
tick = osGetTick() - tick;
osTPrintf( "wait mon0 = %llu msec\n", OS_TICK_TO_MSEC(mon[0]) ); // MG20ではパフォーマンスモニタのクロックが違う
osTPrintf( "wait mon1 = %llu msec\n", OS_TICK_TO_MSEC(mon[1]) );
osTPrintf( "wait mon2 = %llu msec\n", OS_TICK_TO_MSEC(mon[2]) );
osTPrintf( "wait mon0 = %llu msec\n", OS_TICK_TO_MSEC(pmon[0]) );
osTPrintf( "wait mon1 = %llu msec\n", OS_TICK_TO_MSEC(pmon[1]) );
osTPrintf( "wait mon2 = %llu msec\n", OS_TICK_TO_MSEC(pmon[2]) );
osTPrintf( "wait tick = %llu msec\n", OS_TICK_TO_MSEC(tick) );
}
}

View File

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