Loading...
1 2 3 4 5 6 7 8 9 10 11 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 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 | /* * Author: Xilinx, Inc. * * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation; either version 2 of the License, or (at your * option) any later version. * * * XILINX IS PROVIDING THIS DESIGN, CODE, OR INFORMATION "AS IS" AS A * COURTESY TO YOU. BY PROVIDING THIS DESIGN, CODE, OR INFORMATION AS * ONE POSSIBLE IMPLEMENTATION OF THIS FEATURE, APPLICATION OR STANDARD, * XILINX IS MAKING NO REPRESENTATION THAT THIS IMPLEMENTATION IS FREE * FROM ANY CLAIMS OF INFRINGEMENT, AND YOU ARE RESPONSIBLE FOR OBTAINING * ANY THIRD PARTY RIGHTS YOU MAY REQUIRE FOR YOUR IMPLEMENTATION. * XILINX EXPRESSLY DISCLAIMS ANY WARRANTY WHATSOEVER WITH RESPECT TO * THE ADEQUACY OF THE IMPLEMENTATION, INCLUDING BUT NOT LIMITED TO ANY * WARRANTIES OR REPRESENTATIONS THAT THIS IMPLEMENTATION IS FREE FROM * CLAIMS OF INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY AND * FITNESS FOR A PARTICULAR PURPOSE. * * * Xilinx hardware products are not intended for use in life support * appliances, devices, or systems. Use in such applications is * expressly prohibited. * * * (c) Copyright 2002-2004 Xilinx Inc. * All rights reserved. * * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 675 Mass Ave, Cambridge, MA 02139, USA. * */ #include <asm/u-boot.h> #include <asm/processor.h> #include <common.h> #include <command.h> #include <config.h> DECLARE_GLOBAL_DATA_PTR; #define USE_CHAN1 \ ((defined XPAR_UARTNS550_0_BASEADDR) && (defined CFG_INIT_CHAN1)) #define USE_CHAN2 \ ((defined XPAR_UARTNS550_1_BASEADDR) && (defined CFG_INIT_CHAN2)) #if USE_CHAN1 #include <ns16550.h> #endif #if USE_CHAN1 const NS16550_t COM_PORTS[] = { (NS16550_t) (XPAR_UARTNS550_0_BASEADDR + 3) #if USE_CHAN2 , (NS16550_t) (XPAR_UARTNS550_1_BASEADDR + 3) #endif }; #endif int serial_init(void) { #if USE_CHAN1 int clock_divisor; clock_divisor = XPAR_UARTNS550_0_CLOCK_FREQ_HZ / 16 / gd->baudrate; (void) NS16550_init(COM_PORTS[0], clock_divisor); #if USE_CHAN2 clock_divisor = XPAR_UARTNS550_1_CLOCK_FREQ_HZ / 16 / gd->baudrate; (void) NS16550_init(COM_PORTS[1], clock_divisor); #endif #endif return 0; } void serial_putc(const char c) { if (c == '\n') NS16550_putc(COM_PORTS[CFG_DUART_CHAN], '\r'); NS16550_putc(COM_PORTS[CFG_DUART_CHAN], c); } int serial_getc(void) { return NS16550_getc(COM_PORTS[CFG_DUART_CHAN]); } int serial_tstc(void) { return NS16550_tstc(COM_PORTS[CFG_DUART_CHAN]); } void serial_setbrg(void) { #if USE_CHAN1 int clock_divisor; clock_divisor = XPAR_UARTNS550_0_CLOCK_FREQ_HZ / 16 / gd->baudrate; NS16550_reinit(COM_PORTS[0], clock_divisor); #if USE_CHAN2 clock_divisor = XPAR_UARTNS550_1_CLOCK_FREQ_HZ / 16 / gd->baudrate; NS16550_reinit(COM_PORTS[1], clock_divisor); #endif #endif } void serial_puts(const char *s) { while (*s) { serial_putc(*s++); } } #if defined(CONFIG_CMD_KGDB) void kgdb_serial_init(void) { } void putDebugChar(int c) { serial_putc(c); } void putDebugStr(const char *str) { serial_puts(str); } int getDebugChar(void) { return serial_getc(); } void kgdb_interruptible(int yes) { return; } #endif |