Backport fixes and add FRI2 support to pch_uart
Subsystems (7)
cover Backport fixes and add FRI2 support to pch_uart
Backport 7 patches bringing pch_uart up to date with required fixes and new features to support the 4 new patches (from me) enabling the FRI2 serial port.
My patches have been sent to LKML and have received the approval one of the driver maintainers. They are currently pending review and a pull from Greg KH.
Please apply to yocto/standard/base.
The following changes since commit c578f3a1f357142a6e02a1df4ae9aa16f45094d6:
Merge branch 'yocto/base' into yocto/standard/base (2012-02-26 00:04:15 -0500)
are available in the git repository at:
git://git.infradead.org/users/dvhart/linux-yocto-3.0.git dvhart/yocto/standard/pch_uart
http://git.infradead.org/users/dvhart/linux-yocto-3.0.git/shortlog/refs/heads/dvhart/yocto/standard/pch_uart
Alexander Stein (3):
pch_uart: add missing comment about OKI ML7223
pch_uart: Add MSI support drivers/tty/serial/pch_uart.c: add console support
Darren Hart (4):
pch_uart: Use uartclk instead of base_baud
pch_uart: Add Fish River Island II uart clock quirks
pch_uart: Add user_uartclk parameter
pch_uart: Use existing default_baud in setup_console
Jiri Slaby (1):
TTY: serial, fix includes in some drivers
Tomoya MORINAGA (2):
pch_uart: Set PCIe bus number using probe parameter
pch_uart: Change company name OKI SEMICONDUCTOR to LAPIS
Semiconductor
Uwe Kleine-König (1):
serial/pch: use global div helper instead of creating a private one
drivers/tty/serial/Kconfig | 9 + drivers/tty/serial/apbuart.c | 1 + drivers/tty/serial/cpm_uart/cpm_uart_core.c | 1 + drivers/tty/serial/dz.c | 1 + drivers/tty/serial/ioc3_serial.c | 1 + drivers/tty/serial/ioc4_serial.c | 1 + drivers/tty/serial/m32r_sio.c | 1 + drivers/tty/serial/max3100.c | 2 + drivers/tty/serial/max3107.c | 2 + drivers/tty/serial/mpc52xx_uart.c | 1 + drivers/tty/serial/msm_serial_hs.c | 2 + drivers/tty/serial/mux.c | 2 + drivers/tty/serial/nwpserial.c | 1 + drivers/tty/serial/pch_uart.c | 227 ++++++++++++++++++++++++--- drivers/tty/serial/sb1250-duart.c | 1 + drivers/tty/serial/serial_ks8695.c | 1 + drivers/tty/serial/serial_txx9.c | 2 + drivers/tty/serial/sn_console.c | 1 + drivers/tty/serial/timbuart.c | 2 + drivers/tty/serial/uartlite.c | 1 + drivers/tty/serial/ucc_uart.c | 4 +- drivers/tty/serial/xilinx_uartps.c | 4 +- drivers/tty/serial/zs.c | 1 + 23 files changed, 246 insertions(+), 23 deletions(-)
Signature · 1 line
1.7.6.5
PATCH 1/11 pch_uart: add missing comment about OKI ML7223
From: Alexander Stein <[email protected]>
commit bff52fd458a1bca06266449b0ab8a43e9a50d240 upstream.
--- drivers/tty/serial/pch_uart.c | 1 + 1 files changed, 1 insertions(+), 0 deletions(-)
drivers/tty/serial/pch_uart.c +1 -0
@@ -44,6 +44,7 @@ enum {/* Set the max number of UART port * Intel EG20T PCH: 4 port * OKI SEMICONDUCTOR ML7213 IOH: 3 port +* OKI SEMICONDUCTOR ML7223 IOH: 2 port */ #define PCH_UART_NR 4
Signature · 1 line
1.7.6.5
PATCH 2/11 pch_uart: Set PCIe bus number using probe parameter
In reply to Darren HartFrom: Tomoya MORINAGA <[email protected]>
commit 6c4b47d243112e98811ce0da7bbb32cc3857dd1a upstream.
Currently, PCIe bus number is set as fixed value "2". However, PCIe bus number is not always "2". This patch sets bus number using probe() parameter.
--- drivers/tty/serial/pch_uart.c | 3 ++- 1 files changed, 2 insertions(+), 1 deletions(-)
drivers/tty/serial/pch_uart.c +2 -1
@@ -603,7 +603,8 @@ static void pch_request_dma(struct uart_port *port)dma_cap_zero (mask);dma_cap_set (DMA_SLAVE , mask); - dma_dev =pci_get_bus_and_slot (2 ,PCI_DEVFN (0xa ,0 ));/* Get DMA's dev + dma_dev =pci_get_bus_and_slot (priv->pdev->bus->number, +PCI_DEVFN (0xa ,0 ));/* Get DMA's dev information */ /* Set Tx DMA */ param = &priv->param_tx;
Signature · 1 line
1.7.6.5
PATCH 3/11 TTY: serial, fix includes in some drivers
In reply to Darren HartFrom: Jiri Slaby <[email protected]>
commit ee160a38eee357ed2572cf41437d5814ce53c839 upstream.
linux/tty_flip.h is included in linux/serial_core.h. But this may (and
will) change in the future. Then we would get build errors such as:.../tty/serial/max3107.c: In function ‘put_data_to_circ_buf’:.../tty/serial/max3107.c:149:2: error: implicit declaration of function ‘tty_insert_flip_string’
So fix all the drviers which call tty flip buffer helpers to really include linux/tty_flip.h. And also make sure that those include linux/tty.h when operating with struct tty_struct.
--- drivers/tty/serial/apbuart.c | 1 + drivers/tty/serial/cpm_uart/cpm_uart_core.c | 1 + drivers/tty/serial/dz.c | 1 + drivers/tty/serial/ioc3_serial.c | 1 + drivers/tty/serial/ioc4_serial.c | 1 + drivers/tty/serial/m32r_sio.c | 1 + drivers/tty/serial/max3100.c | 2 ++ drivers/tty/serial/max3107.c | 2 ++ drivers/tty/serial/mpc52xx_uart.c | 1 + drivers/tty/serial/msm_serial_hs.c | 2 ++ drivers/tty/serial/mux.c | 2 ++ drivers/tty/serial/nwpserial.c | 1 + drivers/tty/serial/pch_uart.c | 2 ++ drivers/tty/serial/sb1250-duart.c | 1 + drivers/tty/serial/serial_ks8695.c | 1 + drivers/tty/serial/serial_txx9.c | 2 ++ drivers/tty/serial/sn_console.c | 1 + drivers/tty/serial/timbuart.c | 2 ++ drivers/tty/serial/uartlite.c | 1 + drivers/tty/serial/ucc_uart.c | 4 +++- drivers/tty/serial/xilinx_uartps.c | 4 +++- drivers/tty/serial/zs.c | 1 + 22 files changed, 33 insertions(+), 2 deletions(-)
drivers/tty/serial/apbuart.c +1 -0
@@ -16,6 +16,7 @@#include <linux/module.h> #include <linux/tty.h> +#include <linux/tty_flip.h> #include <linux/ioport.h> #include <linux/init.h> #include <linux/serial.h>
drivers/tty/serial/cpm_uart/cpm_uart_core.c +1 -0
@@ -31,6 +31,7 @@#include <linux/module.h> #include <linux/tty.h> +#include <linux/tty_flip.h> #include <linux/ioport.h> #include <linux/init.h> #include <linux/serial.h>
drivers/tty/serial/dz.c +1 -0
@@ -47,6 +47,7 @@#include <linux/serial_core.h> #include <linux/sysrq.h> #include <linux/tty.h> +#include <linux/tty_flip.h> #include <asm/atomic.h> #include <asm/bootinfo.h>
drivers/tty/serial/ioc3_serial.c +1 -0
@@ -13,6 +13,7 @@*/ #include <linux/errno.h> #include <linux/tty.h> +#include <linux/tty_flip.h> #include <linux/serial.h> #include <linux/circ_buf.h> #include <linux/serial_reg.h>
drivers/tty/serial/ioc4_serial.c +1 -0
@@ -14,6 +14,7 @@*/ #include <linux/errno.h> #include <linux/tty.h> +#include <linux/tty_flip.h> #include <linux/serial.h> #include <linux/serialP.h> #include <linux/circ_buf.h>
drivers/tty/serial/m32r_sio.c +1 -0
@@ -32,6 +32,7 @@#include <linux/module.h> #include <linux/tty.h> +#include <linux/tty_flip.h> #include <linux/ioport.h> #include <linux/init.h> #include <linux/console.h>
drivers/tty/serial/max3100.c +2 -0
@@ -47,6 +47,8 @@#include <linux/serial.h> #include <linux/spi/spi.h> #include <linux/freezer.h> +#include <linux/tty.h> +#include <linux/tty_flip.h> #include <linux/serial_max3100.h>
drivers/tty/serial/max3107.c +2 -0
@@ -31,6 +31,8 @@#include <linux/device.h> #include <linux/serial_core.h> #include <linux/serial.h> +#include <linux/tty.h> +#include <linux/tty_flip.h> #include <linux/gpio.h> #include <linux/spi/spi.h> #include <linux/freezer.h>
drivers/tty/serial/mpc52xx_uart.c +1 -0
@@ -34,6 +34,7 @@#include <linux/device.h> #include <linux/module.h> #include <linux/tty.h> +#include <linux/tty_flip.h> #include <linux/serial.h> #include <linux/sysrq.h> #include <linux/console.h>
drivers/tty/serial/msm_serial_hs.c +2 -0
@@ -30,6 +30,8 @@#include <linux/serial.h> #include <linux/serial_core.h> +#include <linux/tty.h> +#include <linux/tty_flip.h> #include <linux/slab.h> #include <linux/init.h> #include <linux/interrupt.h>
drivers/tty/serial/mux.c +2 -0
@@ -21,6 +21,8 @@#include <linux/ioport.h> #include <linux/init.h> #include <linux/serial.h> +#include <linux/tty.h> +#include <linux/tty_flip.h> #include <linux/console.h> #include <linux/delay.h> /* for udelay */ #include <linux/device.h>
drivers/tty/serial/nwpserial.c +1 -0
@@ -15,6 +15,7 @@#include <linux/serial_reg.h> #include <linux/serial_core.h> #include <linux/tty.h> +#include <linux/tty_flip.h> #include <linux/irqreturn.h> #include <linux/mutex.h> #include <linux/of_platform.h>
drivers/tty/serial/pch_uart.c +2 -0
@@ -19,6 +19,8 @@#include <linux/module.h> #include <linux/pci.h> #include <linux/serial_core.h> +#include <linux/tty.h> +#include <linux/tty_flip.h> #include <linux/interrupt.h> #include <linux/io.h> #include <linux/dmi.h>
drivers/tty/serial/sb1250-duart.c +1 -0
@@ -37,6 +37,7 @@#include <linux/spinlock.h> #include <linux/sysrq.h> #include <linux/tty.h> +#include <linux/tty_flip.h> #include <linux/types.h> #include <asm/atomic.h>
drivers/tty/serial/serial_ks8695.c +1 -0
@@ -13,6 +13,7 @@*/ #include <linux/module.h> #include <linux/tty.h> +#include <linux/tty_flip.h> #include <linux/ioport.h> #include <linux/init.h> #include <linux/serial.h>
drivers/tty/serial/serial_txx9.c +2 -0
@@ -28,6 +28,8 @@#include <linux/pci.h> #include <linux/serial_core.h> #include <linux/serial.h> +#include <linux/tty.h> +#include <linux/tty_flip.h> #include <asm/io.h>
drivers/tty/serial/sn_console.c +1 -0
@@ -39,6 +39,7 @@#include <linux/interrupt.h> #include <linux/tty.h> +#include <linux/tty_flip.h> #include <linux/serial.h> #include <linux/console.h> #include <linux/module.h>
drivers/tty/serial/timbuart.c +2 -0
@@ -23,6 +23,8 @@#include <linux/pci.h> #include <linux/interrupt.h> #include <linux/serial_core.h> +#include <linux/tty.h> +#include <linux/tty_flip.h> #include <linux/kernel.h> #include <linux/platform_device.h> #include <linux/ioport.h>
drivers/tty/serial/uartlite.c +1 -0
@@ -15,6 +15,7 @@#include <linux/serial.h> #include <linux/serial_core.h> #include <linux/tty.h> +#include <linux/tty_flip.h> #include <linux/delay.h> #include <linux/interrupt.h> #include <linux/init.h>
drivers/tty/serial/ucc_uart.c +3 -1
@@ -20,8 +20,10 @@#include <linux/module.h> #include <linux/serial.h> -#include <linux/slab.h> #include <linux/serial_core.h> +#include <linux/slab.h> +#include <linux/tty.h> +#include <linux/tty_flip.h> #include <linux/io.h> #include <linux/of_platform.h> #include <linux/dma-mapping.h>
drivers/tty/serial/xilinx_uartps.c +3 -1
@@ -12,9 +12,11 @@*/ #include <linux/platform_device.h> +#include <linux/serial.h> #include <linux/serial_core.h> +#include <linux/tty.h> +#include <linux/tty_flip.h> #include <linux/console.h> -#include <linux/serial.h> #include <linux/irq.h> #include <linux/io.h> #include <linux/of.h>
drivers/tty/serial/zs.c +1 -0
@@ -63,6 +63,7 @@#include <linux/spinlock.h> #include <linux/sysrq.h> #include <linux/tty.h> +#include <linux/tty_flip.h> #include <linux/types.h> #include <asm/atomic.h>
Signature · 1 line
1.7.6.5
PATCH 4/11 pch_uart: Change company name OKI SEMICONDUCTOR to LAPIS Semiconductor
In reply to Darren HartFrom: Tomoya MORINAGA <[email protected]>
commit eca9dfa846a3d0eeb865e290851f4bfe4fb34fdd upstream.
On October 1 in 2011,
OKI SEMICONDUCTOR Co., Ltd. changed the company name in to LAPIS Semiconductor Co., Ltd.
--- drivers/tty/serial/pch_uart.c | 6 +++--- 1 files changed, 3 insertions(+), 3 deletions(-)
drivers/tty/serial/pch_uart.c +3 -3
@@ -1,5 +1,5 @@/* -*Copyright (C) 2010 OKI SEMICONDUCTOR CO., LTD. +*Copyright (C) 2011 LAPIS Semiconductor Co., Ltd. * *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
@@ -45,8 +45,8 @@ enum {/* Set the max number of UART port * Intel EG20T PCH: 4 port -* OKI SEMICONDUCTOR ML7213 IOH: 3 port -* OKI SEMICONDUCTOR ML7223 IOH: 2 port +* LAPIS Semiconductor ML7213 IOH: 3 port +* LAPIS Semiconductor ML7223 IOH: 2 port */ #define PCH_UART_NR 4
Signature · 1 line
1.7.6.5
PATCH 5/11 pch_uart: Add MSI support
In reply to Darren HartFrom: Alexander Stein <[email protected]>
commit e463595fd9c752fa4bf06b47df93ef9ade3c7cf0 upstream.
--- drivers/tty/serial/pch_uart.c | 5 +++++ 1 files changed, 5 insertions(+), 0 deletions(-)
drivers/tty/serial/pch_uart.c +5 -0
@@ -1438,6 +1438,8 @@ static struct eg20t_port *pch_uart_init_port(struct pci_dev *pdev, goto init_port_hal_free; } +pci_enable_msi (pdev); + iobase =pci_resource_start (pdev,0 ); mapbase =pci_resource_start (pdev,1 ); priv->mapbase = mapbase;
@@ -1494,6 +1496,8 @@ static void pch_uart_pci_remove(struct pci_dev *pdev)struct eg20t_port *priv; priv = (struct eg20t_port *)pci_get_drvdata (pdev); + +pci_disable_msi (pdev);pch_uart_exit_port (priv);pci_disable_device (pdev);kfree (priv);
@@ -1581,6 +1585,7 @@ static int __devinit pch_uart_pci_probe(struct pci_dev *pdev,return ret; probe_disable_device: +pci_disable_msi (pdev);pci_disable_device (pdev); probe_error:return ret;
Signature · 1 line
1.7.6.5
PATCH 6/11 drivers/tty/serial/pch_uart.c: add console support
In reply to Darren HartFrom: Alexander Stein <[email protected]>
commit e30f867d402d6dcc2d03d8dd5da3863f7c83572a upstream.
Add console support to pch_uart. To enable append e.g. console=ttyPCH0,115200 to your kernel command line.
This is not expected work on CM-iTC boards due to their having a different clock.
--- drivers/tty/serial/Kconfig | 9 +++ drivers/tty/serial/pch_uart.c | 160 ++++++++++++++++++++++++++++++++++++++++- 2 files changed, 168 insertions(+), 1 deletions(-)
drivers/tty/serial/Kconfig +9 -0
@@ -1600,6 +1600,15 @@ config SERIAL_PCH_UART ML7213/ML7223/ML7831 is companion chip for Intel Atom E6xx series. ML7213/ML7223/ML7831 is completely compatible for Intel EG20T PCH. +config SERIAL_PCH_UART_CONSOLE + bool "Support for console on Intel EG20T PCH UART/OKI SEMICONDUCTOR ML7213 IOH" + depends on SERIAL_PCH_UART=y + select SERIAL_CORE_CONSOLE + help + Say Y here if you wish to use the PCH UART as the system console + (the system console is the device which receives all kernel messages and + warnings and which allows logins in single user mode). + config SERIAL_MSM_SMD bool "Enable tty device interface for some SMD ports" default n
drivers/tty/serial/pch_uart.c +159 -1
214 lines not on this page · raw message
Signature · 1 line
1.7.6.5
PATCH 7/11 serial/pch: use global div helper instead of creating a private one
In reply to Darren HartFrom: Uwe Kleine-König <[email protected]>
commit 0e2adc06843a9b5a28af4ca5f796240297907897 upstream.
--- drivers/tty/serial/pch_uart.c | 5 ++--- 1 files changed, 2 insertions(+), 3 deletions(-)
drivers/tty/serial/pch_uart.c +2 -3
@@ -14,6 +14,7 @@*along with this program; if not, write to the Free Software *Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ +#include <linux/kernel.h> #include <linux/serial_reg.h> #include <linux/slab.h> #include <linux/module.h>
@@ -143,8 +144,6 @@ enum {#define PCH_UART_DLL 0x00#define PCH_UART_DLM 0x01 -#define DIV_ROUND (a, b) (((a) + ((b)/2)) / (b)) -#define PCH_UART_IID_RLS (PCH_UART_IIR_REI)#define PCH_UART_IID_RDR (PCH_UART_IIR_RRI)#define PCH_UART_IID_RDR_TO (PCH_UART_IIR_RRI | PCH_UART_IIR_TOI)
@@ -333,7 +332,7 @@ static int pch_uart_hal_set_line(struct eg20t_port *priv, int baud,unsigned int dll, dlm, lcr;int div; - div =DIV_ROUND (priv->base_baud /16 , baud); + div =DIV_ROUND_CLOSEST (priv->base_baud /16 , baud);if (div <0 ||USHRT_MAX <= div) {dev_err (priv->port.dev,"Invalid Baud(div=0x%x)\n" , div);return -EINVAL ;
Signature · 1 line
1.7.6.5
PATCH 8/11 pch_uart: Use uartclk instead of base_baud
In reply to Darren HartThe term "base baud" refers to the fastest baud rate the device can communicate at. This is clock/16. pch_uart is using base_baud as the clock itself. Rename the variables to be semantically correct.
--- drivers/tty/serial/pch_uart.c | 24 ++++++++++++------------ 1 files changed, 12 insertions(+), 12 deletions(-)
drivers/tty/serial/pch_uart.c +12 -12
@@ -203,7 +203,7 @@ enum {#define BOTH_EMPTY (UART_LSR_TEMT | UART_LSR_THRE) -#define DEFAULT_BAUD_RATE 1843200/* 1.8432MHz */ +#define DEFAULT_UARTCLK 1843200/* 1.8432MHz */ struct pch_uart_buffer {unsigned char *buf;
@@ -218,7 +218,7 @@ struct eg20t_port {unsigned int iobase;struct pci_dev *pdev;int fifo_size; -int base_baud; +int uartclk;int start_tx;int start_rx;int tx_empty;
@@ -293,7 +293,7 @@ static const int trigger_level_16[4] = { 1, 4, 8, 14 };static const int trigger_level_1[4 ] = {1 ,1 ,1 ,1 };static void pch_uart_hal_request (struct pci_dev *pdev,int fifosize, -int base_baud) +int uartclk) {struct eg20t_port *priv =pci_get_drvdata (pdev);
@@ -332,7 +332,7 @@ static int pch_uart_hal_set_line(struct eg20t_port *priv, int baud,unsigned int dll, dlm, lcr;int div; - div =DIV_ROUND_CLOSEST (priv->base_baud /16 , baud); + div =DIV_ROUND_CLOSEST (priv->uartclk /16 , baud);if (div <0 ||USHRT_MAX <= div) {dev_err (priv->port.dev,"Invalid Baud(div=0x%x)\n" , div);return -EINVAL ;
@@ -1153,9 +1153,9 @@ static int pch_uart_startup(struct uart_port *port) priv->tx_empty =1 ;if (port->uartclk) - priv->base_baud = port->uartclk; + priv->uartclk = port->uartclk;else - port->uartclk = priv->base_baud; + port->uartclk = priv->uartclk;pch_uart_hal_disable_interrupt (priv,PCH_UART_HAL_ALL_INT ); ret = pch_uart_hal_set_line(priv, default_baud,
@@ -1507,7 +1507,7 @@ static int __init pch_console_setup(struct console *co, char *options)return -ENODEV ;/* setup uartclock */ - port->uartclk =DEFAULT_BAUD_RATE ; + port->uartclk =DEFAULT_UARTCLK ;if (options)uart_parse_options (options, &baud, &parity, &bits, &flow);
@@ -1550,7 +1550,7 @@ static struct eg20t_port *pch_uart_init_port(struct pci_dev *pdev,unsigned int iobase;unsigned int mapbase;unsigned char *rxbuf; -int fifosize, base_baud; +int fifosize, uartclk;int port_type;struct pch_uart_driver_data *board;const char *board_name;
@@ -1566,12 +1566,12 @@ static struct eg20t_port *pch_uart_init_port(struct pci_dev *pdev,if (!rxbuf) goto init_port_free_txbuf; - base_baud =DEFAULT_BAUD_RATE ; + uartclk =DEFAULT_UARTCLK ;/* quirk for CM-iTC board */ board_name =dmi_get_system_info (DMI_BOARD_NAME );if (board_name &&strstr (board_name,"CM-iTC" )) - base_baud =192000000 ;/* 192.0MHz */ + uartclk =192000000 ;/* 192.0MHz */ switch (port_type) {case PORT_UNKNOWN :
@@ -1597,7 +1597,7 @@ static struct eg20t_port *pch_uart_init_port(struct pci_dev *pdev, priv->rxbuf.size =PAGE_SIZE ; priv->fifo_size = fifosize; - priv->base_baud = base_baud; + priv->uartclk = uartclk; priv->port_type =PORT_MAX_8250 + port_type +1 ; priv->port.dev = &pdev->dev; priv->port.iobase = iobase;
@@ -1614,7 +1614,7 @@ static struct eg20t_port *pch_uart_init_port(struct pci_dev *pdev,spin_lock_init (&priv->port.lock);pci_set_drvdata (pdev, priv); -pch_uart_hal_request (pdev, fifosize, base_baud); +pch_uart_hal_request (pdev, fifosize, uartclk);#ifdef CONFIG_SERIAL_PCH_UART_CONSOLE pch_uart_ports[board->line_no] = priv;
Signature · 1 line
1.7.6.5
PATCH 9/11 pch_uart: Add Fish River Island II uart clock quirks
In reply to Darren HartAdd support for the Fish River Island II (FRI2) UART clock following the CM-iTC quirk handling mechanism. Depending on the firmware installed on the device, the FRI2 uses a 48MHz or a 64MHz UART clock. This is detected with DMI strings.
Add similar UART clock quirk handling to the pch_console_setup() function to enable kernel messages on boards with non-standard UART clocks.
Per Alan's suggestion, abstract out UART clock selection into pch_uart_get_uartclk() to avoid code duplication.
--- drivers/tty/serial/pch_uart.c | 42 +++++++++++++++++++++++++++------------- 1 files changed, 28 insertions(+), 14 deletions(-)
drivers/tty/serial/pch_uart.c +28 -14
@@ -203,7 +203,10 @@ enum {#define BOTH_EMPTY (UART_LSR_TEMT | UART_LSR_THRE) -#define DEFAULT_UARTCLK 1843200/* 1.8432MHz */ +#define DEFAULT_UARTCLK 1843200/* 1.8432 MHz */ +#define CMITC_UARTCLK 192000000/* 192.0000 MHz */ +#define FRI2_64_UARTCLK 64000000/* 64.0000 MHz */ +#define FRI2_48_UARTCLK 48000000/* 48.0000 MHz */ struct pch_uart_buffer {unsigned char *buf;
@@ -292,6 +295,26 @@ static const int trigger_level_64[4] = { 1, 16, 32, 56 };static const int trigger_level_16[4 ] = {1 ,4 ,8 ,14 };static const int trigger_level_1[4 ] = {1 ,1 ,1 ,1 }; +/* Return UART clock, checking for board specific clocks. */ +static int pch_uart_get_uartclk (void ) +{ +const char *cmp; + + cmp =dmi_get_system_info (DMI_BOARD_NAME ); +if (cmp &&strstr (cmp,"CM-iTC" )) +return CMITC_UARTCLK ; + + cmp =dmi_get_system_info (DMI_BIOS_VERSION ); +if (cmp &&strnstr (cmp,"FRI2" ,4 )) +return FRI2_64_UARTCLK ; + + cmp =dmi_get_system_info (DMI_PRODUCT_NAME ); +if (cmp &&strstr (cmp,"Fish River Island II" )) +return FRI2_48_UARTCLK ; + +return DEFAULT_UARTCLK ; +} +static void pch_uart_hal_request (struct pci_dev *pdev,int fifosize,int uartclk) {
@@ -1506,8 +1529,7 @@ static int __init pch_console_setup(struct console *co, char *options)if (!port || (!port->iobase && !port->membase))return -ENODEV ; -/* setup uartclock */ - port->uartclk =DEFAULT_UARTCLK ; + port->uartclk =pch_uart_get_uartclk ();if (options)uart_parse_options (options, &baud, &parity, &bits, &flow);
@@ -1550,10 +1572,9 @@ static struct eg20t_port *pch_uart_init_port(struct pci_dev *pdev,unsigned int iobase;unsigned int mapbase;unsigned char *rxbuf; -int fifosize, uartclk; +int fifosize;int port_type;struct pch_uart_driver_data *board; -const char *board_name; board = &drv_dat[id->driver_data]; port_type = board->port_type;
@@ -1566,13 +1587,6 @@ static struct eg20t_port *pch_uart_init_port(struct pci_dev *pdev,if (!rxbuf) goto init_port_free_txbuf; - uartclk =DEFAULT_UARTCLK ; - -/* quirk for CM-iTC board */ - board_name =dmi_get_system_info (DMI_BOARD_NAME ); -if (board_name &&strstr (board_name,"CM-iTC" )) - uartclk =192000000 ;/* 192.0MHz */ -switch (port_type) {case PORT_UNKNOWN : fifosize =256 ;/* EG20T/ML7213: UART0 */
@@ -1597,7 +1611,7 @@ static struct eg20t_port *pch_uart_init_port(struct pci_dev *pdev, priv->rxbuf.size =PAGE_SIZE ; priv->fifo_size = fifosize; - priv->uartclk = uartclk; + priv->uartclk =pch_uart_get_uartclk (); priv->port_type =PORT_MAX_8250 + port_type +1 ; priv->port.dev = &pdev->dev; priv->port.iobase = iobase;
@@ -1614,7 +1628,7 @@ static struct eg20t_port *pch_uart_init_port(struct pci_dev *pdev,spin_lock_init (&priv->port.lock);pci_set_drvdata (pdev, priv); -pch_uart_hal_request (pdev, fifosize, uartclk); +pch_uart_hal_request (pdev, fifosize, priv->uartclk);#ifdef CONFIG_SERIAL_PCH_UART_CONSOLE pch_uart_ports[board->line_no] = priv;
Signature · 1 line
1.7.6.5
PATCH 10/11 pch_uart: Add user_uartclk parameter
In reply to Darren HartFor cases where boards with non-default clocks are not yet added to the kernel or when the clock varies across hardware revisions, it is useful to be able to specify the UART clock on the kernel command line.
Add the user_uartclk parameter and prefer it, if set, to the default and board specific UART clock settings. Specify user_uartclock on the command-line with "pch_uart.user_uartclk=48000000".
--- drivers/tty/serial/pch_uart.c | 5 +++++ 1 files changed, 5 insertions(+), 0 deletions(-)
drivers/tty/serial/pch_uart.c +5 -0
@@ -290,6 +290,7 @@ static struct pch_uart_driver_data drv_dat[] = {static struct eg20t_port *pch_uart_ports[PCH_UART_NR ];#endif static unsigned int default_baud =9600 ; +static unsigned int user_uartclk =0 ;static const int trigger_level_256[4 ] = {1 ,64 ,128 ,224 };static const int trigger_level_64[4 ] = {1 ,16 ,32 ,56 };static const int trigger_level_16[4 ] = {1 ,4 ,8 ,14 };
@@ -300,6 +301,9 @@ static int pch_uart_get_uartclk(void) {const char *cmp; +if (user_uartclk) +return user_uartclk; + cmp =dmi_get_system_info (DMI_BOARD_NAME );if (cmp &&strstr (cmp,"CM-iTC" ))return CMITC_UARTCLK ;
@@ -1799,3 +1803,4 @@ module_exit(pch_uart_module_exit);MODULE_LICENSE ("GPL v2" );MODULE_DESCRIPTION ("Intel EG20T PCH UART PCI Driver" );module_param (default_baud, uint,S_IRUGO ); +module_param (user_uartclk, uint,S_IRUGO );
Signature · 1 line
1.7.6.5
PATCH 11/11 pch_uart: Use existing default_baud in setup_console
In reply to Darren HartRather than hardcode 9600, use the existing default_baud parameter (which also defaults to 9600).
--- drivers/tty/serial/pch_uart.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)
drivers/tty/serial/pch_uart.c +1 -1
@@ -1516,7 +1516,7 @@ pch_console_write(struct console *co, const char *s, unsigned int count)static int __init pch_console_setup (struct console *co,char *options) {struct uart_port *port; -int baud =9600 ; +int baud = default_baud;int bits =8 ;int parity ='n' ;int flow ='n' ;
Signature · 1 line
1.7.6.5
Quoted 5 lines · Darren Hart
Backport 7 patches bringing
pch_uartup to date with required fixes and new features to support the 4 new patches (from me) enabling the FRI2 serial port.My patches have been sent to LKML and have received the approval one of the driver maintainers. They are currently pending review and a pull from Greg KH.
Grabbed and merged these. Will push them out later today, along with my 3.0.23 + rt updates.
Bruce
Quoted 59 lines
Please apply to yocto/standard/base.
The following changes since commit
c578f3a1f357142a6e02a1df4ae9aa16f45094d6:Merge branch 'yocto/base' into yocto/standard/base (2012-02-26 00:04:15 -0500)are available in the git repository at:
git://git.infradead.org/users/dvhart/linux-yocto-3.0.gitdvhart/yocto/standard/pch_uart
http://git.infradead.org/users/dvhart/linux-yocto-3.0.git/shortlog/refs/heads/dvhart/yocto/standard/pch_uartAlexander Stein (3):
pch_uart: add missing comment about OKI ML7223
pch_uart: Add MSI supportdrivers/tty/serial/pch_uart.c: add console supportDarren Hart (4):
pch_uart: Use uartclk instead ofbase_baud
pch_uart: Add Fish River Island II uart clock quirks
pch_uart: Adduser_uartclkparameter
pch_uart: Use existingdefault_baudinsetup_consoleJiri Slaby (1):
TTY: serial, fix includes in some driversTomoya MORINAGA (2):
pch_uart: Set PCIe bus number using probe parameter
pch_uart: Change company name OKI SEMICONDUCTOR to LAPIS
SemiconductorUwe Kleine-König (1):
serial/pch: use global div helper instead of creating a private onedrivers/tty/serial/Kconfig | 9 + drivers/tty/serial/apbuart.c | 1 + drivers/tty/serial/cpm_uart/cpm_uart_core.c | 1 + drivers/tty/serial/dz.c | 1 + drivers/tty/serial/ioc3_serial.c | 1 + drivers/tty/serial/ioc4_serial.c | 1 + drivers/tty/serial/m32r_sio.c | 1 + drivers/tty/serial/max3100.c | 2 + drivers/tty/serial/max3107.c | 2 + drivers/tty/serial/mpc52xx_uart.c | 1 + drivers/tty/serial/msm_serial_hs.c | 2 + drivers/tty/serial/mux.c | 2 + drivers/tty/serial/nwpserial.c | 1 + drivers/tty/serial/pch_uart.c | 227 ++++++++++++++++++++++++--- drivers/tty/serial/sb1250-duart.c | 1 + drivers/tty/serial/serial_ks8695.c | 1 + drivers/tty/serial/serial_txx9.c | 2 + drivers/tty/serial/sn_console.c | 1 + drivers/tty/serial/timbuart.c | 2 + drivers/tty/serial/uartlite.c | 1 + drivers/tty/serial/ucc_uart.c | 4 +- drivers/tty/serial/xilinx_uartps.c | 4 +- drivers/tty/serial/zs.c | 1 + 23 files changed, 246 insertions(+), 23 deletions(-)