Print this page
armv6: simplify highvecs enabling code
Use the barrel shifter, Luke.


  69         add     sp, r4
  70         bic     sp, sp, #0xff
  71 
  72         /*
  73          * establish bogus stacks for exceptional CPU states, our exception
  74          * code should never make use of these, and we want loud and violent
  75          * failure should we accidentally try.
  76          */
  77         cps     #(CPU_MODE_UND)
  78         mov     sp, #-1
  79         cps     #(CPU_MODE_ABT)
  80         mov     sp, #-1
  81         cps     #(CPU_MODE_FIQ)
  82         mov     sp, #-1
  83         cps     #(CPU_MODE_IRQ)
  84         mov     sp, #-1
  85         cps     #(CPU_MODE_SVC)
  86 
  87         /* Enable highvecs (moves the base of the exception vector) */
  88         mrc     p15, 0, r3, c1, c0, 0
  89         mov     r4, #1
  90         lsl     r4, r4, #13
  91         orr     r3, r3, r4
  92         mcr     p15, 0, r3, c1, c0, 0
  93 
  94         /* invoke machine specific setup */
  95         bl      _mach_start
  96 
  97         bl      _fakebop_start
  98         SET_SIZE(_start)
  99 
 100 
 101 #if defined(__lint)
 102 
 103 /* ARGSUSED */
 104 void
 105 _locore_start(struct boot_syscalls *sysp, struct bootops *bop)
 106 {}
 107 
 108 #else   /* __lint */
 109 
 110         /*
 111          * We got here from _kobj_init() via exitto().  We have a few different




  69         add     sp, r4
  70         bic     sp, sp, #0xff
  71 
  72         /*
  73          * establish bogus stacks for exceptional CPU states, our exception
  74          * code should never make use of these, and we want loud and violent
  75          * failure should we accidentally try.
  76          */
  77         cps     #(CPU_MODE_UND)
  78         mov     sp, #-1
  79         cps     #(CPU_MODE_ABT)
  80         mov     sp, #-1
  81         cps     #(CPU_MODE_FIQ)
  82         mov     sp, #-1
  83         cps     #(CPU_MODE_IRQ)
  84         mov     sp, #-1
  85         cps     #(CPU_MODE_SVC)
  86 
  87         /* Enable highvecs (moves the base of the exception vector) */
  88         mrc     p15, 0, r3, c1, c0, 0
  89         orr     r3, r3, #(1 << 13)


  90         mcr     p15, 0, r3, c1, c0, 0
  91 
  92         /* invoke machine specific setup */
  93         bl      _mach_start
  94 
  95         bl      _fakebop_start
  96         SET_SIZE(_start)
  97 
  98 
  99 #if defined(__lint)
 100 
 101 /* ARGSUSED */
 102 void
 103 _locore_start(struct boot_syscalls *sysp, struct bootops *bop)
 104 {}
 105 
 106 #else   /* __lint */
 107 
 108         /*
 109          * We got here from _kobj_init() via exitto().  We have a few different