Received: by 2002:a25:c593:0:0:0:0:0 with SMTP id v141csp520311ybe; Wed, 18 Sep 2019 22:37:10 -0700 (PDT) X-Google-Smtp-Source: APXvYqygYllfgWdDU3b1TNWERbjIz5lsBlXJVRvWH5YeY0Iyd8X5H2wCJl51r1fl/q5xJaUnq6FP X-Received: by 2002:a17:906:90d4:: with SMTP id v20mr7298751ejw.189.1568871430418; Wed, 18 Sep 2019 22:37:10 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1568871430; cv=none; d=google.com; s=arc-20160816; b=TsvSsXChtxJ9fk8Ikho1OGLAsRJN2R7Tr4GjTm0HTaaVGio6Jna9g33Cu/1+AZF3ch XgPhMt/pnqSDWHA5m7axxVosN9oKdjuV+42bF6khHA0KRwSoo2WYi9jFJjn8Nw+6bXQ8 beX8w28k8q8u6yMYT+NPKxbzeKW1KffGSRn+XfyB3n40Dr0HLlqy+NbzBCzZSiBhNPl8 /BHLaiIri9EK0icVGi4OfhrePTOUQlc0kdcfah6lZx7WNczJgFyldX8AN+JMXlFM7+aG Ikq6HoPWu/i41t3ogrSYYTzqs5iBDo+9qgeGeq2tNVMIfcYVDQpL5o5l/vxOlCMF1etQ WAqQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:date:subject:cc:to:from :dkim-signature; bh=stmOjL/c/ExaFL4SdKPgQAdlTh6GvwhfkrAMYKUCxGQ=; b=eZ1X3GMQWfJ21WKpFgOu3s8QFhpQsFouwe+1latJY5blnojultTkgqC69j658F5HT4 kgqESMfSVNW2YzlazRp/EY2wk8rQKKhgU2PruZOrzPtqzfOs0Ere9tCKvUx8AjbKJILh IGo21kIZ+wYulVLUnzodWklmhQyXfPa/Df2hg5kK7gSuhCy3p7y2TiyIvMArJTzn+huc 9kYridzxYwb2OoV2rZOqyKcaGxTCoTL5KO2qUJ0I+ll5CZmMs+nNgUdOpg7DrzeD8pPI PsIYBt3Yx5LK9yjW7EWIHBW0k6k+i22sSSOZQ5DX8mVBWKVY1yIDYxXgIWROek0b39GE 0r8g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=LKjd4wKV; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id y10si4042370ejw.76.2019.09.18.22.36.47; Wed, 18 Sep 2019 22:37:10 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=LKjd4wKV; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2387488AbfISDKv (ORCPT + 99 others); Wed, 18 Sep 2019 23:10:51 -0400 Received: from mail-pf1-f193.google.com ([209.85.210.193]:43521 "EHLO mail-pf1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730490AbfISDKv (ORCPT ); Wed, 18 Sep 2019 23:10:51 -0400 Received: by mail-pf1-f193.google.com with SMTP id a2so1253573pfo.10; Wed, 18 Sep 2019 20:10:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=stmOjL/c/ExaFL4SdKPgQAdlTh6GvwhfkrAMYKUCxGQ=; b=LKjd4wKV1Xg37mwBYmhkZq+3qE2dBemA3DYutLccscjp/M7E19G/L0otcN+62N6aYW z15Vkr4iZLxpLcHLobz52s+HwjxSw0BCXgJ+LJvGLFIExjN08u/mxJZVYZJzAwIXcjmg iN8rL7IU7fZp8yNjgGEwj6rEZPMEz8I6OVPSYlh26Vx3K1kWXCIyre1dxUxw0QHrmxjv EpCVrWbbNiXr4abM01WWIQ1bDBgn7geCHJcBUEz6qwb9tUe8gx/exKujMFSzCut6NNiS if6JGTLMoyvCXHA+8Q7DMVc1eU6zRHiJf35SAapOE5dLTPdqApcvCwfj9u/Ai654Nits 8T5A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=stmOjL/c/ExaFL4SdKPgQAdlTh6GvwhfkrAMYKUCxGQ=; b=CIsrqCeleDqg8jD6Tzmfi7GpTI3LSNr9BRDCsvQUJR8vumgUIjL7pl8IMVTE1jC9vC mBZqXqgkK2KLMszAvI/PGmemaf9lNJITS7uS7DsZciARyO8/byRe1RKLUffCInNRFPUG 6kt83MGWR05uGqUmrft/8jxS49GhPr5JC1AIkV1+RskoxN+7y3X9lUJA7Ce0ol4Iqtkr FI0krGoYavHvqIr+KGENzAmwkQgKGRmrZ6L5/u8D+dBZyJziGyis9BQQWWDXFsefKRgQ mH+QIeC6MJf+/3Mf/bjoWDnfE3P74ZDCG1xoGOnwvNl5B81Ft3v+q1RRt7ZP+5ib/v56 uPJQ== X-Gm-Message-State: APjAAAXxy2zIqfoqM5lcrfZpPUtEFJUeqfL1a6XT+y/fGVNyOTeXPwFK dMY640vtWDsPqH/9Q3JuafA= X-Received: by 2002:aa7:851a:: with SMTP id v26mr8067420pfn.11.1568862649036; Wed, 18 Sep 2019 20:10:49 -0700 (PDT) Received: from sh04182tmp293.spreadtrum.com ([117.18.48.82]) by smtp.gmail.com with ESMTPSA id e127sm11182440pfe.37.2019.09.18.20.10.46 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 18 Sep 2019 20:10:48 -0700 (PDT) From: Lanqing Liu To: gregkh@linuxfoundation.org, jslaby@suse.com Cc: baolin.wang@linaro.org, lanqing.liu@unisoc.com, linux-serial@vger.kernel.org, linux-kernel@vger.kernel.org, orsonzhai@gmail.com, zhang.lyra@gmail.com Subject: [PATCH v2] serial: sprd: Add polling IO support Date: Thu, 19 Sep 2019 11:10:37 +0800 Message-Id: X-Mailer: git-send-email 1.9.1 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org In order to access the UART without the interrupts, the kernel uses the basic polling methods for IO with the device. With these methods implemented, it is now possible to enable kgdb during early boot over serial. Signed-off-by: Lanqing Liu --- Change from v1: - Add poll_init() support. --- drivers/tty/serial/sprd_serial.c | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/drivers/tty/serial/sprd_serial.c b/drivers/tty/serial/sprd_serial.c index 73d71a4..d833160 100644 --- a/drivers/tty/serial/sprd_serial.c +++ b/drivers/tty/serial/sprd_serial.c @@ -911,6 +911,34 @@ static void sprd_pm(struct uart_port *port, unsigned int state, } } +#ifdef CONFIG_CONSOLE_POLL +static int sprd_poll_init(struct uart_port *port) +{ + if (port->state->pm_state != UART_PM_STATE_ON) { + sprd_pm(port, UART_PM_STATE_ON, 0); + port->state->pm_state = UART_PM_STATE_ON; + } + + return 0; +} + +static int sprd_poll_get_char(struct uart_port *port) +{ + while (!(serial_in(port, SPRD_STS1) & SPRD_RX_FIFO_CNT_MASK)) + cpu_relax(); + + return serial_in(port, SPRD_RXD); +} + +static void sprd_poll_put_char(struct uart_port *port, unsigned char ch) +{ + while (serial_in(port, SPRD_STS1) & SPRD_TX_FIFO_CNT_MASK) + cpu_relax(); + + serial_out(port, SPRD_TXD, ch); +} +#endif + static const struct uart_ops serial_sprd_ops = { .tx_empty = sprd_tx_empty, .get_mctrl = sprd_get_mctrl, @@ -928,6 +956,11 @@ static void sprd_pm(struct uart_port *port, unsigned int state, .config_port = sprd_config_port, .verify_port = sprd_verify_port, .pm = sprd_pm, +#ifdef CONFIG_CONSOLE_POLL + .poll_init = sprd_poll_init, + .poll_get_char = sprd_poll_get_char, + .poll_put_char = sprd_poll_put_char, +#endif }; #ifdef CONFIG_SERIAL_SPRD_CONSOLE -- 1.9.1