forked from Minki/linux
c1dcb14ec2
Fix many errors and warnings given by checkpatch.pl: - use of C99 // comments; - missing space between the type and asterisk in a variable declaration; - space between the asterisk and function/variable name; - leading spaces instead of tabs; - space after opening and before closing parentheses; - initialization of a 'static' variable to 0; - missing spaces around assignement/comparison operator; - brace not on the same line with condition (or 'else') in the 'if'/'switch' statement; - missing space between 'if'/'for'/'while' and opening parenthesis; - use of assignement in 'if' statement's condition; - printk() without KERN_* facility level; - EXPORT_SYMBOL() not following its function immediately; - unnecessary braces for single-statement block; - adding new 'typedef' (where including <linux/types.h> will do); - use of 'extern' in the .c file (where it can be avoided by including header); - line over 80 characters. In addition to these changes, also do the following: - insert missing space after opening brace and/or before closing brace in the structure initializers; - insert spaces between operator and its operands; - put the function's result type and name/parameters on the same line; - properly indent multi-line expressions; - remove commented out code; - remove useless initializers and code; - remove needless parentheses; - fix broken/excess indentation; - add missing spaces between operator and its operands; - insert missing and remove excess new lines; - group 'else' and 'if' together where possible; - make au1xxx_platform_init() 'static'; - regroup variable declarations in pm_do_freq() for prettier look; - replace numeric literals with the matching macros; - fix printk() format specifiers mismatching the argument types; - make the multi-line comment style consistent with the kernel style elsewhere by adding empty first line and/or adding space on their left side; - make two-line comments that only have one line of text one-line; - fix typos/errors, capitalize acronyms, etc. in the comments; - fix/remove obsolete references in the comments; - reformat some comments; - add comment about the CPU:counter clock ratio to calc_clock(); - update MontaVista copyright; - remove Pete Popov's and Steve Longerbeam's old email addresses... Signed-off-by: Sergei Shtylyov <sshtylyov@ru.mvista.com> Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
110 lines
2.9 KiB
C
110 lines
2.9 KiB
C
#include <linux/types.h>
|
|
|
|
#include <asm/mach-au1x00/au1000.h>
|
|
|
|
#ifdef CONFIG_KGDB
|
|
|
|
/*
|
|
* FIXME the user should be able to select the
|
|
* uart to be used for debugging.
|
|
*/
|
|
#define DEBUG_BASE UART_DEBUG_BASE
|
|
|
|
#define UART16550_BAUD_2400 2400
|
|
#define UART16550_BAUD_4800 4800
|
|
#define UART16550_BAUD_9600 9600
|
|
#define UART16550_BAUD_19200 19200
|
|
#define UART16550_BAUD_38400 38400
|
|
#define UART16550_BAUD_57600 57600
|
|
#define UART16550_BAUD_115200 115200
|
|
|
|
#define UART16550_PARITY_NONE 0
|
|
#define UART16550_PARITY_ODD 0x08
|
|
#define UART16550_PARITY_EVEN 0x18
|
|
#define UART16550_PARITY_MARK 0x28
|
|
#define UART16550_PARITY_SPACE 0x38
|
|
|
|
#define UART16550_DATA_5BIT 0x0
|
|
#define UART16550_DATA_6BIT 0x1
|
|
#define UART16550_DATA_7BIT 0x2
|
|
#define UART16550_DATA_8BIT 0x3
|
|
|
|
#define UART16550_STOP_1BIT 0x0
|
|
#define UART16550_STOP_2BIT 0x4
|
|
|
|
|
|
#define UART_RX 0 /* Receive buffer */
|
|
#define UART_TX 4 /* Transmit buffer */
|
|
#define UART_IER 8 /* Interrupt Enable Register */
|
|
#define UART_IIR 0xC /* Interrupt ID Register */
|
|
#define UART_FCR 0x10 /* FIFO Control Register */
|
|
#define UART_LCR 0x14 /* Line Control Register */
|
|
#define UART_MCR 0x18 /* Modem Control Register */
|
|
#define UART_LSR 0x1C /* Line Status Register */
|
|
#define UART_MSR 0x20 /* Modem Status Register */
|
|
#define UART_CLK 0x28 /* Baud Rat4e Clock Divider */
|
|
#define UART_MOD_CNTRL 0x100 /* Module Control */
|
|
|
|
/* memory-mapped read/write of the port */
|
|
#define UART16550_READ(y) (au_readl(DEBUG_BASE + y) & 0xff)
|
|
#define UART16550_WRITE(y, z) (au_writel(z & 0xff, DEBUG_BASE + y))
|
|
|
|
extern unsigned long calc_clock(void);
|
|
|
|
void debugInit(u32 baud, u8 data, u8 parity, u8 stop)
|
|
{
|
|
if (UART16550_READ(UART_MOD_CNTRL) != 0x3)
|
|
UART16550_WRITE(UART_MOD_CNTRL, 3);
|
|
calc_clock();
|
|
|
|
/* disable interrupts */
|
|
UART16550_WRITE(UART_IER, 0);
|
|
|
|
/* set up baud rate */
|
|
{
|
|
u32 divisor;
|
|
|
|
/* set divisor */
|
|
divisor = get_au1x00_uart_baud_base() / baud;
|
|
UART16550_WRITE(UART_CLK, divisor & 0xffff);
|
|
}
|
|
|
|
/* set data format */
|
|
UART16550_WRITE(UART_LCR, (data | parity | stop));
|
|
}
|
|
|
|
static int remoteDebugInitialized;
|
|
|
|
u8 getDebugChar(void)
|
|
{
|
|
if (!remoteDebugInitialized) {
|
|
remoteDebugInitialized = 1;
|
|
debugInit(UART16550_BAUD_115200,
|
|
UART16550_DATA_8BIT,
|
|
UART16550_PARITY_NONE,
|
|
UART16550_STOP_1BIT);
|
|
}
|
|
|
|
while ((UART16550_READ(UART_LSR) & 0x1) == 0);
|
|
return UART16550_READ(UART_RX);
|
|
}
|
|
|
|
|
|
int putDebugChar(u8 byte)
|
|
{
|
|
if (!remoteDebugInitialized) {
|
|
remoteDebugInitialized = 1;
|
|
debugInit(UART16550_BAUD_115200,
|
|
UART16550_DATA_8BIT,
|
|
UART16550_PARITY_NONE,
|
|
UART16550_STOP_1BIT);
|
|
}
|
|
|
|
while ((UART16550_READ(UART_LSR) & 0x40) == 0);
|
|
UART16550_WRITE(UART_TX, byte);
|
|
|
|
return 1;
|
|
}
|
|
|
|
#endif
|