Static.BootConfig.Mod 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  1. MODULE BootConfig; (** AUTHOR "Timothée Martiel"; PURPOSE "System boot configuration, defined with constants"; *)
  2. IMPORT ARMRuntime;
  3. CONST
  4. (* ===== Units ===== *)
  5. k = 1024;
  6. M = k * k;
  7. G = k * k * k;
  8. (* ===== Clock Frequencies ===== *)
  9. PsRefClockHz = 333333333; (** Processing System (PS) external reference clock frequency in Hz *)
  10. CpuClockHz = 666666666; (** CPU clock frequency in Hz *)
  11. (* ===== Uart Parameters ===== *)
  12. UartInputClockHz = 50000000;
  13. TracePort = 2; (* index of UART controller +1 used for kernel output; -1 if UART is not used for kernel output *)
  14. TraceBPS = 115200; (* trace UART baudrate *)
  15. (* ===== USB Parameters ===== *)
  16. UsbPhyRstGpio = [-1, -1]; (** USB PHY reset GPIOs *)
  17. UsbEnable = [TRUE, FALSE]; (** Which USB controller to enable ? *)
  18. UsbViewportInit = TRUE; (** Use USB Viewport mechanism to reset PHY? *)
  19. (* ===== SD Parameters ===== *)
  20. SdClocks = [PsRefClockHz, PsRefClockHz];
  21. SdEnable = [TRUE, FALSE];
  22. (* ===== System Configuration ===== *)
  23. (* CPUs *)
  24. CpuNb = 2;
  25. (* Memory *)
  26. DDRSize = 512 * M;
  27. (* Maximal space reserved for boot config string *)
  28. ConfigSize = 0;
  29. (* Maximal heap size, including kernel image. All the rest of the memory will be used by stacks. *)
  30. HeapSize = 448 * M;
  31. KernelLoadAdr = M;
  32. (* Size of a single process stack. Min: 8kB. 4kB of the stack are used as guard and will not be available for data. *)
  33. StackSize = 256 * k;
  34. (* Globally activate caching *)
  35. EnableCaching = TRUE;
  36. (** Actiate Watchdog and reset it at each Timeslice *)
  37. EnableKernelWatchdog = TRUE;
  38. (* DYNAMIC CONFIGURATION *)
  39. (* ===== Heap Config ===== *)
  40. EnableFreeLists = FALSE;
  41. EnableReturnBlocks = FALSE;
  42. (* ===== Trace information ===== *)
  43. TraceHeaps = FALSE;
  44. TraceModules = FALSE;
  45. TraceInterrupts = FALSE;
  46. (* ===== BootConsole ===== *)
  47. BootVol1 = "";
  48. AosFS = "";
  49. Boot = "";
  50. Boot1 = "";
  51. Boot2 = "";
  52. Boot3 = "";
  53. Boot4 = "";
  54. Boot5 = "";
  55. Boot6 = "";
  56. Boot7 = "";
  57. Boot8 = "";
  58. Boot9 = "";
  59. PROCEDURE GetValue * (CONST key: ARRAY OF CHAR; VAR value: ARRAY OF CHAR);
  60. BEGIN
  61. IF key = "ClockMode" THEN value := "1"
  62. ELSIF key = "ConfigSize" THEN WriteIntValue(ConfigSize, value)
  63. ELSIF key = "CpuClockHz" THEN WriteIntValue(CpuClockHz, value)
  64. ELSIF key = "CpuNb" THEN WriteIntValue(CpuNb, value)
  65. ELSIF key = "DDRSize" THEN WriteIntValue(DDRSize, value)
  66. ELSIF key = "EnableCaching" THEN WriteBoolValue(EnableCaching, value)
  67. ELSIF key = "EnableFreeLists" THEN WriteBoolValue(EnableFreeLists, value)
  68. ELSIF key = "EnableKernelWatchdog" THEN WriteBoolValue(EnableKernelWatchdog, value)
  69. ELSIF key = "EnableReturnBlocks" THEN WriteBoolValue(EnableReturnBlocks, value)
  70. ELSIF key = "HardwareDetection" THEN value := "0"
  71. ELSIF key = "HeapSize" THEN WriteIntValue(HeapSize, value)
  72. ELSIF key = "KernelLoadAdr" THEN WriteIntValue(KernelLoadAdr, value)
  73. ELSIF key = "TracePort" THEN WriteIntValue(TracePort, value)
  74. ELSIF key = "TraceBPS" THEN WriteIntValue(TraceBPS, value)
  75. ELSIF key = "PsRefClockHz" THEN WriteIntValue(PsRefClockHz, value)
  76. ELSIF key = "SdClock0" THEN WriteIntValue(SdClocks[0], value)
  77. ELSIF key = "SdClock1" THEN WriteIntValue(SdClocks[1], value)
  78. ELSIF key = "SdEnable0" THEN WriteBoolValue(SdEnable[0], value)
  79. ELSIF key = "SdEnable1" THEN WriteBoolValue(SdEnable[1], value)
  80. ELSIF key = "StackSize" THEN WriteIntValue(StackSize, value)
  81. ELSIF key = "TraceHeaps" THEN WriteBoolValue(TraceHeaps, value)
  82. ELSIF key = "TraceInterrupts" THEN WriteBoolValue(TraceInterrupts, value)
  83. ELSIF key = "TraceModules" THEN WriteBoolValue(TraceModules, value)
  84. ELSIF key = "UartInputClockHz" THEN WriteIntValue(UartInputClockHz, value)
  85. ELSIF key = "UsbEnable0" THEN WriteBoolValue(UsbEnable[0], value)
  86. ELSIF key = "UsbEnable1" THEN WriteBoolValue(UsbEnable[1], value)
  87. ELSIF key = "UsbPhyRstGpio0" THEN WriteIntValue(UsbPhyRstGpio[0], value)
  88. ELSIF key = "UsbPhyRstGpio1" THEN WriteIntValue(UsbPhyRstGpio[1], value)
  89. ELSIF key = "UsbViewportInit" THEN WriteBoolValue(UsbViewportInit, value)
  90. ELSIF key = "BootVol1" THEN COPY(BootVol1, value)
  91. ELSIF key = "AosFS" THEN COPY(AosFS, value)
  92. ELSIF key = "Boot" THEN COPY(Boot, value)
  93. ELSIF key = "Boot1" THEN COPY(Boot1, value)
  94. ELSIF key = "Boot2" THEN COPY(Boot2, value)
  95. ELSIF key = "Boot3" THEN COPY(Boot3, value)
  96. ELSIF key = "Boot4" THEN COPY(Boot4, value)
  97. ELSIF key = "Boot5" THEN COPY(Boot5, value)
  98. ELSIF key = "Boot6" THEN COPY(Boot6, value)
  99. ELSIF key = "Boot7" THEN COPY(Boot7, value)
  100. ELSIF key = "Boot8" THEN COPY(Boot8, value)
  101. ELSIF key = "Boot9" THEN COPY(Boot9, value)
  102. ELSE value := ""
  103. END;
  104. END GetValue;
  105. PROCEDURE GetIntValue * (CONST key: ARRAY OF CHAR): LONGINT;
  106. VAR
  107. value: LONGINT;
  108. BEGIN
  109. IF key = "CpuClockHz" THEN value := CpuClockHz
  110. ELSIF key = "CpuNb" THEN value := CpuNb
  111. ELSIF key = "DDRSize" THEN value := DDRSize
  112. ELSIF key = "HeapSize" THEN value := HeapSize
  113. ELSIF key = "KernelLoadAdr" THEN value := KernelLoadAdr
  114. ELSIF key = "TracePort" THEN value := TracePort
  115. ELSIF key = "TraceBPS" THEN value := TraceBPS
  116. ELSIF key = "PsRefClockHz" THEN value := PsRefClockHz
  117. ELSIF key = "StackSize" THEN value := StackSize
  118. ELSIF key = "UartInputClockHz" THEN value := UartInputClockHz
  119. ELSIF key = "UsbPhyRstGpio0" THEN value := UsbPhyRstGpio[0]
  120. ELSIF key = "UsbPhyRstGpio1" THEN value := UsbPhyRstGpio[1]
  121. ELSE value := 0
  122. END;
  123. RETURN value
  124. END GetIntValue;
  125. PROCEDURE GetBoolValue * (CONST key: ARRAY OF CHAR): BOOLEAN;
  126. VAR
  127. res: BOOLEAN;
  128. BEGIN
  129. IF key = "EnableCaching" THEN res := EnableCaching
  130. ELSIF key = "EnableFreeLists" THEN res := EnableFreeLists
  131. ELSIF key = "EnableReturnBlocks" THEN res := EnableReturnBlocks
  132. ELSIF key = "TraceHeaps" THEN res := TraceHeaps
  133. ELSIF key = "TraceInterrupts" THEN res := TraceInterrupts
  134. ELSIF key = "TraceModules" THEN res := TraceModules
  135. ELSIF key = "UsbEnable0" THEN res := UsbEnable[0]
  136. ELSIF key = "UsbEnable1" THEN res := UsbEnable[1]
  137. ELSIF key = "UsbViewPortInit" THEN res := UsbViewportInit
  138. ELSE
  139. res := FALSE
  140. END;
  141. RETURN res
  142. END GetBoolValue;
  143. PROCEDURE Init *;
  144. END Init;
  145. PROCEDURE WriteIntValue (i: LONGINT; VAR s: ARRAY OF CHAR);
  146. VAR j,k: LONGINT; digits: ARRAY 10 OF LONGINT;
  147. BEGIN
  148. IF (i = MIN(LONGINT)) THEN COPY("-2147483648", s)
  149. ELSE
  150. IF (i < 0) THEN i := -i; s[0] := "-"; j := 1
  151. ELSE j := 0
  152. END;
  153. k := 0; digits[k] := 0;
  154. WHILE (i > 0) DO
  155. digits[k] := i MOD 10; i := i DIV 10;
  156. INC(k)
  157. END;
  158. IF (k > 0) THEN DEC(k) END; (* no leading "0" *)
  159. WHILE (k >= 0) DO
  160. s[j] := CHR(digits[k] + ORD("0"));
  161. INC(j); DEC(k)
  162. END;
  163. s[j] := 0X
  164. END
  165. END WriteIntValue;
  166. PROCEDURE WriteBoolValue (b: BOOLEAN; VAR value: ARRAY OF CHAR);
  167. BEGIN
  168. IF b THEN
  169. value := "1"
  170. ELSE
  171. value := "0"
  172. END
  173. END WriteBoolValue;
  174. END BootConfig.