From patchwork Wed Nov 27 05:56:45 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Joakim Zhang X-Patchwork-Id: 1201339 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=nxp.com header.i=@nxp.com header.b="IO5+RMB1"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 47N95T5dTYz9sSv for ; Wed, 27 Nov 2019 16:57:01 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726470AbfK0F4v (ORCPT ); Wed, 27 Nov 2019 00:56:51 -0500 Received: from mail-eopbgr00087.outbound.protection.outlook.com ([40.107.0.87]:58850 "EHLO EUR02-AM5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726092AbfK0F4u (ORCPT ); Wed, 27 Nov 2019 00:56:50 -0500 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=dA0PnZhT0KbKCPJv/GOCFPREjnSYT5w9AwxEWlglf5skruGR7leBSl8bJG3jep5tRnLgyEAHqVcu7kKNogQcNqtWPeLyGhawiHSAlgnN2RNjO0Szh9ofCfndVbGpIE1kcBuM2azX2dZD8hTsa7cPTUFdQU7d+Gf6JPSjQ5v8agWsyELju2NCibsxGVgNsJYisbL26Z98/+e2kQNyuc69Q9RluDmYN8P4IwVTi0AYDw6AuBZOmWZiPA7hnBEQM20VBfI66SCwFnktzfH/hUUUqDD/bdNnz72GnOkTqFZSdtuHcTdUlWQj5j2r+G3Gg0QnM/YHoLT3gFSQI4U8dOZK1A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=MHsJCwqcu9hmiODUA51jX69Ub7oY6XfhYMvofqmBDck=; b=N1kHl3XMqRCX7vO3YVrSEG74xWTXpRL7kLz7HKDsbviDl6ijozQbNNl1orH+WFTw4FGyVNxwp6Ocd/ch2WNnL0ausR4izbFMhWazxwsD96PqRmZ7Az8eSPVPoADo1OYVLlA27E11+Be6kpG6/YHIcNjSyD3nRWmpwGbGszFzMjvPd2/Ql7TXl08GU7pN3OhqKZh66eV8SzpE1zRSfoxs8SoagcSbChFMsKxduUY2iVbNsYdBCz48lkC36DsPBwyuAcRUNTNvgy11mxyj1l3jfounqR0BmIgRNHesb5VGVl75oEafXZ1MHA8EMigpECJyW1JCaPHFC54i3Y8/O3ra0w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=MHsJCwqcu9hmiODUA51jX69Ub7oY6XfhYMvofqmBDck=; b=IO5+RMB1rAoCZBz5jevxsjSOH48bbm+sA/1a333VKrLCNJESd3qE5SlN9RRvC8zoggdIMj8WAyqgqe5NpA6qiURVs0koYQ3A0PyN2uNNTqCsl2e42DmpQLA9B9Ec9FXbCM2M2x762ux8BODsRsLJzvDT9LyLyv8eNn84B9g5qdU= Received: from DB7PR04MB4618.eurprd04.prod.outlook.com (52.135.139.151) by DB7PR04MB4409.eurprd04.prod.outlook.com (52.135.137.147) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2495.17; Wed, 27 Nov 2019 05:56:45 +0000 Received: from DB7PR04MB4618.eurprd04.prod.outlook.com ([fe80::1c96:c591:7d51:64e6]) by DB7PR04MB4618.eurprd04.prod.outlook.com ([fe80::1c96:c591:7d51:64e6%4]) with mapi id 15.20.2474.023; Wed, 27 Nov 2019 05:56:45 +0000 From: Joakim Zhang To: "mkl@pengutronix.de" , "sean@geanix.com" , "linux-can@vger.kernel.org" CC: dl-linux-imx , "netdev@vger.kernel.org" , Joakim Zhang Subject: [PATCH V2 1/4] can: flexcan: fix deadlock when using self wakeup Thread-Topic: [PATCH V2 1/4] can: flexcan: fix deadlock when using self wakeup Thread-Index: AQHVpOdz4P6zsP3HCk29mcugpy847Q== Date: Wed, 27 Nov 2019 05:56:45 +0000 Message-ID: <20191127055334.1476-2-qiangqing.zhang@nxp.com> References: <20191127055334.1476-1-qiangqing.zhang@nxp.com> In-Reply-To: <20191127055334.1476-1-qiangqing.zhang@nxp.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-mailer: git-send-email 2.17.1 x-clientproxiedby: SG2PR03CA0089.apcprd03.prod.outlook.com (2603:1096:4:7c::17) To DB7PR04MB4618.eurprd04.prod.outlook.com (2603:10a6:5:38::23) authentication-results: spf=none (sender IP is ) smtp.mailfrom=qiangqing.zhang@nxp.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [119.31.174.71] x-ms-publictraffictype: Email x-ms-office365-filtering-ht: Tenant x-ms-office365-filtering-correlation-id: bd4ea9a9-0b40-4cc8-1ab5-08d772fe956e x-ms-traffictypediagnostic: DB7PR04MB4409:|DB7PR04MB4409: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:8882; x-forefront-prvs: 023495660C x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(4636009)(396003)(136003)(39860400002)(376002)(346002)(366004)(54534003)(199004)(189003)(26005)(36756003)(110136005)(316002)(386003)(2906002)(66066001)(25786009)(446003)(50226002)(8676002)(2616005)(81156014)(8936002)(11346002)(2501003)(66476007)(64756008)(66556008)(66446008)(99286004)(14454004)(256004)(14444005)(7736002)(52116002)(76176011)(1076003)(4326008)(66946007)(102836004)(2201001)(3846002)(478600001)(86362001)(5660300002)(81166006)(305945005)(6436002)(6116002)(71200400001)(71190400001)(186003)(54906003)(6506007)(6486002)(6512007); DIR:OUT; SFP:1101; SCL:1; SRVR:DB7PR04MB4409; H:DB7PR04MB4618.eurprd04.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; received-spf: None (protection.outlook.com: nxp.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: mv+od0IybI80vK0GcpDbLkHNVL5GkpF2hIRAaCrK0YaIZgrdhflrR0xjtvk1qHprIRJHSmkLwHNYFTv9InQaMsrPUWdOlmjPwt8kQcTTYWMnbQOkvhXu9g4SBnPvNVsv3tRQK3AL2VzYJ4FTLfmiQHhcr/pcHwFWWm/HG6TjAoJP246Zs6p4taECXe93ddOhko0YkZtnQ3a515tsFPh+nKFKT1RCXmr7mcCx4xIabo7TIPO2J3y4LKwN+iQObYshNYT7VZ2dAEMhyhRksb7ABsppkJQpIJiOp315Jxi8ZPrXCoG+iH394kMb/Tto5RkfzLI+bbQ4FM3GmiKYJPlFxfhBWrjieuugSpZqvj4AmBY562aFVYfF0OZjlpJr0R2NOPg1XREcXQMX5G0KSJNRX7xiJC8Wxxp9+DapqhFs+tSiRDsQsRYUYobS46oqf0Zi MIME-Version: 1.0 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: bd4ea9a9-0b40-4cc8-1ab5-08d772fe956e X-MS-Exchange-CrossTenant-originalarrivaltime: 27 Nov 2019 05:56:45.2254 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: /lmSf+FdtdVibgS4r9l8suUqvShFATqo1m6xC9znXVTO7cVxBOY1puWUWMs1XGQpqMNw6FSVyBoRzSLE48FEkA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB7PR04MB4409 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Sean Nyekjaer When suspending, when there is still can traffic on the interfaces the flexcan immediately wakes the platform again. As it should :-). But it throws this error msg: [ 3169.378661] PM: noirq suspend of devices failed On the way down to suspend the interface that throws the error message does call flexcan_suspend but fails to call flexcan_noirq_suspend. That means the flexcan_enter_stop_mode is called, but on the way out of suspend the driver only calls flexcan_resume and skips flexcan_noirq_resume, thus it doesn't call flexcan_exit_stop_mode. This leaves the flexcan in stop mode, and with the current driver it can't recover from this even with a soft reboot, it requires a hard reboot. This patch can fix deadlock when using self wakeup, it happenes to be able to fix another issue that frames out-of-order in first IRQ handler run after wakeup. In wakeup case, after system resume, frames received out-of-order in first IRQ handler, the problem is wakeup latency from frame reception to IRQ handler is much bigger than the counter overflow. This means it's impossible to sort the CAN frames by timestamp. The reason is that controller exits stop mode during noirq resume, then it can receive the frame immediately. If noirq reusme stage consumes much time, it will extend interrupt response time. So exit stop mode during resume stage instead of noirq resume can fix this issue. Fixes: de3578c198c6 ("can: flexcan: add self wakeup support") Signed-off-by: Sean Nyekjaer Signed-off-by: Joakim Zhang ------ ChangeLog: V1->V2: no change. Tested-by: Sean Nyekjaer --- drivers/net/can/flexcan.c | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/drivers/net/can/flexcan.c b/drivers/net/can/flexcan.c index 2efa06119f68..2297663cacb2 100644 --- a/drivers/net/can/flexcan.c +++ b/drivers/net/can/flexcan.c @@ -134,8 +134,7 @@ (FLEXCAN_ESR_ERR_BUS | FLEXCAN_ESR_ERR_STATE) #define FLEXCAN_ESR_ALL_INT \ (FLEXCAN_ESR_TWRN_INT | FLEXCAN_ESR_RWRN_INT | \ - FLEXCAN_ESR_BOFF_INT | FLEXCAN_ESR_ERR_INT | \ - FLEXCAN_ESR_WAK_INT) + FLEXCAN_ESR_BOFF_INT | FLEXCAN_ESR_ERR_INT) /* FLEXCAN interrupt flag register (IFLAG) bits */ /* Errata ERR005829 step7: Reserve first valid MB */ @@ -960,6 +959,12 @@ static irqreturn_t flexcan_irq(int irq, void *dev_id) reg_esr = priv->read(®s->esr); + /* ACK wakeup interrupt */ + if (reg_esr & FLEXCAN_ESR_WAK_INT) { + handled = IRQ_HANDLED; + priv->write(reg_esr & FLEXCAN_ESR_WAK_INT, ®s->esr); + } + /* ACK all bus error and state change IRQ sources */ if (reg_esr & FLEXCAN_ESR_ALL_INT) { handled = IRQ_HANDLED; @@ -1722,6 +1727,9 @@ static int __maybe_unused flexcan_resume(struct device *device) netif_start_queue(dev); if (device_may_wakeup(device)) { disable_irq_wake(dev->irq); + err = flexcan_exit_stop_mode(priv); + if (err) + return err; } else { err = pm_runtime_force_resume(device); if (err) @@ -1767,14 +1775,9 @@ static int __maybe_unused flexcan_noirq_resume(struct device *device) { struct net_device *dev = dev_get_drvdata(device); struct flexcan_priv *priv = netdev_priv(dev); - int err; - if (netif_running(dev) && device_may_wakeup(device)) { + if (netif_running(dev) && device_may_wakeup(device)) flexcan_enable_wakeup_irq(priv, false); - err = flexcan_exit_stop_mode(priv); - if (err) - return err; - } return 0; } From patchwork Wed Nov 27 05:56:47 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Joakim Zhang X-Patchwork-Id: 1201340 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=nxp.com header.i=@nxp.com header.b="eHZkB8hj"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 47N95V2HFdz9sSw for ; Wed, 27 Nov 2019 16:57:02 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726514AbfK0F4x (ORCPT ); Wed, 27 Nov 2019 00:56:53 -0500 Received: from mail-eopbgr00087.outbound.protection.outlook.com ([40.107.0.87]:58850 "EHLO EUR02-AM5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726078AbfK0F4x (ORCPT ); Wed, 27 Nov 2019 00:56:53 -0500 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=feFjjLFMuW1UtBWUOzNCqJr5enbuR2SbDBhy6Yh+elkgh+A83Ug2OR4t6TqkA5Vxbm0AUJAzfo2lU+c0oPHzVDvf99YMIZucMBd0aN0lFLt2xEk4pkt53rjGqN4W3YU4v0bcZOifhZcuhN6GfyAEqv/cG2RdrQEhGIXiUI6+sMSxc0baaibDdTnYkTtBsBjWoUtKrYKd8lAZ5jdYbw7jD6I6Sons24JPGGN6gja+SKdDN1namLuAE3/qJBoAue2yhNGkrlOSIbGdmdxSjyzXroQkGqcKuGjPU8JPJR1GQhTCNtOYjJ36xxcVMionsaoQovJn/DSzAZiZq2v6UnEoGA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=9nUEN8e+VlyozKZZx7C/VE/xSaWP4hQdi5iKQ4l9kqk=; b=cV4QPg8TfEeSp02c9lZGS63FGMLj61oyuymvY3z8JX0BWnXuAue4PAkQ4xC2jUw6hT9XJkSfkd/8MhtjbBWDUvtj4DAy/p5fvKWUHyA7HgGSLzVNK34YJ+m6YeHt4qLgHMLnoKmT3tn68wp+B4g6g1QmTQXMV5t9q4DU4iG1spNPjb4E0oHJ19idVEzZyu5s9/fIlET8WzIJKv68wCP7UVTqe2GZ+l2lS2cgV6ByJ7zSlYU/opUWVTzEE6N1qQ3wpjTXbTmdiNuKZA+cd4+0VL1biLaxN9M/z6XmDR07HNsyf0ea7fAAnk9OfxMbyySwRIf1bhSk3ZANUE5RQWTv/A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=9nUEN8e+VlyozKZZx7C/VE/xSaWP4hQdi5iKQ4l9kqk=; b=eHZkB8hjSaKUvO3bCGg3UfnqmyeFU4F3DJul5gMc39yhEXxmv5qQ2du0QR5bZ3xnByxw/OWhfGn3Plveqhs6Cc/N1sq5L9Vt/AwEgK39yeHZKVutA5q4KrgS5ManY68cOAyI+QQORRAwawqksuwCqf6EZgK92+Vyx9kRKifFuV4= Received: from DB7PR04MB4618.eurprd04.prod.outlook.com (52.135.139.151) by DB7PR04MB4409.eurprd04.prod.outlook.com (52.135.137.147) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2495.17; Wed, 27 Nov 2019 05:56:47 +0000 Received: from DB7PR04MB4618.eurprd04.prod.outlook.com ([fe80::1c96:c591:7d51:64e6]) by DB7PR04MB4618.eurprd04.prod.outlook.com ([fe80::1c96:c591:7d51:64e6%4]) with mapi id 15.20.2474.023; Wed, 27 Nov 2019 05:56:47 +0000 From: Joakim Zhang To: "mkl@pengutronix.de" , "sean@geanix.com" , "linux-can@vger.kernel.org" CC: dl-linux-imx , "netdev@vger.kernel.org" , Joakim Zhang Subject: [PATCH V2 2/4] can: flexcan: try to exit stop mode during probe stage Thread-Topic: [PATCH V2 2/4] can: flexcan: try to exit stop mode during probe stage Thread-Index: AQHVpOd0/zAyRBOEIkuRK6cuc/m3Pg== Date: Wed, 27 Nov 2019 05:56:47 +0000 Message-ID: <20191127055334.1476-3-qiangqing.zhang@nxp.com> References: <20191127055334.1476-1-qiangqing.zhang@nxp.com> In-Reply-To: <20191127055334.1476-1-qiangqing.zhang@nxp.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-mailer: git-send-email 2.17.1 x-clientproxiedby: SG2PR03CA0089.apcprd03.prod.outlook.com (2603:1096:4:7c::17) To DB7PR04MB4618.eurprd04.prod.outlook.com (2603:10a6:5:38::23) authentication-results: spf=none (sender IP is ) smtp.mailfrom=qiangqing.zhang@nxp.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [119.31.174.71] x-ms-publictraffictype: Email x-ms-office365-filtering-ht: Tenant x-ms-office365-filtering-correlation-id: 8f8fb5d8-f6a0-440a-399d-08d772fe96f2 x-ms-traffictypediagnostic: DB7PR04MB4409:|DB7PR04MB4409: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:3826; x-forefront-prvs: 023495660C x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(4636009)(396003)(136003)(39860400002)(376002)(346002)(366004)(54534003)(199004)(189003)(26005)(36756003)(110136005)(316002)(386003)(2906002)(66066001)(25786009)(446003)(50226002)(8676002)(2616005)(81156014)(8936002)(11346002)(2501003)(66476007)(64756008)(66556008)(66446008)(99286004)(14454004)(256004)(14444005)(7736002)(52116002)(76176011)(1076003)(4326008)(66946007)(102836004)(2201001)(3846002)(478600001)(86362001)(5660300002)(81166006)(305945005)(6436002)(6116002)(71200400001)(71190400001)(186003)(54906003)(6506007)(6486002)(6512007); DIR:OUT; SFP:1101; SCL:1; SRVR:DB7PR04MB4409; H:DB7PR04MB4618.eurprd04.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; received-spf: None (protection.outlook.com: nxp.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: OSKJ5/bE4XQa+y582K9plk9At7pCfAblKTV5edhhywlAXdgJ3vV1n17tB8Wgxb6/snU8Io1MUYJY3jOFO2mNo4Fu7fHW4qsnfUWMVBE68qjfq/nenhoKHsGt+I2t0vYFr127HQ6FCkTDOVM8go+5LY5b6DRN129JbauzPilRKzIBeCwLKCijeRnVZuzGpGHo1I7P3nmW8PgK3acvpi++KT3H2uzcEC709H75mDsn2npX0KrnoyPM6r3pIltBY70UJm31NkhODNtWx7VrhY645EW3di1ZmxAudgueGLx/ByEK1DGVFnpMqvHe2QdkJWtXzYjyO6b311RixTzoKRZevObknrD7xE1R0/8D/DkmEmqGbUmnmFp+heYrOQ0fM0SeslcLvr/c4w818jGC72JhOyzPnJRPuEz9/eyRDGwx7pv7JF4fF0NOm4+JhTkZ+jEm MIME-Version: 1.0 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8f8fb5d8-f6a0-440a-399d-08d772fe96f2 X-MS-Exchange-CrossTenant-originalarrivaltime: 27 Nov 2019 05:56:47.7640 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: aUHb35FE1kodg0nfhz6M43KrNV/zwghLkGAODAzCpzDbVGyZ17QULC7SNCgyyIvGNCz6fiYzfczB7B/1ACnWPw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB7PR04MB4409 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org CAN controller could be stucked in stop mode once it enters stop mode when suspend, and then it fails to exit stop mode when resume. Only code reset can get CAN out of stop mode, so add stop mode remove request during probe stage for other methods(soft reset from chip level, unbind/bind driver, etc) to let CAN active again. MCR[LPMACK] will be checked when enable CAN in register_flexcandev(). Suggested-by: Sean Nyekjaer Signed-off-by: Joakim Zhang ------ ChangeLog: V1->V2: new add. Tested-by: Sean Nyekjaer --- drivers/net/can/flexcan.c | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/drivers/net/can/flexcan.c b/drivers/net/can/flexcan.c index 2297663cacb2..5d5ed28d3005 100644 --- a/drivers/net/can/flexcan.c +++ b/drivers/net/can/flexcan.c @@ -449,6 +449,13 @@ static inline int flexcan_exit_stop_mode(struct flexcan_priv *priv) return 0; } +static void flexcan_try_exit_stop_mode(struct flexcan_priv *priv) +{ + /* remove stop request */ + regmap_update_bits(priv->stm.gpr, priv->stm.req_gpr, + 1 << priv->stm.req_bit, 0); +} + static inline void flexcan_error_irq_enable(const struct flexcan_priv *priv) { struct flexcan_regs __iomem *regs = priv->regs; @@ -1649,6 +1656,21 @@ static int flexcan_probe(struct platform_device *pdev) priv->devtype_data = devtype_data; priv->reg_xceiver = reg_xceiver; + if (priv->devtype_data->quirks & FLEXCAN_QUIRK_SETUP_STOP_MODE) { + err = flexcan_setup_stop_mode(pdev); + if (err) + dev_dbg(&pdev->dev, "failed to setup stop-mode\n"); + + /* CAN controller could be stucked in stop mode once it enters + * stop mode when suspend, and then it fails to exit stop + * mode when resume. Only code reset can get CAN out of stop + * mode, so add stop mode remove request here for other methods + * (soft reset, bind, etc) to let CAN active again. MCR[LPMACK] + * will be checked when enable CAN in register_flexcandev(). + */ + flexcan_try_exit_stop_mode(priv); + } + pm_runtime_get_noresume(&pdev->dev); pm_runtime_set_active(&pdev->dev); pm_runtime_enable(&pdev->dev); @@ -1661,12 +1683,6 @@ static int flexcan_probe(struct platform_device *pdev) devm_can_led_init(dev); - if (priv->devtype_data->quirks & FLEXCAN_QUIRK_SETUP_STOP_MODE) { - err = flexcan_setup_stop_mode(pdev); - if (err) - dev_dbg(&pdev->dev, "failed to setup stop-mode\n"); - } - return 0; failed_register: From patchwork Wed Nov 27 05:56:50 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Joakim Zhang X-Patchwork-Id: 1201341 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=nxp.com header.i=@nxp.com header.b="O3YBbGX9"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 47N95V6BN1z9sSx for ; Wed, 27 Nov 2019 16:57:02 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726540AbfK0F44 (ORCPT ); Wed, 27 Nov 2019 00:56:56 -0500 Received: from mail-eopbgr00087.outbound.protection.outlook.com ([40.107.0.87]:58850 "EHLO EUR02-AM5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726092AbfK0F4y (ORCPT ); Wed, 27 Nov 2019 00:56:54 -0500 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=eLA4qH/RxlBFsR4P4BPwJjfFQtqqqqg96K+KxYBgHpC8JorYUpMsUJE0EQyAYPND7gYOMDMsHjJxvJX7Ez/RlEgce5bJcvKPRnpu6Qy35vaGlYuIOcnb8f6j59bTh8MFxwNvnIl2hM8wuICg6wO6iLhRj+GoBcu6MWX6fR8CCn2koO6xjdFOgEUiIIzebrcjni2GA/+uEQrw1zg4qrpA4CYbufZqSyIDpxufoZXlStUzmqce7CaVU+CpTlRUeIkMfc0OD7Ipg77P6buWdgy0jjIJ+g3AK1rNVo7CpXdjgDkGqg/nP+lCgRW7CPT23/MgTN5YbMbZmzxQdmfogBk0CA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=XRlPwnzKqWrpFULnGMLeRW9rtTxzVtqv21c0zoJ7GwY=; b=liS4gBQkaGGaLxnPr4+Ich4jKKWWqwp2/qdGqYskAJd6PWH04/23irnL1HK97/PoV00wsTUSc1MP4b06Ms+BnjRMoO3W9ciO1tG3XTymOKrz8b5czhf+Tr9SNI7V/c2+L9+fXQha9cPGBqFUaUENJ6O7CK9rkmDprUPLTgURQgFrksiRYtUCtwXO1cBBUN8uIgGbAAAhDOZqLeOVbkMebM6kdHVrdHbCo2Rnv9h44V4R2YvfzOE+yHuszqU+1uf3oFk2y14YsweMaQPomhLFEIdtHpZa9HEkG8oD6+KklQ1wH6C9DHvtgpFL0ITOGM4JxFZZ505A547Id1Jrmo5u6Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=XRlPwnzKqWrpFULnGMLeRW9rtTxzVtqv21c0zoJ7GwY=; b=O3YBbGX9ZOWfOVyuo+oK3V5/r/T+5ITaXSBnzcISiaqBhdU/JlZv/94Nyu0WzruV1yxuHpoxc4kl27PDu4U74NbaKOPLZXefMC2EVrcuEmGFQZh24EKPvgcWw0d9mtiON0XZzgwGbeCwjIL+iuKdoGfOoekNPOdZQoCEeVxObkc= Received: from DB7PR04MB4618.eurprd04.prod.outlook.com (52.135.139.151) by DB7PR04MB4409.eurprd04.prod.outlook.com (52.135.137.147) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2495.17; Wed, 27 Nov 2019 05:56:50 +0000 Received: from DB7PR04MB4618.eurprd04.prod.outlook.com ([fe80::1c96:c591:7d51:64e6]) by DB7PR04MB4618.eurprd04.prod.outlook.com ([fe80::1c96:c591:7d51:64e6%4]) with mapi id 15.20.2474.023; Wed, 27 Nov 2019 05:56:50 +0000 From: Joakim Zhang To: "mkl@pengutronix.de" , "sean@geanix.com" , "linux-can@vger.kernel.org" CC: dl-linux-imx , "netdev@vger.kernel.org" , Joakim Zhang Subject: [PATCH V2 3/4] can: flexcan: change the way of stop mode acknowledgment Thread-Topic: [PATCH V2 3/4] can: flexcan: change the way of stop mode acknowledgment Thread-Index: AQHVpOd2DKhlfII7e0yJDtRHRUlwXw== Date: Wed, 27 Nov 2019 05:56:50 +0000 Message-ID: <20191127055334.1476-4-qiangqing.zhang@nxp.com> References: <20191127055334.1476-1-qiangqing.zhang@nxp.com> In-Reply-To: <20191127055334.1476-1-qiangqing.zhang@nxp.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-mailer: git-send-email 2.17.1 x-clientproxiedby: SG2PR03CA0089.apcprd03.prod.outlook.com (2603:1096:4:7c::17) To DB7PR04MB4618.eurprd04.prod.outlook.com (2603:10a6:5:38::23) authentication-results: spf=none (sender IP is ) smtp.mailfrom=qiangqing.zhang@nxp.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [119.31.174.71] x-ms-publictraffictype: Email x-ms-office365-filtering-ht: Tenant x-ms-office365-filtering-correlation-id: 332c5cc6-80c9-4a21-f168-08d772fe9866 x-ms-traffictypediagnostic: DB7PR04MB4409:|DB7PR04MB4409: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:5797; x-forefront-prvs: 023495660C x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(4636009)(396003)(136003)(39860400002)(376002)(346002)(366004)(54534003)(199004)(189003)(26005)(36756003)(110136005)(316002)(386003)(2906002)(66066001)(25786009)(446003)(50226002)(8676002)(2616005)(81156014)(8936002)(11346002)(2501003)(66476007)(64756008)(66556008)(66446008)(99286004)(14454004)(256004)(14444005)(7736002)(52116002)(76176011)(1076003)(4326008)(66946007)(102836004)(2201001)(3846002)(478600001)(86362001)(5660300002)(81166006)(305945005)(6436002)(6116002)(71200400001)(71190400001)(186003)(54906003)(6506007)(6486002)(6512007); DIR:OUT; SFP:1101; SCL:1; SRVR:DB7PR04MB4409; H:DB7PR04MB4618.eurprd04.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; received-spf: None (protection.outlook.com: nxp.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: z5E/NUlusvyTghBA1rNcVVPyl+6Fe6TNIfU4Mj2+I6EZTMCGS2zYqnZqsekBHJdv5BWp+vNV+NRqxraqtdmJOZrEJQB3D8vNcyWoceZ5v3aLVWVwrqG6eK0zFkMRWWTRKM8shhrpKrO5opV7hQndx75cwSSuNXuaAV761xU9Mudxr+y76Yp6uFZth2eKtiI3Yin3/UJS+4xKD1nG+3q5ZYcAKLu8VAiTmz8MGBpBGdtxdthPDPDSt6toThrDu82TYGG8iBY6x9dr5gutllEuHEI+SiitOODqQEUCBnpQ3ESjfv0ASwCcKRFnySo3t1Vs+86QqmCsY4OG+5ZxC9pQLA1RL7fijfd88cCnEgx2qW+GEGyeTfhZ+meBpY1dawLIkXaCThewkRXlPlUczvxfoFAHzLNUh2SbwuAT5a7GH2oxQySk7LKZIcZ9wECgieDk MIME-Version: 1.0 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 332c5cc6-80c9-4a21-f168-08d772fe9866 X-MS-Exchange-CrossTenant-originalarrivaltime: 27 Nov 2019 05:56:50.2296 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: afxbLIsCrYJBbct9pTcoKAl0X3jWlzTwVn9S8GSsAzgEE+p9CDiieSE/IjHorq942RwvOeOSz+ThXD2kuyV6CA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB7PR04MB4409 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Stop mode is entered when Stop mode is requested at chip level and MCR[LPM_ACK] is asserted by the FlexCAN. Double check with IP owner, should poll MCR[LPM_ACK] for stop mode acknowledgment, not the acknowledgment from chip level which is used for glitch filter. Fixes: 5f186c257fa4(can: flexcan: fix stop mode acknowledgment) Signed-off-by: Joakim Zhang ------ ChangeLog: V1->V2: no change. Tested-by: Sean Nyekjaer --- drivers/net/can/flexcan.c | 64 ++++++++++++++++++++------------------- 1 file changed, 33 insertions(+), 31 deletions(-) diff --git a/drivers/net/can/flexcan.c b/drivers/net/can/flexcan.c index 5d5ed28d3005..d178146b3da5 100644 --- a/drivers/net/can/flexcan.c +++ b/drivers/net/can/flexcan.c @@ -388,6 +388,34 @@ static struct flexcan_mb __iomem *flexcan_get_mb(const struct flexcan_priv *priv (&priv->regs->mb[bank][priv->mb_size * mb_index]); } +static int flexcan_enter_low_power_ack(struct flexcan_priv *priv) +{ + struct flexcan_regs __iomem *regs = priv->regs; + unsigned int timeout = FLEXCAN_TIMEOUT_US / 10; + + while (timeout-- && !(priv->read(®s->mcr) & FLEXCAN_MCR_LPM_ACK)) + udelay(10); + + if (!(priv->read(®s->mcr) & FLEXCAN_MCR_LPM_ACK)) + return -ETIMEDOUT; + + return 0; +} + +static int flexcan_exit_low_power_ack(struct flexcan_priv *priv) +{ + struct flexcan_regs __iomem *regs = priv->regs; + unsigned int timeout = FLEXCAN_TIMEOUT_US / 10; + + while (timeout-- && (priv->read(®s->mcr) & FLEXCAN_MCR_LPM_ACK)) + udelay(10); + + if (priv->read(®s->mcr) & FLEXCAN_MCR_LPM_ACK) + return -ETIMEDOUT; + + return 0; +} + static void flexcan_enable_wakeup_irq(struct flexcan_priv *priv, bool enable) { struct flexcan_regs __iomem *regs = priv->regs; @@ -406,7 +434,6 @@ static void flexcan_enable_wakeup_irq(struct flexcan_priv *priv, bool enable) static inline int flexcan_enter_stop_mode(struct flexcan_priv *priv) { struct flexcan_regs __iomem *regs = priv->regs; - unsigned int ackval; u32 reg_mcr; reg_mcr = priv->read(®s->mcr); @@ -418,35 +445,24 @@ static inline int flexcan_enter_stop_mode(struct flexcan_priv *priv) 1 << priv->stm.req_bit, 1 << priv->stm.req_bit); /* get stop acknowledgment */ - if (regmap_read_poll_timeout(priv->stm.gpr, priv->stm.ack_gpr, - ackval, ackval & (1 << priv->stm.ack_bit), - 0, FLEXCAN_TIMEOUT_US)) - return -ETIMEDOUT; - - return 0; + return flexcan_enter_low_power_ack(priv); } static inline int flexcan_exit_stop_mode(struct flexcan_priv *priv) { struct flexcan_regs __iomem *regs = priv->regs; - unsigned int ackval; u32 reg_mcr; /* remove stop request */ regmap_update_bits(priv->stm.gpr, priv->stm.req_gpr, 1 << priv->stm.req_bit, 0); - /* get stop acknowledgment */ - if (regmap_read_poll_timeout(priv->stm.gpr, priv->stm.ack_gpr, - ackval, !(ackval & (1 << priv->stm.ack_bit)), - 0, FLEXCAN_TIMEOUT_US)) - return -ETIMEDOUT; - reg_mcr = priv->read(®s->mcr); reg_mcr &= ~FLEXCAN_MCR_SLF_WAK; priv->write(reg_mcr, ®s->mcr); - return 0; + /* get stop acknowledgment */ + return flexcan_exit_low_power_ack(priv); } static void flexcan_try_exit_stop_mode(struct flexcan_priv *priv) @@ -512,39 +528,25 @@ static inline int flexcan_transceiver_disable(const struct flexcan_priv *priv) static int flexcan_chip_enable(struct flexcan_priv *priv) { struct flexcan_regs __iomem *regs = priv->regs; - unsigned int timeout = FLEXCAN_TIMEOUT_US / 10; u32 reg; reg = priv->read(®s->mcr); reg &= ~FLEXCAN_MCR_MDIS; priv->write(reg, ®s->mcr); - while (timeout-- && (priv->read(®s->mcr) & FLEXCAN_MCR_LPM_ACK)) - udelay(10); - - if (priv->read(®s->mcr) & FLEXCAN_MCR_LPM_ACK) - return -ETIMEDOUT; - - return 0; + return flexcan_exit_low_power_ack(priv); } static int flexcan_chip_disable(struct flexcan_priv *priv) { struct flexcan_regs __iomem *regs = priv->regs; - unsigned int timeout = FLEXCAN_TIMEOUT_US / 10; u32 reg; reg = priv->read(®s->mcr); reg |= FLEXCAN_MCR_MDIS; priv->write(reg, ®s->mcr); - while (timeout-- && !(priv->read(®s->mcr) & FLEXCAN_MCR_LPM_ACK)) - udelay(10); - - if (!(priv->read(®s->mcr) & FLEXCAN_MCR_LPM_ACK)) - return -ETIMEDOUT; - - return 0; + return flexcan_enter_low_power_ack(priv); } static int flexcan_chip_freeze(struct flexcan_priv *priv) From patchwork Wed Nov 27 05:56:52 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Joakim Zhang X-Patchwork-Id: 1201342 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=nxp.com header.i=@nxp.com header.b="pzAJUzwa"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 47N95W2bFqz9sSm for ; Wed, 27 Nov 2019 16:57:03 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726559AbfK0F47 (ORCPT ); Wed, 27 Nov 2019 00:56:59 -0500 Received: from mail-eopbgr150050.outbound.protection.outlook.com ([40.107.15.50]:3753 "EHLO EUR01-DB5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726078AbfK0F45 (ORCPT ); Wed, 27 Nov 2019 00:56:57 -0500 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=TCXUVJvf63uoRLGLZ1bbeJH0b1MpzxZWTiNUGTmcOidkjjeNCyuDHal5w4Iv8X4v/SwxqTnkZSaplsUXmMXXWpjg6Nt1isdLLbPJnt9rV4n+IGrpJFJMAOyuOVaMnYYI6XCkXDd1RjTM396mI69v0MusorsBgCsQYQiJRt8/yZH5IV8fbgdK7dimNUmhOFjz1rQ/FtVPdrcBYIfmUEkuUkecdpPc3EGXcM34tK9fCHUfZuWiNypJeResc4SLF9jz8uINg1VJYHQJu2B9HKA6BaMh+xux5802ITt80jB8P+5yQNXtTf7tb/AcUqJbIH5y3GkL49rBaKOpIMatRZHuJw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=5f84Cx8UmrPuYKl/6j6fd8H4BYxh9f/5OStr+GrMOBY=; b=fXd/J+M4AcXlpnk51TU7xiqUAsMyi+ZToogd7/eyYhi1EMudY6wkQqVLyoXtit6JKLRzZPImWwGoU1g29r7gOED0YvSaTDW61gBxVgaCuTGjGWHV0ROXDadlasm8hDlbJ/uDUGdCa85l11738fD8gW9pazJ2kR6t7+xib0Oit7bwMY9rGzxhjJRsBXiWfxi7PXRnmD7+IUHoTkApzeG1rIYGaC6jjai/2NBHsJ6+kFE+YKQtfLdm5Y8WZUtsQMMtIa+W50dX/f1NCnunlATXloOuR6lv/1r+8MnzVF2nEjwGzPY7j6tCqGvy/gCZ9osmZCP5U5ULTK11E7d8QGMgOQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=5f84Cx8UmrPuYKl/6j6fd8H4BYxh9f/5OStr+GrMOBY=; b=pzAJUzwaAbS5H0TwP3HiYjqMTf139/TNjqYnTNIaObI+RcPG8l2dH07F9bN+r9BzQ6GJ9uw9/OK8Zdl/AzZtf/W5rIWAdHRW/L4HewRxf3HOaBdbWl4cMUWdKSFPTgaXjk1+WixHxSXQHSil5LgaSHdnmU9CC8ucJ3oclWuBu9E= Received: from DB7PR04MB4618.eurprd04.prod.outlook.com (52.135.139.151) by DB7PR04MB4092.eurprd04.prod.outlook.com (52.135.131.11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2474.19; Wed, 27 Nov 2019 05:56:52 +0000 Received: from DB7PR04MB4618.eurprd04.prod.outlook.com ([fe80::1c96:c591:7d51:64e6]) by DB7PR04MB4618.eurprd04.prod.outlook.com ([fe80::1c96:c591:7d51:64e6%4]) with mapi id 15.20.2474.023; Wed, 27 Nov 2019 05:56:52 +0000 From: Joakim Zhang To: "mkl@pengutronix.de" , "sean@geanix.com" , "linux-can@vger.kernel.org" CC: dl-linux-imx , "netdev@vger.kernel.org" , Joakim Zhang Subject: [PATCH V2 4/4] can: flexcan: add LPSR mode support Thread-Topic: [PATCH V2 4/4] can: flexcan: add LPSR mode support Thread-Index: AQHVpOd3D9txXS3dtUSMzmH9fMhQMQ== Date: Wed, 27 Nov 2019 05:56:52 +0000 Message-ID: <20191127055334.1476-5-qiangqing.zhang@nxp.com> References: <20191127055334.1476-1-qiangqing.zhang@nxp.com> In-Reply-To: <20191127055334.1476-1-qiangqing.zhang@nxp.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-mailer: git-send-email 2.17.1 x-clientproxiedby: SG2PR03CA0089.apcprd03.prod.outlook.com (2603:1096:4:7c::17) To DB7PR04MB4618.eurprd04.prod.outlook.com (2603:10a6:5:38::23) authentication-results: spf=none (sender IP is ) smtp.mailfrom=qiangqing.zhang@nxp.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [119.31.174.71] x-ms-publictraffictype: Email x-ms-office365-filtering-ht: Tenant x-ms-office365-filtering-correlation-id: 0968cb74-fd81-4155-088b-08d772fe99dd x-ms-traffictypediagnostic: DB7PR04MB4092:|DB7PR04MB4092: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:2276; x-forefront-prvs: 023495660C x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(4636009)(39860400002)(396003)(366004)(346002)(136003)(376002)(189003)(199004)(54534003)(81156014)(316002)(6486002)(6436002)(6512007)(76176011)(102836004)(11346002)(2501003)(6506007)(386003)(186003)(8676002)(86362001)(5660300002)(66946007)(64756008)(66556008)(66446008)(66476007)(446003)(2201001)(50226002)(26005)(1076003)(25786009)(305945005)(6116002)(7736002)(2616005)(81166006)(3846002)(2906002)(4326008)(8936002)(14454004)(52116002)(36756003)(66066001)(478600001)(71200400001)(110136005)(14444005)(99286004)(256004)(54906003)(71190400001); DIR:OUT; SFP:1101; SCL:1; SRVR:DB7PR04MB4092; H:DB7PR04MB4618.eurprd04.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; received-spf: None (protection.outlook.com: nxp.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: hKOrYiFgepA9eBQRibQ6HVtVYP7a4upPzAPvy17QtBdp1fhG9XKtrTYSTR421Hjp5AQLCU+IFouki9Eeki+yMUdhGpIkedrxb3n4NF0FfPqYD87vyXSXSFMBhSCHZn8ecG606TbiKOxHLJf+rKpzS70PiaWg5NK5mV7Gtd9x6AvD8Y5joOF98toP4zvsPq8cO75KjrfUIMR+90G+rlsoBvOCTyeIVKA5q7shETY/LTOsbe0Q4W8cBOgOc394w65TQipQazGmtQA1u1crANCLH7Ah7XLXvj3LQ79z1dDMDWCWaDSPXnv6DqfO/1+Z//3hAOIk7NqqJv/u7MWLNAbhR31HKMFDdWh6JvpLQD9vSlC36vWlqvCSY3vsnclEtzSqGSCbH/dHl4rno+2kcPj7ChvxiF9oZ8OD/CuxQySsGk5Vs4Wmr3Hve/PbWzVTOiEG MIME-Version: 1.0 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 0968cb74-fd81-4155-088b-08d772fe99dd X-MS-Exchange-CrossTenant-originalarrivaltime: 27 Nov 2019 05:56:52.6862 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: guDkdhyvDrIIekBHxwY4RvEvH9FaxOrZYxruVYxkG2d6K4SDuo8F0v7d+k/mibAb1qgnJi68mnpcu4PdJWs0OQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB7PR04MB4092 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org For i.MX7D LPSR mode, the controller will lost power and got the configuration state lost after system resume back. (coming i.MX8QM/QXP will also completely power off the domain, the controller state will be lost and needs restore). So we need to set pinctrl state again and re-start chip to do re-configuration after resume. For wakeup case, it should not set pinctrl to sleep state by pinctrl_pm_select_sleep_state. For interface is not up before suspend case, we don't need re-configure as it will be configured by user later by interface up. Signed-off-by: Joakim Zhang ------ ChangeLog: V1->V2: no change. --- drivers/net/can/flexcan.c | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/drivers/net/can/flexcan.c b/drivers/net/can/flexcan.c index d178146b3da5..d1509cffdd24 100644 --- a/drivers/net/can/flexcan.c +++ b/drivers/net/can/flexcan.c @@ -26,6 +26,7 @@ #include #include #include +#include #include #define DRV_NAME "flexcan" @@ -1707,7 +1708,7 @@ static int __maybe_unused flexcan_suspend(struct device *device) { struct net_device *dev = dev_get_drvdata(device); struct flexcan_priv *priv = netdev_priv(dev); - int err = 0; + int err; if (netif_running(dev)) { /* if wakeup is enabled, enter stop mode @@ -1719,25 +1720,27 @@ static int __maybe_unused flexcan_suspend(struct device *device) if (err) return err; } else { - err = flexcan_chip_disable(priv); + flexcan_chip_stop(dev); + + err = pm_runtime_force_suspend(device); if (err) return err; - err = pm_runtime_force_suspend(device); + pinctrl_pm_select_sleep_state(device); } netif_stop_queue(dev); netif_device_detach(dev); } priv->can.state = CAN_STATE_SLEEPING; - return err; + return 0; } static int __maybe_unused flexcan_resume(struct device *device) { struct net_device *dev = dev_get_drvdata(device); struct flexcan_priv *priv = netdev_priv(dev); - int err = 0; + int err; priv->can.state = CAN_STATE_ERROR_ACTIVE; if (netif_running(dev)) { @@ -1749,15 +1752,19 @@ static int __maybe_unused flexcan_resume(struct device *device) if (err) return err; } else { + pinctrl_pm_select_default_state(device); + err = pm_runtime_force_resume(device); if (err) return err; - err = flexcan_chip_enable(priv); + err = flexcan_chip_start(dev); + if (err) + return err; } } - return err; + return 0; } static int __maybe_unused flexcan_runtime_suspend(struct device *device)