Blame view
include/debug_uart.h
4.2 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 |
a52cf086a serial: omap: Sup... |
110 111 112 113 114 115 116 117 118 119 |
#define serial_dout(reg, value) \ serial_out_shift((char *)com_port + \ ((char *)reg - (char *)com_port) * \ (1 << CONFIG_DEBUG_UART_SHIFT), \ CONFIG_DEBUG_UART_SHIFT, value) #define serial_din(reg) \ serial_in_shift((char *)com_port + \ ((char *)reg - (char *)com_port) * \ (1 << CONFIG_DEBUG_UART_SHIFT), \ CONFIG_DEBUG_UART_SHIFT) |
2f964aa7b serial: Support a... |
120 121 122 123 |
/* * Now define some functions - this should be inserted into the serial driver */ #define DEBUG_UART_FUNCS \ |
6bacc7362 debug_uart: Try n... |
124 125 |
\ static inline void _printch(int ch) \ |
2f964aa7b serial: Support a... |
126 |
{ \ |
b391d7433 debug_uart: outpu... |
127 128 129 |
if (ch == ' ') \ _debug_uart_putc('\r'); \ |
2f964aa7b serial: Support a... |
130 131 132 |
_debug_uart_putc(ch); \ } \ \ |
6bacc7362 debug_uart: Try n... |
133 134 135 136 137 |
void printch(int ch) \ { \ _printch(ch); \ } \ \ |
d0d736146 debug_uart: Remov... |
138 |
void printascii(const char *str) \ |
2f964aa7b serial: Support a... |
139 140 |
{ \ while (*str) \ |
6bacc7362 debug_uart: Try n... |
141 |
_printch(*str++); \ |
2f964aa7b serial: Support a... |
142 143 144 145 146 147 148 149 150 151 152 153 154 155 |
} \ \ 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... |
156 |
void printhex2(uint value) \ |
2f964aa7b serial: Support a... |
157 158 159 160 |
{ \ printhex(value, 2); \ } \ \ |
d0d736146 debug_uart: Remov... |
161 |
void printhex4(uint value) \ |
2f964aa7b serial: Support a... |
162 163 164 165 |
{ \ printhex(value, 4); \ } \ \ |
d0d736146 debug_uart: Remov... |
166 |
void printhex8(uint value) \ |
2f964aa7b serial: Support a... |
167 168 |
{ \ printhex(value, 8); \ |
97b059730 debug_uart: Adjus... |
169 170 171 172 |
} \ \ void debug_uart_init(void) \ { \ |
0e977bc14 debug_uart: Suppo... |
173 |
board_debug_uart_init(); \ |
97b059730 debug_uart: Adjus... |
174 |
_debug_uart_init(); \ |
c7fefcb91 debug_uart: Add a... |
175 |
_DEBUG_UART_ANNOUNCE \ |
97b059730 debug_uart: Adjus... |
176 |
} \ |
2f964aa7b serial: Support a... |
177 178 |
#endif |