On Tue, May 8, 2018 at 2:44 PM, Mikko Perttunen <mperttunen@xxxxxxxxxx> wrote:
The Tegra Combined UART (TCU) is a mailbox-based mechanism that allows
multiplexing multiple "virtual UARTs" into a single hardware serial
port. The TCU is the primary serial port on Tegra194 devices.
Add a TCU driver utilizing the mailbox framework, as the used mailboxes
are part of Tegra HSP blocks that are already controlled by the Tegra
HSP mailbox driver.
First question, can it be done utilizing SERDEV framework?
+static void tegra_tcu_uart_set_mctrl(struct uart_port *port, unsigned int mctrl)
+{
+ (void)port;
+ (void)mctrl;
Huh?
+}
+static void tegra_tcu_uart_stop_tx(struct uart_port *port)
+{
+ (void)port;
+}
Ditto.
+ if (written == 3) {
+ value |= 3 << 24;
+ value |= BIT(26);
+ mbox_send_message(tcu->tx, &value);
+ }
(1)
+ }
+
+ if (written) {
+ value |= written << 24;
+ value |= BIT(26);
+ mbox_send_message(tcu->tx, &value);
+ }
(2)
These are code duplications.
+static void tegra_tcu_uart_stop_rx(struct uart_port *port)
+{
+ (void)port;
+}
+
+static void tegra_tcu_uart_break_ctl(struct uart_port *port, int ctl)
+{
+ (void)port;
+ (void)ctl;
+}
+
+static int tegra_tcu_uart_startup(struct uart_port *port)
+{
+ (void)port;
+
+ return 0;
+}
+
+static void tegra_tcu_uart_shutdown(struct uart_port *port)
+{
+ (void)port;
+}
+
+static void tegra_tcu_uart_set_termios(struct uart_port *port,
+ struct ktermios *new,
+ struct ktermios *old)
+{
+ (void)port;
+ (void)new;
+ (void)old;
+}
Remove those unused stub contents.
+ return uart_set_options(&tegra_tcu_uart_port, cons,
+ 115200, 'n', 8, 'n');
Can't it be one line?
+static void tegra_tcu_receive(struct mbox_client *client, void *msg_p)
+{
+ struct tty_port *port = &tegra_tcu_uart_port.state->port;
+ uint32_t msg = *(uint32_t *)msg_p;
Redundant casting.
+ unsigned int num_bytes;
+ int i;
+
+ num_bytes = (msg >> 24) & 0x3;
Two magic numbers.
+ for (i = 0; i < num_bytes; i++)
+ tty_insert_flip_char(port, (msg >> (i*8)) & 0xff, TTY_NORMAL);
+
+ tty_flip_buffer_push(port);
+}
+MODULE_AUTHOR("Mikko Perttunen <mperttunen@xxxxxxxxxx>");
+MODULE_LICENSE("GPL v2");
+MODULE_DESCRIPTION("NVIDIA Tegra Combined UART driver");
diff --git a/include/uapi/linux/serial_core.h b/include/uapi/linux/serial_core.h
index dce5f9dae121..eaf3c303cba6 100644
--- a/include/uapi/linux/serial_core.h
+++ b/include/uapi/linux/serial_core.h
@@ -281,4 +281,7 @@
/* MediaTek BTIF */
#define PORT_MTK_BTIF 117
+/* NVIDIA Tegra Combined UART */
+#define PORT_TEGRA_TCU 118
Check if there is an unused gap. IIRC we still have one near to 40ish.