Kernel/arm7 - Serial works (realview-pb-a8)
authorJohn Hodge <[email protected]>
Fri, 23 Sep 2011 03:26:49 +0000 (11:26 +0800)
committerJohn Hodge <[email protected]>
Fri, 23 Sep 2011 03:26:49 +0000 (11:26 +0800)
Kernel/arch/arm7/debug.c
Kernel/arch/arm7/include/lock.h
Kernel/arch/arm7/proc.c
Kernel/arch/arm7/start.s

index ba64ba0..02a17be 100644 (file)
@@ -3,10 +3,8 @@
 #include <acess.h>
 
 // === CONSTANTS ===
-#define SERIAL_BASE    0x16000000
-#define SERIAL_REG_DATA        0x0
-#define SERIAL_REG_FLAG        0x18
-#define SERIAL_FLAG_FULL       0x20
+//#define UART0_BASE   0x10009000
+#define UART0_BASE     0xF0000000
 
 // === PROTOTYPES ===
 void   KernelPanic_SetMode(void);
@@ -19,10 +17,11 @@ void        StartupPrint(const char *str);
 // === CODE ===
 void Debug_PutCharDebug(char ch)
 {
-       while( *(volatile Uint32*)(SERIAL_BASE + SERIAL_REG_FLAG) & SERIAL_FLAG_FULL )
+//     while( *(volatile Uint32*)(SERIAL_BASE + SERIAL_REG_FLAG) & SERIAL_FLAG_FULL )
                ;
        
-       *(volatile Uint32*)(SERIAL_BASE + SERIAL_REG_DATA) = ch;
+//     *(volatile Uint32*)(SERIAL_BASE + SERIAL_REG_DATA) = ch;
+       *(volatile Uint32*)(UART0_BASE) = ch;
 }
 
 void Debug_PutStringDebug(const char *str)
index 5a67086..627726b 100644 (file)
@@ -26,6 +26,7 @@ static inline int CPU_HAS_LOCK(struct sShortSpinlock *Lock)
 
 static inline int SHORTLOCK(struct sShortSpinlock *Lock)
 {
+       #if 1
        // Coped from linux, yes, but I know what it does now :)
        Uint    tmp;
        __asm__ __volatile__ (
@@ -38,6 +39,15 @@ static inline int SHORTLOCK(struct sShortSpinlock *Lock)
                : "r" (&Lock->Lock), "r" (1)
                : "cc"  // Condition codes clobbered
                );
+       #else
+        int    v = 1;
+       while( v )
+               __asm__ __volatile__ (
+                       "swp %0, [%1]"
+                       : "=r" (v) : "r" (&Lock->Lock)
+                       : "cc"
+                       );
+       #endif
        return 1;
 }
 
index 07c823e..9b4dc18 100644 (file)
@@ -42,7 +42,7 @@ void Proc_StartUser(Uint Entrypoint, Uint *Bases, int ArgC, char **ArgV, char **
 {
 }
 
-tTID Proc_SpawnWorker(void)
+tTID Proc_SpawnWorker( void (*Fnc)(void*), void *Ptr )
 {
        return 0;
 }
index fb28d33..abfbb59 100644 (file)
@@ -3,7 +3,7 @@ KERNEL_BASE =   0x80000000
 .section .init
 interrupt_vector_table:
        b _start @ Reset
-       b .
+       b .     @ ?
        b SyscallHandler @ SWI instruction
        b . 
        b .
@@ -17,13 +17,16 @@ _start:
        mcr p15, 0, r0, c2, c0, 1       @ Set TTBR1 to r0
        mcr p15, 0, r0, c2, c0, 0       @ Set TTBR0 to r0 too (for identity)
 
-@      mov r0, #1
-@      mcr p15, 0, r0, c2, c0, 2       @ Set TTCR to 1 (50/50 split)
+       mov r0, #1
+       mcr p15, 0, r0, c2, c0, 2       @ Set TTCR to 1 (50/50 split)
+       
+       mov r0, #3
+       mcr p15, 0, r0, c3, c0, 0       @ Set Domain 0 to Manager
 
-@      mrc p15, 0, r0, c1, c0, 0
+       mrc p15, 0, r0, c1, c0, 0
        orr r0, r0, #1
-@      orr r0, r0, #1 << 23
-@      mcr p15, 0, r0, c1, c0, 0
+       orr r0, r0, #1 << 23
+       mcr p15, 0, r0, c1, c0, 0
 
        ldr sp, =stack+0x10000  @ Set up stack
        ldr r0, =kmain
@@ -41,10 +44,10 @@ SyscallHandler:
 
 kernel_table0:
        .long 0x00000002        @ Identity map the first 4 MiB
-       .rept 0x801
+       .rept 0x800 - 1
                .long 0
        .endr
-       .long 0x00000002        @ Identity map the first 4 MiB
+       .long 0x00000002        @ Map first 4 MiB to 2GiB
        .long 0x00100002        @ 
        .long 0x00200002        @ 
        .long 0x00300002        @ 
@@ -79,9 +82,10 @@ kernel_table1_map:
        .long kernel_table1_map - KERNEL_BASE + (1 << 4) + 3
        .long 0
 
+@ Hardware mappings 
 .globl hwmap_table_0
 hwmap_table_0:
-       .long 0x16000000 + (1 << 4) + 3 @ Serial Port
+       .long 0x10009000 + (1 << 4) + 3 @ UART0
        .rept 1024 - 1
                .long 0
        .endr

UCC git Repository :: git.ucc.asn.au