serial: ns16550: Add an option to specify the debug UART register shift
This UART permits different register spacing. To support the debug UART on devices which have a spacing other than 1 byte, allow the shift value to be specified. Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
		
							parent
							
								
									5b5e9ba3f7
								
							
						
					
					
						commit
						dd0b0122ba
					
				|  | @ -66,6 +66,16 @@ config DEBUG_UART_CLOCK | ||||||
| 	  A default should be provided by your board, but if not you will need | 	  A default should be provided by your board, but if not you will need | ||||||
| 	  to use the correct value here. | 	  to use the correct value here. | ||||||
| 
 | 
 | ||||||
|  | config DEBUG_UART_SHIFT | ||||||
|  | 	int "UART register shift" | ||||||
|  | 	depends on DEBUG_UART | ||||||
|  | 	default 0 if DEBUG_UART | ||||||
|  | 	help | ||||||
|  | 	  Some UARTs (notably ns16550) support different register layouts | ||||||
|  | 	  where the registers are spaced either as bytes, words or some other | ||||||
|  | 	  value. Use this value to specify the shift to use, where 0=byte | ||||||
|  | 	  registers, 2=32-bit word registers, etc. | ||||||
|  | 
 | ||||||
| config UNIPHIER_SERIAL | config UNIPHIER_SERIAL | ||||||
| 	bool "UniPhier on-chip UART support" | 	bool "UniPhier on-chip UART support" | ||||||
| 	depends on ARCH_UNIPHIER && DM_SERIAL | 	depends on ARCH_UNIPHIER && DM_SERIAL | ||||||
|  |  | ||||||
|  | @ -254,15 +254,20 @@ void debug_uart_init(void) | ||||||
| 	 */ | 	 */ | ||||||
| 	baud_divisor = calc_divisor(com_port, CONFIG_DEBUG_UART_CLOCK, | 	baud_divisor = calc_divisor(com_port, CONFIG_DEBUG_UART_CLOCK, | ||||||
| 				    CONFIG_BAUDRATE); | 				    CONFIG_BAUDRATE); | ||||||
|  | 	baud_divisor = 13; | ||||||
|  | 	serial_out_shift(&com_port->ier, CONFIG_DEBUG_UART_SHIFT, | ||||||
|  | 			 CONFIG_SYS_NS16550_IER); | ||||||
|  | 	serial_out_shift(&com_port->mcr, CONFIG_DEBUG_UART_SHIFT, UART_MCRVAL); | ||||||
|  | 	serial_out_shift(&com_port->fcr, CONFIG_DEBUG_UART_SHIFT, UART_FCRVAL); | ||||||
| 
 | 
 | ||||||
| 	serial_out_shift(&com_port->ier, 0, CONFIG_SYS_NS16550_IER); | 	serial_out_shift(&com_port->lcr, CONFIG_DEBUG_UART_SHIFT, | ||||||
| 	serial_out_shift(&com_port->mcr, 0, UART_MCRVAL); | 			 UART_LCR_BKSE | UART_LCRVAL); | ||||||
| 	serial_out_shift(&com_port->fcr, 0, UART_FCRVAL); | 	serial_out_shift(&com_port->dll, CONFIG_DEBUG_UART_SHIFT, | ||||||
| 
 | 			 baud_divisor & 0xff); | ||||||
| 	serial_out_shift(&com_port->lcr, 0, UART_LCR_BKSE | UART_LCRVAL); | 	serial_out_shift(&com_port->dlm, CONFIG_DEBUG_UART_SHIFT, | ||||||
| 	serial_out_shift(&com_port->dll, 0, baud_divisor & 0xff); | 			 (baud_divisor >> 8) & 0xff); | ||||||
| 	serial_out_shift(&com_port->dlm, 0, (baud_divisor >> 8) & 0xff); | 	serial_out_shift(&com_port->lcr, CONFIG_DEBUG_UART_SHIFT, | ||||||
| 	serial_out_shift(&com_port->lcr, 0, UART_LCRVAL); | 			 UART_LCRVAL); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static inline void _debug_uart_putc(int ch) | static inline void _debug_uart_putc(int ch) | ||||||
|  | @ -271,7 +276,7 @@ static inline void _debug_uart_putc(int ch) | ||||||
| 
 | 
 | ||||||
| 	while (!(serial_in_shift(&com_port->lsr, 0) & UART_LSR_THRE)) | 	while (!(serial_in_shift(&com_port->lsr, 0) & UART_LSR_THRE)) | ||||||
| 		; | 		; | ||||||
| 	serial_out_shift(&com_port->thr, 0, ch); | 	serial_out_shift(&com_port->thr, CONFIG_DEBUG_UART_SHIFT, ch); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| DEBUG_UART_FUNCS | DEBUG_UART_FUNCS | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue