arm.s 678 B

123456789101112131415161718192021222324252627282930313233343536
  1. /*
  2. * armv6 machine assist, definitions
  3. *
  4. * loader uses R11 as scratch.
  5. */
  6. #include "mem.h"
  7. #include "arm.h"
  8. #define PADDR(va) (PHYSDRAM | ((va) & ~KSEGM))
  9. #define L1X(va) (((((va))>>20) & 0x0fff)<<2)
  10. #define PTEDRAM (Dom0|L1AP(Krw)|Section|Cached|Buffered)
  11. /*
  12. * new instructions
  13. */
  14. #define ISB \
  15. MOVW $0, R0; \
  16. MCR CpSC, 0, R0, C(CpCACHE), C(CpCACHEinvi), CpCACHEwait
  17. #define DSB \
  18. MOVW $0, R0; \
  19. MCR CpSC, 0, R0, C(CpCACHE), C(CpCACHEwb), CpCACHEwait
  20. #define BARRIERS ISB; DSB
  21. #define MCRR(coproc, op, rd, rn, crm) \
  22. WORD $(0xec400000|(rn)<<16|(rd)<<12|(coproc)<<8|(op)<<4|(crm))
  23. #define OKAY \
  24. MOVW $0x7E200028,R2; \
  25. MOVW $0x10000,R3; \
  26. MOVW R3,(R2)