From patchwork Tue Oct 4 12:46:16 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicolae Rosia X-Patchwork-Id: 9361763 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id CB06E607D6 for ; Tue, 4 Oct 2016 12:48:53 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id BBF2F28701 for ; Tue, 4 Oct 2016 12:48:53 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id B089D287B9; Tue, 4 Oct 2016 12:48:53 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-4.1 required=2.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED, FREEMAIL_FROM, RCVD_IN_DNSWL_MED, T_DKIM_INVALID autolearn=ham version=3.3.1 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.9]) (using TLSv1.2 with cipher AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 3F26A2897A for ; Tue, 4 Oct 2016 12:48:52 +0000 (UTC) Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.85_2 #1 (Red Hat Linux)) id 1brP7s-00055O-5Z; Tue, 04 Oct 2016 12:47:16 +0000 Received: from mail-wm0-x242.google.com ([2a00:1450:400c:c09::242]) by bombadil.infradead.org with esmtps (Exim 4.85_2 #1 (Red Hat Linux)) id 1brP7e-000509-Uu for linux-arm-kernel@lists.infradead.org; Tue, 04 Oct 2016 12:47:04 +0000 Received: by mail-wm0-x242.google.com with SMTP id p138so19514727wmb.0 for ; Tue, 04 Oct 2016 05:46:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=gPOtOvFxPD/znDEnWXPV+ZmPOiEiM68nW2pWRyV414Q=; b=yliJgjo6DkSl0AMSiW/phiseMx+mTAS2nfNvaFOZIt5LGBi/LgYfYf/db5FtnfDdM+ lLLa7mxS0SJBqls9fhHPP8F0jWTor3o5IYUZSypt3+GVeJcusVBEVfXP6xZ925Cz2EMG Pq939Dr/0F0RIX9EcOPmwuWBiU5eQByu/jzeTBRNtL0kkedgeQtakb8uTqpv762KtY5U 8mW19vU2VWNQTNhrjeGmjSTrm9c7fXsdcnR9tEf5RE1HnOUlWFYcn7oFU7AJX339xBs5 s6teaf8ZEu2ZmFksdpRvJ7kzlpH8lo0Nnl8VHmFaGtQE3j1uRilPHb63dL5feDRQ02no tI4g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=gPOtOvFxPD/znDEnWXPV+ZmPOiEiM68nW2pWRyV414Q=; b=Ploq5YE5ROMDBGc1QjtnBzq4u3XPZiS9R/w0VKAa6p7RYjd3nKPzk/S79nurHqlYcn KrMlGT68m5BweP6ykILk44mjy2EhWW9ffEvKOJg2pPxWryCTp6ovxWQ1dCO9XJR1TJ2b rzvgUKLOvYY/r6FpPLolbYjrisFzGOoVuobgOzTpCf/o2AHlFoNqfKF4tHTbekgG4Dni rQRBlKIs09foMAk4I4Ze1AR9SQtGOz8APJU2kXPFEaYY/9v8ynB+50CX8TcU2HAdFI0p r8NNyaYNS+MVClKdc5bFMv+ZHe9o+dg5SLHe5Bx5TiYsGMcRwR8JQ8auCXo+VNZ2bvvq UkcQ== X-Gm-Message-State: AA6/9RnQlFLDzuY6MShIAw6HNPrZvyplL5IP4/MXf9/hSALCb6hvGPn6t4TldTyZrhoSJQ== X-Received: by 10.194.62.212 with SMTP id a20mr3636041wjs.180.1475585201154; Tue, 04 Oct 2016 05:46:41 -0700 (PDT) Received: from rosia.com ([80.97.4.166]) by smtp.gmail.com with ESMTPSA id m75sm24196104wmi.0.2016.10.04.05.46.39 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 04 Oct 2016 05:46:40 -0700 (PDT) From: Nicolae Rosia To: linux-serial@vger.kernel.org Subject: [PATCH 1/2] tty: serial: fsl_lpuart: add polled console functions Date: Tue, 4 Oct 2016 15:46:16 +0300 Message-Id: <1475585177-28777-2-git-send-email-nicolae.rosia.oss@gmail.com> X-Mailer: git-send-email 2.5.5 In-Reply-To: <1475585177-28777-1-git-send-email-nicolae.rosia.oss@gmail.com> References: <1475585177-28777-1-git-send-email-nicolae.rosia.oss@gmail.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20161004_054703_205160_2849DE65 X-CRM114-Status: GOOD ( 12.91 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Bhuvanchandra DV , Greg Kroah-Hartman , Stefan Agner , Stefan Golinschi , Jiri Slaby , Nicolae Rosia , linux-arm-kernel@lists.infradead.org MIME-Version: 1.0 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org X-Virus-Scanned: ClamAV using ClamSMTP From: Nicolae Rosia This adds polling functions as used by kgdb. Signed-off-by: Nicolae Rosia Signed-off-by: Stefan Golinschi --- drivers/tty/serial/fsl_lpuart.c | 66 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) diff --git a/drivers/tty/serial/fsl_lpuart.c b/drivers/tty/serial/fsl_lpuart.c index de9d510..49d7526 100644 --- a/drivers/tty/serial/fsl_lpuart.c +++ b/drivers/tty/serial/fsl_lpuart.c @@ -431,6 +431,67 @@ static void lpuart_flush_buffer(struct uart_port *port) } } +#if defined(CONFIG_CONSOLE_POLL) + +static int lpuart_poll_init(struct uart_port *port) +{ + struct lpuart_port *sport = container_of(port, + struct lpuart_port, port); + unsigned long flags; + unsigned char temp; + + sport->port.fifosize = 0; + + spin_lock_irqsave(&sport->port.lock, flags); + /* Disable Rx & Tx */ + writeb(0, sport->port.membase + UARTCR2); + + temp = readb(sport->port.membase + UARTPFIFO); + /* Enable Rx and Tx FIFO */ + writeb(temp | UARTPFIFO_RXFE | UARTPFIFO_TXFE, + sport->port.membase + UARTPFIFO); + + /* flush Tx and Rx FIFO */ + writeb(UARTCFIFO_TXFLUSH | UARTCFIFO_RXFLUSH, + sport->port.membase + UARTCFIFO); + + /* explicitly clear RDRF */ + if (readb(sport->port.membase + UARTSR1) & UARTSR1_RDRF) { + readb(sport->port.membase + UARTDR); + writeb(UARTSFIFO_RXUF, sport->port.membase + UARTSFIFO); + } + + writeb(0, sport->port.membase + UARTTWFIFO); + writeb(1, sport->port.membase + UARTRWFIFO); + + /* Enable Rx and Tx */ + writeb(UARTCR2_RE | UARTCR2_TE, sport->port.membase + UARTCR2); + spin_unlock_irqrestore(&sport->port.lock, flags); + + return 0; +} + +static void lpuart_poll_put_char(struct uart_port *port, unsigned char c) +{ + unsigned int status; + + /* drain */ + while (!(readb(port->membase + UARTSR1) & UARTSR1_TDRE)) + barrier(); + + writeb(c, port->membase + UARTDR); +} + +static int lpuart_poll_get_char(struct uart_port *port) +{ + if (!(readb(port->membase + UARTSR1) & UARTSR1_RDRF)) + return NO_POLL_CHAR; + + return readb(port->membase + UARTDR); +} + +#endif + static inline void lpuart_transmit_buffer(struct lpuart_port *sport) { struct circ_buf *xmit = &sport->port.state->xmit; @@ -1596,6 +1657,11 @@ static const struct uart_ops lpuart_pops = { .config_port = lpuart_config_port, .verify_port = lpuart_verify_port, .flush_buffer = lpuart_flush_buffer, +#if defined(CONFIG_CONSOLE_POLL) + .poll_init = lpuart_poll_init, + .poll_get_char = lpuart_poll_get_char, + .poll_put_char = lpuart_poll_put_char, +#endif }; static const struct uart_ops lpuart32_pops = {