You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
sparc: Support for GRLIB APBUART serial port
This patch adds support for the APBUART serial port from Aeroflex Gaisler's IP library GRLIB. It is currently used in all LEON3 designs (SPARC V8) but can be used on other platforms as well (which support OF). Signed-off-by: Kristoffer Glembo <kristoffer@gaisler.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
462265bf49
commit
d4ac42a582
@@ -1477,4 +1477,17 @@ config SERIAL_BCM63XX_CONSOLE
|
||||
If you have enabled the serial port on the bcm63xx CPU
|
||||
you can make it the console by answering Y to this option.
|
||||
|
||||
config SERIAL_GRLIB_GAISLER_APBUART
|
||||
tristate "GRLIB APBUART serial support"
|
||||
depends on OF
|
||||
---help---
|
||||
Add support for the GRLIB APBUART serial port.
|
||||
|
||||
config SERIAL_GRLIB_GAISLER_APBUART_CONSOLE
|
||||
bool "Console on GRLIB APBUART serial port"
|
||||
depends on SERIAL_GRLIB_GAISLER_APBUART=y
|
||||
select SERIAL_CORE_CONSOLE
|
||||
help
|
||||
Support for running a console on the GRLIB APBUART
|
||||
|
||||
endmenu
|
||||
|
||||
@@ -81,3 +81,4 @@ obj-$(CONFIG_SERIAL_KS8695) += serial_ks8695.o
|
||||
obj-$(CONFIG_KGDB_SERIAL_CONSOLE) += kgdboc.o
|
||||
obj-$(CONFIG_SERIAL_QE) += ucc_uart.o
|
||||
obj-$(CONFIG_SERIAL_TIMBERDALE) += timbuart.o
|
||||
obj-$(CONFIG_SERIAL_GRLIB_GAISLER_APBUART) += apbuart.o
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,64 @@
|
||||
#ifndef __GRLIB_APBUART_H__
|
||||
#define __GRLIB_APBUART_H__
|
||||
|
||||
#include <asm/io.h>
|
||||
|
||||
#define UART_NR 8
|
||||
static int grlib_apbuart_port_nr;
|
||||
|
||||
struct grlib_apbuart_regs_map {
|
||||
u32 data;
|
||||
u32 status;
|
||||
u32 ctrl;
|
||||
u32 scaler;
|
||||
};
|
||||
|
||||
struct amba_prom_registers {
|
||||
unsigned int phys_addr;
|
||||
unsigned int reg_size;
|
||||
};
|
||||
|
||||
/*
|
||||
* The following defines the bits in the APBUART Status Registers.
|
||||
*/
|
||||
#define UART_STATUS_DR 0x00000001 /* Data Ready */
|
||||
#define UART_STATUS_TSE 0x00000002 /* TX Send Register Empty */
|
||||
#define UART_STATUS_THE 0x00000004 /* TX Hold Register Empty */
|
||||
#define UART_STATUS_BR 0x00000008 /* Break Error */
|
||||
#define UART_STATUS_OE 0x00000010 /* RX Overrun Error */
|
||||
#define UART_STATUS_PE 0x00000020 /* RX Parity Error */
|
||||
#define UART_STATUS_FE 0x00000040 /* RX Framing Error */
|
||||
#define UART_STATUS_ERR 0x00000078 /* Error Mask */
|
||||
|
||||
/*
|
||||
* The following defines the bits in the APBUART Ctrl Registers.
|
||||
*/
|
||||
#define UART_CTRL_RE 0x00000001 /* Receiver enable */
|
||||
#define UART_CTRL_TE 0x00000002 /* Transmitter enable */
|
||||
#define UART_CTRL_RI 0x00000004 /* Receiver interrupt enable */
|
||||
#define UART_CTRL_TI 0x00000008 /* Transmitter irq */
|
||||
#define UART_CTRL_PS 0x00000010 /* Parity select */
|
||||
#define UART_CTRL_PE 0x00000020 /* Parity enable */
|
||||
#define UART_CTRL_FL 0x00000040 /* Flow control enable */
|
||||
#define UART_CTRL_LB 0x00000080 /* Loopback enable */
|
||||
|
||||
#define APBBASE(port) ((struct grlib_apbuart_regs_map *)((port)->membase))
|
||||
|
||||
#define APBBASE_DATA_P(port) (&(APBBASE(port)->data))
|
||||
#define APBBASE_STATUS_P(port) (&(APBBASE(port)->status))
|
||||
#define APBBASE_CTRL_P(port) (&(APBBASE(port)->ctrl))
|
||||
#define APBBASE_SCALAR_P(port) (&(APBBASE(port)->scaler))
|
||||
|
||||
#define UART_GET_CHAR(port) (__raw_readl(APBBASE_DATA_P(port)))
|
||||
#define UART_PUT_CHAR(port, v) (__raw_writel(v, APBBASE_DATA_P(port)))
|
||||
#define UART_GET_STATUS(port) (__raw_readl(APBBASE_STATUS_P(port)))
|
||||
#define UART_PUT_STATUS(port, v)(__raw_writel(v, APBBASE_STATUS_P(port)))
|
||||
#define UART_GET_CTRL(port) (__raw_readl(APBBASE_CTRL_P(port)))
|
||||
#define UART_PUT_CTRL(port, v) (__raw_writel(v, APBBASE_CTRL_P(port)))
|
||||
#define UART_GET_SCAL(port) (__raw_readl(APBBASE_SCALAR_P(port)))
|
||||
#define UART_PUT_SCAL(port, v) (__raw_writel(v, APBBASE_SCALAR_P(port)))
|
||||
|
||||
#define UART_RX_DATA(s) (((s) & UART_STATUS_DR) != 0)
|
||||
#define UART_TX_READY(s) (((s) & UART_STATUS_THE) != 0)
|
||||
|
||||
#endif /* __GRLIB_APBUART_H__ */
|
||||
@@ -179,6 +179,9 @@
|
||||
/* BCM63xx family SoCs */
|
||||
#define PORT_BCM63XX 89
|
||||
|
||||
/* Aeroflex Gaisler GRLIB APBUART */
|
||||
#define PORT_APBUART 90
|
||||
|
||||
#ifdef __KERNEL__
|
||||
|
||||
#include <linux/compiler.h>
|
||||
|
||||
Reference in New Issue
Block a user