From patchwork Mon Feb 25 04:45:22 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shubhrajyoti Datta X-Patchwork-Id: 1047573 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-i2c-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 4478X14ryJz9s4Z for ; Mon, 25 Feb 2019 15:45:37 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726755AbfBYEpg (ORCPT ); Sun, 24 Feb 2019 23:45:36 -0500 Received: from mail-eopbgr780043.outbound.protection.outlook.com ([40.107.78.43]:49184 "EHLO NAM03-BY2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726539AbfBYEpf (ORCPT ); Sun, 24 Feb 2019 23:45:35 -0500 Received: from SN4PR0201CA0041.namprd02.prod.outlook.com (2603:10b6:803:2e::27) by MW2PR02MB3851.namprd02.prod.outlook.com (2603:10b6:907:4::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1643.18; Mon, 25 Feb 2019 04:45:33 +0000 Received: from BL2NAM02FT063.eop-nam02.prod.protection.outlook.com (2a01:111:f400:7e46::208) by SN4PR0201CA0041.outlook.office365.com (2603:10b6:803:2e::27) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.1643.16 via Frontend Transport; Mon, 25 Feb 2019 04:45:32 +0000 Authentication-Results: spf=softfail (sender IP is 149.199.60.83) smtp.mailfrom=gmail.com; vger.kernel.org; dkim=none (message not signed) header.d=none; vger.kernel.org; dmarc=fail action=none header.from=gmail.com; Received-SPF: SoftFail (protection.outlook.com: domain of transitioning gmail.com discourages use of 149.199.60.83 as permitted sender) Received: from xsj-pvapsmtpgw01 (149.199.60.83) by BL2NAM02FT063.mail.protection.outlook.com (10.152.77.121) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_RSA_WITH_AES_256_CBC_SHA) id 15.20.1643.11 via Frontend Transport; Mon, 25 Feb 2019 04:45:32 +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 1gy88x-0005AU-Ue for linux-i2c@vger.kernel.org; Sun, 24 Feb 2019 20:45:31 -0800 Received: from [127.0.0.1] (helo=xsj-smtp-dlp2.xlnx.xilinx.com) by xsj-pvapsmtp01 with esmtp (Exim 4.63) (envelope-from ) id 1gy88s-0002g7-DR; Sun, 24 Feb 2019 20:45:26 -0800 Received: from xsj-pvapsmtp01 (mailman.xilinx.com [149.199.38.66]) by xsj-smtp-dlp2.xlnx.xilinx.com (8.13.8/8.13.1) with ESMTP id x1P4jQW4031385; Sun, 24 Feb 2019 20:45:26 -0800 Received: from [172.23.37.106] (helo=xhdshubhraj40.xilinx.com) by xsj-pvapsmtp01 with esmtp (Exim 4.63) (envelope-from ) id 1gy88r-0002fP-9o; Sun, 24 Feb 2019 20:45:25 -0800 From: To: CC: , Shubhrajyoti Datta Subject: [PATCHv4] i2c: cadence: Fix the driver in interrupt flurry case Date: Mon, 25 Feb 2019 10:15:22 +0530 Message-ID: <1551069922-15896-1-git-send-email-shubhrajyoti.datta@gmail.com> X-Mailer: git-send-email 2.1.1 X-RCIS-Action: ALLOW X-TM-AS-Product-Ver: IMSS-7.1.0.1224-8.2.0.1013-23620.005 X-TM-AS-Result: No--5.851-7.0-31-1 X-imss-scan-details: No--5.851-7.0-31-1;No--5.851-5.0-31-1 X-TM-AS-User-Approved-Sender: No;No X-TM-AS-Result-Xfilter: Match text exemption rules:No X-EOPAttributedMessage: 0 X-Matching-Connectors: 131955435327475094; (f9e945fa-a09a-4caa-7158-08d2eb1d8c44); () X-Forefront-Antispam-Report: CIP:149.199.60.83; IPV:NLI; CTRY:US; EFV:NLI; SFV:NSPM; SFS:(10009020)(376002)(396003)(346002)(136003)(39860400002)(2980300002)(189003)(199004)(2876002)(498600001)(73392003)(426003)(336012)(305945005)(87572001)(81166006)(14444005)(486006)(8676002)(81156014)(105596002)(63266004)(8936002)(50226002)(82202003)(61266001)(2616005)(2351001)(47776003)(9786002)(76482006)(126002)(476003)(106466001)(316002)(16586007)(26005)(6666004)(54906003)(356004)(73972006)(107886003)(36756003)(5660300002)(51416003)(77096007)(2906002)(86362001)(4326008)(48376002)(83322999)(55446002)(50466002)(86152003)(6916009)(107986001); DIR:OUT; SFP:1101; SCL:1; SRVR:MW2PR02MB3851; H:xsj-pvapsmtpgw01; FPR:; SPF:SoftFail; LANG:en; PTR:unknown-60-83.xilinx.com; MX:1; A:1; MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: c78ca640-b846-4e52-dc0f-08d69adc1354 X-Microsoft-Antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(5600127)(711020)(4605104)(2017052603328); SRVR:MW2PR02MB3851; X-MS-TrafficTypeDiagnostic: MW2PR02MB3851: X-Microsoft-Antispam-PRVS: X-Forefront-PRVS: 095972DF2F X-Microsoft-Exchange-Diagnostics: 1; MW2PR02MB3851; 23:gs1MZ/fLhPVSq+0xDVdEkGNgbTiLK6qT+JApFHLeRZaqAqJWo9V9mCdlcIMG+er3aNjogiO1TSWyJpQNMv8T4G1escUNYk6c+1TQP3va4qyZRvNWSUzc0qJms0QFV3n7gh/xqMd7DRKiQWTm7SQF6K6nueB1aFDfPmx1snwj+on8s9oi/Aqnv6fofWmyq/sGXJJiRo4kwWiCBzubiimcoCmDHRNzv9DN8YGeMkYkUHyaM/z9tl15GfBlHTbFflKNRkWYMDzw6t3WeA7fUDQIAXmISIpyiwz+3bB2KvVdxuQb4gEk2qwGwBgD8dwuC5FoACmrWLM2IqARdHssAM7GBhjJjc5N7ed95bTnmwmxKUvmA9/FPh77c4Gr8B3jia3PFXrxSe1IIggcXbdnEsNehhqqb8p10Ah05X4pjd0Y1d5sQQDESlwCvizU4XOiMci/N/LMXcxnZ7YLpWfbz8KdV+LNmEJlfMxr+9tUeXzZd7y0NRmHyS0ZqSH49DYEhzzmH9ya24C71t5cVdYj/e2YM1T19KbCo1k31tcEGsJc8uExT71fNF/7UPi50hO+pSyO660EfameFhZhvIA9fvmRmnZNBowUbRcgU1GqFidBJ1t1DQz272/Vyl4qSfEKWsgzdY3R8VH0Ivy45thlh1kXRTNLDZ1fLSmKvlSFOdGRsuvt+iUAQMvNUWjMZCT3ZCZTKrjfEFBY6PAn+U30L61pvD4Lwz8V6gs3Mnqa/Gq5eHAnclnO7tayGTnJ8LMwyc6ETpYs1diYgsxYg8rY9lvhxu9bv4cMX1TS6w3cPeXAr3b/i5hTEeCMcqYXMMuU+wzZh3bKbPmcaAu+ykoPkdgof4WweWEWpkup4Lu7792/arwZGpT/8DHrcoTfalJCoPiraKRrt1dkPmgpys7pAxLWQEFa3QJpXcxI3mrwt7eS+T0JxqVqBMPXcY1lTsmK2BW1Ws/IUsj3hgjGfNjvKuZ+sHS7AUbdXSTFaTO+pv8hSi/tSzeKwXEsBjw9H0r2VDtUDLvPGpe2/ZD7enPZrmgWkgopQRFo5nQniUmLbSu4toYGacAXFwif8P+hiUR4ks5hN5LfFBNC14SNPidhFwmztAGwcXsM/k+jmfLICb/bFTxNPwfqa/CfTuK9TD85C1I3pKo5hMLfk6Xtyp+BkhdpyQ2W2SVwqQamZpg6YQaPYZ5EbeDOq0s6wKBRzKpCDvscMZ2SVJyoZEVMe4raD6rpFIgqVGxpeeyVjMd0rCNXYK0= X-Microsoft-Antispam-Message-Info: BOB+aDrpfmHD9jmQDSICPRUlFY/Nb3z1trgFtB2Fx5rHo9aocAW87umeoWjNaR/XvtwSXH/m2K/pPRWZP9KbMkQp7fUzo+CgxsHOBOX74uHUcgnri/vb51iip9pMhFA8xUrWJ/igVVOaW/1lkmmTzrecv0G8M8guND+m1StQxohigL53Ck2dtStAcl7OGbVhWOQ+8IaQ7A5f+4XCVWVH8cm24ZjiS0kZnpi2m8Ym3PaqYXTWpap0VS1n/1t4aUNhYYAOHMurOHETqAfun4+ahNcNs1U1rG8BQFDWgJWQy/Kt3i3cixEzs6gdriGJrQo0IQQfUOxAkbMuSR0VveDRQy4XDvfdeQg9O5mNlkIF6qQ4VgkD7++GHI6zlFeFUOHGlEzvrYRqB7T63wPYi5VfznQPqaomCbdb03JGuzfpZ70= X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Feb 2019 04:45:32.5581 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: c78ca640-b846-4e52-dc0f-08d69adc1354 X-MS-Exchange-CrossTenant-Id: 5afe0b00-7697-4969-b663-5eab37d5f47e X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=5afe0b00-7697-4969-b663-5eab37d5f47e; Ip=[149.199.60.83]; Helo=[xsj-pvapsmtpgw01] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW2PR02MB3851 Sender: linux-i2c-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-i2c@vger.kernel.org From: Shubhrajyoti Datta In case there are a lot of interrupts then the hold bit is not released. Protect the code by making it atomic by disabling interrupts. Fixes: df8eb5691c4 ("i2c: Add driver for Cadence I2C controller") Signed-off-by: Shubhrajyoti Datta Acked-by: Michal Simek --- v2: Update the wording v3: Add fixes tag v4: update fixes tag drivers/i2c/busses/i2c-cadence.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/drivers/i2c/busses/i2c-cadence.c b/drivers/i2c/busses/i2c-cadence.c index b136057..92829be 100644 --- a/drivers/i2c/busses/i2c-cadence.c +++ b/drivers/i2c/busses/i2c-cadence.c @@ -365,6 +365,7 @@ static void cdns_i2c_mrecv(struct cdns_i2c *id) { unsigned int ctrl_reg; unsigned int isr_status; + unsigned long flags; id->p_recv_buf = id->p_msg->buf; id->recv_count = id->p_msg->len; @@ -405,6 +406,7 @@ static void cdns_i2c_mrecv(struct cdns_i2c *id) cdns_i2c_writereg(id->recv_count, CDNS_I2C_XFER_SIZE_OFFSET); } + local_irq_save(flags); /* Set the slave address in address register - triggers operation */ cdns_i2c_writereg(id->p_msg->addr & CDNS_I2C_ADDR_MASK, CDNS_I2C_ADDR_OFFSET); @@ -413,6 +415,7 @@ static void cdns_i2c_mrecv(struct cdns_i2c *id) ((id->p_msg->flags & I2C_M_RECV_LEN) != I2C_M_RECV_LEN) && (id->recv_count <= CDNS_I2C_FIFO_DEPTH)) cdns_i2c_clear_bus_hold(id); + local_irq_restore(flags); cdns_i2c_writereg(CDNS_I2C_ENABLED_INTR_MASK, CDNS_I2C_IER_OFFSET); }