MemoryMapping.Mos 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. MODULE MemoryMapping; (** AUTHOR ""; PURPOSE ""; *)
  2. IMPORT SYSTEM, Platform, Board, Trace, Memory;
  3. CONST
  4. k = 1024;
  5. M = k * k;
  6. G = M * k;
  7. PROCEDURE SetSmpMode;
  8. CODE
  9. (*
  10. mrc p15, 0, r0, c1, c0, 1 /* Read ACTLR*/
  11. orr r0, r0, #(0x01 << 6) /* set SMP bit */
  12. orr r0, r0, #(0x01 ) /* */
  13. mcr p15, 0, r0, c1, c0, 1 /* Write ACTLR*/
  14. *)
  15. MRC p15, 0, R0, C1, C0, 1
  16. ORR R0, R0, #047H
  17. MCR p15, 0, R0, C1, C0, 1
  18. ISB
  19. END SetSmpMode;
  20. PROCEDURE SetupPageTable ;
  21. VAR
  22. i: LONGINT;
  23. BEGIN
  24. (* Reset all entries to 0 *)
  25. FOR i := 0 TO Memory.PageTableLength DO
  26. SYSTEM.PUT32( Memory.virtualPageTable+(i*4), 0 );
  27. END;
  28. (* 1:1 Mapping of first 120 MB. *)
  29. Memory.AllocateMmu(0, 0, Board.HeapEnd, Memory.SrwUrw, Memory.Cacheable + Memory.Shareable);
  30. (*Memory.AllocateMmu(0, 0, M, Memory.SrwUrw, Memory.Cacheable + Memory.Shareable);
  31. Memory.AllocateMmu(M, M, 8 * M, Memory.SrwUrw, Memory.B);
  32. Memory.AllocateMmu(9 * M, 9 * M, Board.HeapEnd - 9 * M, Memory.SrwUrw, Memory.Cacheable + Memory.Shareable);*)
  33. (* 1:1, Non cached mapping for I/O *)
  34. Memory.AllocateMmu(Board.UncachedHeapBase, Board.UncachedHeapBase, ADDRESS( 4 * G - Board.UncachedHeapBase), Memory.SrwUrw, Memory.Shareable + Memory.B);
  35. SetSmpMode;
  36. END SetupPageTable;
  37. BEGIN
  38. (*Trace.StringLn("MMU - > Pre Memory Init");*)
  39. SetupPageTable;
  40. Memory.InitMemory;
  41. (*Trace.StringLn("MMU -> Virtual Memory Initialized");*)
  42. END MemoryMapping.