From patchwork Wed Mar 6 06:30:34 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Clark Wang X-Patchwork-Id: 10840449 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 44BDA17E0 for ; Wed, 6 Mar 2019 06:31:33 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 3119D2C756 for ; Wed, 6 Mar 2019 06:31:33 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 256762C77C; Wed, 6 Mar 2019 06:31:33 +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=-8.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id A6A222C756 for ; Wed, 6 Mar 2019 06:31:32 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728978AbfCFGak (ORCPT ); Wed, 6 Mar 2019 01:30:40 -0500 Received: from mail-eopbgr50089.outbound.protection.outlook.com ([40.107.5.89]:43681 "EHLO EUR03-VE1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1728923AbfCFGaj (ORCPT ); Wed, 6 Mar 2019 01:30:39 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=NxDxsdQeT5aC+/2+/YEUhX2Mb+70RNqGVC+cejgDHzo=; b=EBAnLgo6yyKUwjNpDBw6x9WN05aDA8Qd2gvFnw2xE/awq1YTGN2FBMoPQLrnybeyRsr2Yu8G5fOfBMZJ5pPbal45TcCjUsHP7y9Rn1nK8V4hBCcGAvamD0USXXeyq5S+zIS2G6pVTznGD26OBQm94sC3RX5IiF/QlEaKcgEt6WI= Received: from AM6PR04MB5016.eurprd04.prod.outlook.com (20.177.34.88) by AM6PR04MB4373.eurprd04.prod.outlook.com (20.177.38.91) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1665.19; Wed, 6 Mar 2019 06:30:35 +0000 Received: from AM6PR04MB5016.eurprd04.prod.outlook.com ([fe80::5841:afe:53fd:42bb]) by AM6PR04MB5016.eurprd04.prod.outlook.com ([fe80::5841:afe:53fd:42bb%6]) with mapi id 15.20.1665.020; Wed, 6 Mar 2019 06:30:35 +0000 From: Clark Wang To: "broonie@kernel.org" CC: "linux-spi@vger.kernel.org" , "linux-kernel@vger.kernel.org" Subject: [PATCH V2 1/8] spi: lpspi: Add i.MX8 boards support for lpspi Thread-Topic: [PATCH V2 1/8] spi: lpspi: Add i.MX8 boards support for lpspi Thread-Index: AQHU0+YaqWPlOUU3tkq25lvThGZA1Q== Date: Wed, 6 Mar 2019 06:30:34 +0000 Message-ID: <20190306063020.793-2-xiaoning.wang@nxp.com> References: <20190306063020.793-1-xiaoning.wang@nxp.com> In-Reply-To: <20190306063020.793-1-xiaoning.wang@nxp.com> Accept-Language: zh-CN, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: SG2PR02CA0029.apcprd02.prod.outlook.com (2603:1096:3:18::17) To AM6PR04MB5016.eurprd04.prod.outlook.com (2603:10a6:20b:9::24) x-mailer: git-send-email 2.17.1 authentication-results: spf=none (sender IP is ) smtp.mailfrom=xiaoning.wang@nxp.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [119.31.174.71] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: baef5eca-80c8-4544-db68-08d6a1fd3d30 x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0;PCL:0;RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600127)(711020)(4605104)(4618075)(2017052603328)(7153060)(7193020);SRVR:AM6PR04MB4373; x-ms-traffictypediagnostic: AM6PR04MB4373: x-microsoft-exchange-diagnostics: =?iso-8859-1?q?1=3BAM6PR04MB4373=3B23=3AUd?= =?iso-8859-1?q?Lk+kn3A4mwPjpGmBtdAoEoALOvVq2ysPxIEP2yxU5T5+rT964PFjk/YhVsTt?= =?iso-8859-1?q?XCEpjr/4FTaf+5dzXa0VDvodUt2Q0EsSlOh8wMRWIkbwG/bRZTDzzvHmCOCt?= =?iso-8859-1?q?nhWQAk6ZizUa2Q95Rwl0/iLsvhbXzHQI3vB7x5VgQZgTvGE2ee6qnqXXS+YM?= =?iso-8859-1?q?n+xSoWR8xBftp2GHeGBfQddHh7N3fdBS33obK0F4LAkveYldqx6iMYBmb34t?= =?iso-8859-1?q?J4xmwG7kmnPiqGzWeJCKnyBRYl1prL4RaYV2yUHXMtJgMn/oVp3ZBaB9nrnO?= =?iso-8859-1?q?S8rTVNTCh3LaobAhl9yTJVXmsJjCM7LWqi0iWN1VZZvIHfb6jdcuw28rfP7m?= =?iso-8859-1?q?F4+U8XvKjlOevxGZVqHO5Rq7KP5Byoir1PBSbAwqniqLSL2N8xz+EUYEeU5m?= =?iso-8859-1?q?lHXJ4Bjn/vc5mIXVP3tiECVRcyyMKeS0eOf+cuiyrYd5fTjTPf8uiJy0ps9l?= =?iso-8859-1?q?EwjdNFBIOLnM/N2WeiOBzvTi92RpL9gctp1TibmajNmeXrpZ0/50te2ky2r9?= =?iso-8859-1?q?bC/V5YUAy60bTUk/yerw4dsSSo+1FZGQY2WBkUJp0M4XWiu/+SzRxIV+5C0w?= =?iso-8859-1?q?8vLCOSMz5+wdfl6XMtiL5afnrEWGbP2ACQFZsp1DmTbrMb/nXfzzYOwY0LRd?= =?iso-8859-1?q?2BmO7agnM8qAbxXLFhGoOYQicNG2ZUmzemYfvqsBWqy7choQo1PkRULmkEnX?= =?iso-8859-1?q?sKyg5KMa0w3xGrMuBdgOlI3aZvnPsG7cXXLx1z4GndnwWddiIuDCtBQm5yjR?= =?iso-8859-1?q?cWotepj6M+5kEx/Tw4dtsrd27uzHCNvlcV2567l4f0X+fZd6AnEo5UHc0iFF?= =?iso-8859-1?q?ZfOgDvVhO3BEdWyxMNDQfm9BWBitA4u/6AGssK2MJA7bU3FUpEK89MtPhRRP?= =?iso-8859-1?q?N99DPX2U9bh+OtpEgHOHxhvQxrrR0diNz+r2lFnzQCSA2Q7PFrRsV9MZXVSA?= =?iso-8859-1?q?bjZaWPQnrX2J2ISGZSwISZ1/ZB+AtzCpXv4pb1JLYQmeboj87Ke8dj9aSSIJ?= =?iso-8859-1?q?UwvjDq6fm+wtNCBc91BMIC+hb3A/rQGlpQbdNbU/OOsllNt73nYTtk4iT1M1?= =?iso-8859-1?q?7vOp9nDp8cAN+yK6uLidGh9qfambLhkJiMd4Xowd8m0kWdNTOKMmfbEIoCCt?= =?iso-8859-1?q?FMI+Y2OQa1aDgr6oNajnD+f9Op4gtR5Uu7QILWbIm/LY2+eNXoNOKTwdRleb?= =?iso-8859-1?q?Ad+xO+Q6eWbQ0RmmfKLoFdWQE7kGSCtoPlozKYlcAg1VklnXZUaKfjcOJXgL?= =?iso-8859-1?q?NrtfrDOJp9gnrw24YeOQBZJmxuomHfs9uyvSlLdA=3D=3D?= x-microsoft-antispam-prvs: x-forefront-prvs: 0968D37274 x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(346002)(136003)(376002)(366004)(39860400002)(396003)(199004)(189003)(97736004)(6116002)(386003)(8936002)(6506007)(106356001)(52116002)(1730700003)(8676002)(26005)(81156014)(81166006)(256004)(105586002)(102836004)(50226002)(2501003)(76176011)(99286004)(6512007)(305945005)(71200400001)(6436002)(5640700003)(6486002)(4326008)(53936002)(71190400001)(476003)(25786009)(486006)(66066001)(2616005)(7736002)(186003)(68736007)(446003)(1076003)(11346002)(54906003)(478600001)(316002)(36756003)(6916009)(2351001)(14454004)(86362001)(2906002)(5660300002)(3846002);DIR:OUT;SFP:1101;SCL:1;SRVR:AM6PR04MB4373;H:AM6PR04MB5016.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-message-info: p0OLTq+XfshWZ/b1rT0Iyk92bTR0RNOGhPZZwsUNiadehp2d+KfhAeSMcJPujgVqVE5S409WYNNTZVsF9IB85grL4cBYEQsUHjno55+h4dbDtVdf5+7kji+W/rGmv7A6cdy3SAACkEXAFRIo/hcEYJHli9PJsFAWpW7IHWJWRYCUKB5WQSiYYOMZqSxG7qI2l5o/zpqaJ9qFAGAJwGT5wqBFV9wGq483PcIeH0oC8E26SitLbnWq1mFE4f8YbR6JJvRojHQx6Wnv9UdrqtmLTH3vTgU+iuc6JNr7UsPraT8g13uAjxwbFyUZ1ZXtOCtZMp9vuD8+quUEGIf4Q7S1IJ3wDx0dAmNl2Tx48CeIvwnImiO4ROzy9otH5HB493HOen4Hh/3zb11uu7TqfuAJXeYkw6KRcy9w+MGFo+ZAxmI= MIME-Version: 1.0 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: baef5eca-80c8-4544-db68-08d6a1fd3d30 X-MS-Exchange-CrossTenant-originalarrivaltime: 06 Mar 2019 06:30:34.8756 (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-Transport-CrossTenantHeadersStamped: AM6PR04MB4373 Sender: linux-spi-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-spi@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Add both ipg and per clock for lpspi to support i.MX8QM/QXP boards. Signed-off-by: Clark Wang --- V2: - No change. But add DT-bindings string at the next patch. --- drivers/spi/spi-fsl-lpspi.c | 52 +++++++++++++++++++++++++++++-------- 1 file changed, 41 insertions(+), 11 deletions(-) diff --git a/drivers/spi/spi-fsl-lpspi.c b/drivers/spi/spi-fsl-lpspi.c index 391863914043..f363c000d24a 100644 --- a/drivers/spi/spi-fsl-lpspi.c +++ b/drivers/spi/spi-fsl-lpspi.c @@ -84,7 +84,8 @@ struct lpspi_config { struct fsl_lpspi_data { struct device *dev; void __iomem *base; - struct clk *clk; + struct clk *clk_ipg; + struct clk *clk_per; bool is_slave; void *rx_buf; @@ -151,8 +152,19 @@ static int lpspi_prepare_xfer_hardware(struct spi_controller *controller) { struct fsl_lpspi_data *fsl_lpspi = spi_controller_get_devdata(controller); + int ret; + + ret = clk_prepare_enable(fsl_lpspi->clk_ipg); + if (ret) + return ret; + + ret = clk_prepare_enable(fsl_lpspi->clk_per); + if (ret) { + clk_disable_unprepare(fsl_lpspi->clk_ipg); + return ret; + } - return clk_prepare_enable(fsl_lpspi->clk); + return 0; } static int lpspi_unprepare_xfer_hardware(struct spi_controller *controller) @@ -160,7 +172,8 @@ static int lpspi_unprepare_xfer_hardware(struct spi_controller *controller) struct fsl_lpspi_data *fsl_lpspi = spi_controller_get_devdata(controller); - clk_disable_unprepare(fsl_lpspi->clk); + clk_disable_unprepare(fsl_lpspi->clk_ipg); + clk_disable_unprepare(fsl_lpspi->clk_per); return 0; } @@ -241,7 +254,7 @@ static int fsl_lpspi_set_bitrate(struct fsl_lpspi_data *fsl_lpspi) unsigned int perclk_rate, scldiv; u8 prescale; - perclk_rate = clk_get_rate(fsl_lpspi->clk); + perclk_rate = clk_get_rate(fsl_lpspi->clk_per); for (prescale = 0; prescale < 8; prescale++) { scldiv = perclk_rate / (clkdivs[prescale] * config.speed_hz) - 2; @@ -526,15 +539,30 @@ static int fsl_lpspi_probe(struct platform_device *pdev) goto out_controller_put; } - fsl_lpspi->clk = devm_clk_get(&pdev->dev, "ipg"); - if (IS_ERR(fsl_lpspi->clk)) { - ret = PTR_ERR(fsl_lpspi->clk); + fsl_lpspi->clk_per = devm_clk_get(&pdev->dev, "per"); + if (IS_ERR(fsl_lpspi->clk_per)) { + ret = PTR_ERR(fsl_lpspi->clk_per); + goto out_controller_put; + } + + fsl_lpspi->clk_ipg = devm_clk_get(&pdev->dev, "ipg"); + if (IS_ERR(fsl_lpspi->clk_ipg)) { + ret = PTR_ERR(fsl_lpspi->clk_ipg); + goto out_controller_put; + } + + ret = clk_prepare_enable(fsl_lpspi->clk_ipg); + if (ret) { + dev_err(&pdev->dev, + "can't enable lpspi ipg clock, ret=%d\n", ret); goto out_controller_put; } - ret = clk_prepare_enable(fsl_lpspi->clk); + ret = clk_prepare_enable(fsl_lpspi->clk_per); if (ret) { - dev_err(&pdev->dev, "can't enable lpspi clock, ret=%d\n", ret); + dev_err(&pdev->dev, + "can't enable lpspi per clock, ret=%d\n", ret); + clk_disable_unprepare(fsl_lpspi->clk_ipg); goto out_controller_put; } @@ -542,7 +570,8 @@ static int fsl_lpspi_probe(struct platform_device *pdev) fsl_lpspi->txfifosize = 1 << (temp & 0x0f); fsl_lpspi->rxfifosize = 1 << ((temp >> 8) & 0x0f); - clk_disable_unprepare(fsl_lpspi->clk); + clk_disable_unprepare(fsl_lpspi->clk_per); + clk_disable_unprepare(fsl_lpspi->clk_ipg); ret = devm_spi_register_controller(&pdev->dev, controller); if (ret < 0) { @@ -564,7 +593,8 @@ static int fsl_lpspi_remove(struct platform_device *pdev) struct fsl_lpspi_data *fsl_lpspi = spi_controller_get_devdata(controller); - clk_disable_unprepare(fsl_lpspi->clk); + clk_disable_unprepare(fsl_lpspi->clk_per); + clk_disable_unprepare(fsl_lpspi->clk_ipg); return 0; } From patchwork Wed Mar 6 06:30:36 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Clark Wang X-Patchwork-Id: 10840429 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 3357D1803 for ; Wed, 6 Mar 2019 06:30:45 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 208272C756 for ; Wed, 6 Mar 2019 06:30:45 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 14CA32C776; Wed, 6 Mar 2019 06:30:45 +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=-8.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id A95062C756 for ; Wed, 6 Mar 2019 06:30:44 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729016AbfCFGam (ORCPT ); Wed, 6 Mar 2019 01:30:42 -0500 Received: from mail-eopbgr50089.outbound.protection.outlook.com ([40.107.5.89]:43681 "EHLO EUR03-VE1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1727809AbfCFGal (ORCPT ); Wed, 6 Mar 2019 01:30:41 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=jDgK19jeFXYBBzmKnnfGSm0YIjHrhMFLZkhVWYMdc4g=; b=LrHJSdoFnjbOdahym9tcUtmpIytbWHeSEQYzBunoANU+SVgENn5dC154e/YQ1CYQDIFz3iZIle7SKhDz6RyOKBrehJKnp/zH/+XSoKQv4aYRiPCSH3uGdf3XV81sHyAOqgLoi3jTiBRFtAehTTca7lukhEgpIU3EY2z35M+X/Rs= Received: from AM6PR04MB5016.eurprd04.prod.outlook.com (20.177.34.88) by AM6PR04MB4373.eurprd04.prod.outlook.com (20.177.38.91) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1665.19; Wed, 6 Mar 2019 06:30:37 +0000 Received: from AM6PR04MB5016.eurprd04.prod.outlook.com ([fe80::5841:afe:53fd:42bb]) by AM6PR04MB5016.eurprd04.prod.outlook.com ([fe80::5841:afe:53fd:42bb%6]) with mapi id 15.20.1665.020; Wed, 6 Mar 2019 06:30:37 +0000 From: Clark Wang To: "broonie@kernel.org" CC: "linux-spi@vger.kernel.org" , "linux-kernel@vger.kernel.org" Subject: [PATCH V2 2/8] doc: lpspi: Document DT bindings for LPSPI clocks Thread-Topic: [PATCH V2 2/8] doc: lpspi: Document DT bindings for LPSPI clocks Thread-Index: AQHU0+YcwcFzwOcp6kCLJ+qifSfD9w== Date: Wed, 6 Mar 2019 06:30:36 +0000 Message-ID: <20190306063020.793-3-xiaoning.wang@nxp.com> References: <20190306063020.793-1-xiaoning.wang@nxp.com> In-Reply-To: <20190306063020.793-1-xiaoning.wang@nxp.com> Accept-Language: zh-CN, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: SG2PR02CA0029.apcprd02.prod.outlook.com (2603:1096:3:18::17) To AM6PR04MB5016.eurprd04.prod.outlook.com (2603:10a6:20b:9::24) x-mailer: git-send-email 2.17.1 authentication-results: spf=none (sender IP is ) smtp.mailfrom=xiaoning.wang@nxp.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [119.31.174.71] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: d41ff65b-52f5-4f39-21b3-08d6a1fd3e67 x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0;PCL:0;RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600127)(711020)(4605104)(4618075)(2017052603328)(7153060)(7193020);SRVR:AM6PR04MB4373; x-ms-traffictypediagnostic: AM6PR04MB4373: x-microsoft-exchange-diagnostics: =?iso-8859-1?q?1=3BAM6PR04MB4373=3B23=3Apw?= =?iso-8859-1?q?7809qvrCChjhs7WoG1NdNGE2Ad5+xn6JGE7vsnJBIi3nz2Ra2kr6UDNu0cCb?= =?iso-8859-1?q?B9UqNo7MpXK5Bzko/1zyXnlYmv1gwdyuBySq8BFJzllZFhIaPuTFZW8klQSE?= =?iso-8859-1?q?PNP6qScqxpId2AR8JSm5adQguvYYcAoVzimiSBh/mcR4XJFL6qYif0UyBXxM?= =?iso-8859-1?q?uDw7AtWWB2xE2Bz+sBWe/47/mKsk3zxsIB7Y60IF78bc0dC0ePKcPKkYCkH2?= =?iso-8859-1?q?BgGvjYcWDnIYwzWkR9IMSDaOD5wfsUwAY62/dODHslimNhqn2pCCivlyYStp?= =?iso-8859-1?q?Hv1I46EaNDR9b5oBcS0vvTpIb5L3eTAgbvPZ4NRZbK6r90bYhTfduqC1FfHY?= =?iso-8859-1?q?NPQExsDDZnpUH0vOTS8i6W0aGtHcE/PRMpTv2leq2xJP5OfRHF7wbO0nrb0g?= =?iso-8859-1?q?yFRwt2SwS4WSV+5PR64ktpskL90lTXjPEdptBO9iLZU3WIiSf6CaC6DdkH0n?= =?iso-8859-1?q?hxeUqFWxREQWGVZdj8s8TaBOa7lb6Y1whoHE8HhHtFvEAuWKw3kPhV7+VzdQ?= =?iso-8859-1?q?xyqN01ZgVLCJ1Oydww0HcjkKNlcwFBZgXKM3daOOQXnmLqn0pnXMI33UYkcz?= =?iso-8859-1?q?aEkX/lkWxTCvsJIaDR16xAs7SCzKxyeLi+jC4R9b3PkOiZASAoD6Y3go5peC?= =?iso-8859-1?q?2JyaMtdafOBoHdD2XEY3KEseRJCTpn39Ey2bECcr2Cj9uXbIULT+YHb1Lfsg?= =?iso-8859-1?q?A78dAXVts6Pg1kEkv4iL50u0wuonNyJjJBIOmbQyy6VBKcYuqQRP8nAwGjtS?= =?iso-8859-1?q?6MaMrQUF5l5TowYs8IJAB+x95HD/11sYv7sI9nJmoPhw49enKccUF8vh2DcY?= =?iso-8859-1?q?Bf0Xpp3KMy9PZMnGMB8fC7kC9WJv8irxAOn8XL/L8uDwN8DUXzYllz1bL8kY?= =?iso-8859-1?q?+0nWCzcTno5SDU5LqB/qCfXjAauC7FfZKj+vFgMEU2ka6CHNcjkK/U99Xtd6?= =?iso-8859-1?q?fJ00+AhP/T+GyN+2+qISOV45cn5LLrvwbmsfOxtG8kSaUWksPe5xbxrH9OBK?= =?iso-8859-1?q?vNQchFcCJtUAdigUP35JmTJkrgQT3iXNvU+W4WDecO7rX8dud5mwAvQuoHcq?= =?iso-8859-1?q?lP3AwpFUQcS7RYxKOgHbZfoevj9Idulo1jHp089SNlErOEUN/drC2answ2p/?= =?iso-8859-1?q?yaCGv3y6CTlsEEFN1cyXkLvbGByAUZd85wEAzDz4OpNN6Uf6H2xeGszzcqpj?= =?iso-8859-1?q?+vIWEyoIciUUCDxcMCC+Vdg/BmxLtJTrwmjGi4gwCgg5W7nV6cU9ffGKlFzW?= =?iso-8859-1?q?CSKYc+cImZ7O54DLp8I5Fmq4pB0DDwa8HW2rYRuDWzZaUG5HrMdq8I6ZzilR?= =?iso-8859-1?q?w=3D?= x-microsoft-antispam-prvs: x-forefront-prvs: 0968D37274 x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(346002)(136003)(376002)(366004)(39860400002)(396003)(199004)(189003)(97736004)(6116002)(386003)(8936002)(6506007)(106356001)(52116002)(1730700003)(8676002)(26005)(81156014)(81166006)(14444005)(256004)(105586002)(102836004)(50226002)(2501003)(76176011)(99286004)(6512007)(305945005)(71200400001)(6436002)(5640700003)(6486002)(4326008)(53936002)(71190400001)(476003)(25786009)(486006)(66066001)(2616005)(7736002)(186003)(68736007)(446003)(1076003)(11346002)(54906003)(478600001)(316002)(36756003)(6916009)(2351001)(14454004)(86362001)(2906002)(5660300002)(3846002);DIR:OUT;SFP:1101;SCL:1;SRVR:AM6PR04MB4373;H:AM6PR04MB5016.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-message-info: Td8vY/um1Cvenq3/CDFec/4MRm8tZ/XnpSbNO819WHbxFzqk7wWQ6ORToHlCrdIxIV/q4FV3HYOPOs23G7/PSV1geDY7ytkpyPUiua6Ngl6plPSJ4u8Gv+XPvG4qLCZsmYI6E6M5IziNfOnYAk3rEiqjyl/iU0JTXLkbP0wDXQosGOP2CzlWz99ZEbAouoUKrOAtn8wYlEXqiNaDi0xq8jNswJUZTgHIOGo/t5fWZHo8C6onXF5toyswyu0P7LVrWIjIgTV+LDZgezVGWqM+ZNhkx2UkXkVCR4sTPqdCoi+IYAoeva/n7Jv5B7b2jMe36Ye+nYK1iQc/fwTFqRyhcmMpVci8jsuFqB0knik+GGvRNlO5XvBpyPw5U8tJON2Owo+DfzIuAQMtUJlJXZDpTH6TNvpJBPlF9Rc7K6Ml9A8= MIME-Version: 1.0 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: d41ff65b-52f5-4f39-21b3-08d6a1fd3e67 X-MS-Exchange-CrossTenant-originalarrivaltime: 06 Mar 2019 06:30:36.9610 (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-Transport-CrossTenantHeadersStamped: AM6PR04MB4373 Sender: linux-spi-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-spi@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Add introductions of clocks and clock-names strings. Signed-off-by: Clark Wang --- V2: - Add this DT-bindings string in this version. --- .../devicetree/bindings/spi/spi-fsl-lpspi.txt | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/Documentation/devicetree/bindings/spi/spi-fsl-lpspi.txt b/Documentation/devicetree/bindings/spi/spi-fsl-lpspi.txt index 6cc3c6fe25a3..e71b81a41ac0 100644 --- a/Documentation/devicetree/bindings/spi/spi-fsl-lpspi.txt +++ b/Documentation/devicetree/bindings/spi/spi-fsl-lpspi.txt @@ -7,7 +7,11 @@ Required properties: - reg : address and length of the lpspi master registers - interrupt-parent : core interrupt controller - interrupts : lpspi interrupt -- clocks : lpspi clock specifier +- clocks : lpspi clock specifier. Its number and order need to correspond to the + value in clock-names. +- clock-names : Corresponding to per clock and ipg clock in "clocks" + respectively. In i.MX7ULP, it only has per clk, so use CLK_DUMMY + to fill the "ipg" blank. - spi-slave : spi slave mode support. In slave mode, add this attribute without value. In master mode, remove it. @@ -18,6 +22,8 @@ lpspi2: lpspi@40290000 { reg = <0x40290000 0x10000>; interrupt-parent = <&intc>; interrupts = ; - clocks = <&clks IMX7ULP_CLK_LPSPI2>; + clocks = <&clks IMX7ULP_CLK_LPSPI2>, + <&clks IMX7ULP_CLK_DUMMY>; + clock-names = "per", "ipg"; spi-slave; }; From patchwork Wed Mar 6 06:30:39 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Clark Wang X-Patchwork-Id: 10840447 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id B3E3B17E0 for ; Wed, 6 Mar 2019 06:31:31 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 9E3FC2C756 for ; Wed, 6 Mar 2019 06:31:31 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 91A902C77C; Wed, 6 Mar 2019 06:31:31 +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=-8.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id F10532C756 for ; Wed, 6 Mar 2019 06:31:30 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728974AbfCFGbY (ORCPT ); Wed, 6 Mar 2019 01:31:24 -0500 Received: from mail-eopbgr50089.outbound.protection.outlook.com ([40.107.5.89]:43681 "EHLO EUR03-VE1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1728923AbfCFGao (ORCPT ); Wed, 6 Mar 2019 01:30:44 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=X7h3YHptgT41jH4vhALSVvw+nmZsWyQfFs7bzY5bUTY=; b=FM11/1BPFYhbUpX+TcszZS5LZvM+sdhqTtrupUBp2FqS7eiFFjIz+XWGYUDuWeOopUSUjbH74Q5HOiRFDJq4yizr/gAocmZI4KcMgV12jj77EsRH8VfCnggvH+IlfMBAKfkvHLoXKnF2pIpKIeBjN7RGTm9M1a4sQrwCdPNOyuw= Received: from AM6PR04MB5016.eurprd04.prod.outlook.com (20.177.34.88) by AM6PR04MB4373.eurprd04.prod.outlook.com (20.177.38.91) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1665.19; Wed, 6 Mar 2019 06:30:39 +0000 Received: from AM6PR04MB5016.eurprd04.prod.outlook.com ([fe80::5841:afe:53fd:42bb]) by AM6PR04MB5016.eurprd04.prod.outlook.com ([fe80::5841:afe:53fd:42bb%6]) with mapi id 15.20.1665.020; Wed, 6 Mar 2019 06:30:39 +0000 From: Clark Wang To: "broonie@kernel.org" CC: "linux-spi@vger.kernel.org" , "linux-kernel@vger.kernel.org" Subject: [PATCH V2 3/8] spi: lpspi: enable runtime pm for lpspi Thread-Topic: [PATCH V2 3/8] spi: lpspi: enable runtime pm for lpspi Thread-Index: AQHU0+YdkcfLuiZbykin5q3vWUwfTA== Date: Wed, 6 Mar 2019 06:30:39 +0000 Message-ID: <20190306063020.793-4-xiaoning.wang@nxp.com> References: <20190306063020.793-1-xiaoning.wang@nxp.com> In-Reply-To: <20190306063020.793-1-xiaoning.wang@nxp.com> Accept-Language: zh-CN, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: SG2PR02CA0029.apcprd02.prod.outlook.com (2603:1096:3:18::17) To AM6PR04MB5016.eurprd04.prod.outlook.com (2603:10a6:20b:9::24) x-mailer: git-send-email 2.17.1 authentication-results: spf=none (sender IP is ) smtp.mailfrom=xiaoning.wang@nxp.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [119.31.174.71] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 566b5697-8151-4525-b8a8-08d6a1fd3fa6 x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0;PCL:0;RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600127)(711020)(4605104)(4618075)(2017052603328)(7153060)(7193020);SRVR:AM6PR04MB4373; x-ms-traffictypediagnostic: AM6PR04MB4373: x-microsoft-exchange-diagnostics: =?iso-8859-1?q?1=3BAM6PR04MB4373=3B23=3ACN?= =?iso-8859-1?q?bFCH5QkGLFDGzWPWpNeAuAQ0N0Ed6M6IUzaAUYI3QJWdIlE5ZTsGhpn3KnLG?= =?iso-8859-1?q?3tZM99nSheJ4W4PKGGlW7t6kx98R3xQFQnv0BIeoPlm0t/bgf4tT36Jzffih?= =?iso-8859-1?q?c2R4WZWPwRzKV//Ml2frAMMz3CM8R4brz7K76quzqV1M7l6UYVB09Y8TDPop?= =?iso-8859-1?q?UVorWKe0G/fXGqcJelbJj21gNClPohGVkSxgOhv5Zwpb/Jv+PM1LUlvhySCj?= =?iso-8859-1?q?f8KEVDCqbngtcb2Qw4/nwq5j+csNtvMNxHXwsRNOxuMnp2cK7/PPOCvZMwm2?= =?iso-8859-1?q?+d30GMmuWJwo4MvJwgPXr6TmhY1FiTolcewtry3oVS+I6cEoMvca2gYKSDPT?= =?iso-8859-1?q?bbtTDsAoe2m/DCfr8rwfELvS7Q7msJH28DIzkpv5UyV/XXjYmTs25jtSqaHy?= =?iso-8859-1?q?Up3TdT/bs0LYZJZxREBJtgEcXsD0vzNH4Ori/3VMKfa+uRFsFID8vTv/W5kw?= =?iso-8859-1?q?n8V/O1/ZBf+P/tnCds+BbadOc8FOH50Gca8bL2Am5rn6G6Php/18NzLur8vx?= =?iso-8859-1?q?MLzyWPd3y8zwtRLkdqo8gV8JXHorG4XNaE/nx9Dt+Vm1fISzmJUI2WS/HqJg?= =?iso-8859-1?q?YXibELMT1q6u3aCnz0hf4Ev5oWKjn0GrO8pc5Dfxtf6U3N6Kz3SItHuekISl?= =?iso-8859-1?q?7h5Vm9xsImyUNN7iBHPqRmpCJsWSHYIBXkPjgtH0eugACIbg1hamD/wyxa/m?= =?iso-8859-1?q?/eW/fxP11m6H4AIEFOjid7oDVllruCZ5qxJSzvJnelK6Az6wAntTN4xr4eWl?= =?iso-8859-1?q?hQhyrNy7vJDJUw6BJPRqIUrMDMWj7Bj91DgsIP770uhEOPuhC7ERWUFSU0x+?= =?iso-8859-1?q?hpSQrVjUj9AeGpwKY/xU8vBBN17/y53nXpXOaMpAuuISyAxVBWKw1L/VzNKR?= =?iso-8859-1?q?7t4J0aViXczfvPUi9EPs/3+C7nqDM2M0wopxZ5Tc10HkqwstnDSO94sZ+DsG?= =?iso-8859-1?q?ZVozNledRaemcvDUPT3O0ZA1yyuHKYjkxOoN7IDNNwZegSsqNgRr0mP1RfiT?= =?iso-8859-1?q?9AP0Ik0Rb5wWGCzZRKMD6DErJ1ygoY5i/AR1A29F1z4KLhGniCpAvBHrO67O?= =?iso-8859-1?q?3+aBnafvd2HyezM0PJQbN7rHjphw5Ji+arnMTEhZUEPjZ6IzFcuuHsrslYst?= =?iso-8859-1?q?HI1Fm+1eyv+mZOhJgKMUd0xr5opG18Rx2zLPEnJYsCLQf1bZjgacAI6A48Ix?= =?iso-8859-1?q?kZ6sc2SQi8b8fBQcR9qbDgms6dW7yi/j3l5Gb18ra2kZNp5abDrFRyZt91Y2?= =?iso-8859-1?q?hWr3NSoesiBrgxIbY7DF/3PsymTKDqeZCS/GITt7cTYGYMH9V55wQhgM5KmI?= =?iso-8859-1?q?4=3D?= x-microsoft-antispam-prvs: x-forefront-prvs: 0968D37274 x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(346002)(136003)(376002)(366004)(39860400002)(396003)(199004)(189003)(97736004)(6116002)(386003)(8936002)(6506007)(106356001)(52116002)(1730700003)(8676002)(26005)(81156014)(81166006)(14444005)(256004)(105586002)(102836004)(50226002)(2501003)(76176011)(99286004)(6512007)(305945005)(71200400001)(6436002)(5640700003)(6486002)(4326008)(53936002)(71190400001)(476003)(25786009)(486006)(66066001)(2616005)(7736002)(186003)(68736007)(446003)(1076003)(11346002)(54906003)(478600001)(316002)(36756003)(6916009)(2351001)(14454004)(86362001)(2906002)(5660300002)(3846002);DIR:OUT;SFP:1101;SCL:1;SRVR:AM6PR04MB4373;H:AM6PR04MB5016.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-message-info: zouIrKcvWt6ouoWj7MNa4Xzc0kyXsLC8+y6g+37we3Jtil6x0C89spxmhSgieMxz8HqWDH2sGpi3L6fRYqaeW5RSpTWg4S4OZMvvE1a0T6kBERB3YRK93E4M+smLOQ9+/Kr8jvAQCEbdwgyxZDCfQ0g9cfAk8TfNHnh3iKPnrQAI4V2EoeWr9FhVS5nfCu4NR3BAze9nsSsy48D4qxKKaP14HmYl6YiP9ctTezV0yiPgNF/CscsNlrl5ZPfsfGFf2Z/a1SSqpDBx7sPSI2bpPrbSLbeCjX/fGP9zaMM5+nhCzMUDb/e3zDd5GuAD4AlMVO49Bm//EXJf+CE6ZK7VuqMCKm2CNF0a3yugg3lIPxnQ4L99SCMC73zRDTbNCVtGoy4vctWjrHPSnhw0AaWyJRYidxHxYj3wvN8+QUWHhlg= MIME-Version: 1.0 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 566b5697-8151-4525-b8a8-08d6a1fd3fa6 X-MS-Exchange-CrossTenant-originalarrivaltime: 06 Mar 2019 06:30:39.0165 (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-Transport-CrossTenantHeadersStamped: AM6PR04MB4373 Sender: linux-spi-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-spi@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Han Xu Enable the runtime power management for lpspi module. Do some adaptation work from kernel 4.9 to 4.14. Signed-off-by: Clark Wang Signed-off-by: Han Xu Reviewed-by: Frank Li --- V2: - Fix the comment format. --- drivers/spi/spi-fsl-lpspi.c | 117 ++++++++++++++++++++++++++++-------- 1 file changed, 92 insertions(+), 25 deletions(-) diff --git a/drivers/spi/spi-fsl-lpspi.c b/drivers/spi/spi-fsl-lpspi.c index f363c000d24a..84dcb9e176b8 100644 --- a/drivers/spi/spi-fsl-lpspi.c +++ b/drivers/spi/spi-fsl-lpspi.c @@ -16,7 +16,9 @@ #include #include #include +#include #include +#include #include #include #include @@ -24,6 +26,8 @@ #define DRIVER_NAME "fsl_lpspi" +#define FSL_LPSPI_RPM_TIMEOUT 50 /* 50ms */ + /* i.MX7ULP LPSPI registers */ #define IMX7ULP_VERID 0x0 #define IMX7ULP_PARAM 0x4 @@ -154,13 +158,9 @@ static int lpspi_prepare_xfer_hardware(struct spi_controller *controller) spi_controller_get_devdata(controller); int ret; - ret = clk_prepare_enable(fsl_lpspi->clk_ipg); - if (ret) - return ret; - - ret = clk_prepare_enable(fsl_lpspi->clk_per); - if (ret) { - clk_disable_unprepare(fsl_lpspi->clk_ipg); + ret = pm_runtime_get_sync(fsl_lpspi->dev); + if (ret < 0) { + dev_err(fsl_lpspi->dev, "failed to enable clock\n"); return ret; } @@ -172,8 +172,8 @@ static int lpspi_unprepare_xfer_hardware(struct spi_controller *controller) struct fsl_lpspi_data *fsl_lpspi = spi_controller_get_devdata(controller); - clk_disable_unprepare(fsl_lpspi->clk_ipg); - clk_disable_unprepare(fsl_lpspi->clk_per); + pm_runtime_mark_last_busy(fsl_lpspi->dev); + pm_runtime_put_autosuspend(fsl_lpspi->dev); return 0; } @@ -480,6 +480,45 @@ static irqreturn_t fsl_lpspi_isr(int irq, void *dev_id) return IRQ_NONE; } +int fsl_lpspi_runtime_resume(struct device *dev) +{ + struct fsl_lpspi_data *fsl_lpspi = dev_get_drvdata(dev); + int ret; + + ret = clk_prepare_enable(fsl_lpspi->clk_per); + if (ret) + return ret; + + ret = clk_prepare_enable(fsl_lpspi->clk_ipg); + if (ret) { + clk_disable_unprepare(fsl_lpspi->clk_per); + return ret; + } + + return 0; +} + +int fsl_lpspi_runtime_suspend(struct device *dev) +{ + struct fsl_lpspi_data *fsl_lpspi = dev_get_drvdata(dev); + + clk_disable_unprepare(fsl_lpspi->clk_per); + clk_disable_unprepare(fsl_lpspi->clk_ipg); + + return 0; +} + +static int fsl_lpspi_init_rpm(struct fsl_lpspi_data *fsl_lpspi) +{ + struct device *dev = fsl_lpspi->dev; + + pm_runtime_enable(dev); + pm_runtime_set_autosuspend_delay(dev, FSL_LPSPI_RPM_TIMEOUT); + pm_runtime_use_autosuspend(dev); + + return 0; +} + static int fsl_lpspi_probe(struct platform_device *pdev) { struct fsl_lpspi_data *fsl_lpspi; @@ -505,6 +544,7 @@ static int fsl_lpspi_probe(struct platform_device *pdev) fsl_lpspi = spi_controller_get_devdata(controller); fsl_lpspi->dev = &pdev->dev; + dev_set_drvdata(&pdev->dev, fsl_lpspi); fsl_lpspi->is_slave = of_property_read_bool((&pdev->dev)->of_node, "spi-slave"); @@ -551,28 +591,21 @@ static int fsl_lpspi_probe(struct platform_device *pdev) goto out_controller_put; } - ret = clk_prepare_enable(fsl_lpspi->clk_ipg); - if (ret) { - dev_err(&pdev->dev, - "can't enable lpspi ipg clock, ret=%d\n", ret); + /* enable the clock */ + ret = fsl_lpspi_init_rpm(fsl_lpspi); + if (ret) goto out_controller_put; - } - ret = clk_prepare_enable(fsl_lpspi->clk_per); - if (ret) { - dev_err(&pdev->dev, - "can't enable lpspi per clock, ret=%d\n", ret); - clk_disable_unprepare(fsl_lpspi->clk_ipg); - goto out_controller_put; + ret = pm_runtime_get_sync(fsl_lpspi->dev); + if (ret < 0) { + dev_err(fsl_lpspi->dev, "failed to enable clock\n"); + return ret; } temp = readl(fsl_lpspi->base + IMX7ULP_PARAM); fsl_lpspi->txfifosize = 1 << (temp & 0x0f); fsl_lpspi->rxfifosize = 1 << ((temp >> 8) & 0x0f); - clk_disable_unprepare(fsl_lpspi->clk_per); - clk_disable_unprepare(fsl_lpspi->clk_ipg); - ret = devm_spi_register_controller(&pdev->dev, controller); if (ret < 0) { dev_err(&pdev->dev, "spi_register_controller error.\n"); @@ -593,16 +626,50 @@ static int fsl_lpspi_remove(struct platform_device *pdev) struct fsl_lpspi_data *fsl_lpspi = spi_controller_get_devdata(controller); - clk_disable_unprepare(fsl_lpspi->clk_per); - clk_disable_unprepare(fsl_lpspi->clk_ipg); + pm_runtime_disable(fsl_lpspi->dev); + + spi_master_put(controller); + + return 0; +} + +#ifdef CONFIG_PM_SLEEP +static int fsl_lpspi_suspend(struct device *dev) +{ + int ret; + + pinctrl_pm_select_sleep_state(dev); + ret = pm_runtime_force_suspend(dev); + return ret; +} + +static int fsl_lpspi_resume(struct device *dev) +{ + int ret; + + ret = pm_runtime_force_resume(dev); + if (ret) { + dev_err(dev, "Error in resume: %d\n", ret); + return ret; + } + + pinctrl_pm_select_default_state(dev); return 0; } +#endif /* CONFIG_PM_SLEEP */ + +static const struct dev_pm_ops fsl_lpspi_pm_ops = { + SET_RUNTIME_PM_OPS(fsl_lpspi_runtime_suspend, + fsl_lpspi_runtime_resume, NULL) + SET_SYSTEM_SLEEP_PM_OPS(fsl_lpspi_suspend, fsl_lpspi_resume) +}; static struct platform_driver fsl_lpspi_driver = { .driver = { .name = DRIVER_NAME, .of_match_table = fsl_lpspi_dt_ids, + .pm = &fsl_lpspi_pm_ops, }, .probe = fsl_lpspi_probe, .remove = fsl_lpspi_remove, From patchwork Wed Mar 6 06:30:41 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Clark Wang X-Patchwork-Id: 10840441 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 19B6D17E0 for ; Wed, 6 Mar 2019 06:31:15 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 052992C756 for ; Wed, 6 Mar 2019 06:31:15 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id ED8982C776; Wed, 6 Mar 2019 06:31:14 +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=-8.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 952262C756 for ; Wed, 6 Mar 2019 06:31:14 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729116AbfCFGbO (ORCPT ); Wed, 6 Mar 2019 01:31:14 -0500 Received: from mail-eopbgr50089.outbound.protection.outlook.com ([40.107.5.89]:43681 "EHLO EUR03-VE1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1729000AbfCFGaq (ORCPT ); Wed, 6 Mar 2019 01:30:46 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=o+IVxQPrefSbya8gbOMGStjGMWB28FqD40Gw/UQgXL0=; b=oHBfH+mjzHrBDejelcC5Z0u400alHB9bZbUjoq6hXduzlfDsRf1opryT97Vy6OHdkkeYrUbBt8XrXk91bBpZOW7/2rL7i9Ey/OTrCa+jxxkZJJYrB+tch9HuNCMMIeCIU4EXT/FNMq2WFbsBc8JwU8gu9dZUu2HNXjA8ojGQJ/A= Received: from AM6PR04MB5016.eurprd04.prod.outlook.com (20.177.34.88) by AM6PR04MB4373.eurprd04.prod.outlook.com (20.177.38.91) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1665.19; Wed, 6 Mar 2019 06:30:41 +0000 Received: from AM6PR04MB5016.eurprd04.prod.outlook.com ([fe80::5841:afe:53fd:42bb]) by AM6PR04MB5016.eurprd04.prod.outlook.com ([fe80::5841:afe:53fd:42bb%6]) with mapi id 15.20.1665.020; Wed, 6 Mar 2019 06:30:41 +0000 From: Clark Wang To: "broonie@kernel.org" CC: "linux-spi@vger.kernel.org" , "linux-kernel@vger.kernel.org" Subject: [PATCH V2 4/8] spi: lpspi: add the error info of transfer speed setting Thread-Topic: [PATCH V2 4/8] spi: lpspi: add the error info of transfer speed setting Thread-Index: AQHU0+YeeShjZYAheEKu2sFsXPOkAQ== Date: Wed, 6 Mar 2019 06:30:41 +0000 Message-ID: <20190306063020.793-5-xiaoning.wang@nxp.com> References: <20190306063020.793-1-xiaoning.wang@nxp.com> In-Reply-To: <20190306063020.793-1-xiaoning.wang@nxp.com> Accept-Language: zh-CN, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: SG2PR02CA0029.apcprd02.prod.outlook.com (2603:1096:3:18::17) To AM6PR04MB5016.eurprd04.prod.outlook.com (2603:10a6:20b:9::24) x-mailer: git-send-email 2.17.1 authentication-results: spf=none (sender IP is ) smtp.mailfrom=xiaoning.wang@nxp.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [119.31.174.71] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 741b5e45-65db-4368-97ae-08d6a1fd40df x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0;PCL:0;RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600127)(711020)(4605104)(4618075)(2017052603328)(7153060)(7193020);SRVR:AM6PR04MB4373; x-ms-traffictypediagnostic: AM6PR04MB4373: x-microsoft-exchange-diagnostics: =?iso-8859-1?q?1=3BAM6PR04MB4373=3B23=3AgE?= =?iso-8859-1?q?iSB44yjMG9JBryVSepKWMP2etbF6mc1IezGkf7jC5N5urn76mph30iqSySqc?= =?iso-8859-1?q?bd0zI2UW22uaRf+c/uY+mCIw0+LWyR7GxZpUcfv2obsJMizmGBmbyKe35Krm?= =?iso-8859-1?q?ZEZzb1bTDWNPzE4uUT8Lz33iIDr1AsfnzA5IyXVU7jmOJqBK49XUK0zMVV9H?= =?iso-8859-1?q?2lzhH138B+4L7sMZFajSEw35HV2VHBieVxZbO8IDzgkLWnuyRytWqMCh0qF9?= =?iso-8859-1?q?okaOrZFO9EvQzq9YKcZ0DRmj6UsvxbaezosrWYRetqG9jGuk0iadSSwyuDqD?= =?iso-8859-1?q?frY3pHFNAoG+XnXYxgS3UouXR+hPTIqatxIRrEd1BPjoR17PlIDPwI4Vxw7l?= =?iso-8859-1?q?jA/I0eRvRgZHCVykC9UpLBuv1nkGdJSt3rk48hNxK/tnEHMzfEAf1khVdcR7?= =?iso-8859-1?q?q9PNRsKHg2HyxBAy8OT1jFBC6ag1Ergk25pqgdFIfvBgWE++vwkzy/t9bXv6?= =?iso-8859-1?q?019ofaLUehMOBgTukX6HZxwFLs3QbqOBy3m1L9bMpAyx6BD2CpIhSJRNHZgD?= =?iso-8859-1?q?eFNv7BOxD71G58JdaXPEejfh4duc0eknseA8WhrcYJWuDoKgVsOhAeaNsi2M?= =?iso-8859-1?q?LwJdn2LsPMVPoHilsm4Fwnb3UPdagnCyFrRvdCgn3s/8/TlebKx9wetiHv5Z?= =?iso-8859-1?q?ecO5bvHsAHJbGyMb1nROXlW4y/bofczYMT+wwkp0qs85ekL5PtmJMJHID56b?= =?iso-8859-1?q?ytwhWZ5u1kyaSpw1A7xBpzfZmEFy+s3gJfcQYZQzF3/U39GtHN5W5IWQC5nu?= =?iso-8859-1?q?sZUfyM6mb3YAohSVjEVlW7mULd6WQhzA7f6L962x88PXBCBT/1/zaXHMvbf5?= =?iso-8859-1?q?KPltFcbJ9cc0vr5LeoTnJEVSqGiPM4coguJJONiB2b8VMmsLMp2i5eSwFkcp?= =?iso-8859-1?q?crUHjCK0NGhVZcQk8wtAruHr8b2AcHSwPWUinppJJikVa2zl4HVpzPrqww6J?= =?iso-8859-1?q?quNzOS8eCdLJagbchjTL+dFOKjOvMFupw3xlTaB6G6nmyLC0XxucxRJS0egP?= =?iso-8859-1?q?AXl4jv+D4FK6hwueqN05yTvT9AI3zGhxXsD1pf+y0wuThkOYPcGJ8n5bGfWF?= =?iso-8859-1?q?reJ0T7BE4fEW9qfi+fLuLxEQwsA2vzD2HyGM8q86QDZcxzDeBth5xZVMxww7?= =?iso-8859-1?q?HG9cPlzQOiJww2xksxA+iYV+/iQElx1J6GE2/nJalmFREnDDWLnvL9u3+J90?= =?iso-8859-1?q?QGcHlDcqa1aRSQ7sf0MNDqLtTYnGgechCUyDiy6SuSAf2qxXCZ+iiWYVk7Yu?= =?iso-8859-1?q?KKFNko/eo18/vSwSL/YWlVDuHuxvUInDPGG1IUDA=3D=3D?= x-microsoft-antispam-prvs: x-forefront-prvs: 0968D37274 x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(346002)(136003)(376002)(366004)(39860400002)(396003)(199004)(189003)(97736004)(6116002)(386003)(8936002)(6506007)(106356001)(52116002)(1730700003)(8676002)(26005)(81156014)(81166006)(256004)(105586002)(102836004)(50226002)(2501003)(76176011)(99286004)(6512007)(305945005)(71200400001)(6436002)(5640700003)(6486002)(4326008)(53936002)(71190400001)(476003)(25786009)(486006)(66066001)(2616005)(7736002)(186003)(68736007)(446003)(1076003)(11346002)(54906003)(478600001)(316002)(36756003)(6916009)(2351001)(14454004)(86362001)(2906002)(5660300002)(3846002);DIR:OUT;SFP:1101;SCL:1;SRVR:AM6PR04MB4373;H:AM6PR04MB5016.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-message-info: 6PUsKQdyjpJcQASfQcPIuwy7JdZeafkBfy+AJbyUMDKn4gryVibM4dpOx2GN4ikAIBvDDyuk11WPDa0Gj2cJZzCCyScFf69KDMzrRQHKB3HXnBMbYGYQTP0XKVkjLd6jdrgxUvUEakxDzThjUK4lcmwZiantWDzbMhzYgu2d4U4o0rjNe427kp5BaAXKwMH+iD3XViCs8oVIUzN+yEndb823uvEdD9ivdNwZ42pxMjN9GlPAB70VjrL5h4n75bpZlF1/sc/VVgE5/x99cZG+ju6u0Kuwxkj2P+OiYM7F+PRj7TFsI0z6cKEbC5+RV+s3nEGtQA48Jw/T/Z73qQGpchGX7s9ZucL9ssHjV8Oz4yG9YIFQZ5eAl/WXChRiRPPoM9mmeI+0Kwvnh4dL0oMfn2iiWdO/BmKUeEoCk7DIdKY= MIME-Version: 1.0 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 741b5e45-65db-4368-97ae-08d6a1fd40df X-MS-Exchange-CrossTenant-originalarrivaltime: 06 Mar 2019 06:30:41.0799 (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-Transport-CrossTenantHeadersStamped: AM6PR04MB4373 Sender: linux-spi-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-spi@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Add a error info when set a speed which greater than half of per-clk of spi module. The minimum SCK period is 2 cycles(CCR[SCKDIV]). So the maximum transfer speed is half of spi per-clk. Signed-off-by: Clark Wang --- V2: - No change. Resend for applying. --- drivers/spi/spi-fsl-lpspi.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/drivers/spi/spi-fsl-lpspi.c b/drivers/spi/spi-fsl-lpspi.c index 84dcb9e176b8..69635cde0e22 100644 --- a/drivers/spi/spi-fsl-lpspi.c +++ b/drivers/spi/spi-fsl-lpspi.c @@ -255,6 +255,13 @@ static int fsl_lpspi_set_bitrate(struct fsl_lpspi_data *fsl_lpspi) u8 prescale; perclk_rate = clk_get_rate(fsl_lpspi->clk_per); + + if (config.speed_hz > perclk_rate / 2) { + dev_err(fsl_lpspi->dev, + "per-clk should be at least two times of transfer speed"); + return -EINVAL; + } + for (prescale = 0; prescale < 8; prescale++) { scldiv = perclk_rate / (clkdivs[prescale] * config.speed_hz) - 2; @@ -304,7 +311,7 @@ static int fsl_lpspi_config(struct fsl_lpspi_data *fsl_lpspi) return 0; } -static void fsl_lpspi_setup_transfer(struct spi_device *spi, +static int fsl_lpspi_setup_transfer(struct spi_device *spi, struct spi_transfer *t) { struct fsl_lpspi_data *fsl_lpspi = @@ -337,7 +344,7 @@ static void fsl_lpspi_setup_transfer(struct spi_device *spi, else fsl_lpspi->watermark = fsl_lpspi->txfifosize; - fsl_lpspi_config(fsl_lpspi); + return fsl_lpspi_config(fsl_lpspi); } static int fsl_lpspi_slave_abort(struct spi_controller *controller) @@ -429,7 +436,10 @@ static int fsl_lpspi_transfer_one_msg(struct spi_controller *controller, msg->actual_length = 0; list_for_each_entry(xfer, &msg->transfers, transfer_list) { - fsl_lpspi_setup_transfer(spi, xfer); + ret = fsl_lpspi_setup_transfer(spi, xfer); + if (ret < 0) + goto complete; + fsl_lpspi_set_cmd(fsl_lpspi, is_first_xfer); is_first_xfer = false; From patchwork Wed Mar 6 06:30:43 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Clark Wang X-Patchwork-Id: 10840433 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id D551717E0 for ; Wed, 6 Mar 2019 06:30:51 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id C1E1D2C756 for ; Wed, 6 Mar 2019 06:30:51 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id B629C2C776; Wed, 6 Mar 2019 06:30:51 +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=-8.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 1A0322C756 for ; Wed, 6 Mar 2019 06:30:51 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729028AbfCFGau (ORCPT ); Wed, 6 Mar 2019 01:30:50 -0500 Received: from mail-eopbgr50089.outbound.protection.outlook.com ([40.107.5.89]:43681 "EHLO EUR03-VE1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1729052AbfCFGat (ORCPT ); Wed, 6 Mar 2019 01:30:49 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=OxA5U5MVsfsm3lW7LN7xp2DkbqIjvZA2xazTALkP7V8=; b=f7aA5nT+sC37GwOLja4lIoTEkCqJPngspRGqU8cNivrFGQAlfwZ7RzwQraB7RKrVmUo3errV96S6MJs+l5gdyjTUf8eRuUhQeqDe8P/e4/RQ+jnXNc9faE0jpuK1S5O+8hCqo+X3+s0rTE88yzrhjBcY+8qTcko0xNmxlEpODSY= Received: from AM6PR04MB5016.eurprd04.prod.outlook.com (20.177.34.88) by AM6PR04MB4373.eurprd04.prod.outlook.com (20.177.38.91) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1665.19; Wed, 6 Mar 2019 06:30:43 +0000 Received: from AM6PR04MB5016.eurprd04.prod.outlook.com ([fe80::5841:afe:53fd:42bb]) by AM6PR04MB5016.eurprd04.prod.outlook.com ([fe80::5841:afe:53fd:42bb%6]) with mapi id 15.20.1665.020; Wed, 6 Mar 2019 06:30:43 +0000 From: Clark Wang To: "broonie@kernel.org" CC: "linux-spi@vger.kernel.org" , "linux-kernel@vger.kernel.org" Subject: [PATCH V2 5/8] spi: lpspi: use the core way to implement cs-gpio function Thread-Topic: [PATCH V2 5/8] spi: lpspi: use the core way to implement cs-gpio function Thread-Index: AQHU0+YfHXSSQ+2wq020IOJyOSoR1w== Date: Wed, 6 Mar 2019 06:30:43 +0000 Message-ID: <20190306063020.793-6-xiaoning.wang@nxp.com> References: <20190306063020.793-1-xiaoning.wang@nxp.com> In-Reply-To: <20190306063020.793-1-xiaoning.wang@nxp.com> Accept-Language: zh-CN, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: SG2PR02CA0029.apcprd02.prod.outlook.com (2603:1096:3:18::17) To AM6PR04MB5016.eurprd04.prod.outlook.com (2603:10a6:20b:9::24) x-mailer: git-send-email 2.17.1 authentication-results: spf=none (sender IP is ) smtp.mailfrom=xiaoning.wang@nxp.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [119.31.174.71] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 35d5a628-3ee0-4bb8-c103-08d6a1fd421a x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0;PCL:0;RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600127)(711020)(4605104)(4618075)(2017052603328)(7153060)(7193020);SRVR:AM6PR04MB4373; x-ms-traffictypediagnostic: AM6PR04MB4373: x-microsoft-exchange-diagnostics: =?iso-8859-1?q?1=3BAM6PR04MB4373=3B23=3A20?= =?iso-8859-1?q?bLht99nuDOF94PM91smTBvIFEt9UUD/rqbhFhyuUtkPZ3apguLx/pXM2WOA6?= =?iso-8859-1?q?AmWPUUdgZVcPxQ/th+ZlQaHlLgqaJUP6e9wtc6RkM1q5HSZMh2UWO1DQQVyi?= =?iso-8859-1?q?GEv4Ws/v4eaf2RjYyATWTwBkhzb9nfY0piqOR2BFNk8jolY/bWvYjzf1urZR?= =?iso-8859-1?q?L8x4VC7tq1AyORuLSz4MipaoBjswld6wXM2oD+j83Z+3pzZTjcDNSBOY27Pt?= =?iso-8859-1?q?Q8SggF1KsZbEu1BGj+8w3jmARogVPxRpZl0E0aAZthluTDrp7vHj+W0IUWX5?= =?iso-8859-1?q?i7twcqrpFJRtydiZj0a9sbsfOU8QLB5sCySqWDLSlOL67hD7rqM2ufs/UVyG?= =?iso-8859-1?q?tEpv+OL0RYMRopxvkNvAuiIcR8jx+c147ERAc3top2SU/Xdyg70dGNyIWveQ?= =?iso-8859-1?q?odukQc47V31/CZQ+PPn5spxzt3Xl+kHV7DccTNQFjG51uOJ73UghJh+FTqlk?= =?iso-8859-1?q?dvFAR2XqDCCQgkw9EoX0E3sa6EzcXnTUXiKjEwn26x6SVRBaLbrPgAtzySeI?= =?iso-8859-1?q?ZEqGQeBdz0O/XzOqoJkyhHUgWr7ntX2gbZw0QZRX/8G1TWdyp0gw73qUSoVl?= =?iso-8859-1?q?l2ioJSHAvqisQBqk7cW8G0QpSyW2Y17KcLvhXfZK8ZCXx0itUnEt9iylPjQL?= =?iso-8859-1?q?B48WZZ0uoeZht0mvnTrGQw45v6pwbb2AGz+5rb6oPDmvz/QbFkv3c5ozaIqD?= =?iso-8859-1?q?II3zIgSRRtOLW5SQOxJirAMcJidH4GvAHMu08vYVQsbYGvk04Eph2I1Ygahs?= =?iso-8859-1?q?dpE8nN/V/6l9JJKlMzDZvqJGOb4TNgY4+ZeO3SXdVqkcnRenC+rA7Niz62cH?= =?iso-8859-1?q?YcWBRJwpdZBkStKOLvw9MpuqehJFl5u2UOtiyHTQBGXmzE/1+7rZjW0bH+Op?= =?iso-8859-1?q?rvMom92UFh+Aoan7oxg5js9DbARQUX+To7SaxmHQflfmtIreV4EEWSwY5E+T?= =?iso-8859-1?q?g9SKvQHj3rVrwL0ySK7sV6naY/rS5IW7UdYmoKzunWotroYy9OmjaK4yWsEm?= =?iso-8859-1?q?B3I0fHXmpBKXnUkxHEfiJRQxAQVeSsKsdqog/cupVgxYL1W8W/yGH75BKU6h?= =?iso-8859-1?q?Mm/7VBVcWvTkNOyJM/i91xMlWFYOqbetkXL/sjJYHYA9ITiwwXjeTPRjLZjb?= =?iso-8859-1?q?+f8nw9mwD4K29NWGjnBbNln5/9f2Djc16y6Y4oDS/7ZTlFFWFhGdqlQC7pqx?= =?iso-8859-1?q?bGggYEqwcqHlVpISiQLyvj3uD22MxjB8xcwFM63NbwQr8j8cyJ1Rl1dNGi4B?= =?iso-8859-1?q?/RffHH5eUIu7EJ/ThPdAtY0ksZMqm+aCz8BH89gGzhi1o1F+JPLsZXc+7bQC?= =?iso-8859-1?q?Abpg4+YLxhcTCCH+JKNSCJ?= x-microsoft-antispam-prvs: x-forefront-prvs: 0968D37274 x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(346002)(136003)(376002)(366004)(39860400002)(396003)(199004)(189003)(97736004)(6116002)(386003)(8936002)(6506007)(106356001)(52116002)(1730700003)(8676002)(26005)(81156014)(81166006)(14444005)(256004)(105586002)(102836004)(50226002)(2501003)(76176011)(99286004)(6512007)(305945005)(71200400001)(6436002)(5640700003)(6486002)(4326008)(53936002)(71190400001)(476003)(25786009)(486006)(66066001)(2616005)(7736002)(186003)(68736007)(446003)(1076003)(11346002)(54906003)(478600001)(316002)(36756003)(6916009)(2351001)(14454004)(86362001)(2906002)(5660300002)(3846002)(43043002);DIR:OUT;SFP:1101;SCL:1;SRVR:AM6PR04MB4373;H:AM6PR04MB5016.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-message-info: GVEpmaAdILzt0ehTyE/GqqnYm75HyjmM/JyVZJEzWYQfctD4cHUwckUtdsD92yr1ItReyi/oG7IBN0ihZVGH7/iFsy89Jtiq0JRgi0vQKBmvTVuyRc5ukVBfpa+9PMuBFuTteKcUDTSn5SPOhr6bS0Bm1pFq5vqaH3vdFiMUaaREXsESK2X1Lzj+LMlngmu2Qk+EWE/DklHat6MGIM5JddCQWfxvjdeYV9kwdwgamTpwXVBo1IPv9qh/C9/wFtM47OjeORIEAZHwaAH/gTPu4jgkI14DgCPWwK2eAYibvTijYe4laU9Mkn2L/ZlOCHpWvXYyGrTfMRQeEDpdWJM8R4MpSzAzYaiUvUZ05grYYfJdZsr1UmnEyKXPzjd8LVEY8vPsN0Q6uYyA4XdUGqNHJ+GDbI1eqhv6PIZ+VroA8i8= MIME-Version: 1.0 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 35d5a628-3ee0-4bb8-c103-08d6a1fd421a X-MS-Exchange-CrossTenant-originalarrivaltime: 06 Mar 2019 06:30:43.1384 (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-Transport-CrossTenantHeadersStamped: AM6PR04MB4373 Sender: linux-spi-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-spi@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Use the default implementation of transfer_one_msg/chipselect/setup functions in spi core to implement cs-gpio control. Use fsl_lpspi_prepare_message to init the cs_gpio pin. Signed-off-by: Clark Wang Acked-by: Fugang Duan --- V2: - use core way to implement cs-gpio control. Removed the redundant code in the driver. --- drivers/spi/spi-fsl-lpspi.c | 101 +++++++++++++++++++++++------------- 1 file changed, 66 insertions(+), 35 deletions(-) diff --git a/drivers/spi/spi-fsl-lpspi.c b/drivers/spi/spi-fsl-lpspi.c index 69635cde0e22..a25e0e03f058 100644 --- a/drivers/spi/spi-fsl-lpspi.c +++ b/drivers/spi/spi-fsl-lpspi.c @@ -9,6 +9,7 @@ #include #include #include +#include #include #include #include @@ -16,8 +17,10 @@ #include #include #include +#include #include #include +#include #include #include #include @@ -91,6 +94,7 @@ struct fsl_lpspi_data { struct clk *clk_ipg; struct clk *clk_per; bool is_slave; + bool is_first_byte; void *rx_buf; const void *tx_buf; @@ -106,6 +110,8 @@ struct fsl_lpspi_data { struct completion xfer_done; bool slave_aborted; + + int chipselect[0]; }; static const struct of_device_id fsl_lpspi_dt_ids[] = { @@ -178,6 +184,20 @@ static int lpspi_unprepare_xfer_hardware(struct spi_controller *controller) return 0; } +static int fsl_lpspi_prepare_message(struct spi_controller *controller, + struct spi_message *msg) +{ + struct fsl_lpspi_data *fsl_lpspi = + spi_controller_get_devdata(controller); + struct spi_device *spi = msg->spi; + int gpio = fsl_lpspi->chipselect[spi->chip_select]; + + if (gpio_is_valid(gpio)) + gpio_direction_output(gpio, spi->mode & SPI_CS_HIGH ? 0 : 1); + + return 0; +} + static void fsl_lpspi_write_tx_fifo(struct fsl_lpspi_data *fsl_lpspi) { u8 txfifo_cnt; @@ -210,8 +230,7 @@ static void fsl_lpspi_read_rx_fifo(struct fsl_lpspi_data *fsl_lpspi) fsl_lpspi->rx(fsl_lpspi); } -static void fsl_lpspi_set_cmd(struct fsl_lpspi_data *fsl_lpspi, - bool is_first_xfer) +static void fsl_lpspi_set_cmd(struct fsl_lpspi_data *fsl_lpspi) { u32 temp = 0; @@ -227,7 +246,7 @@ static void fsl_lpspi_set_cmd(struct fsl_lpspi_data *fsl_lpspi, * For subsequent transfer, set TCR_CONTC to keep SS asserted. */ temp |= TCR_CONT; - if (is_first_xfer) + if (fsl_lpspi->is_first_byte) temp &= ~TCR_CONTC; else temp |= TCR_CONTC; @@ -396,8 +415,7 @@ static int fsl_lpspi_reset(struct fsl_lpspi_data *fsl_lpspi) return 0; } -static int fsl_lpspi_transfer_one(struct spi_controller *controller, - struct spi_device *spi, +static int fsl_lpspi_pio_transfer(struct spi_controller *controller, struct spi_transfer *t) { struct fsl_lpspi_data *fsl_lpspi = @@ -422,40 +440,27 @@ static int fsl_lpspi_transfer_one(struct spi_controller *controller, return 0; } -static int fsl_lpspi_transfer_one_msg(struct spi_controller *controller, - struct spi_message *msg) +static int fsl_lpspi_transfer_one(struct spi_controller *controller, + struct spi_device *spi, + struct spi_transfer *t) { struct fsl_lpspi_data *fsl_lpspi = - spi_controller_get_devdata(controller); - struct spi_device *spi = msg->spi; - struct spi_transfer *xfer; - bool is_first_xfer = true; - int ret = 0; - - msg->status = 0; - msg->actual_length = 0; - - list_for_each_entry(xfer, &msg->transfers, transfer_list) { - ret = fsl_lpspi_setup_transfer(spi, xfer); - if (ret < 0) - goto complete; - - fsl_lpspi_set_cmd(fsl_lpspi, is_first_xfer); - - is_first_xfer = false; + spi_controller_get_devdata(controller); + int ret; - ret = fsl_lpspi_transfer_one(controller, spi, xfer); - if (ret < 0) - goto complete; + fsl_lpspi->is_first_byte = true; + ret = fsl_lpspi_setup_transfer(spi, t); + if (ret < 0) + return ret; - msg->actual_length += xfer->len; - } + fsl_lpspi_set_cmd(fsl_lpspi); + fsl_lpspi->is_first_byte = false; -complete: - msg->status = ret; - spi_finalize_current_message(controller); + ret = fsl_lpspi_pio_transfer(controller, t); + if (ret < 0) + return ret; - return ret; + return 0; } static irqreturn_t fsl_lpspi_isr(int irq, void *dev_id) @@ -531,10 +536,13 @@ static int fsl_lpspi_init_rpm(struct fsl_lpspi_data *fsl_lpspi) static int fsl_lpspi_probe(struct platform_device *pdev) { + struct device_node *np = pdev->dev.of_node; struct fsl_lpspi_data *fsl_lpspi; struct spi_controller *controller; + struct spi_imx_master *lpspi_platform_info = + dev_get_platdata(&pdev->dev); struct resource *res; - int ret, irq; + int i, ret, irq; u32 temp; if (of_property_read_bool((&pdev->dev)->of_node, "spi-slave")) @@ -558,7 +566,30 @@ static int fsl_lpspi_probe(struct platform_device *pdev) fsl_lpspi->is_slave = of_property_read_bool((&pdev->dev)->of_node, "spi-slave"); - controller->transfer_one_message = fsl_lpspi_transfer_one_msg; + if (!fsl_lpspi->is_slave) { + for (i = 0; i < controller->num_chipselect; i++) { + int cs_gpio = of_get_named_gpio(np, "cs-gpios", i); + + if (!gpio_is_valid(cs_gpio) && lpspi_platform_info) + cs_gpio = lpspi_platform_info->chipselect[i]; + + fsl_lpspi->chipselect[i] = cs_gpio; + if (!gpio_is_valid(cs_gpio)) + continue; + + ret = devm_gpio_request(&pdev->dev, + fsl_lpspi->chipselect[i], + DRIVER_NAME); + if (ret) { + dev_err(&pdev->dev, "can't get cs gpios\n"); + goto out_controller_put; + } + } + controller->cs_gpios = fsl_lpspi->chipselect; + controller->prepare_message = fsl_lpspi_prepare_message; + } + + controller->transfer_one = fsl_lpspi_transfer_one; controller->prepare_transfer_hardware = lpspi_prepare_xfer_hardware; controller->unprepare_transfer_hardware = lpspi_unprepare_xfer_hardware; controller->mode_bits = SPI_CPOL | SPI_CPHA | SPI_CS_HIGH; From patchwork Wed Mar 6 06:30:45 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Clark Wang X-Patchwork-Id: 10840439 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id CE5A617E0 for ; Wed, 6 Mar 2019 06:31:13 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id BA3452C75A for ; Wed, 6 Mar 2019 06:31:13 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id ADF3A2C776; Wed, 6 Mar 2019 06:31:13 +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=-8.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id BA30C2C756 for ; Wed, 6 Mar 2019 06:31:12 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729077AbfCFGa4 (ORCPT ); Wed, 6 Mar 2019 01:30:56 -0500 Received: from mail-eopbgr50080.outbound.protection.outlook.com ([40.107.5.80]:11489 "EHLO EUR03-VE1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1729063AbfCFGaz (ORCPT ); Wed, 6 Mar 2019 01:30:55 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=gC3JqbsctjR9Zfq8KvrJNyIX0h08B5bpWFDR9qTyfVw=; b=arOp9k7wywqBQDDyemY/HF+FHtYZS4eWLZpOjZirWJkxjMjabT9gdR+EFoQZxEs3rZsmD0XmgU2e4U9oPM2IzqbL1cozcKnkjEpBsrBJ9bYYLM28u6TDvcSUmatI/oCgUZElnCwsFqCjq6srVAPMfNhQCWL+8Vw3HghWtoFd8Ew= Received: from AM6PR04MB5016.eurprd04.prod.outlook.com (20.177.34.88) by AM6PR04MB4373.eurprd04.prod.outlook.com (20.177.38.91) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1665.19; Wed, 6 Mar 2019 06:30:45 +0000 Received: from AM6PR04MB5016.eurprd04.prod.outlook.com ([fe80::5841:afe:53fd:42bb]) by AM6PR04MB5016.eurprd04.prod.outlook.com ([fe80::5841:afe:53fd:42bb%6]) with mapi id 15.20.1665.020; Wed, 6 Mar 2019 06:30:45 +0000 From: Clark Wang To: "broonie@kernel.org" CC: "linux-spi@vger.kernel.org" , "linux-kernel@vger.kernel.org" Subject: [PATCH V2 6/8] spi: lpspi: add dma mode support Thread-Topic: [PATCH V2 6/8] spi: lpspi: add dma mode support Thread-Index: AQHU0+Yh6Oh4Uxb7nEmgG98iwvig9g== Date: Wed, 6 Mar 2019 06:30:45 +0000 Message-ID: <20190306063020.793-7-xiaoning.wang@nxp.com> References: <20190306063020.793-1-xiaoning.wang@nxp.com> In-Reply-To: <20190306063020.793-1-xiaoning.wang@nxp.com> Accept-Language: zh-CN, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: SG2PR02CA0029.apcprd02.prod.outlook.com (2603:1096:3:18::17) To AM6PR04MB5016.eurprd04.prod.outlook.com (2603:10a6:20b:9::24) x-mailer: git-send-email 2.17.1 authentication-results: spf=none (sender IP is ) smtp.mailfrom=xiaoning.wang@nxp.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [119.31.174.71] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: f4e305fb-8209-4fcc-634b-08d6a1fd4354 x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0;PCL:0;RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600127)(711020)(4605104)(4618075)(2017052603328)(7153060)(7193020);SRVR:AM6PR04MB4373; x-ms-traffictypediagnostic: AM6PR04MB4373: x-microsoft-exchange-diagnostics: =?iso-8859-1?q?1=3BAM6PR04MB4373=3B23=3Alx?= =?iso-8859-1?q?8TP3XXymNTEnyC8VNYKt159PUy4eRW1+97542DgW3MHsjdRAQvDy5mhLJSs8?= =?iso-8859-1?q?ap2liNJKipP7tQR/dIa8kbcyKV2tZMvFbeNI2j1AcLY0EeJVHK/9x1XtNdBW?= =?iso-8859-1?q?ISpu4YKgdQVjOC1Mg5QHNiThsi0yKH7tIZN+96gIDtwwd0QojRFC+D4sPgWM?= =?iso-8859-1?q?/HaJiC/72js3OzvAZA2j0t4MVnSFQbbCXOqWPWZxsaw6GjbAvX96o7R/2SVu?= =?iso-8859-1?q?sfhPuFcFa1yQF8sTt9haRzJBlGMFdk8ViDb+PZut7j+g7eFh/Y/13wdLx8Gt?= =?iso-8859-1?q?qd7UxOF9Q3PyIHdMsMfGO+VmfGIXiHamzegifXk/iS3tloiS9wOyIx8xOh0f?= =?iso-8859-1?q?rWibV73UoUrABKAkkmehCb8yI/zmFxetubBIdA467/LdG6lK3ZXoLdxUo58D?= =?iso-8859-1?q?4YmviwwsJvH75paDlIlieq0QHb751AdnTb8RjxxzgPj/vAWexqR+0wWkD4Fr?= =?iso-8859-1?q?D8IbX92Y+OpBL9XKb//ZeSKfC/BzZD2iuP+nrFm+HlP3nIIOTY2FZ8u6s1lL?= =?iso-8859-1?q?7HCJzWwf9CSIcbp7iI+RA8+WHX0RXhKHeb0WRKUzcWG+haVb7H3rEiJ3eh1r?= =?iso-8859-1?q?+pDhGtkRwfvPhcubNuNgFCJQsytI68ImF/37ffjRl3ChwFN/fgWTdYKljA26?= =?iso-8859-1?q?TZRoXZQI84RUY2zXuLTZCadglpoACdFDnL6eT9wg3VoSn+t6AVIZ1Ob5FIib?= =?iso-8859-1?q?c+Xs5mqAjTfdVrtjxc1Iyj+BTBu8iPUVaht27t9nUeCR8HUCSeISaIamU+pl?= =?iso-8859-1?q?ETt0eC8zsSBV+7tZGAEe22OrSVl0xTvqowgBq1alyAJl3ON2AS5IEkOFXksI?= =?iso-8859-1?q?mgZJhkNAJQBJ6uU5znRe3h0lxl6nXia6y+cz0qO/GTEpWnBM1BxJ3Acbeq8V?= =?iso-8859-1?q?UD9epLF7yS54MrULz0uiPCBFjJ452HjTxr0MnxMPRzWpxmoqxRja5hmTE4QP?= =?iso-8859-1?q?y4tiOWYq2jiV1e+tiWIgnFOAPhk8fpdY0D5OK85/8x3xbiqq44CT+VRgeZxc?= =?iso-8859-1?q?9R2zvGErrtZGK0fb58hW6zpwBjQk3wrM6hwuXqpIdaxZmuUTISkIZqVFqO3t?= =?iso-8859-1?q?FMkpuG1xcO3o46q98O+VocNcO3F42KWlX56DgAEp/72ouXcJlNlesg/I3e9O?= =?iso-8859-1?q?chaJINVcHDEaZvxe24SzIQNMu4eKt05GNGQfZaAgV+06hD9GZKQnG/6y2btA?= =?iso-8859-1?q?2mCjITOgOzKxtfHzbgKHHuq+BYCVB91990cuNhjt/a3rqRAKTr8NnABemXWS?= =?iso-8859-1?q?kdzuiKtDqsEL35J/fzzCio8EQY6PKq1rpVXdRob849YhkyJp0ZrckkD87BQA?= =?iso-8859-1?q?Tr+I5PuiUb3hmnYZjW/uvu?= x-microsoft-antispam-prvs: x-forefront-prvs: 0968D37274 x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(346002)(136003)(376002)(366004)(39860400002)(396003)(199004)(189003)(97736004)(6116002)(386003)(8936002)(6506007)(106356001)(52116002)(1730700003)(8676002)(26005)(81156014)(81166006)(14444005)(256004)(105586002)(102836004)(30864003)(50226002)(2501003)(76176011)(99286004)(6512007)(305945005)(71200400001)(6436002)(5640700003)(6486002)(4326008)(53936002)(71190400001)(476003)(25786009)(486006)(66066001)(2616005)(7736002)(186003)(68736007)(446003)(1076003)(11346002)(54906003)(478600001)(316002)(36756003)(6916009)(2351001)(14454004)(86362001)(2906002)(5660300002)(3846002);DIR:OUT;SFP:1101;SCL:1;SRVR:AM6PR04MB4373;H:AM6PR04MB5016.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-message-info: ZNxMxpSHcrjuuE6iXhcnfu6Xlc+YAjwY20UuP699UTTHovPkxEwkPLrnoPdIhjYaPvEnyzmJoHRmUieczyLQRoU6SiLXQndxBmAaCb0RkaKW0S8Vq66XDmV3G1FYb55vQfJWTMAGkhixTH1jPWV6ODUdnFQXtKqXNB6YPzA8bMTW2Esb/Mj38kmPe/CsSymCGRegqyjNBzLokwquqHqWO6Xtah3UK55etBkVS84uqaZXG9KOJuxU8qG8zCUNIsvGHNG9vHIiXt9TXMFokd9mNtKueY0dChuZZ5o092fE8ztImUMtYTFl7YRCiSnArtTvnNYeSDcYDYe7+tA7IgI5NIZup4Im9linIK8I9BAOO+OH4uBV+lmm6V51a1Ah6B5Fatcy3nwPbVI+yNqV/z3f1s7cg6Bqdgfgkdmx68U5HQ8= MIME-Version: 1.0 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: f4e305fb-8209-4fcc-634b-08d6a1fd4354 X-MS-Exchange-CrossTenant-originalarrivaltime: 06 Mar 2019 06:30:45.1768 (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-Transport-CrossTenantHeadersStamped: AM6PR04MB4373 Sender: linux-spi-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-spi@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Add dma mode support for LPSPI. Any frame longer than half txfifosize will be sent by dma mode. For now, there are some limits: 1. The maximum transfer speed in master mode depends on the slave device, at least 40MHz(tested by spi-nor on 8qm-lpddr4-arm2 base board); 2. The maximum transfer speed in slave mode is 15MHz(imx7ulp), 22MHz(8qm/qxp). In order to reach the maximum speed which is mentioned in datasheet, the load of connect wires between master and slave should be less than 15pF. Signed-off-by: Clark Wang Acked-by: Fugang Duan --- V2: - replace a if judgement by switch statement - seperate a Debug print fix into next patch --- drivers/spi/spi-fsl-lpspi.c | 312 ++++++++++++++++++++++++++++++++++-- 1 file changed, 301 insertions(+), 11 deletions(-) diff --git a/drivers/spi/spi-fsl-lpspi.c b/drivers/spi/spi-fsl-lpspi.c index a25e0e03f058..9ff32fb67a29 100644 --- a/drivers/spi/spi-fsl-lpspi.c +++ b/drivers/spi/spi-fsl-lpspi.c @@ -8,6 +8,8 @@ #include #include #include +#include +#include #include #include #include @@ -20,6 +22,7 @@ #include #include #include +#include #include #include #include @@ -31,6 +34,9 @@ #define FSL_LPSPI_RPM_TIMEOUT 50 /* 50ms */ +/* The maximum bytes that edma can transfer once.*/ +#define FSL_LPSPI_MAX_EDMA_BYTES ((1 << 15) - 1) + /* i.MX7ULP LPSPI registers */ #define IMX7ULP_VERID 0x0 #define IMX7ULP_PARAM 0x4 @@ -64,6 +70,8 @@ #define IER_FCIE BIT(9) #define IER_RDIE BIT(1) #define IER_TDIE BIT(0) +#define DER_RDDE BIT(1) +#define DER_TDDE BIT(0) #define CFGR1_PCSCFG BIT(27) #define CFGR1_PINCFG (BIT(24)|BIT(25)) #define CFGR1_PCSPOL BIT(8) @@ -91,6 +99,7 @@ struct lpspi_config { struct fsl_lpspi_data { struct device *dev; void __iomem *base; + unsigned long base_phys; struct clk *clk_ipg; struct clk *clk_per; bool is_slave; @@ -111,6 +120,11 @@ struct fsl_lpspi_data { bool slave_aborted; + /* DMA */ + bool usedma; + struct completion dma_rx_completion; + struct completion dma_tx_completion; + int chipselect[0]; }; @@ -158,6 +172,35 @@ static void fsl_lpspi_intctrl(struct fsl_lpspi_data *fsl_lpspi, writel(enable, fsl_lpspi->base + IMX7ULP_IER); } +static int fsl_lpspi_bytes_per_word(const int bpw) +{ + return DIV_ROUND_UP(bpw, BITS_PER_BYTE); +} + +static bool fsl_lpspi_can_dma(struct spi_controller *controller, + struct spi_device *spi, + struct spi_transfer *transfer) +{ + unsigned int bytes_per_word; + + if (!controller->dma_rx) + return false; + + bytes_per_word = fsl_lpspi_bytes_per_word(transfer->bits_per_word); + + switch (bytes_per_word) + { + case 1: + case 2: + case 4: + break; + default: + return false; + } + + return true; +} + static int lpspi_prepare_xfer_hardware(struct spi_controller *controller) { struct fsl_lpspi_data *fsl_lpspi = @@ -245,11 +288,13 @@ static void fsl_lpspi_set_cmd(struct fsl_lpspi_data *fsl_lpspi) * For the first transfer, clear TCR_CONTC to assert SS. * For subsequent transfer, set TCR_CONTC to keep SS asserted. */ - temp |= TCR_CONT; - if (fsl_lpspi->is_first_byte) - temp &= ~TCR_CONTC; - else - temp |= TCR_CONTC; + if (!fsl_lpspi->usedma) { + temp |= TCR_CONT; + if (fsl_lpspi->is_first_byte) + temp &= ~TCR_CONTC; + else + temp |= TCR_CONTC; + } } writel(temp, fsl_lpspi->base + IMX7ULP_TCR); @@ -260,7 +305,11 @@ static void fsl_lpspi_set_watermark(struct fsl_lpspi_data *fsl_lpspi) { u32 temp; - temp = fsl_lpspi->watermark >> 1 | (fsl_lpspi->watermark >> 1) << 16; + if (!fsl_lpspi->usedma) + temp = fsl_lpspi->watermark >> 1 | + (fsl_lpspi->watermark >> 1) << 16; + else + temp = fsl_lpspi->watermark >> 1; writel(temp, fsl_lpspi->base + IMX7ULP_FCR); @@ -302,6 +351,53 @@ static int fsl_lpspi_set_bitrate(struct fsl_lpspi_data *fsl_lpspi) return 0; } +static int fsl_lpspi_dma_configure(struct spi_controller *controller) +{ + int ret; + enum dma_slave_buswidth buswidth; + struct dma_slave_config rx = {}, tx = {}; + struct fsl_lpspi_data *fsl_lpspi = + spi_controller_get_devdata(controller); + + switch (fsl_lpspi_bytes_per_word(fsl_lpspi->config.bpw)) { + case 4: + buswidth = DMA_SLAVE_BUSWIDTH_4_BYTES; + break; + case 2: + buswidth = DMA_SLAVE_BUSWIDTH_2_BYTES; + break; + case 1: + buswidth = DMA_SLAVE_BUSWIDTH_1_BYTE; + break; + default: + return -EINVAL; + } + + tx.direction = DMA_MEM_TO_DEV; + tx.dst_addr = fsl_lpspi->base_phys + IMX7ULP_TDR; + tx.dst_addr_width = buswidth; + tx.dst_maxburst = 1; + ret = dmaengine_slave_config(controller->dma_tx, &tx); + if (ret) { + dev_err(fsl_lpspi->dev, "TX dma configuration failed with %d\n", + ret); + return ret; + } + + rx.direction = DMA_DEV_TO_MEM; + rx.src_addr = fsl_lpspi->base_phys + IMX7ULP_RDR; + rx.src_addr_width = buswidth; + rx.src_maxburst = 1; + ret = dmaengine_slave_config(controller->dma_rx, &rx); + if (ret) { + dev_err(fsl_lpspi->dev, "RX dma configuration failed with %d\n", + ret); + return ret; + } + + return 0; +} + static int fsl_lpspi_config(struct fsl_lpspi_data *fsl_lpspi) { u32 temp; @@ -327,10 +423,16 @@ static int fsl_lpspi_config(struct fsl_lpspi_data *fsl_lpspi) temp |= CR_RRF | CR_RTF | CR_MEN; writel(temp, fsl_lpspi->base + IMX7ULP_CR); + temp = 0; + if (fsl_lpspi->usedma) + temp = DER_TDDE | DER_RDDE; + writel(temp, fsl_lpspi->base + IMX7ULP_DER); + return 0; } -static int fsl_lpspi_setup_transfer(struct spi_device *spi, +static int fsl_lpspi_setup_transfer(struct spi_controller *controller, + struct spi_device *spi, struct spi_transfer *t) { struct fsl_lpspi_data *fsl_lpspi = @@ -363,6 +465,11 @@ static int fsl_lpspi_setup_transfer(struct spi_device *spi, else fsl_lpspi->watermark = fsl_lpspi->txfifosize; + if (fsl_lpspi_can_dma(controller, spi, t)) + fsl_lpspi->usedma = 1; + else + fsl_lpspi->usedma = 0; + return fsl_lpspi_config(fsl_lpspi); } @@ -401,8 +508,10 @@ static int fsl_lpspi_reset(struct fsl_lpspi_data *fsl_lpspi) { u32 temp; - /* Disable all interrupt */ - fsl_lpspi_intctrl(fsl_lpspi, 0); + if (!fsl_lpspi->usedma) { + /* Disable all interrupt */ + fsl_lpspi_intctrl(fsl_lpspi, 0); + } /* W1C for all flags in SR */ temp = 0x3F << 8; @@ -415,6 +524,176 @@ static int fsl_lpspi_reset(struct fsl_lpspi_data *fsl_lpspi) return 0; } +static void fsl_lpspi_dma_rx_callback(void *cookie) +{ + struct fsl_lpspi_data *fsl_lpspi = (struct fsl_lpspi_data *)cookie; + + complete(&fsl_lpspi->dma_rx_completion); +} + +static void fsl_lpspi_dma_tx_callback(void *cookie) +{ + struct fsl_lpspi_data *fsl_lpspi = (struct fsl_lpspi_data *)cookie; + + complete(&fsl_lpspi->dma_tx_completion); +} + +static int fsl_lpspi_calculate_timeout(struct fsl_lpspi_data *fsl_lpspi, + int size) +{ + unsigned long timeout = 0; + + /* Time with actual data transfer and CS change delay related to HW */ + timeout = (8 + 4) * size / fsl_lpspi->config.speed_hz; + + /* Add extra second for scheduler related activities */ + timeout += 1; + + /* Double calculated timeout */ + return msecs_to_jiffies(2 * timeout * MSEC_PER_SEC); +} + +static int fsl_lpspi_dma_transfer(struct spi_controller *controller, + struct fsl_lpspi_data *fsl_lpspi, + struct spi_transfer *transfer) +{ + struct dma_async_tx_descriptor *desc_tx, *desc_rx; + unsigned long transfer_timeout; + unsigned long timeout; + struct sg_table *tx = &transfer->tx_sg, *rx = &transfer->rx_sg; + int ret; + + ret = fsl_lpspi_dma_configure(controller); + if (ret) + return ret; + + desc_rx = dmaengine_prep_slave_sg(controller->dma_rx, + rx->sgl, rx->nents, DMA_DEV_TO_MEM, + DMA_PREP_INTERRUPT | DMA_CTRL_ACK); + if (!desc_rx) + return -EINVAL; + + desc_rx->callback = fsl_lpspi_dma_rx_callback; + desc_rx->callback_param = (void *)fsl_lpspi; + dmaengine_submit(desc_rx); + reinit_completion(&fsl_lpspi->dma_rx_completion); + dma_async_issue_pending(controller->dma_rx); + + desc_tx = dmaengine_prep_slave_sg(controller->dma_tx, + tx->sgl, tx->nents, DMA_MEM_TO_DEV, + DMA_PREP_INTERRUPT | DMA_CTRL_ACK); + if (!desc_tx) { + dmaengine_terminate_all(controller->dma_tx); + return -EINVAL; + } + + desc_tx->callback = fsl_lpspi_dma_tx_callback; + desc_tx->callback_param = (void *)fsl_lpspi; + dmaengine_submit(desc_tx); + reinit_completion(&fsl_lpspi->dma_tx_completion); + dma_async_issue_pending(controller->dma_tx); + + fsl_lpspi->slave_aborted = false; + + if (!fsl_lpspi->is_slave) { + transfer_timeout = fsl_lpspi_calculate_timeout(fsl_lpspi, + transfer->len); + + /* Wait eDMA to finish the data transfer.*/ + timeout = wait_for_completion_timeout(&fsl_lpspi->dma_tx_completion, + transfer_timeout); + if (!timeout) { + dev_err(fsl_lpspi->dev, "I/O Error in DMA TX\n"); + dmaengine_terminate_all(controller->dma_tx); + dmaengine_terminate_all(controller->dma_rx); + fsl_lpspi_reset(fsl_lpspi); + return -ETIMEDOUT; + } + + timeout = wait_for_completion_timeout(&fsl_lpspi->dma_rx_completion, + transfer_timeout); + if (!timeout) { + dev_err(fsl_lpspi->dev, "I/O Error in DMA RX\n"); + dmaengine_terminate_all(controller->dma_tx); + dmaengine_terminate_all(controller->dma_rx); + fsl_lpspi_reset(fsl_lpspi); + return -ETIMEDOUT; + } + } else { + if (wait_for_completion_interruptible(&fsl_lpspi->dma_tx_completion) || + fsl_lpspi->slave_aborted) { + dev_dbg(fsl_lpspi->dev, + "I/O Error in DMA TX interrupted\n"); + dmaengine_terminate_all(controller->dma_tx); + dmaengine_terminate_all(controller->dma_rx); + fsl_lpspi_reset(fsl_lpspi); + return -EINTR; + } + + if (wait_for_completion_interruptible(&fsl_lpspi->dma_rx_completion) || + fsl_lpspi->slave_aborted) { + dev_dbg(fsl_lpspi->dev, + "I/O Error in DMA RX interrupted\n"); + dmaengine_terminate_all(controller->dma_tx); + dmaengine_terminate_all(controller->dma_rx); + fsl_lpspi_reset(fsl_lpspi); + return -EINTR; + } + } + + fsl_lpspi_reset(fsl_lpspi); + + return 0; +} + +static void fsl_lpspi_dma_exit(struct spi_controller *controller) +{ + if (controller->dma_rx) { + dma_release_channel(controller->dma_rx); + controller->dma_rx = NULL; + } + + if (controller->dma_tx) { + dma_release_channel(controller->dma_tx); + controller->dma_tx = NULL; + } +} + +static int fsl_lpspi_dma_init(struct device *dev, + struct fsl_lpspi_data *fsl_lpspi, + struct spi_controller *controller) +{ + int ret; + + /* Prepare for TX DMA: */ + controller->dma_tx = dma_request_slave_channel_reason(dev, "tx"); + if (IS_ERR(controller->dma_tx)) { + ret = PTR_ERR(controller->dma_tx); + dev_dbg(dev, "can't get the TX DMA channel, error %d!\n", ret); + controller->dma_tx = NULL; + goto err; + } + + /* Prepare for RX DMA: */ + controller->dma_rx = dma_request_slave_channel_reason(dev, "rx"); + if (IS_ERR(controller->dma_rx)) { + ret = PTR_ERR(controller->dma_rx); + dev_dbg(dev, "can't get the RX DMA channel, error %d\n", ret); + controller->dma_rx = NULL; + goto err; + } + + init_completion(&fsl_lpspi->dma_rx_completion); + init_completion(&fsl_lpspi->dma_tx_completion); + controller->can_dma = fsl_lpspi_can_dma; + controller->max_dma_len = FSL_LPSPI_MAX_EDMA_BYTES; + + return 0; +err: + fsl_lpspi_dma_exit(controller); + return ret; +} + static int fsl_lpspi_pio_transfer(struct spi_controller *controller, struct spi_transfer *t) { @@ -449,14 +728,17 @@ static int fsl_lpspi_transfer_one(struct spi_controller *controller, int ret; fsl_lpspi->is_first_byte = true; - ret = fsl_lpspi_setup_transfer(spi, t); + ret = fsl_lpspi_setup_transfer(controller, spi, t); if (ret < 0) return ret; fsl_lpspi_set_cmd(fsl_lpspi); fsl_lpspi->is_first_byte = false; - ret = fsl_lpspi_pio_transfer(controller, t); + if (fsl_lpspi->usedma) + ret = fsl_lpspi_dma_transfer(controller, fsl_lpspi, t); + else + ret = fsl_lpspi_pio_transfer(controller, t); if (ret < 0) return ret; @@ -606,6 +888,7 @@ static int fsl_lpspi_probe(struct platform_device *pdev) ret = PTR_ERR(fsl_lpspi->base); goto out_controller_put; } + fsl_lpspi->base_phys = res->start; irq = platform_get_irq(pdev, 0); if (irq < 0) { @@ -647,6 +930,13 @@ static int fsl_lpspi_probe(struct platform_device *pdev) fsl_lpspi->txfifosize = 1 << (temp & 0x0f); fsl_lpspi->rxfifosize = 1 << ((temp >> 8) & 0x0f); + ret = fsl_lpspi_dma_init(&pdev->dev, fsl_lpspi, controller); + if (ret == -EPROBE_DEFER) + goto out_controller_put; + + if (ret < 0) + dev_err(&pdev->dev, "dma setup error %d, use pio\n", ret); + ret = devm_spi_register_controller(&pdev->dev, controller); if (ret < 0) { dev_err(&pdev->dev, "spi_register_controller error.\n"); From patchwork Wed Mar 6 06:30:47 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Clark Wang X-Patchwork-Id: 10840437 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 1AC56180E for ; Wed, 6 Mar 2019 06:31:10 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 06DC02C756 for ; Wed, 6 Mar 2019 06:31:10 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id EF9292C776; Wed, 6 Mar 2019 06:31:09 +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=-8.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 94F6F2C756 for ; Wed, 6 Mar 2019 06:31:09 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729093AbfCFGa6 (ORCPT ); Wed, 6 Mar 2019 01:30:58 -0500 Received: from mail-eopbgr50080.outbound.protection.outlook.com ([40.107.5.80]:11489 "EHLO EUR03-VE1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1729052AbfCFGa5 (ORCPT ); Wed, 6 Mar 2019 01:30:57 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ukNEdK0riXpPc10OFBxPv/1trFn2JgPClf9gK6MY3v0=; b=wC+bPskE64ziu39aY4ID+xdBQydvyqPZ+nFsJQJHRd9+hFRaufSsnVFv29vNMN/uXL3i8nvIu1IiP1b4gpYax0G67ZFvyRvqFyCmcdDymGA5Sld+dHExIZpjrxueSnKjiTtG/MYGP9h8Dj0/WDjEvcgJqtdT2XLpHDoubd2PjrY= Received: from AM6PR04MB5016.eurprd04.prod.outlook.com (20.177.34.88) by AM6PR04MB4373.eurprd04.prod.outlook.com (20.177.38.91) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1665.19; Wed, 6 Mar 2019 06:30:47 +0000 Received: from AM6PR04MB5016.eurprd04.prod.outlook.com ([fe80::5841:afe:53fd:42bb]) by AM6PR04MB5016.eurprd04.prod.outlook.com ([fe80::5841:afe:53fd:42bb%6]) with mapi id 15.20.1665.020; Wed, 6 Mar 2019 06:30:47 +0000 From: Clark Wang To: "broonie@kernel.org" CC: "linux-spi@vger.kernel.org" , "linux-kernel@vger.kernel.org" Subject: [PATCH V2 7/8] spi: lpspi: Add the missing NULL check Thread-Topic: [PATCH V2 7/8] spi: lpspi: Add the missing NULL check Thread-Index: AQHU0+Yixo4aIJF2cE68MUX+Dtp80Q== Date: Wed, 6 Mar 2019 06:30:47 +0000 Message-ID: <20190306063020.793-8-xiaoning.wang@nxp.com> References: <20190306063020.793-1-xiaoning.wang@nxp.com> In-Reply-To: <20190306063020.793-1-xiaoning.wang@nxp.com> Accept-Language: zh-CN, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: SG2PR02CA0029.apcprd02.prod.outlook.com (2603:1096:3:18::17) To AM6PR04MB5016.eurprd04.prod.outlook.com (2603:10a6:20b:9::24) x-mailer: git-send-email 2.17.1 authentication-results: spf=none (sender IP is ) smtp.mailfrom=xiaoning.wang@nxp.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [119.31.174.71] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: dc5d0619-4c38-47d2-57c7-08d6a1fd448c x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0;PCL:0;RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600127)(711020)(4605104)(4618075)(2017052603328)(7153060)(7193020);SRVR:AM6PR04MB4373; x-ms-traffictypediagnostic: AM6PR04MB4373: x-microsoft-exchange-diagnostics: =?iso-8859-1?q?1=3BAM6PR04MB4373=3B23=3AUj?= =?iso-8859-1?q?yPGAmDFv7ropkX9H5ySx8LJgzib+ucJYVk5hnZLNk2oPhpbXcAd+rZYoSzaU?= =?iso-8859-1?q?jXxqFxV+wizLOVD9aJXdPPHKhtiX2TMmOCpR07ou+hDMj96Hxgxrh6U8f+Qo?= =?iso-8859-1?q?52fwZxsZ01ufiCiXuPRgSQuuIwlotsUSis+jl1Mmd1hYR6uX1ARHy8BLwkEX?= =?iso-8859-1?q?4SNaJoy0XBuJl0gvHaartGOpfBmDQE3/TfzsZ9OH+seKfFsD4J6Vm1CvnpOA?= =?iso-8859-1?q?rSeu+ayRRcFWaU+fR1mrvbFPMV4pK3PAFNqEA0sBFlLLSjl3Qxnfk3pYZD5l?= =?iso-8859-1?q?Uj3a3jrrWTPOE1njpCmc5gRASFuIjLGV86p1VkymUFcHALqjpO8xqcWKZ4os?= =?iso-8859-1?q?K5Yjc0mDLLypEdqF84mCc9r9yGKBxHKgdm0MrCr8E770OfFQXzsvWhNG2CWx?= =?iso-8859-1?q?5+UmjSZPrcld9Oanj7tXH3Om6LQed7KJGgnvO4uem0R77P1ZabhfAm1b/0uK?= =?iso-8859-1?q?+Cvd/F4jg20i/LLyGPNJxIypJ/guNkJ3m0x0tRXelxf9j311zwKn/nqjhgbM?= =?iso-8859-1?q?31qntPJWFz7BdF9DEojQ9Hn3lxfUCCqvmzzhIxEfLm9nzVnC4P5DppH1usnl?= =?iso-8859-1?q?DvPqwED5BkK3JzUWcdTLvJknt5i1keOzXzqdfnVw9EiTWVL/pYcw5smVlvmQ?= =?iso-8859-1?q?2IcFhA3c48Xh4rMxT1z3RFJLqP85F7MTOvwznautMAH+Bss84S5wPIdL0Gq7?= =?iso-8859-1?q?4n3UqizG0j7vKElF+g2bmFVudwr0V2SQutB0eM7KdysOKCTq4ymt3H+idU+B?= =?iso-8859-1?q?IQ3R1z86HrxXNCxYzN3lFLbFybT6g1ZV5ua7bgzDcma62fMJkHOiRA9P5y2n?= =?iso-8859-1?q?tyjv4XQcbqIE3zKjCvB0cmwoSexXMPJyxOYUebFLmP1BG60b9UOXvwp9l22T?= =?iso-8859-1?q?WwQI4D1Y9SDbvAdrkuBEkFoM+tD2MDLCkiafa+NWaoRy7YPOJ5zsc/xR0wfF?= =?iso-8859-1?q?CfwbXGrT5fjQTVtisdPg/Uz00NnS/gxUNidTnFI0ItKDvfBoSKJK2UuTUIV0?= =?iso-8859-1?q?ku8yO3TEUfhZHCmmPtlQUIpPN2w/0XYqQBr9bqhSZsCYg4fZdvq/UHk5jm6C?= =?iso-8859-1?q?YIkDlKlvGbfdEX7glNKsi2PJHvpUUiS2J6G9+ziRoPIzRFHANSXlM0L0Vh9f?= =?iso-8859-1?q?+RzUPjRjqY7TvbV4vN3TyTx83I40Uof+Sly7SvDkf6MEzsLt1y8rRzS2X3b6?= =?iso-8859-1?q?sDrMcpjKQC/nhq+b6A6c9DMJRbCeIPak9yNAy+n94tJAE8d8unVVUp5EwLBQ?= =?iso-8859-1?q?wwH2EJW2u5dUs0J0uEc2V6XVsZU0kMdduH7eveQQ=3D=3D?= x-microsoft-antispam-prvs: x-forefront-prvs: 0968D37274 x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(346002)(136003)(376002)(366004)(39860400002)(396003)(199004)(189003)(97736004)(6116002)(386003)(8936002)(6506007)(106356001)(52116002)(1730700003)(8676002)(26005)(81156014)(81166006)(256004)(105586002)(102836004)(50226002)(2501003)(76176011)(99286004)(6512007)(305945005)(71200400001)(6436002)(5640700003)(6486002)(4326008)(53936002)(71190400001)(476003)(25786009)(486006)(66066001)(2616005)(7736002)(186003)(68736007)(446003)(1076003)(11346002)(54906003)(478600001)(316002)(36756003)(6916009)(2351001)(14454004)(86362001)(2906002)(5660300002)(3846002);DIR:OUT;SFP:1101;SCL:1;SRVR:AM6PR04MB4373;H:AM6PR04MB5016.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-message-info: 8wZNWMtjfAZJBn9ciVRgTaAk3K4O8ieKGsllxELs8lsOHnVbNhDtyLsJs8Y1u1JePjYxeLdoMSninU9uWbcIvPHLnWzfsWyM7qlCqGmP0xh7Ubw+dz6v3/R9iFqcb8T0e4NmrDWHi94qY0SUxhVZr5DpJoMXlozaixGdgc6FqgDieGc0kQHNE0o9rwIPoEUCKnoUaVkAfR1yjcUBSeBpDGJG0ITK6DRIj9OOOf6Z/3WwTr1ijFmkCfjLUGa1cBZ/Mr0d8aJHP9kowOMc0SWhEBZNEJkK0+REn18cVXs/Alf4rJQDRvC+NEVjdbr3XDiQeH9NdBXEmm9FCi52WAk33u1Tf4rOFZz6lT3+LTTMTGuKoc71QsGckZv5hs55rGruZ0KguIKldMBHUHIgcN0/tr4SUotcZqkmMzV4NeOowRg= MIME-Version: 1.0 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: dc5d0619-4c38-47d2-57c7-08d6a1fd448c X-MS-Exchange-CrossTenant-originalarrivaltime: 06 Mar 2019 06:30:47.4684 (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-Transport-CrossTenantHeadersStamped: AM6PR04MB4373 Sender: linux-spi-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-spi@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP The spi_transfer *t will be used in one transfer whatever. If t is NULL, there has no need to try sending data, so add an error return here. Signed-off-by: Clark Wang Acked-by: Fugang Duan --- V2: - add this patch in this version --- drivers/spi/spi-fsl-lpspi.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/drivers/spi/spi-fsl-lpspi.c b/drivers/spi/spi-fsl-lpspi.c index 9ff32fb67a29..2ac3ac5ea50a 100644 --- a/drivers/spi/spi-fsl-lpspi.c +++ b/drivers/spi/spi-fsl-lpspi.c @@ -438,9 +438,12 @@ static int fsl_lpspi_setup_transfer(struct spi_controller *controller, struct fsl_lpspi_data *fsl_lpspi = spi_controller_get_devdata(spi->controller); + if (t == NULL) + return -EINVAL; + fsl_lpspi->config.mode = spi->mode; - fsl_lpspi->config.bpw = t ? t->bits_per_word : spi->bits_per_word; - fsl_lpspi->config.speed_hz = t ? t->speed_hz : spi->max_speed_hz; + fsl_lpspi->config.bpw = t->bits_per_word; + fsl_lpspi->config.speed_hz = t->speed_hz; fsl_lpspi->config.chip_select = spi->chip_select; if (!fsl_lpspi->config.speed_hz) From patchwork Wed Mar 6 06:30:49 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Clark Wang X-Patchwork-Id: 10840435 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 717581803 for ; Wed, 6 Mar 2019 06:31:09 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 5A9D32C756 for ; Wed, 6 Mar 2019 06:31:09 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 4EF2F2C776; Wed, 6 Mar 2019 06:31:09 +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=-8.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 1BF7A2C756 for ; Wed, 6 Mar 2019 06:31:08 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729052AbfCFGbC (ORCPT ); Wed, 6 Mar 2019 01:31:02 -0500 Received: from mail-eopbgr50080.outbound.protection.outlook.com ([40.107.5.80]:11489 "EHLO EUR03-VE1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1729092AbfCFGa7 (ORCPT ); Wed, 6 Mar 2019 01:30:59 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=TDPUj+q0zv8FBil+gr5fgC6yGbTuJonzzrqYzdjZfm8=; b=Jf5nU/rF07xlnCKQ7DuOHpiKGx8VVvzGbDw+JDTNiiS6vAiP0HZxZZ5N0TwBI+1DzvlNg4Y/OLXNCvSH9t6wp0mcmqQ9eLiP7W73YBSjR+lNC95MHtMVcl+DfabP0LC0aqYgC/W4+V83xa2GGWGc3oe6t43UakgKJHJR0l5C6K8= Received: from AM6PR04MB5016.eurprd04.prod.outlook.com (20.177.34.88) by AM6PR04MB4373.eurprd04.prod.outlook.com (20.177.38.91) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1665.19; Wed, 6 Mar 2019 06:30:50 +0000 Received: from AM6PR04MB5016.eurprd04.prod.outlook.com ([fe80::5841:afe:53fd:42bb]) by AM6PR04MB5016.eurprd04.prod.outlook.com ([fe80::5841:afe:53fd:42bb%6]) with mapi id 15.20.1665.020; Wed, 6 Mar 2019 06:30:50 +0000 From: Clark Wang To: "broonie@kernel.org" CC: "linux-spi@vger.kernel.org" , "linux-kernel@vger.kernel.org" Subject: [PATCH V2 8/8] spi: lpspi: Code cleanup Thread-Topic: [PATCH V2 8/8] spi: lpspi: Code cleanup Thread-Index: AQHU0+YjYKT22qgVc0er9bMf4NkGBA== Date: Wed, 6 Mar 2019 06:30:49 +0000 Message-ID: <20190306063020.793-9-xiaoning.wang@nxp.com> References: <20190306063020.793-1-xiaoning.wang@nxp.com> In-Reply-To: <20190306063020.793-1-xiaoning.wang@nxp.com> Accept-Language: zh-CN, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: SG2PR02CA0029.apcprd02.prod.outlook.com (2603:1096:3:18::17) To AM6PR04MB5016.eurprd04.prod.outlook.com (2603:10a6:20b:9::24) x-mailer: git-send-email 2.17.1 authentication-results: spf=none (sender IP is ) smtp.mailfrom=xiaoning.wang@nxp.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [119.31.174.71] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 039e4248-6ccd-457f-8e2d-08d6a1fd45e9 x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0;PCL:0;RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600127)(711020)(4605104)(4618075)(2017052603328)(7153060)(7193020);SRVR:AM6PR04MB4373; x-ms-traffictypediagnostic: AM6PR04MB4373: x-microsoft-exchange-diagnostics: =?iso-8859-1?q?1=3BAM6PR04MB4373=3B23=3Axq?= =?iso-8859-1?q?ykR5jLbOXy/FOFsX09IwJbC67iTden0aho9HPLxi/HRrWp5B2N1dtfgSvMRy?= =?iso-8859-1?q?aSLYilmlHCjjQDnrmUJl4Qs10MTXrouulx131WEevBD/kdc5EEn/hvBF+2ri?= =?iso-8859-1?q?E/kAoTuo1e/kRiI9UQ+qoUVmmCrniZg6DyXbGPTbtne9Kkhm2ovVqotTTESz?= =?iso-8859-1?q?lDC0elnZZTglCv2t5WH3fBG/UxvnxblYvnipg82NUxAn/ZUYHWarG7cfbPcw?= =?iso-8859-1?q?D1GrwaWzblr4KDzPOT5Z1wxi2Ma34eMy6nXMSOVBcQh0lpzinsW3Rw0N2JLr?= =?iso-8859-1?q?rjy45bITKLWB1yfx4K0FpM6M+m6OYr9KNoAthgEYa2TwXlKfw0u2rI/OGpWn?= =?iso-8859-1?q?lbBIpISSrZv31aGoi+tt1SER8KZ49uxOFlkruvU8d7tncxC9U4NuGkRYa5M/?= =?iso-8859-1?q?IkOW4DceHjEwXnilBdjsnd7YxFEhV400aE01Rj5DGX3NumWbZTTl+IYr/XfX?= =?iso-8859-1?q?cDdBRAI4SK+/5FYZtmmGkVMHnvM0Q2uH5Z+CwwRTDficks2SbYlTXNFZzeX2?= =?iso-8859-1?q?qVRc7AAf7V3Oq3z4sCiF0ZWo6IgoxlI8jQz6sdH8WUWpAitjLRcROdcjS70H?= =?iso-8859-1?q?BRJKTiG/+emb5KW0F+xUujXb6ua0xXAEVeOfhTOT6xqq2iBYusrJXkFP6aeO?= =?iso-8859-1?q?K04Ji7ZuPQjAoUAd3MDp5Q97PjojouT6SGoQUxO8MyUt87F/wSDLthb0Hx4e?= =?iso-8859-1?q?rduzSrXAqc4NjkNG0YmMDn4DA8ySKbx+KjNiybPP4KTsFsZzOTeW6vhMkajx?= =?iso-8859-1?q?/6awwcG6K0mO2tHYqXi4wncvCtF2t8Br94sc19ado8U6Y8dvxDHyCuNWhATh?= =?iso-8859-1?q?OX9pPk033SaA2k7k/dqXgWlD/PQSaeHaU2muiLW9E/H2W0LT1kxfviNNJJKa?= =?iso-8859-1?q?RlNEDrCBNXNuIEQjej1lddke2ZogtMVjk/w24wS1rvRimi253+MOsdcsBNjW?= =?iso-8859-1?q?loHwqDCiq+/fodCEjRRqf0kVsJBkrwkHWi3VLH4j+uQOYBof38INLVWZ+ied?= =?iso-8859-1?q?WJC6hGupazSMOVWyLYv7rT3Ta/X3sZ9ei2aOJiLxzE1n7B8n5r+lbpI90dC9?= =?iso-8859-1?q?VdQWHhU0/z+dmkZNKH18GraKHpmul03wbBEpWI16BarDlSlgnMGC9ftRtC0B?= =?iso-8859-1?q?T9P4IvJkcQkFLED11NK+sRhxDZ+FVrRJJneQT3OAJB05Z0WgwlVNExqskHrw?= =?iso-8859-1?q?8hU+BwYeD1L5b0iae4Jf4Eleyh0eWRnonaO/IJycWP5xnRnC+g84jvH0+p1r?= =?iso-8859-1?q?iyTaZAYvX4Vhtcw2Sen7TdzfN6IW6LGeVcN/A1omVNz/ZKI9mANwbpqnmvu1?= =?iso-8859-1?q?GsL2xSc7AmWe8fLk9rY7vK?= x-microsoft-antispam-prvs: x-forefront-prvs: 0968D37274 x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(346002)(136003)(376002)(366004)(39860400002)(396003)(199004)(189003)(97736004)(6116002)(386003)(8936002)(6506007)(106356001)(52116002)(1730700003)(8676002)(26005)(81156014)(81166006)(14444005)(256004)(105586002)(102836004)(50226002)(2501003)(76176011)(99286004)(6512007)(305945005)(71200400001)(6436002)(5640700003)(6486002)(4326008)(53936002)(4744005)(71190400001)(476003)(25786009)(486006)(66066001)(2616005)(7736002)(186003)(68736007)(446003)(1076003)(11346002)(54906003)(478600001)(316002)(36756003)(6916009)(2351001)(14454004)(86362001)(2906002)(5660300002)(3846002);DIR:OUT;SFP:1101;SCL:1;SRVR:AM6PR04MB4373;H:AM6PR04MB5016.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-message-info: wE9rcnKN9a7roVhlZ9hNOT54KOw3H284384KbViyrZCYBvGyjoMvi3bgn0mJxXHTvcYNVNkEGgrLy1zb6aht2i6oQwLeITLL1b6CDx97EM97sVzclAFj38PhkMr5UPkPDvt7xlhRLpiLLc5zwUpzzDyRM+wvIBED30/5MwPp0ie/Hg9/f99FlU1wPk6Lf0iFZSHF2+xwSaQEVta48UVsqhGDwGX3yEHwtqiDAXo3Bl3km4aF4MNt9xuwx2u607W/VXx0uAriUfPbjQ8ouUfBuZwU/QEVIy3fUjB/e6kB/cNpuGlalkZJwLx44X/mysLbvsrYz/k5+DYHSW/4gmEncEzu2jiAcfv6E2AeRKPRkSHcx4m/xN1NdqYkrfLn4lP1UkEZwSxzXbnRR+qv/LgNHLD5cOg+HoNu/XpvjZ8l+a8= MIME-Version: 1.0 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 039e4248-6ccd-457f-8e2d-08d6a1fd45e9 X-MS-Exchange-CrossTenant-originalarrivaltime: 06 Mar 2019 06:30:50.0052 (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-Transport-CrossTenantHeadersStamped: AM6PR04MB4373 Sender: linux-spi-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-spi@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Delete the extra space. Signed-off-by: Clark Wang --- V2: - add this patch in this version --- drivers/spi/spi-fsl-lpspi.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/spi/spi-fsl-lpspi.c b/drivers/spi/spi-fsl-lpspi.c index 2ac3ac5ea50a..1860f066f838 100644 --- a/drivers/spi/spi-fsl-lpspi.c +++ b/drivers/spi/spi-fsl-lpspi.c @@ -345,7 +345,7 @@ static int fsl_lpspi_set_bitrate(struct fsl_lpspi_data *fsl_lpspi) writel(scldiv | (scldiv << 8) | ((scldiv >> 1) << 16), fsl_lpspi->base + IMX7ULP_CCR); - dev_dbg(fsl_lpspi->dev, "perclk=%d, speed=%d, prescale =%d, scldiv=%d\n", + dev_dbg(fsl_lpspi->dev, "perclk=%d, speed=%d, prescale=%d, scldiv=%d\n", perclk_rate, config.speed_hz, prescale, scldiv); return 0;