From: "Jongsung Kim" <neidhard.kim@lge.com>
To: Russell King <linux@arm.linux.org.uk>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
jslaby@suse.cz
Cc: linux-serial@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: [PATCH] ARM: PL011: add support for extended FIFO-size of PL011-r1p5
Date: Fri, 12 Apr 2013 18:18:47 +0900 [thread overview]
Message-ID: <007301ce375e$bcf6d6b0$36e48410$@lge.com> (raw)
The latest r1p5-revision of the ARM PL011 UART has 32-byte FIFOs, while all
earlier ones have 16-byte FIFOs. This patch suggests a way to set the
FIFO-size correctly & flexibly by using a
function(vendor_data::get_fifosize) rather than using the
vendor_data::fifosize variable. The function takes the UARTPeriphID, and
returns the correct size.
Signed-off-by: Jongsung Kim <neidhard.kim@lge.com>
drivers/tty/serial/amba-pl011.c | 20 ++++++++++++++++----
1 files changed, 16 insertions(+), 4 deletions(-)
diff --git a/drivers/tty/serial/amba-pl011.c
b/drivers/tty/serial/amba-pl011.c
index 3ea5408..22af0c8 100644
--- a/drivers/tty/serial/amba-pl011.c
+++ b/drivers/tty/serial/amba-pl011.c
@@ -72,32 +72,44 @@
/* There is by now at least one vendor with differing details, so handle it
*/
struct vendor_data {
unsigned int ifls;
- unsigned int fifosize;
unsigned int lcrh_tx;
unsigned int lcrh_rx;
bool oversampling;
bool dma_threshold;
bool cts_event_workaround;
+
+ unsigned int (*get_fifosize)(unsigned int periphid);
};
+static unsigned int get_fifosize_arm(unsigned int periphid)
+{
+ unsigned int rev = (periphid >> 20) & 0xf;
+ return rev < 3 ? 16 : 32;
+}
+
static struct vendor_data vendor_arm = {
.ifls = UART011_IFLS_RX4_8|UART011_IFLS_TX4_8,
- .fifosize = 16,
.lcrh_tx = UART011_LCRH,
.lcrh_rx = UART011_LCRH,
.oversampling = false,
.dma_threshold = false,
.cts_event_workaround = false,
+ .get_fifosize = get_fifosize_arm,
};
+static unsigned int get_fifosize_st(unsigned int periphid)
+{
+ return 64;
+}
+
static struct vendor_data vendor_st = {
.ifls = UART011_IFLS_RX_HALF|UART011_IFLS_TX_HALF,
- .fifosize = 64,
.lcrh_tx = ST_UART011_LCRH_TX,
.lcrh_rx = ST_UART011_LCRH_RX,
.oversampling = true,
.dma_threshold = true,
.cts_event_workaround = true,
+ .get_fifosize = get_fifosize_st,
};
static struct uart_amba_port *amba_ports[UART_NR];
@@ -2010,7 +2022,7 @@ static int pl011_probe(struct amba_device *dev, const
struct amba_id *id)
uap->lcrh_rx = vendor->lcrh_rx;
uap->lcrh_tx = vendor->lcrh_tx;
uap->old_cr = 0;
- uap->fifosize = vendor->fifosize;
+ uap->fifosize = vendor->get_fifosize(dev->periphid);
uap->port.dev = &dev->dev;
uap->port.mapbase = dev->res.start;
uap->port.membase = base;
WARNING: multiple messages have this Message-ID (diff)
From: "Jongsung Kim" <neidhard.kim@lge.com>
To: "Russell King" <linux@arm.linux.org.uk>,
"Greg Kroah-Hartman" <gregkh@linuxfoundation.org>,
<jslaby@suse.cz>
Cc: <linux-serial@vger.kernel.org>, <linux-kernel@vger.kernel.org>
Subject: [PATCH] ARM: PL011: add support for extended FIFO-size of PL011-r1p5
Date: Fri, 12 Apr 2013 18:18:47 +0900 [thread overview]
Message-ID: <007301ce375e$bcf6d6b0$36e48410$@lge.com> (raw)
The latest r1p5-revision of the ARM PL011 UART has 32-byte FIFOs, while all
earlier ones have 16-byte FIFOs. This patch suggests a way to set the
FIFO-size correctly & flexibly by using a
function(vendor_data::get_fifosize) rather than using the
vendor_data::fifosize variable. The function takes the UARTPeriphID, and
returns the correct size.
Signed-off-by: Jongsung Kim <neidhard.kim@lge.com>
drivers/tty/serial/amba-pl011.c | 20 ++++++++++++++++----
1 files changed, 16 insertions(+), 4 deletions(-)
diff --git a/drivers/tty/serial/amba-pl011.c
b/drivers/tty/serial/amba-pl011.c
index 3ea5408..22af0c8 100644
--- a/drivers/tty/serial/amba-pl011.c
+++ b/drivers/tty/serial/amba-pl011.c
@@ -72,32 +72,44 @@
/* There is by now at least one vendor with differing details, so handle it
*/
struct vendor_data {
unsigned int ifls;
- unsigned int fifosize;
unsigned int lcrh_tx;
unsigned int lcrh_rx;
bool oversampling;
bool dma_threshold;
bool cts_event_workaround;
+
+ unsigned int (*get_fifosize)(unsigned int periphid);
};
+static unsigned int get_fifosize_arm(unsigned int periphid)
+{
+ unsigned int rev = (periphid >> 20) & 0xf;
+ return rev < 3 ? 16 : 32;
+}
+
static struct vendor_data vendor_arm = {
.ifls = UART011_IFLS_RX4_8|UART011_IFLS_TX4_8,
- .fifosize = 16,
.lcrh_tx = UART011_LCRH,
.lcrh_rx = UART011_LCRH,
.oversampling = false,
.dma_threshold = false,
.cts_event_workaround = false,
+ .get_fifosize = get_fifosize_arm,
};
+static unsigned int get_fifosize_st(unsigned int periphid)
+{
+ return 64;
+}
+
static struct vendor_data vendor_st = {
.ifls = UART011_IFLS_RX_HALF|UART011_IFLS_TX_HALF,
- .fifosize = 64,
.lcrh_tx = ST_UART011_LCRH_TX,
.lcrh_rx = ST_UART011_LCRH_RX,
.oversampling = true,
.dma_threshold = true,
.cts_event_workaround = true,
+ .get_fifosize = get_fifosize_st,
};
static struct uart_amba_port *amba_ports[UART_NR];
@@ -2010,7 +2022,7 @@ static int pl011_probe(struct amba_device *dev, const
struct amba_id *id)
uap->lcrh_rx = vendor->lcrh_rx;
uap->lcrh_tx = vendor->lcrh_tx;
uap->old_cr = 0;
- uap->fifosize = vendor->fifosize;
+ uap->fifosize = vendor->get_fifosize(dev->periphid);
uap->port.dev = &dev->dev;
uap->port.mapbase = dev->res.start;
uap->port.membase = base;
next reply other threads:[~2013-04-12 9:18 UTC|newest]
Thread overview: 41+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-04-12 9:18 Jongsung Kim [this message]
2013-04-12 9:18 ` [PATCH] ARM: PL011: add support for extended FIFO-size of PL011-r1p5 Jongsung Kim
2013-04-19 12:58 ` Russell King - ARM Linux
2013-05-14 5:56 ` Stephen Warren
2013-05-14 5:56 ` Stephen Warren
2013-05-14 7:15 ` Jongsung Kim
2013-05-14 7:15 ` Jongsung Kim
2013-05-14 7:15 ` Jongsung Kim
2013-05-14 21:03 ` Stephen Warren
2013-05-14 21:03 ` Stephen Warren
2013-05-14 22:50 ` Russell King - ARM Linux
2013-05-14 22:50 ` Russell King - ARM Linux
2013-05-15 1:00 ` Jongsung Kim
2013-05-15 1:00 ` Jongsung Kim
2013-05-15 1:00 ` Jongsung Kim
2013-05-15 4:59 ` Stephen Warren
2013-05-15 4:59 ` Stephen Warren
2013-05-15 9:37 ` Russell King - ARM Linux
2013-05-15 9:37 ` Russell King - ARM Linux
2013-05-16 13:26 ` Jongsung Kim
2013-05-16 13:26 ` Jongsung Kim
2013-05-16 13:26 ` Jongsung Kim
2013-05-21 1:39 ` Jongsung Kim
2013-05-21 1:39 ` Jongsung Kim
2013-05-21 1:39 ` Jongsung Kim
2013-05-21 2:12 ` Stephen Warren
2013-05-21 2:12 ` Stephen Warren
2013-05-21 6:02 ` [PATCH] ARM: bcm2835: override the HW UART periphid Jongsung Kim
2013-05-21 6:02 ` Jongsung Kim
2013-05-21 6:07 ` Jongsung Kim
2013-05-21 6:07 ` Jongsung Kim
2013-05-21 6:07 ` Jongsung Kim
2013-05-21 9:00 ` Gordon Hollingworth
2013-05-21 9:00 ` Gordon Hollingworth
2013-05-21 16:34 ` Stephen Warren
2013-05-21 16:34 ` Stephen Warren
2013-05-22 1:43 ` Stephen Warren
2013-05-22 1:43 ` Stephen Warren
2013-05-22 1:52 ` Jongsung Kim
2013-05-22 1:52 ` Jongsung Kim
2013-05-22 1:52 ` Jongsung Kim
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to='007301ce375e$bcf6d6b0$36e48410$@lge.com' \
--to=neidhard.kim@lge.com \
--cc=gregkh@linuxfoundation.org \
--cc=jslaby@suse.cz \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-serial@vger.kernel.org \
--cc=linux@arm.linux.org.uk \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.