From nobody Mon Apr 27 11:35:34 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id E6C8BCCA47C for ; Tue, 14 Jun 2022 07:54:28 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1355564AbiFNHyY (ORCPT ); Tue, 14 Jun 2022 03:54:24 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:39964 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1356003AbiFNHxr (ORCPT ); Tue, 14 Jun 2022 03:53:47 -0400 Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5EA202BD7; Tue, 14 Jun 2022 00:53:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1655193224; x=1686729224; h=from:to:cc:subject:date:message-id:mime-version: content-transfer-encoding; bh=wANyQz1SPCw25Wuqev/1fBXire9ICHZa91oCiUyQF5A=; b=TrPjapOHMkAQNZ7xiM+9D4q+Rnve0sex+SOvKWJrdlyNTLZ4Spflyun2 siB+dS6pxIF3yPVBCgqzKBpkjOabg63XroZGsXvkIIYfdUZHjTpDnXbGq do4tfUdj6YsdOlFS/4R6pnrh+2nsUQYkErOyyUSfwo8BjsfzjoKNuAMVa rIN3RT6AhqYvtw96t4S8srC5xFXCW5qBOOPzDaFJ7Hi12ejIgvJbwHYU9 EGYTSh/4dm64+zcmDi+YZbz9jIMf3B5bs0+uUrggt27Mfimmg1f4DY4e2 jSDyPLOs1glCIXfljyiYo4RYrr0kAc0qAmTMBhWMehtcCKCvoeOxgogAe w==; X-IronPort-AV: E=McAfee;i="6400,9594,10377"; a="279260583" X-IronPort-AV: E=Sophos;i="5.91,299,1647327600"; d="scan'208";a="279260583" Received: from fmsmga007.fm.intel.com ([10.253.24.52]) by orsmga102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 14 Jun 2022 00:53:43 -0700 X-IronPort-AV: E=Sophos;i="5.91,299,1647327600"; d="scan'208";a="588305944" Received: from jlaghzal-mobl1.ger.corp.intel.com (HELO ijarvine-MOBL2.ger.corp.intel.com) ([10.252.32.175]) by fmsmga007-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 14 Jun 2022 00:53:41 -0700 From: =?UTF-8?q?Ilpo=20J=C3=A4rvinen?= To: Russell King , Greg Kroah-Hartman , Jiri Slaby , Lukas Wunner , linux-serial@vger.kernel.org, linux-kernel@vger.kernel.org Cc: =?UTF-8?q?Ilpo=20J=C3=A4rvinen?= , =?UTF-8?q?Nuno=20Gon=C3=A7alves?= Subject: [PATCH] serial: pl011: UPSTAT_AUTORTS requires .throttle/unthrottle Date: Tue, 14 Jun 2022 10:53:33 +0300 Message-Id: <20220614075333.8382-1-ilpo.jarvinen@linux.intel.com> X-Mailer: git-send-email 2.30.2 MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The driver must provide throttle and unthrottle in uart_ops when it sets UPSTAT_AUTORTS. Add them using existing stop_rx & enable_interrupts functions. Reported-by: Nuno Gon=C3=A7alves Tested-by: Nuno Gon=C3=A7alves Fixes: 2a76fa283098 (serial: pl011: Adopt generic flag to store auto RTS st= atus) Cc: Lukas Wunner Signed-off-by: Ilpo J=C3=A4rvinen --- drivers/tty/serial/amba-pl011.c | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/drivers/tty/serial/amba-pl011.c b/drivers/tty/serial/amba-pl01= 1.c index 97ef41cb2721..16a21422ddce 100644 --- a/drivers/tty/serial/amba-pl011.c +++ b/drivers/tty/serial/amba-pl011.c @@ -1367,6 +1367,15 @@ static void pl011_stop_rx(struct uart_port *port) pl011_dma_rx_stop(uap); } =20 +static void pl011_throttle_rx(struct uart_port *port) +{ + unsigned long flags; + + spin_lock_irqsave(&port->lock, flags); + pl011_stop_rx(port); + spin_unlock_irqrestore(&port->lock, flags); +} + static void pl011_enable_ms(struct uart_port *port) { struct uart_amba_port *uap =3D @@ -1788,9 +1797,10 @@ static int pl011_allocate_irq(struct uart_amba_port = *uap) */ static void pl011_enable_interrupts(struct uart_amba_port *uap) { + unsigned long flags; unsigned int i; =20 - spin_lock_irq(&uap->port.lock); + spin_lock_irqsave(&uap->port.lock, flags); =20 /* Clear out any spuriously appearing RX interrupts */ pl011_write(UART011_RTIS | UART011_RXIS, uap, REG_ICR); @@ -1812,7 +1822,14 @@ static void pl011_enable_interrupts(struct uart_amba= _port *uap) if (!pl011_dma_rx_running(uap)) uap->im |=3D UART011_RXIM; pl011_write(uap->im, uap, REG_IMSC); - spin_unlock_irq(&uap->port.lock); + spin_unlock_irqrestore(&uap->port.lock, flags); +} + +static void pl011_unthrottle_rx(struct uart_port *port) +{ + struct uart_amba_port *uap =3D container_of(port, struct uart_amba_port, = port); + + pl011_enable_interrupts(uap); } =20 static int pl011_startup(struct uart_port *port) @@ -2225,6 +2242,8 @@ static const struct uart_ops amba_pl011_pops =3D { .stop_tx =3D pl011_stop_tx, .start_tx =3D pl011_start_tx, .stop_rx =3D pl011_stop_rx, + .throttle =3D pl011_throttle_rx, + .unthrottle =3D pl011_unthrottle_rx, .enable_ms =3D pl011_enable_ms, .break_ctl =3D pl011_break_ctl, .startup =3D pl011_startup, --=20 tg: (f2906aa86338..) pl011/add-throttle (depends on: tty-next)