Blame view
include/debug_uart.h
3.74 KB
2f964aa7b serial: Support a... |
1 2 3 4 5 6 7 8 9 10 11 |
/* * Early debug UART support * * (C) Copyright 2014 Google, Inc * Writte by Simon Glass <sjg@chromium.org> * * SPDX-License-Identifier: GPL-2.0+ */ #ifndef _DEBUG_UART_H #define _DEBUG_UART_H |
2f964aa7b serial: Support a... |
12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
/* * The debug UART is intended for use very early in U-Boot to debug problems * when an ICE or other debug mechanism is not available. * * To use it you should: * - Make sure your UART supports this interface * - Enable CONFIG_DEBUG_UART * - Enable the CONFIG for your UART to tell it to provide this interface * (e.g. CONFIG_DEBUG_UART_NS16550) * - Define the required settings as needed (see below) * - Call debug_uart_init() before use * - Call printch() to output a character * * Depending on your platform it may be possible to use this UART before a * stack is available. * * If your UART does not support this interface you can probably add support * quite easily. Remember that you cannot use driver model and it is preferred * to use no stack. * * You must not use this UART once driver model is working and the serial * drivers are up and running (done in serial_init()). Otherwise the drivers * may conflict and you will get strange output. * * * To enable the debug UART in your serial driver: * * - #include <debug_uart.h> |
97b059730 debug_uart: Adjus... |
40 |
* - Define _debug_uart_init(), trying to avoid using the stack |
2f964aa7b serial: Support a... |
41 42 43 |
* - Define _debug_uart_putc() as static inline (avoiding stack usage) * - Immediately afterwards, add DEBUG_UART_FUNCS to define the rest of the * functionality (printch(), etc.) |
0e977bc14 debug_uart: Suppo... |
44 45 46 47 48 |
* * If your board needs additional init for the UART to work, enable * CONFIG_DEBUG_UART_BOARD_INIT and write a function called * board_debug_uart_init() to perform that init. When debug_uart_init() is * called, the init will happen automatically. |
2f964aa7b serial: Support a... |
49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
*/ /** * debug_uart_init() - Set up the debug UART ready for use * * This sets up the UART with the correct baud rate, etc. * * Available CONFIG is: * * - CONFIG_DEBUG_UART_BASE: Base address of UART * - CONFIG_BAUDRATE: Requested baud rate * - CONFIG_DEBUG_UART_CLOCK: Input clock for UART */ void debug_uart_init(void); |
0e977bc14 debug_uart: Suppo... |
63 64 65 66 67 68 69 |
#ifdef CONFIG_DEBUG_UART_BOARD_INIT void board_debug_uart_init(void); #else static inline void board_debug_uart_init(void) { } #endif |
2f964aa7b serial: Support a... |
70 71 72 73 74 |
/** * printch() - Output a character to the debug UART * * @ch: Character to output */ |
d0d736146 debug_uart: Remov... |
75 |
void printch(int ch); |
2f964aa7b serial: Support a... |
76 77 78 79 80 81 |
/** * printascii() - Output an ASCII string to the debug UART * * @str: String to output */ |
d0d736146 debug_uart: Remov... |
82 |
void printascii(const char *str); |
2f964aa7b serial: Support a... |
83 84 85 86 87 88 |
/** * printhex2() - Output a 2-digit hex value * * @value: Value to output */ |
d0d736146 debug_uart: Remov... |
89 |
void printhex2(uint value); |
2f964aa7b serial: Support a... |
90 91 92 93 94 95 |
/** * printhex4() - Output a 4-digit hex value * * @value: Value to output */ |
d0d736146 debug_uart: Remov... |
96 |
void printhex4(uint value); |
2f964aa7b serial: Support a... |
97 98 99 100 101 102 |
/** * printhex8() - Output a 8-digit hex value * * @value: Value to output */ |
d0d736146 debug_uart: Remov... |
103 |
void printhex8(uint value); |
2f964aa7b serial: Support a... |
104 |
|
c7fefcb91 debug_uart: Add a... |
105 106 107 108 109 |
#ifdef CONFIG_DEBUG_UART_ANNOUNCE #define _DEBUG_UART_ANNOUNCE printascii("<debug_uart> "); #else #define _DEBUG_UART_ANNOUNCE #endif |
2f964aa7b serial: Support a... |
110 111 112 113 |
/* * Now define some functions - this should be inserted into the serial driver */ #define DEBUG_UART_FUNCS \ |
d0d736146 debug_uart: Remov... |
114 |
void printch(int ch) \ |
2f964aa7b serial: Support a... |
115 116 117 118 |
{ \ _debug_uart_putc(ch); \ } \ \ |
d0d736146 debug_uart: Remov... |
119 |
void printascii(const char *str) \ |
2f964aa7b serial: Support a... |
120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 |
{ \ while (*str) \ _debug_uart_putc(*str++); \ } \ \ static inline void printhex1(uint digit) \ { \ digit &= 0xf; \ _debug_uart_putc(digit > 9 ? digit - 10 + 'a' : digit + '0'); \ } \ \ static inline void printhex(uint value, int digits) \ { \ while (digits-- > 0) \ printhex1(value >> (4 * digits)); \ } \ \ |
d0d736146 debug_uart: Remov... |
137 |
void printhex2(uint value) \ |
2f964aa7b serial: Support a... |
138 139 140 141 |
{ \ printhex(value, 2); \ } \ \ |
d0d736146 debug_uart: Remov... |
142 |
void printhex4(uint value) \ |
2f964aa7b serial: Support a... |
143 144 145 146 |
{ \ printhex(value, 4); \ } \ \ |
d0d736146 debug_uart: Remov... |
147 |
void printhex8(uint value) \ |
2f964aa7b serial: Support a... |
148 149 |
{ \ printhex(value, 8); \ |
97b059730 debug_uart: Adjus... |
150 151 152 153 |
} \ \ void debug_uart_init(void) \ { \ |
0e977bc14 debug_uart: Suppo... |
154 |
board_debug_uart_init(); \ |
97b059730 debug_uart: Adjus... |
155 |
_debug_uart_init(); \ |
c7fefcb91 debug_uart: Add a... |
156 |
_DEBUG_UART_ANNOUNCE \ |
97b059730 debug_uart: Adjus... |
157 |
} \ |
2f964aa7b serial: Support a... |
158 159 |
#endif |