X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Kernel%2Farch%2Farmv7%2Fstart.S;h=da57360ba3ae7e9305aa1ac85b8e496cb1f6ca33;hb=4c717bb526a0a7b1aa44ed7fc4f07a6b7da5d2f9;hp=95bcd473df6162927a1800c8353897030f72b182;hpb=f41cdc51e2d27d257e8d45247b0be49df4baf8a4;p=tpg%2Facess2.git diff --git a/Kernel/arch/armv7/start.S b/Kernel/arch/armv7/start.S index 95bcd473..da57360b 100644 --- a/Kernel/arch/armv7/start.S +++ b/Kernel/arch/armv7/start.S @@ -89,10 +89,10 @@ SVC_Handler: ldr r4, =SyscallHandler blx r4 - ldr r0, =csSyscallPrintRetAddr - ldr r1, [sp,#9*4+5*4] - ldr r4, =Log - blx r4 +@ ldr r0, =csSyscallPrintRetAddr +@ ldr r1, [sp,#9*4+5*4] +@ ldr r4, =Log +@ blx r4 pop {r2} @ errno pop {r0,r1} @ Ret/RetHi @@ -125,10 +125,10 @@ IRQHandler: PUSH_GPRS - ldr r0, =csIRQ_Tag - ldr r1, =csIRQ_Fmt - ldr r4, =Log_Debug - blx r4 +@ ldr r0, =csIRQ_Tag +@ ldr r1, =csIRQ_Fmt +@ ldr r4, =Log_Debug +@ blx r4 @ Call the registered handler ldr r0, gpIRQHandler @@ -143,22 +143,19 @@ IRQHandler: .globl DataAbort DataAbort: sub lr, #8 @ Adjust LR to the correct value -@ srsdb sp!, #19 @ Switch to supervisor mode (DDI0406B D1.6.5) (actually SRSFD) + srsdb sp!, #23 @ Switch to supervisor mode (DDI0406B D1.6.5) (actually SRSFD) @ cpsid ifa, #19 -@ PUSH_GPRS + PUSH_GPRS - mrc p15, 0, r4, c5, c0, 0 @ Read DFSR (Data Fault Address Register) to stack - push {r4} - mrc p15, 0, r3, c6, c0, 0 @ Read DFAR (Data Fault Address Register) into R3 - mov r2, lr - ldr r1, =csDataAbort_Fmt - ldr r0, =csAbort_Tag - ldr r4, =Log_Error + mov r3, #0 @ not a prefetch abort + mrc p15, 0, r2, c5, c0, 0 @ Read DFSR (Data Fault Status Register) to R2 + mrc p15, 0, r1, c6, c0, 0 @ Read DFAR (Data Fault Address Register) into R1 + mov r0, lr @ PC + ldr r4, =MM_PageFault blx r4 - b . -@ POP_GPRS -@ rfeia sp! @ Pop state (actually RFEFD) + POP_GPRS + rfeia sp! @ Pop state (actually RFEFD) .globl PrefetchAbort PrefetchAbort: @@ -224,7 +221,7 @@ kernel_table0: .long PCI_PADDR + 12*(1 << 20) + 0x402 .long PCI_PADDR + 13*(1 << 20) + 0x402 .long PCI_PADDR + 14*(1 << 20) + 0x402 - .long PCI_PADDR + 15*(1 << 20) + 0x042 + .long PCI_PADDR + 15*(1 << 20) + 0x402 #else .rept 16 .long 0 @@ -250,7 +247,7 @@ kernel_table0: @ PID0 user table .globl user_table1_map @ User table1 data table (only the first half is needed) -@ - Abused to provide kernel stacks in upper half +@ - Abused to provide kernel stacks in the unused half of the table user_table1_map: @ Size = 4KiB (only 2KiB used) .rept 0x800/4-1 .long 0 @@ -273,17 +270,17 @@ kernel_table1_map: @ Size = 4KiB .rept (0xF00+16)/4 .long 0 .endr - .long hwmap_table_0 - KERNEL_BASE + (1 << 4) + 3 + .long hwmap_table_0 - KERNEL_BASE + 0x13 .rept 0xFF8/4 - (0xF00+16)/4 - 1 .long 0 .endr - .long kernel_table1_map - KERNEL_BASE + (1 << 4) + 3 + .long kernel_table1_map - KERNEL_BASE + 0x13 .long kernel_exception_map - KERNEL_BASE + 0x13 @ Hardware mappings .globl hwmap_table_0 hwmap_table_0: - .long UART0_PADDR + (1 << 4) + 0x13 @ UART0 + .long UART0_PADDR + 0x13 @ UART0 .rept 1024 - 1 .long 0 .endr @@ -297,10 +294,12 @@ kernel_exception_map: .rept 256-16 .long 0 .endr - .long 0x213 @ Map first page for exceptions (Kernel RO) - .rept 15 + .long 0x212 @ Map first page for exceptions (Kernel RO, Execute) + .rept 16-1-2 .long 0 .endr + .long gUsertextPhysStart + 0x22 @ User .text (User RO, Kernel RW, because both is COW) + .long 0 .section .padata stack: