mirror of
https://github.com/brain-hackers/u-boot-brain
synced 2024-09-07 05:13:21 +09:00
![Ron Madrid](/assets/img/avatar_default.png)
This patch will create a configuration option for a minimum configuration for the ns16550 serial driver at drivers/serial/ns16550.c and will apply this new configuration option to the SIMPC8313.h config file in order to fix the NAND bootstrap build error. This option will exclude all functions with exception of NS16550_putc and NS16550_init. This will be used primarily to save space and remove unused code from builds in which space is limited. Signed-off-by: Ron Madrid <ron_madrid@sbcglobal.net>
84 lines
1.9 KiB
C
84 lines
1.9 KiB
C
/*
|
|
* COM1 NS16550 support
|
|
* originally from linux source (arch/ppc/boot/ns16550.c)
|
|
* modified to use CONFIG_SYS_ISA_MEM and new defines
|
|
*/
|
|
|
|
#include <config.h>
|
|
|
|
#ifdef CONFIG_SYS_NS16550
|
|
|
|
#include <ns16550.h>
|
|
|
|
#define LCRVAL LCR_8N1 /* 8 data, 1 stop, no parity */
|
|
#define MCRVAL (MCR_DTR | MCR_RTS) /* RTS/DTR */
|
|
#define FCRVAL (FCR_FIFO_EN | FCR_RXSR | FCR_TXSR) /* Clear & enable FIFOs */
|
|
|
|
void NS16550_init (NS16550_t com_port, int baud_divisor)
|
|
{
|
|
com_port->ier = 0x00;
|
|
#ifdef CONFIG_OMAP
|
|
com_port->mdr1 = 0x7; /* mode select reset TL16C750*/
|
|
#endif
|
|
com_port->lcr = LCR_BKSE | LCRVAL;
|
|
com_port->dll = 0;
|
|
com_port->dlm = 0;
|
|
com_port->lcr = LCRVAL;
|
|
com_port->mcr = MCRVAL;
|
|
com_port->fcr = FCRVAL;
|
|
com_port->lcr = LCR_BKSE | LCRVAL;
|
|
com_port->dll = baud_divisor & 0xff;
|
|
com_port->dlm = (baud_divisor >> 8) & 0xff;
|
|
com_port->lcr = LCRVAL;
|
|
#if defined(CONFIG_OMAP)
|
|
#if defined(CONFIG_APTIX)
|
|
com_port->mdr1 = 3; /* /13 mode so Aptix 6MHz can hit 115200 */
|
|
#else
|
|
com_port->mdr1 = 0; /* /16 is proper to hit 115200 with 48MHz */
|
|
#endif
|
|
#endif
|
|
}
|
|
|
|
#ifndef CONFIG_NS16550_MIN_FUNCTIONS
|
|
void NS16550_reinit (NS16550_t com_port, int baud_divisor)
|
|
{
|
|
com_port->ier = 0x00;
|
|
com_port->lcr = LCR_BKSE | LCRVAL;
|
|
com_port->dll = 0;
|
|
com_port->dlm = 0;
|
|
com_port->lcr = LCRVAL;
|
|
com_port->mcr = MCRVAL;
|
|
com_port->fcr = FCRVAL;
|
|
com_port->lcr = LCR_BKSE;
|
|
com_port->dll = baud_divisor & 0xff;
|
|
com_port->dlm = (baud_divisor >> 8) & 0xff;
|
|
com_port->lcr = LCRVAL;
|
|
}
|
|
#endif /* CONFIG_NS16550_MIN_FUNCTIONS */
|
|
|
|
void NS16550_putc (NS16550_t com_port, char c)
|
|
{
|
|
while ((com_port->lsr & LSR_THRE) == 0);
|
|
com_port->thr = c;
|
|
}
|
|
|
|
#ifndef CONFIG_NS16550_MIN_FUNCTIONS
|
|
char NS16550_getc (NS16550_t com_port)
|
|
{
|
|
while ((com_port->lsr & LSR_DR) == 0) {
|
|
#ifdef CONFIG_USB_TTY
|
|
extern void usbtty_poll(void);
|
|
usbtty_poll();
|
|
#endif
|
|
}
|
|
return (com_port->rbr);
|
|
}
|
|
|
|
int NS16550_tstc (NS16550_t com_port)
|
|
{
|
|
return ((com_port->lsr & LSR_DR) != 0);
|
|
}
|
|
|
|
#endif /* CONFIG_NS16550_MIN_FUNCTIONS */
|
|
#endif
|