root/loader/m10/main.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. my_restart

   1 #include "../generic/check_compat.c"
   2 
   3 extern long *blob_chdk_core;
   4 extern long blob_chdk_core_size;
   5 
   6 void __attribute__((noreturn)) my_restart()
   7 {
   8      check_compat();
   9 
  10     // light up green LED
  11     *(int*)0xd20b0994 = 0x4d0002;
  12     // LED done
  13     long *dst = (long*)MEMISOSTART;
  14     const long *src = blob_chdk_core;
  15     long length = (blob_chdk_core_size + 3) >> 2;
  16 
  17     core_copy(src, dst, length);
  18 
  19     asm volatile (
  20     "mov     r1, %1\n"
  21     "mov     r0, %0\n"
  22     "ldr     r2, =0xfc1267cb\n" // address is OK for 110d, 110f
  23     "blx     r2\n"              // caching related routine called at fw startup
  24     "mov     r0, %0\n"
  25     "add     r0, r0, #1\n"
  26     "bx      r0\n"
  27     : : "r"(MEMISOSTART), "r"(((blob_chdk_core_size+3)>>2)<<2) : "memory","r0","r1","r2","r3","r4"
  28     );
  29     while(1);
  30 }
  31 

/* [<][>][^][v][top][bottom][index][help] */