Print this page
bcm2835: move strict alignment check disable code into the loader
Since the loader wants to muck with alignment related bits of the SCTLR
anyway, it should set both A and U to the desired values (0 and 1
respectively).

Split Close
Expand all
Collapse all
          --- old/usr/src/uts/armv6/bcm2835/ml/locore.s
          +++ new/usr/src/uts/armv6/bcm2835/ml/locore.s
↓ open down ↓ 89 lines elided ↑ open up ↑
  90   90          mov sp, #-1
  91   91          cps #(CPU_MODE_SVC)
  92   92  
  93   93          /* Enable highvecs (moves the base of the exception vector) */
  94   94          mrc     p15, 0, r3, c1, c0, 0
  95   95          mov     r4, #1
  96   96          lsl     r4, r4, #13
  97   97          orr     r3, r3, r4
  98   98          mcr     p15, 0, r3, c1, c0, 0
  99   99  
 100      -        /* Disable A (disables strict alignment checks) */
 101      -        mrc     p15, 0, r3, c1, c0, 0
 102      -        bic     r3, r3, #2
 103      -        mcr     p15, 0, r3, c1, c0, 0
 104      -
 105  100          /* Enable access to p10 and p11 (privileged mode only) */
 106  101          mrc     p15, 0, r0, c1, c0, 2
 107  102          orr     r0, #0x00500000
 108  103          mcr     p15, 0, r0, c1, c0, 2
 109  104  
 110  105          bl _fakebop_start
 111  106          SET_SIZE(_start)
 112  107  
 113  108          ENTRY(arm_reg_read)
 114  109          ldr r0, [r0]
 115  110          bx lr
 116  111          SET_SIZE(arm_reg_read)
 117  112  
 118  113          ENTRY(arm_reg_write)
 119  114          str r1, [r0]
 120  115          bx lr
 121  116          SET_SIZE(arm_reg_write)
    
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX