use tabs, or at least tabwidth of 4, but preferably tabs
authorKristina <tinab@hush.ai>
Tue, 6 Sep 2016 07:02:06 +0000 (08:02 +0100)
committerKristina <tinab@hush.ai>
Tue, 6 Sep 2016 07:02:06 +0000 (08:02 +0100)
README.md
arm_chainloader/main.c
arm_monitor.c
start.s
trap.c

index 42cd22c..bb5b732 100755 (executable)
--- a/README.md
+++ b/README.md
@@ -9,7 +9,7 @@ All Broadcom headers are licensed under 3-Clause BSD License while the rest of t
 \r
 ## Building\r
 \r
 \r
 ## Building\r
 \r
-You need Julian Brown's VC4 toolchain to build this (https://github.com/puppeh/vc4-toolchain) as well as a arm-none-eabi-toolchain. You can tweak the paths to it in CROSS_COMPILE in `Makefile` (for VC4) and for ARM in `arm_chainloader/Makefile`, although by default it assumes they are currently in your path. Contributors should not commit their personal paths. After you've done it, run `buildall.sh` and you should have a blob in `build/bootcode.bin`. \r
+You need Julian Brown's VC4 toolchain to build this (https://github.com/puppeh/vc4-toolchain) as well as a arm-none-eabi-toolchain. You can tweak the paths to it in CROSS_COMPILE in `Makefile` (for VC4) and for ARM in `arm_chainloader/Makefile`, although by default it assumes they are currently in your path. Contributors should not commit their personal paths. Contributors should also use tabs for indentation. After you've done it, run `buildall.sh` and you should have a blob in `build/bootcode.bin`. \r
 \r
 ## Technical Details\r
 The firmware is split into two parts, a VC4 part and and ARM part. The VC4 part initializes PLLC and moves VPU over to it, and then brings up UART. It then performs SDRAM initialization, making SDRAM available at `0xC0000000` (uncached alias). The ARM loader will do ARM initialization and then copy the ARM bootloader that's embedded in it to the alias. It will then map it to `0x0` in ARM's memory space and start ARM. The code under `arm_chainloader` is what will run on the ARM. \r
 \r
 ## Technical Details\r
 The firmware is split into two parts, a VC4 part and and ARM part. The VC4 part initializes PLLC and moves VPU over to it, and then brings up UART. It then performs SDRAM initialization, making SDRAM available at `0xC0000000` (uncached alias). The ARM loader will do ARM initialization and then copy the ARM bootloader that's embedded in it to the alias. It will then map it to `0x0` in ARM's memory space and start ARM. The code under `arm_chainloader` is what will run on the ARM. \r
@@ -34,4 +34,5 @@ Eventually maybe. Since `start.elf` is responsible for clock and power managemen
  * **David Given** for his initial LLVM project which I used as the base for my LLVM toolchain before moving to GCC.\r
  * **phire** for reviewing my code.\r
  * **Broadcom** for their header release.\r
  * **David Given** for his initial LLVM project which I used as the base for my LLVM toolchain before moving to GCC.\r
  * **phire** for reviewing my code.\r
  * **Broadcom** for their header release.\r
+ * **alyssa** for her contributions to the firmware especially in areas of Linux bringup and early ARM side initialization, as well as fixing mailbox support.\r
  * Various other people not mentioned here.\r
  * Various other people not mentioned here.\r
