Guest User

Untitled

a guest
Nov 19th, 2017
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.33 KB | None | 0 0
  1. diff --git a/headers/private/kernel/arch/generic/debug_uart_8250.h b/headers/private/kernel/arch/generic/debug_uart_8250.h
  2. index e7f211f2a5..57b9557e55 100644
  3. --- a/headers/private/kernel/arch/generic/debug_uart_8250.h
  4. +++ b/headers/private/kernel/arch/generic/debug_uart_8250.h
  5. @@ -33,7 +33,8 @@ public:
  6. };
  7.  
  8.  
  9. -extern DebugUART8250 *arch_get_uart_8250(addr_t base, int64 clock);
  10. +extern DebugUART8250 *arch_get_uart_8250(addr_t base, int64 clock,
  11. + uint32 flags);
  12.  
  13.  
  14. #endif /* _KERNEL_ARCH_DEBUG_UART_8250_H */
  15. diff --git a/src/system/kernel/arch/arm/arch_uart_8250.cpp b/src/system/kernel/arch/arm/arch_uart_8250.cpp
  16. index ef3d06d0e7..ca0ddb85f5 100644
  17. --- a/src/system/kernel/arch/arm/arch_uart_8250.cpp
  18. +++ b/src/system/kernel/arch/arm/arch_uart_8250.cpp
  19. @@ -9,25 +9,31 @@
  20.  
  21. #include <arch/arm/reg.h>
  22. #include <arch/generic/debug_uart_8250.h>
  23. +#include <arch/arm/arch_uart_8250.h>
  24. #include <debug.h>
  25. #include <new>
  26.  
  27.  
  28. class ArchUART8250 : public DebugUART8250 {
  29. public:
  30. - ArchUART8250(addr_t base, int64 clock);
  31. + ArchUART8250(addr_t base, int64 clock,
  32. + uint32 flags);
  33. ~ArchUART8250();
  34. void InitEarly();
  35.  
  36. // ARM MMIO: on ARM the UART regs are aligned on 32bit
  37. virtual void Out8(int reg, uint8 value);
  38. virtual uint8 In8(int reg);
  39. +
  40. +private:
  41. + uint32 fFlags;
  42. };
  43.  
  44.  
  45. -ArchUART8250::ArchUART8250(addr_t base, int64 clock)
  46. +ArchUART8250::ArchUART8250(addr_t base, int64 clock, uint32 flags)
  47. :
  48. - DebugUART8250(base, clock)
  49. + DebugUART8250(base, clock),
  50. + fFlags(flags)
  51. {
  52. }
  53.  
  54. @@ -41,22 +47,22 @@ void
  55. ArchUART8250::InitEarly()
  56. {
  57. // Perform special hardware UART configuration
  58. -#warning TODO: Detect OMAP3 from fdt!
  59. -#if BOARD_CPU_OMAP3
  60. - /* UART1 */
  61. - RMWREG32(CM_FCLKEN1_CORE, 13, 1, 1);
  62. - RMWREG32(CM_ICLKEN1_CORE, 13, 1, 1);
  63. -
  64. - /* UART2 */
  65. - RMWREG32(CM_FCLKEN1_CORE, 14, 1, 1);
  66. - RMWREG32(CM_ICLKEN1_CORE, 14, 1, 1);
  67. -
  68. - /* UART3 */
  69. - RMWREG32(CM_FCLKEN_PER, 11, 1, 1);
  70. - RMWREG32(CM_ICLKEN_PER, 11, 1, 1);
  71. -#else
  72. -#warning INTITIALIZE UART!!!!!
  73. -#endif
  74. +
  75. + #if 0
  76. + if ((fFlags & ARCH_8250_OMAP) != 0) {
  77. + /* UART1 */
  78. + RMWREG32(CM_FCLKEN1_CORE, 13, 1, 1);
  79. + RMWREG32(CM_ICLKEN1_CORE, 13, 1, 1);
  80. +
  81. + /* UART2 */
  82. + RMWREG32(CM_FCLKEN1_CORE, 14, 1, 1);
  83. + RMWREG32(CM_ICLKEN1_CORE, 14, 1, 1);
  84. +
  85. + /* UART3 */
  86. + RMWREG32(CM_FCLKEN_PER, 11, 1, 1);
  87. + RMWREG32(CM_ICLKEN_PER, 11, 1, 1);
  88. + }
  89. + #endif
  90. }
  91.  
  92.  
  93. @@ -74,9 +80,9 @@ ArchUART8250::In8(int reg)
  94. }
  95.  
  96.  
  97. -DebugUART8250 *arch_get_uart_8250(addr_t base, int64 clock)
  98. +DebugUART8250 *arch_get_uart_8250(addr_t base, int64 clock, uint32 flags)
  99. {
  100. static char buffer[sizeof(ArchUART8250)];
  101. - ArchUART8250 *uart = new(buffer) ArchUART8250(base, clock);
  102. + ArchUART8250 *uart = new(buffer) ArchUART8250(base, clock, flags);
  103. return uart;
  104. }
  105. diff --git a/src/system/kernel/arch/ppc/arch_uart_8250.cpp b/src/system/kernel/arch/ppc/arch_uart_8250.cpp
  106. index 15894de3b2..8f67acb8e1 100644
  107. --- a/src/system/kernel/arch/ppc/arch_uart_8250.cpp
  108. +++ b/src/system/kernel/arch/ppc/arch_uart_8250.cpp
  109. @@ -11,15 +11,21 @@
  110.  
  111. class ArchUART8250 : public DebugUART8250 {
  112. public:
  113. - ArchUART8250(addr_t base, int64 clock);
  114. + ArchUART8250(addr_t base, int64 clock,
  115. + uint32 flags);
  116. ~ArchUART8250();
  117.  
  118. virtual void Barrier();
  119. +
  120. +private:
  121. + uint32 fFlags;
  122. };
  123.  
  124.  
  125. -ArchUART8250::ArchUART8250(addr_t base, int64 clock)
  126. - : DebugUART8250(base, clock)
  127. +ArchUART8250::ArchUART8250(addr_t base, int64 clock, uint32 flags)
  128. + :
  129. + DebugUART8250(base, clock),
  130. + fFlags(flags)
  131. {
  132. }
  133.  
  134. @@ -36,10 +42,10 @@ ArchUART8250::Barrier()
  135. }
  136.  
  137.  
  138. -DebugUART8250 *arch_get_uart_8250(addr_t base, int64 clock)
  139. +DebugUART8250 *arch_get_uart_8250(addr_t base, int64 clock, uint32 flags)
  140. {
  141. static char buffer[sizeof(ArchUART8250)];
  142. - ArchUART8250 *uart = new(buffer) ArchUART8250(base, clock);
  143. + ArchUART8250 *uart = new(buffer) ArchUART8250(base, clock, flags);
  144. return uart;
  145. }
  146.  
  147. diff --git a/src/system/kernel/platform/u-boot/fdt_serial.cpp b/src/system/kernel/platform/u-boot/fdt_serial.cpp
  148. index 6842437633..b375293fc2 100644
  149. --- a/src/system/kernel/platform/u-boot/fdt_serial.cpp
  150. +++ b/src/system/kernel/platform/u-boot/fdt_serial.cpp
  151. @@ -18,6 +18,7 @@
  152. #include <arch/generic/debug_uart_8250.h>
  153.  
  154. #ifdef __ARM__
  155. +#include <arch/arm/arch_uart_8250.h>
  156. #include <arch/arm/arch_uart_pl011.h>
  157. #endif
  158.  
  159. @@ -99,9 +100,20 @@ debug_uart_from_fdt(const void *fdt)
  160.  
  161. if (fdt_node_check_compatible(fdt, node, "ns16550a") == 0
  162. || fdt_node_check_compatible(fdt, node, "ns16550") == 0) {
  163. - TRACE(("serial: Found 8250 serial UART!\n"));
  164. - uart = arch_get_uart_8250(regs, clock);
  165. + TRACE(("serial: Found generic 8250 serial UART!\n"));
  166. + uart = arch_get_uart_8250(regs, clock, 0);
  167. #ifdef __ARM__
  168. + } else if (fdt_node_check_compatible(fdt, node, "snps,dw-apb-uart") == 0) {
  169. + TRACE(("serial: Found DW 8250 serial UART!\n"));
  170. + // XXX: DW
  171. + if (clock == 0)
  172. + clock = 3686400;
  173. + uart = arch_get_uart_8250(regs, clock, ARCH_8250_DW);
  174. + } else if (fdt_node_check_compatible(fdt, node, "ti,omap2-uart") == 0
  175. + || fdt_node_check_compatible(fdt, node, "ti,omap3-uart") == 0
  176. + || fdt_node_check_compatible(fdt, node, "ti,omap4-uart") == 0) {
  177. + TRACE(("serial: Found OMAP 8250 serial UART!\n"));
  178. + uart = arch_get_uart_8250(regs, clock, ARCH_8250_OMAP);
  179. } else if (fdt_node_check_compatible(fdt, node, "arm,pl011") == 0
  180. || fdt_node_check_compatible(fdt, node, "arm,primecell") == 0) {
  181. TRACE(("serial: Found pl011 serial UART!\n"));
Add Comment
Please, Sign In to add comment