initreboot.s 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. /*
  2. * mips 24k machine assist for routerboard rb450g (minimal for reboot)
  3. */
  4. #include "mem.h"
  5. #include "mips.s"
  6. NOSCHED
  7. TEXT _main(SB), $0
  8. MOVW $setR30(SB), R30
  9. JMP main(SB)
  10. /* target for JALRHB in BARRIERS */
  11. TEXT ret(SB), $-4
  12. JMP (R22)
  13. NOP
  14. TEXT setsp(SB), $-4
  15. MOVW R1, SP
  16. RETURN
  17. TEXT coherence(SB), $-4
  18. BARRIERS(7, R7, cohhb)
  19. SYNC
  20. EHB
  21. RETURN
  22. /*
  23. * cache manipulation
  24. */
  25. /* the i and d caches may be different sizes, so clean them separately */
  26. TEXT cleancache(SB), $-4
  27. DI(10) /* intrs off, old status -> R10 */
  28. SYNC
  29. EHB
  30. MOVW R0, R1 /* index, not address */
  31. MOVW $ICACHESIZE, R9
  32. iccache:
  33. CACHE PI+IWBI, (R1) /* flush & invalidate I by index */
  34. SUBU $CACHELINESZ, R9
  35. ADDU $CACHELINESZ, R1
  36. BGTZ R9, iccache
  37. NOP
  38. MOVW R0, R1 /* index, not address */
  39. MOVW $DCACHESIZE, R9
  40. dccache:
  41. CACHE PD+IWBI, (R1) /* flush & invalidate D by index */
  42. SUBU $CACHELINESZ, R9
  43. ADDU $CACHELINESZ, R1
  44. BGTZ R9, dccache
  45. NOP
  46. SYNC
  47. MOVW R10, M(STATUS)
  48. JRHB(31) /* return and clear all hazards */
  49. SCHED