Commit cefc2d1d authored by Andre Przywara's avatar Andre Przywara Committed by Greg Kroah-Hartman

drivers: PL011: allow to supply fixed option string

The SBSA UART has a fixed baud rate and flow control setting, which
cannot be changed or queried by software.
Add a vendor specific property to always return fixed values when
trying to read the console options.
Signed-off-by: default avatarAndre Przywara <andre.przywara@arm.com>
Tested-by: default avatarMark Langsdorf <mlangsdo@redhat.com>
Tested-by: default avatarNaresh Bhat <nbhat@cavium.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 71eec483
...@@ -79,6 +79,7 @@ struct vendor_data { ...@@ -79,6 +79,7 @@ struct vendor_data {
bool dma_threshold; bool dma_threshold;
bool cts_event_workaround; bool cts_event_workaround;
bool always_enabled; bool always_enabled;
bool fixed_options;
unsigned int (*get_fifosize)(struct amba_device *dev); unsigned int (*get_fifosize)(struct amba_device *dev);
}; };
...@@ -96,6 +97,7 @@ static struct vendor_data vendor_arm = { ...@@ -96,6 +97,7 @@ static struct vendor_data vendor_arm = {
.dma_threshold = false, .dma_threshold = false,
.cts_event_workaround = false, .cts_event_workaround = false,
.always_enabled = false, .always_enabled = false,
.fixed_options = false,
.get_fifosize = get_fifosize_arm, .get_fifosize = get_fifosize_arm,
}; };
...@@ -112,6 +114,7 @@ static struct vendor_data vendor_st = { ...@@ -112,6 +114,7 @@ static struct vendor_data vendor_st = {
.dma_threshold = true, .dma_threshold = true,
.cts_event_workaround = true, .cts_event_workaround = true,
.always_enabled = false, .always_enabled = false,
.fixed_options = false,
.get_fifosize = get_fifosize_st, .get_fifosize = get_fifosize_st,
}; };
...@@ -160,6 +163,7 @@ struct uart_amba_port { ...@@ -160,6 +163,7 @@ struct uart_amba_port {
unsigned int lcrh_rx; /* vendor-specific */ unsigned int lcrh_rx; /* vendor-specific */
unsigned int old_cr; /* state during shutdown */ unsigned int old_cr; /* state during shutdown */
bool autorts; bool autorts;
unsigned int fixed_baud; /* vendor-set fixed baud rate */
char type[12]; char type[12];
#ifdef CONFIG_DMA_ENGINE #ifdef CONFIG_DMA_ENGINE
/* DMA stuff */ /* DMA stuff */
...@@ -2076,10 +2080,15 @@ static int __init pl011_console_setup(struct console *co, char *options) ...@@ -2076,10 +2080,15 @@ static int __init pl011_console_setup(struct console *co, char *options)
uap->port.uartclk = clk_get_rate(uap->clk); uap->port.uartclk = clk_get_rate(uap->clk);
if (options) if (uap->vendor->fixed_options) {
uart_parse_options(options, &baud, &parity, &bits, &flow); baud = uap->fixed_baud;
else } else {
pl011_console_get_options(uap, &baud, &parity, &bits); if (options)
uart_parse_options(options,
&baud, &parity, &bits, &flow);
else
pl011_console_get_options(uap, &baud, &parity, &bits);
}
return uart_set_options(&uap->port, co, baud, parity, bits, flow); return uart_set_options(&uap->port, co, baud, parity, bits, flow);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment