Received: by 2002:a25:c593:0:0:0:0:0 with SMTP id v141csp6579572ybe; Wed, 18 Sep 2019 05:56:58 -0700 (PDT) X-Google-Smtp-Source: APXvYqzvrb7fTebOEh32cLimKw18wVRnzyzHB+AyXcIgXgMLvbyiW7+O4nTAh3MUQ6aTk8kJFSdI X-Received: by 2002:a17:906:a954:: with SMTP id hh20mr9460656ejb.196.1568811418369; Wed, 18 Sep 2019 05:56:58 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1568811418; cv=none; d=google.com; s=arc-20160816; b=YyU+yVQdxOYTWDj/lAG8/gw4TwoBnOb2HfWapv1gBdF0eiXmnb0lwI1OrAIXxdMCNl w2r1Pw0LX91pXHCeNFgxeOaEydpUKRrEHZvie5lWH9+L7MuUsspUng4q5PXVgYsNaghB C6kG+THrN/vPbF23bPaMXO3Cv9IdbUJ7tekjt72munp/oaOfNLkCqVKQOXIp9Wzb1qEn Eb46SR8XloLqqMsMQrn4BmhuYDdLExemv6yf7J7pbBbHHh93EbN3ZJBZKyCo7E/Op2Xv PNTKwpteNCAoKOfenvMN1DUZ40VIyQekoSXwMLL+dPTNzl2pFOFde0yQ4ZvV41/bFx6A 9G4A== 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=yiaoTcLMObHEuVBOS7Z0L3j322h3GH76oh+bOCjNQ+M=; b=q/Y0fvBTXyoauUT8evxhZ5ZYfQ/llw2e15v2ZXOHGPuOoshEUqUvgXU7YDjTyEBhLe YQjcxJgA1Qhl2JPhc54qtriYcwInlLLMFnH/yJ1LZJR7EJrBR8E3N93ewpSdR93xZJJ/ mHoMpaopf0xHTHfGgmhNvjjdavI2L9pHZ+6EjO0aLqQh/AkoLdHJ8pyhLytQfcfdjZKn zVJTViW6JHoPF6psyQnpkDarjUONw1R6F3zEKAVREnw00RE5yGO2Zm24fgR9Cz6T77NU 2nvZrnyAkHeX3Logcz6EWB0AIwhUWlKnrzV0WysFpwB3OZzRVJpP4YOiyserRGBow9e0 0INQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=A46fF7k2; 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 j4si3638820edl.192.2019.09.18.05.56.34; Wed, 18 Sep 2019 05:56:58 -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=A46fF7k2; 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 S1729889AbfIRIQT (ORCPT + 99 others); Wed, 18 Sep 2019 04:16:19 -0400 Received: from mail-pg1-f194.google.com ([209.85.215.194]:43640 "EHLO mail-pg1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727152AbfIRIQS (ORCPT ); Wed, 18 Sep 2019 04:16:18 -0400 Received: by mail-pg1-f194.google.com with SMTP id u72so3548530pgb.10; Wed, 18 Sep 2019 01:16:16 -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=yiaoTcLMObHEuVBOS7Z0L3j322h3GH76oh+bOCjNQ+M=; b=A46fF7k2WxMdNCCWecjkXhZ8lroe2Oul1bU8/jtD2Ry1mNLUae7EhNpBtrSLcUuGJU ULXbo1gf0R0B5jNH7oe6PZtaZibGEbWgGP/i6LAzuGlEzjFgNFX4WUWGYoQ1UqCk9Da3 1mbUZD0bKlIzyfONcK7Q9ZHi6rkuEMNpdJ1pqh8FPelRiGhqNnqtK+K3Y0d+ZXkiapjP 6BWDVOYDBuzAFeDj8YegzM3zMPZ+0Xp7xU7vlowrqWOU3LR0MNNB8fPJGvoAiL9S9OZO IJYwWX4QEJkVeDQfwNXBhU67DZNpxWsoHJNGJprkilpQtac371ot2EutK9xswnmwP6Mi duPw== 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=yiaoTcLMObHEuVBOS7Z0L3j322h3GH76oh+bOCjNQ+M=; b=UnvY2nUYjkkhyY+1vymkcUwDB6AUGcODnx2OSjp3WrozpHNna7JkgX6B9gLuFo3Yb6 b2FRVivwnqNZDrHDOxossNAgtYCEllUQ0fi440tJEamSk7qneUvZ6rZMn7AE/xMFZCc5 FcsJC1LU8OExsOPUCs0opiCvvFdD7YiHQlQnspqYInX+6X+6tt76FWX8eM7FbfZgGwW9 IlC9IHvaG2dnANslwyAQ40N6ce/O8NJZR7tatpfYwex91KG0/ixUwsAZvqFSU2F9gA8w sLBvDzvt+98vGc1Xf8lU/EW7cuk4M1rfmAuWwuFYfRjBwL5DofC74WjMRmg17Qt1qH3w SuhA== X-Gm-Message-State: APjAAAX0z1wKzUxDhYZzhb4MXAJhLu0oTSYbJfYOl/qhyg5ED14kfGb1 UNIStt8NJHKYiBoYJqJ8Tr0= X-Received: by 2002:a63:2744:: with SMTP id n65mr2762512pgn.277.1568794576552; Wed, 18 Sep 2019 01:16:16 -0700 (PDT) Received: from sh04182tmp293.spreadtrum.com ([117.18.48.82]) by smtp.gmail.com with ESMTPSA id y4sm5731309pga.60.2019.09.18.01.16.14 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 18 Sep 2019 01:16:16 -0700 (PDT) From: Lanqing Liu To: gregkh@linuxfoundation.org, jslaby@suse.com Cc: baolin.wang@linaro.org, lanqing.liu@unisoc.com, liuhhome@gmail.com, linux-serial@vger.kernel.org, linux-kernel@vger.kernel.org, orsonzhai@gmail.com, zhang.lyra@gmail.com Subject: [PATCH] serial: sprd: Add polling IO support Date: Wed, 18 Sep 2019 16:15:05 +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 --- drivers/tty/serial/sprd_serial.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/drivers/tty/serial/sprd_serial.c b/drivers/tty/serial/sprd_serial.c index 73d71a4..579ab41 100644 --- a/drivers/tty/serial/sprd_serial.c +++ b/drivers/tty/serial/sprd_serial.c @@ -911,6 +911,24 @@ static void sprd_pm(struct uart_port *port, unsigned int state, } } +#ifdef CONFIG_CONSOLE_POLL +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 +946,10 @@ 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_get_char = sprd_poll_get_char, + .poll_put_char = sprd_poll_put_char, +#endif }; #ifdef CONFIG_SERIAL_SPRD_CONSOLE -- 1.9.1