From patchwork Fri Mar 3 05:11:24 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shubhrajyoti Datta X-Patchwork-Id: 9602619 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id DDF88600CB for ; Fri, 3 Mar 2017 11:53:01 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id CDF6928584 for ; Fri, 3 Mar 2017 11:53:01 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id C269C285EC; Fri, 3 Mar 2017 11:53:01 +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=-6.8 required=2.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_HI,T_DKIM_INVALID 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 003C0285EB for ; Fri, 3 Mar 2017 11:53:00 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751518AbdCCLxA (ORCPT ); Fri, 3 Mar 2017 06:53:00 -0500 Received: from mail-co1nam03on0051.outbound.protection.outlook.com ([104.47.40.51]:55472 "EHLO NAM03-CO1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751356AbdCCLw7 (ORCPT ); Fri, 3 Mar 2017 06:52:59 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=xilinx.onmicrosoft.com; s=selector1-xilinx-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=r1SbijCzXpI2gr63++ocRKb5n1LqbnwbCIs+rEcWFNs=; b=rlMGVzkQq2xoIbpiABpNCtsC/Rs9AhKsfUA4PXQkn1JDZaTRnHQ0RqMu7oyFeU7m6rGbhPluTdCa8cCYJ3Gm4ZCZan45oxc4Jpz2juaOYPgwNJTpxh2O7MpobgRrlCQpAjH49hTaplAsrG3WJAg/GEzihr7Dll4UdJUr8aAynhw= Received: from BLUPR0201CA0005.namprd02.prod.outlook.com (10.163.116.15) by DM2PR02MB1386.namprd02.prod.outlook.com (10.161.143.143) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.933.12; Fri, 3 Mar 2017 05:11:36 +0000 Received: from SN1NAM02FT011.eop-nam02.prod.protection.outlook.com (2a01:111:f400:7e44::203) by BLUPR0201CA0005.outlook.office365.com (2a01:111:e400:52e7::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.947.12 via Frontend Transport; Fri, 3 Mar 2017 05:11:35 +0000 Authentication-Results: spf=pass (sender IP is 149.199.60.83) smtp.mailfrom=xilinx.com; vger.kernel.org; dkim=none (message not signed) header.d=none;vger.kernel.org; dmarc=bestguesspass action=none header.from=xilinx.com; Received-SPF: Pass (protection.outlook.com: domain of xilinx.com designates 149.199.60.83 as permitted sender) receiver=protection.outlook.com; client-ip=149.199.60.83; helo=xsj-pvapsmtpgw01; Received: from xsj-pvapsmtpgw01 (149.199.60.83) by SN1NAM02FT011.mail.protection.outlook.com (10.152.72.82) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_RSA_WITH_AES_256_CBC_SHA) id 15.1.933.11 via Frontend Transport; Fri, 3 Mar 2017 05:11:35 +0000 Received: from unknown-38-66.xilinx.com ([149.199.38.66] helo=xsj-pvapsmtp01) by xsj-pvapsmtpgw01 with esmtp (Exim 4.63) (envelope-from ) id 1cjfV8-0006gF-M0; Thu, 02 Mar 2017 21:11:34 -0800 Received: from [127.0.0.1] (helo=localhost) by xsj-pvapsmtp01 with smtp (Exim 4.63) (envelope-from ) id 1cjfV8-0005r9-Go; Thu, 02 Mar 2017 21:11:34 -0800 Received: from xsj-pvapsmtp01 (smtp.xilinx.com [149.199.38.66]) by xsj-smtp-dlp2.xlnx.xilinx.com (8.13.8/8.13.1) with ESMTP id v235BWgJ008355; Thu, 2 Mar 2017 21:11:32 -0800 Received: from [172.23.64.208] (helo=xhdrdevl6.xilinx.com) by xsj-pvapsmtp01 with esmtp (Exim 4.63) (envelope-from ) id 1cjfV5-0005qp-EI; Thu, 02 Mar 2017 21:11:31 -0800 Received: by xhdrdevl6.xilinx.com (Postfix, from userid 9049) id 7CC92F2002E; Fri, 3 Mar 2017 10:41:30 +0530 (IST) From: Shubhrajyoti Datta To: CC: , , , Shubhrajyoti Datta Subject: [PATCHv2] spi: zynqmp: Add runtime support Date: Fri, 3 Mar 2017 10:41:24 +0530 Message-ID: <1488517884-31977-1-git-send-email-shubhrajyoti.datta@xilinx.com> X-Mailer: git-send-email 2.1.1 X-RCIS-Action: ALLOW X-TM-AS-Product-Ver: IMSS-7.1.0.1224-8.1.0.1062-22916.005 X-TM-AS-User-Approved-Sender: Yes;Yes X-EOPAttributedMessage: 0 X-MS-Office365-Filtering-HT: Tenant X-Forefront-Antispam-Report: CIP:149.199.60.83; IPV:NLI; CTRY:US; EFV:NLI; SFV:NSPM; SFS:(10009020)(6009001)(7916002)(39450400003)(39840400002)(39860400002)(39410400002)(39850400002)(2980300002)(438002)(199003)(189002)(9170700003)(305945005)(5003940100001)(52956003)(36386004)(103686003)(92566002)(5660300001)(54906002)(356003)(90966002)(33646002)(36756003)(2906002)(39060400002)(6266002)(626004)(8676002)(189998001)(81166006)(47776003)(6666003)(38730400002)(107886003)(46386002)(63266004)(110136004)(50466002)(48376002)(42186005)(2351001)(50226002)(106466001)(4326008)(50986999)(8936002)(45336002)(6916009)(107986001); DIR:OUT; SFP:1101; SCL:1; SRVR:DM2PR02MB1386; H:xsj-pvapsmtpgw01; FPR:; SPF:Pass; MLV:ovrnspm; A:1; MX:1; PTR:unknown-60-83.xilinx.com; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; SN1NAM02FT011; 1:W81Q8VyHvy0D8GDXIm6XcLZEUy0wEdbm/HluTHvURKr1W4UbPVIId2A/M52wslF+iklC5aQSk19oFq2ZB1dC3uz51Vku4dMDdQXDxmGSRHntpwXrxmTfQC9Jh7hVcRcdQnrgQvN8M/7c7mhVxe3dK5RLXz7ZNaE7qTF05pkhL21glhKG6SVwI/G4grHK+SuXWWVyxP7kWLCn2Oh6RklI5/assfS9fGMdzHWxPdXlG1Ax/v2yCruFWDByiqCWv0x0piYR/ipPA4Z4TuSKWygGzQtNYDbRPAvN7Bv1USO5g6VZ93ZODoaoCfCWOrpCfN+xraJ+onlH08+NE4UJ43riY5VzQgV05qJTyXYIFdN/g5CZZiM99dDy6GKiyigLygklL8AhHb7do2elXeM4dOn/vegccSvpx/mWlKpWo7mM4DK8KNpYtH2VdoB555NNZ+2i0I1y6jHcLYfz16+JxU+QgBSuRGapdZww6XWJjKDz/rqjPO11UpuDUibgydtmsp77PqF2lUqxnzWPo04Q37c5HyIzih5auPtGzcA2NC1W3uo= MIME-Version: 1.0 X-MS-Office365-Filtering-Correlation-Id: 23879350-370d-4c01-c1b0-08d461f3c3cf X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(8251501002); SRVR:DM2PR02MB1386; X-Microsoft-Exchange-Diagnostics: 1; DM2PR02MB1386; 3:XLdMtCjXdPzFwLvjnjeGM/L9iKiBkRKihxbkHicYBnPZrlIQ4ARurtk4FtWhY47aAQNFwg4L85RTUR9y5KIe5/g0QSjpQXYV3FWxXcITXddJ0aUJAFlKnKqte1YlqDhbsVuVOzi/FQA+PIqH23QRpIots6WQFs/SBhHRKFxs5jipCeVO3jbWf9uBst3x0c30PU/S1o2DmafWGNVJm9qGvxnfa4T8sps575AnBCeS4k/5TFnHB/1xpO6rFivxKG1A3sFBdvfYw80Vake9LVMBF6osIJh/pDe8GqXJ74ZrFaAdvrO8IJhhMrt7dp6WFBnbRYXv5JQPLNNqa8GoMdG8zARjIy8+zrI1FIIs6MM3Ch3GIJ2cJ9TbT2XNHgHu7r/+U7Z52pOZoQDn5l9c5ghYgg==; 25:Fj/LKsLeTPu2lb9vGktMJ99o1+i/vBYAGUtCNXCCvvB7xPHq8UyNTFAkDIODLA1jkueUAnQb6maPlOmUGQKx/bY+mLIfEAxL9IqP4HF2PV0v5BVIzns/2fQ/fVs97gSQ18cjFCEPEDVQDd+TyKJJcegGKdJB10D16e8zAkQhFosa4F56ik5K6LI45nZmfqacfeI23e+rLfCBnmWgPB5B5XF1+S7yy4QN1Y3oMBxwSrJ1X2KG0+qa1FRLDEnZalIsG79YkzYpj92gu2Aftgd5leeW4yrkvhAyS8ctdkSoN2aH48kMnuXACEWaagr/JXNhwHFBG4hS61erLXmzgk41zPvJx7Q60eNyvPJu3EgOvkMrCublZIncmvZ8cR7s5XoSfA3/06g96eHhoxiO/jVyGtSIUzyUS9FA95BkLgVcVHvUWkBGBwMELGzCjMYPub9lnZBb+Lx3ZSDZgK4jZ7tLOQ== X-Microsoft-Exchange-Diagnostics: 1; DM2PR02MB1386; 31:6ou6zB73snjOp8kOVRrpzA+iMWKcT6/8nu0RfRdFIWc2lHgfd99WrWtMwmEgPloYezvPxCGkVFoaT1G4DmpGeervJzMzGwMbzKcsoSzbc+FGkIibMmj95cJCxupK2QXwP5HQ2ZY8naIqCFTak5wcVEwQ6OmKZKZyq8OrCK5aflA8H9VC8kVRLrNFTQv/9d7gxGW00pjqg9XjF8pFOah/OS9jzC2qsjeRXsT7gUqHe+KRfREwXKJCSWJg154miVAXtzBYNe3rJS79vlfI+KEJDFnVIB7Qzi0yxQFTrKYPP5Y=; 20:l4voVmQ8iDxca/MKT6hHtHTu8scusF1FMgjq41vZx79uNFIcjKtIBtqGY1DvyDjQa+o/uclUUH5fOxY2G2E8R6mvw5XaPixi2YUyr6m2qnaOQ6NenHBElb181XnOs+gU0+NFgdZgF2z5vgzPy02GOe+s9GIdWjvORpaafy2m/hrzZvURDAWUwYE14MO8B+gccMQ1JFyzF7bYE4NoPMeIfA354CcFIyfnEPMxXiL/UfCozQJMGf9Zn4z1d6Bv9nzrxZJ12W7e91ivGdD36tIGGfKrq9J4LuO7Unh2pAuxwGLKLpoYgSd54dUtkEgjvOLJ1nzGnisqDNzJx6um583PnrS9CcULAa9+kDdu8AB6iuDTRO8CIuyMy/G70I8UTClKrFlk3FZucmGveTSEw0EIIr0rrFofRWw+lAzKn9gWxy8N8RVquYLDTzWNhhBzjcJDc3Mh4yrJB75b1/ApogBxXr57MgIyfNraBaF3zvrDTdL78hRGQuzIRI1/SUkv3yHG X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(192813158149592); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040375)(601004)(2401047)(13023025)(13017025)(13024025)(13018025)(8121501046)(13015025)(5005006)(10201501046)(3002001)(6055026)(6041248)(20161123560025)(20161123562025)(20161123558025)(20161123564025)(20161123555025)(6072148); SRVR:DM2PR02MB1386; BCL:0; PCL:0; RULEID:; SRVR:DM2PR02MB1386; X-Microsoft-Exchange-Diagnostics: 1; DM2PR02MB1386; 4:wpPFBPlrFWS6ZIJpaynk68ctmIrRT6U4GKqcRLWkobXWl2Zn0QtjmnL6JQ9YLtG4jj23IDoZsrIniLXBZfYYkoEroRiRmRISXLjKJjbRZFHXeCtdsHh3WDmgUNQnkSI0UKcqCYrGAMlJeSVoORKyrIZvFtLq9XKS1Zt0L4t8ZlgqsXlyTfZDBHZCHUopciMgvKQdnkcEAeXfcncYVHaxhYXjqXsZGXFVoRP/cVxXDLm70xuqKLXl++44AuNM341hCzpZd/z98zdJTeEMc8RhxQBjmqrAUisQLFSlT4UFAy25tRqiOZxh+UAB2/Y9EC7MYGO0Ob650p7kWVXcEoimAXOujpMvsVBNnOgQECutybuTm8FJ/AOgVRYIqg+EkT3xDFX9nvdB+JMJt+nBZ6psF1C0X4HnCF7A5KCjz7ra+67ZKrkcdqEjgDtR/mrSoizH57ZdBzYSRran5lM/H2LOeC9CTC6GsT3Ch1VbsTnfL8ilYkzf1iLZfvpeG9cN7dajvMZr33Osm8aZrw4Pdi9MoH87P07wwCgrqdqBqURxzFYq2yu065PJFJeXmMfvDCl+91bWz63RuelPPreKBgGBjLlBnJx7vBKqqOf7bNP1yz2nniYQZ4Vt+bq53xA9/5d8IlpiggcxytpRdzdmb5FijtDaLbG7BKwFIQsrouLkXHJgRvxPIxl0+uSaxt1Yg/TDBFuRVT1cRyqEwDiero+9wyR1kBw6Wp2PrB32mCnKTXmoAiJJXy56tkfIR6gv57DnYflJva28ORt3VHxm/LnwSQ== X-Forefront-PRVS: 0235CBE7D0 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; DM2PR02MB1386; 23:p/pObltOtYxmiPmBCtCfMYOEKL4IApBaMYGHgLZry?= =?us-ascii?Q?ZdrsYRlfD+S7Rb1BobR2WZCMTBFmQmK0FpvhLJhDcu0e3G7SVRgRUKL/194Z?= =?us-ascii?Q?Hvazfxst/ibN2Kaq6t1zxFMy7iQg3z86K0WObjj6S5kz4GTOsqJXUDVTMHJT?= =?us-ascii?Q?QyDV3VQP27HKxrkhFFYn1LIFtCpuRokhwa7SAEASl2x9U1GL5PePkzb1Lt4X?= =?us-ascii?Q?EL3+yQ6ubUojA0iyC1U6kIBhahZqVlheelZ6jLqAa8HKcGMbvSm6AC9uAjLW?= =?us-ascii?Q?rNzRMEKBRnPTuJ0aiI5/GERe1CL9I7zOogiAzEP7FD3dKfusq0hSSpEE7/g2?= =?us-ascii?Q?pbnjDtMhspl+Zc6Q7HlSROdToClalVgJ1G3fwaRgwH9b/b/nQJTidgq52XF8?= =?us-ascii?Q?b2vHFZkXeXnw+9BfkH70aevmSoovOtUaE7jBbATDi+PuywBRp48FdzlxrcoF?= =?us-ascii?Q?QNLRGCYUPPhL8+xX8XHenpoQqRmwiQW8yjebbhcuvot7MWeLzV1qkMqmX0yA?= =?us-ascii?Q?LPggIeOJSy13kEba0nARe17/Gx4+EJRhtnEIldCiDHJ3/ZF6EMcMwihPoG0r?= =?us-ascii?Q?FoFcUjAM91HsVsSwlMnay9BuABrD245abg4YArLxLIZ6Kj4qHlUw+IQqRH4M?= =?us-ascii?Q?16jv0bvdwIsl6PeUo2JXYAi0gEPHrLEguLAvqKSRgAiElbDF7TTuWFI6ceye?= =?us-ascii?Q?kTyWfb958rfNZfX6OZn0QAbKI3Ehd7VZn+K19E97ikDAThgvxTpWTBGIQY+N?= =?us-ascii?Q?Xiq87pl0lLOR5no+jJQ/CjDKjfaOb3Ae7Qe7EDAUdO55626D1VZ23yWvzhyC?= =?us-ascii?Q?UGvHOALaSMf0SMlOMUffWouXh/8DauFY494Kd0KKrlOY+Y7nvgN/wDdnbPef?= =?us-ascii?Q?4dKPSGGxI4greMlI4t3UJ3sx588eckysnoKNSPEUEFE6yawTVIG0jT0Ay8T5?= =?us-ascii?Q?qrrqDbb4+OZy9SgQbZ/4TtAjwgx8N+R6+PGKRbDwhJOfdmXIWHAt7HQp6oaG?= =?us-ascii?Q?LOiSnu/JpUwfA95KPz18dMsx+LYxpV/tXv1x+L9ratak579UP1V9NdoQ1Gj4?= =?us-ascii?Q?zunO7W7BgjjrorkAqGdoy2Qu6cJp8hD3T4ChPdmVm3bQ4hN33tT25QSL/l1M?= =?us-ascii?Q?6B4XQmyy8rjotabzHy4/gOxyEm9geBydg0v/PawOF7dzvMVgQjSSe578LYLy?= =?us-ascii?Q?g3thrjFZLi9nlcFYykV5ymMKHtWdqJrtXGhWzz9JMY0zFiPxVqxbyUSPg=3D?= =?us-ascii?Q?=3D?= X-Microsoft-Exchange-Diagnostics: 1; DM2PR02MB1386; 6:xBzYoP6RP8ybvqiKOgUovHZAeN33q30pmZcqno/YMwPJwseQTBxg525piQ3tHyQBGvotguapvq8A8Sch5nhM9ibIkJqF4BxuySvj8NJnC75bEjx/Mvh5qtcLB9cKuFtlnR64F/CLOWjt8d7y0b0HS6IiLpiVuX+vW/kHGk23aeTYzkIVBvwqxLLn1XbPrR2WPjHfIJgsMMI6XVjKjIVdrkUHhVOneqB6SK9G9MxrKIsfqwB+DiEYNtcU6OBCP8Agu9drk6Uw73W6vSe822aiDU5zsPhRwFGJIgXDeEe34nengbRD3RnZGoMXTzbDwK7ezS+mSeTXR290/E3DqNnhAJ5+vnxBgWPX3Yev3dohPPe4Kk4o/aJ9cp7vPGmwnlhijnhPtclKPyy3De3VaetJ4XaDR3o3OIYVKBq4nuyLjdM=; 5:N9S556QvKLvNXnEhVny0IO+qo3/SgOMJ4mosnPB8iD2L211SPdtlwOleKK5vyvhQ9+8CqTXuZ6BiZr58Qp4cXZrzyR16f/H5nR9mTRWQeuKOcVMGFPV5ymMzfA4nUac5QfZEFMczKul3983GRrR8RciuPhKC5/GTBBe0Ds0Iuwk=; 24:ek3wlC2b0OhYRCHCDaFKI8hkL2cmjOkWdbXVb/kDanDkF6Buwyu/CF9YK0axbQjJlVxi5NGm/CVl8faDIpli/zeOELzzJX8L7WaoSD1RmWY= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; DM2PR02MB1386; 7:MZeyOx7cQLxJAh4vC3Y0Nt1OudBXeYfP52on+3K6lFvcm/jRwNuVKEvwqL6SLXQgToZ3qec4wh/YriUJgcVrNDANlRR8EHgG+y5UNo4tJ5EfoAVgVJx6BWN1J2TH45RpDMhMNx17KKdvipjdPv5lHLV/UF79sDqflx/FifpZrcue97eOtsKyBVgAalA6JsVVzD7tka/1Fbql8lKTUipPdC3p4QMWxTFHvlfA056K9teLytF70h6+RnIa2djg65sNgrjuxlmwTnOpfv+cZPOHWX1GACbt8q3uQvwnfW9OAapgwC4N/j4xZ3oCHACouNT6IhyY2PEFLROrxsbIB7BE7w== X-OriginatorOrg: xilinx.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Mar 2017 05:11:35.4483 (UTC) X-MS-Exchange-CrossTenant-Id: 657af505-d5df-48d0-8300-c31994686c5c X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=657af505-d5df-48d0-8300-c31994686c5c; Ip=[149.199.60.83]; Helo=[xsj-pvapsmtpgw01] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM2PR02MB1386 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 PM runtime support for the zynqmp qspi driver. spi core has the runtime support register to the spi core auto runtime pm. Also removes the clock enable and disable as the spi core will now do it for us. Signed-off-by: Shubhrajyoti Datta --- v2: Update the commit message. drivers/spi/spi-zynqmp-gqspi.c | 90 ++++++++++++++++++++++++++++++++++-------- 1 file changed, 74 insertions(+), 16 deletions(-) diff --git a/drivers/spi/spi-zynqmp-gqspi.c b/drivers/spi/spi-zynqmp-gqspi.c index 0b3ba7a..980877a 100644 --- a/drivers/spi/spi-zynqmp-gqspi.c +++ b/drivers/spi/spi-zynqmp-gqspi.c @@ -20,6 +20,7 @@ #include #include #include +#include #include #include #include @@ -156,6 +157,7 @@ #define GQSPI_FREQ_150MHZ 150000000 #define IOU_TAPDLY_BYPASS_MASK 0x7 +#define SPI_AUTOSUSPEND_TIMEOUT 3000 enum mode_type {GQSPI_MODE_IO, GQSPI_MODE_DMA}; /** @@ -424,21 +426,9 @@ static void zynqmp_qspi_copy_read_data(struct zynqmp_qspi *xqspi, static int zynqmp_prepare_transfer_hardware(struct spi_master *master) { struct zynqmp_qspi *xqspi = spi_master_get_devdata(master); - int ret; - - ret = clk_enable(xqspi->refclk); - if (ret) - return ret; - - ret = clk_enable(xqspi->pclk); - if (ret) - goto clk_err; zynqmp_gqspi_write(xqspi, GQSPI_EN_OFST, GQSPI_EN_MASK); return 0; -clk_err: - clk_disable(xqspi->refclk); - return ret; } /** @@ -455,8 +445,6 @@ static int zynqmp_unprepare_transfer_hardware(struct spi_master *master) struct zynqmp_qspi *xqspi = spi_master_get_devdata(master); zynqmp_gqspi_write(xqspi, GQSPI_EN_OFST, 0x0); - clk_disable(xqspi->refclk); - clk_disable(xqspi->pclk); return 0; } @@ -1054,11 +1042,14 @@ static int __maybe_unused zynqmp_qspi_suspend(struct device *dev) { struct platform_device *pdev = to_platform_device(dev); struct spi_master *master = platform_get_drvdata(pdev); + struct zynqmp_qspi *xqspi = spi_master_get_devdata(master); spi_master_suspend(master); zynqmp_unprepare_transfer_hardware(master); + clk_disable(xqspi->refclk); + clk_disable(xqspi->pclk); return 0; } @@ -1097,8 +1088,62 @@ static int __maybe_unused zynqmp_qspi_resume(struct device *dev) return 0; } -static SIMPLE_DEV_PM_OPS(zynqmp_qspi_dev_pm_ops, zynqmp_qspi_suspend, - zynqmp_qspi_resume); +/** + * zynqmp_runtime_suspend - Runtime suspend method for the SPI driver + * @dev: Address of the platform_device structure + * + * This function disables the clocks + * + * Return: Always 0 + */ +static int __maybe_unused zynqmp_runtime_suspend(struct device *dev) +{ + struct platform_device *pdev = to_platform_device(dev); + struct spi_master *master = platform_get_drvdata(pdev); + struct zynqmp_qspi *xqspi = spi_master_get_devdata(master); + + clk_disable(xqspi->refclk); + clk_disable(xqspi->pclk); + + return 0; +} + +/** + * zynqmp_runtime_resume - Runtime resume method for the SPI driver + * @dev: Address of the platform_device structure + * + * This function enables the clocks + * + * Return: 0 on success and error value on error + */ +static int __maybe_unused zynqmp_runtime_resume(struct device *dev) +{ + struct platform_device *pdev = to_platform_device(dev); + struct spi_master *master = platform_get_drvdata(pdev); + struct zynqmp_qspi *xqspi = spi_master_get_devdata(master); + int ret; + + ret = clk_enable(xqspi->pclk); + if (ret) { + dev_err(dev, "Cannot enable APB clock.\n"); + return ret; + } + + ret = clk_enable(xqspi->refclk); + if (ret) { + dev_err(dev, "Cannot enable device clock.\n"); + clk_disable(xqspi->pclk); + return ret; + } + + return 0; +} + +static const struct dev_pm_ops zynqmp_qspi_dev_pm_ops = { + SET_RUNTIME_PM_OPS(zynqmp_runtime_suspend, + zynqmp_runtime_resume, NULL) + SET_SYSTEM_SLEEP_PM_OPS(zynqmp_qspi_suspend, zynqmp_qspi_resume) +}; /** * zynqmp_qspi_probe: Probe method for the QSPI driver @@ -1161,12 +1206,20 @@ static int zynqmp_qspi_probe(struct platform_device *pdev) goto clk_dis_pclk; } + pm_runtime_use_autosuspend(&pdev->dev); + pm_runtime_set_autosuspend_delay(&pdev->dev, SPI_AUTOSUSPEND_TIMEOUT); + pm_runtime_set_active(&pdev->dev); + pm_runtime_enable(&pdev->dev); + if (of_property_read_bool(pdev->dev.of_node, "has-io-mode")) xqspi->io_mode = true; /* QSPI controller initializations */ zynqmp_qspi_init_hw(xqspi); + pm_runtime_mark_last_busy(&pdev->dev); + pm_runtime_put_autosuspend(&pdev->dev); + xqspi->irq = platform_get_irq(pdev, 0); if (xqspi->irq <= 0) { ret = -ENXIO; @@ -1210,6 +1263,7 @@ static int zynqmp_qspi_probe(struct platform_device *pdev) master->mode_bits = SPI_CPOL | SPI_CPHA | SPI_RX_DUAL | SPI_RX_QUAD | SPI_TX_DUAL | SPI_TX_QUAD; xqspi->speed_hz = master->max_speed_hz; + master->auto_runtime_pm = true; if (master->dev.parent == NULL) master->dev.parent = &master->dev; @@ -1223,6 +1277,8 @@ static int zynqmp_qspi_probe(struct platform_device *pdev) return 0; clk_dis_all: + pm_runtime_set_suspended(&pdev->dev); + pm_runtime_disable(&pdev->dev); clk_disable_unprepare(xqspi->refclk); clk_dis_pclk: clk_disable_unprepare(xqspi->pclk); @@ -1250,6 +1306,8 @@ static int zynqmp_qspi_remove(struct platform_device *pdev) zynqmp_gqspi_write(xqspi, GQSPI_EN_OFST, 0x0); clk_disable_unprepare(xqspi->refclk); clk_disable_unprepare(xqspi->pclk); + pm_runtime_set_suspended(&pdev->dev); + pm_runtime_disable(&pdev->dev); spi_unregister_master(master);