index b29371b..644537b 100644 (file)
@@ -33,11 +33,13 @@ static void heap_init() {
 void main() {
        logf("Started on ARM, continuing boot from here ...\n", __FUNCTION__);
 
 void main() {
        logf("Started on ARM, continuing boot from here ...\n", __FUNCTION__);
 
-        heap_init();
+       heap_init();
 
 
-        /* poke the VPU */
-        printf("\nPoking the VPU....\n");
-        mmio_write32(0x7E00B8A0, 0xA1755A01);
+#if 0
+       /* poke the VPU */
+       logf("\nPoking the VPU....\n");
+       mmio_write32(0x7E00B8A0, 0xA1755A01);
+#endif
 
        /* c++ runtime */
        cxx_init();
 
        /* c++ runtime */
        cxx_init();
index ab5149e..f9f67b7 100644 (file)
@@ -27,18 +27,19 @@ void monitor_irq() {
 void monitor_start() {\r
        printf("Starting IPC monitor ...\n");\r
 \r
 void monitor_start() {\r
        printf("Starting IPC monitor ...\n");\r
 \r
-        /* dump status */\r
-        printf("Status --- %X\n", mmio_read32(0x7E00B9B8));\r
+       /* dump status */\r
+       printf("Status --- %X\n", mmio_read32(0x7E00B9B8));\r
 \r
 \r
-        /* enable IRQ */\r
-        mmio_write32(0x7E00B9BC, 0x1);\r
+       /* enable IRQ */\r
+       mmio_write32(0x7E00B9BC, 0x1);\r
 \r
 \r
-        for(;;) {\r
-            if(mmio_read32(0x7E00B9B8) != 0x40000000) {\r
-                printf("Squeal!\n");\r
-            }\r
-        }\r
+       for(;;) {\r
+               if(mmio_read32(0x7E00B9B8) != 0x40000000) {\r
+                       printf("Squeal!\n");\r
+               }\r
+       }\r
 \r
        __asm__ __volatile__ ("sleep" :::);\r
 \r
        __asm__ __volatile__ ("sleep" :::);\r
-        for(;;);\r
+       \r
+       for(;;);\r
 }\r
 }\r
diff --git a/start.s b/start.s
index 464a364..09ce804 100644 (file)
--- a/start.s
+++ b/start.s
@@ -25,7 +25,6 @@ Exception names are from the public release from:
 
 =============================================================================*/
 
 
 =============================================================================*/
 
-
 .text
 
 empty_space:
 .text
 
 empty_space:
@@ -38,7 +37,7 @@ empty_space:
 .globl _start
 .align 2
 _start:
 .globl _start
 .align 2
 _start:
-        version r0
+               version r0
        mov r5, r0
 
        /* vectors */
        mov r5, r0
 
        /* vectors */
@@ -55,7 +54,6 @@ _start:
        add r1, #4
 .endm
 
        add r1, #4
 .endm
 
-
        RegExceptionHandler zero, #0
        RegExceptionHandler misaligned, #1
        RegExceptionHandler dividebyzero, #2
        RegExceptionHandler zero, #0
        RegExceptionHandler misaligned, #1
        RegExceptionHandler dividebyzero, #2
@@ -90,14 +88,14 @@ _start:
        RegExceptionHandler unknown, #31
 
        //add r1, r3, #252
        RegExceptionHandler unknown, #31
 
        //add r1, r3, #252
-        add r1, r3, #128
+       add r1, r3, #128
        lea r2, fleh_irq
        //mov r4, #492
        lea r2, fleh_irq
        //mov r4, #492
-        add r4, r3, #492
+       add r4, r3, #492
 
 L_setup_hw_irq:
        st r2, (r1)
 
 L_setup_hw_irq:
        st r2, (r1)
-        add r1, #4
+       add r1, #4
        ble r1, r4, L_setup_hw_irq
 
        /*
        ble r1, r4, L_setup_hw_irq
 
        /*
@@ -108,18 +106,18 @@ L_setup_hw_irq:
        mov r28, #0x1D000 
        mov sp, #0x1C000
 
        mov r28, #0x1D000 
        mov sp, #0x1C000
 
-        /* unmask ARM interrupts */
-        mov r0, #(IC0_BASE + 0x10)
-        mov r1, #(IC1_BASE + 0x10)
-        mov r2, 0x11111111
-        mov r3, #(IC0_BASE + 0x10 + 0x20)
-
-    unmask_all:
-        st r2, (r0)
-        st r2, (r1)
-        add r0, 4
-        add r1, 4
-        ble r0, r3, unmask_all
+       /* unmask ARM interrupts */
+       mov r0, #(IC0_BASE + 0x10)
+       mov r1, #(IC1_BASE + 0x10)
+       mov r2, 0x11111111
+       mov r3, #(IC0_BASE + 0x10 + 0x20)
+
+unmask_all:
+       st r2, (r0)
+       st r2, (r1)
+       add r0, 4
+       add r1, 4
+       ble r0, r3, unmask_all
  
        /* set interrupt vector bases */
        mov r3, #0x1B000
  
        /* set interrupt vector bases */
        mov r3, #0x1B000
@@ -128,8 +126,7 @@ L_setup_hw_irq:
        mov r0, #IC1_VADDR
        st r3, (r0)
 
        mov r0, #IC1_VADDR
        st r3, (r0)
 
-
-        /* enable interrupts */
+       /* enable interrupts */
        ei
 
        /* jump to C code */
        ei
 
        /* jump to C code */
@@ -171,7 +168,7 @@ delayloop2:
  ************************************************************/
 
 .macro SaveRegsLower 
  ************************************************************/
 
 .macro SaveRegsLower 
-        stm lr, (--sp)
+               stm lr, (--sp)
        stm r0-r5, (--sp)
 .endm
 
        stm r0-r5, (--sp)
 .endm
 
diff --git a/trap.c b/trap.c
index 5d233df..b71c657 100644 (file)
--- a/trap.c
+++ b/trap.c
@@ -79,12 +79,12 @@ void sleh_fatal(vc4_saved_state_t* pcb, uint32_t n) {
        );\r
 \r
        printf("We are hanging here ...\n");\r
        );\r
 \r
        printf("We are hanging here ...\n");\r
-        while(1) printf("Ahh!\n");\r
+    while(1) printf("Ahh!\n");\r
        \r
        hang_cpu();\r
 }\r
 \r
 void sleh_irq(vc4_saved_state_t* pcb) {\r
        \r
        hang_cpu();\r
 }\r
 \r
 void sleh_irq(vc4_saved_state_t* pcb) {\r
-        while(1) printf("Interrupt!\n");\r
+    while(1) printf("Interrupt!\n");\r
        panic("interrupt at 0x%X!", pcb->pc);\r
 }\r
        panic("interrupt at 0x%X!", pcb->pc);\r
 }\r
This page took 0.035476 seconds and 4 git commands to generate.