Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d843fc6e authored by Feng Tang's avatar Feng Tang Committed by Greg Kroah-Hartman
Browse files

hsu: driver for Medfield High Speed UART device



This is a PCI & UART driver, which suppors both PIO and DMA mode
UART operation. It has 3 identical UART ports and one internal
DMA controller.

Current FW will export 4 pci devices for hsu: 3 uart ports and 1
dma controller, each has one IRQ line. And we need to discuss the
device model, one PCI device covering whole HSU should be a better
model, but there is a problem of how to export the 4 IRQs info

Current driver set the highest baud rate to 2746800bps, which is
easy to scale down to 115200/230400.... To suport higher baud rate,
we need add special process, change DLAB/DLH/PS/DIV/MUL registers
all together.

921600 is the highest baud rate that has been tested with Bluetooth
modem connected to HSU port 0. Will test more when there is right
BT firmware.

Current version contains several work around for A0's Silicon bugs

Signed-off-by: default avatarFeng Tang <feng.tang@intel.com>
Signed-off-by: default avatarAlan Cox <alan@linux.intel.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent 464eb8f5
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -724,6 +724,16 @@ config MRST_MAX3110_IRQ
	help
	  This has to be enabled after Moorestown GPIO driver is loaded

config SERIAL_MFD_HSU
	tristate "Medfield High Speed UART support"
	depends on PCI
	select SERIAL_CORE

config SERIAL_MFD_HSU_CONSOLE
	boolean "Medfile HSU serial console support"
	depends on SERIAL_MFD_HSU=y
	select SERIAL_CORE_CONSOLE

config SERIAL_BFIN
	tristate "Blackfin serial port support"
	depends on BLACKFIN
+1 −0
Original line number Diff line number Diff line
@@ -87,3 +87,4 @@ obj-$(CONFIG_SERIAL_GRLIB_GAISLER_APBUART) += apbuart.o
obj-$(CONFIG_SERIAL_ALTERA_JTAGUART) += altera_jtaguart.o
obj-$(CONFIG_SERIAL_ALTERA_UART) += altera_uart.o
obj-$(CONFIG_SERIAL_MRST_MAX3110)	+= mrst_max3110.o
obj-$(CONFIG_SERIAL_MFD_HSU)	+= mfd.o

drivers/serial/mfd.c

0 → 100644
+1488 −0

File added.

Preview size limit exceeded, changes collapsed.

+2 −0
Original line number Diff line number Diff line
@@ -189,6 +189,8 @@
/* MAX3107 */
#define PORT_MAX3107	94

/* High Speed UART for Medfield */
#define PORT_MFD	95

#ifdef __KERNEL__

+47 −0
Original line number Diff line number Diff line
#ifndef _SERIAL_MFD_H_
#define _SERIAL_MFD_H_

/* HW register offset definition */
#define UART_FOR	0x08
#define UART_PS		0x0C
#define UART_MUL	0x0D
#define UART_DIV	0x0E

#define HSU_GBL_IEN	0x0
#define HSU_GBL_IST	0x4

#define HSU_GBL_INT_BIT_PORT0	0x0
#define HSU_GBL_INT_BIT_PORT1	0x1
#define HSU_GBL_INT_BIT_PORT2	0x2
#define HSU_GBL_INT_BIT_IRI	0x3
#define HSU_GBL_INT_BIT_HDLC	0x4
#define HSU_GBL_INT_BIT_DMA	0x5

#define HSU_GBL_ISR	0x8
#define HSU_GBL_DMASR	0x400
#define HSU_GBL_DMAISR	0x404

#define HSU_PORT_REG_OFFSET	0x80
#define HSU_PORT0_REG_OFFSET	0x80
#define HSU_PORT1_REG_OFFSET	0x100
#define HSU_PORT2_REG_OFFSET	0x180
#define HSU_PORT_REG_LENGTH	0x80

#define HSU_DMA_CHANS_REG_OFFSET	0x500
#define HSU_DMA_CHANS_REG_LENGTH	0x40

#define HSU_CH_SR		0x0	/* channel status reg */
#define HSU_CH_CR		0x4	/* control reg */
#define HSU_CH_DCR		0x8	/* descriptor control reg */
#define HSU_CH_BSR		0x10	/* max fifo buffer size reg */
#define HSU_CH_MOTSR		0x14	/* minimum ocp transfer size */
#define HSU_CH_D0SAR		0x20	/* desc 0 start addr */
#define HSU_CH_D0TSR		0x24	/* desc 0 transfer size */
#define HSU_CH_D1SAR		0x28
#define HSU_CH_D1TSR		0x2C
#define HSU_CH_D2SAR		0x30
#define HSU_CH_D2TSR		0x34
#define HSU_CH_D3SAR		0x38
#define HSU_CH_D3TSR		0x3C

#endif
Loading