From patchwork Mon Feb 11 16:05:25 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Federico Vaga X-Patchwork-Id: 1039916 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=none (p=none dis=none) header.from=cern.ch Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=cern.onmicrosoft.com header.i=@cern.onmicrosoft.com header.b="KAeMheDJ"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43yrHy27xgz9sMr for ; Tue, 12 Feb 2019 03:06:22 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728722AbfBKQGP (ORCPT ); Mon, 11 Feb 2019 11:06:15 -0500 Received: from mail-eopbgr50055.outbound.protection.outlook.com ([40.107.5.55]:47182 "EHLO EUR03-VE1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1730785AbfBKQGB (ORCPT ); Mon, 11 Feb 2019 11:06:01 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cern.onmicrosoft.com; s=selector1-cern-ch; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ECSIoVa8JW6O8tJu7FSlaxo4KybqvBjFMHglIfGO/yI=; b=KAeMheDJa63B5kvqb903G1m+jpmxVjI3nplqkgFN3Fwqiz4J8DDMDIPBXeHQlJh1D7e08srdbjimwHXpJ4ZpIpfB+R9N/9mU0wis95gexReDpNrCq3EWEq+utvskeNtkOiSFn+4wuMr5Tsgo6PCcGkIqg5cRdsqitFv1PVrsOOc= Received: from VI1PR0602CA0013.eurprd06.prod.outlook.com (2603:10a6:800:bc::23) by AM4PR0601MB2146.eurprd06.prod.outlook.com (2603:10a6:200:47::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1601.22; Mon, 11 Feb 2019 16:05:57 +0000 Received: from VE1EUR02FT009.eop-EUR02.prod.protection.outlook.com (2a01:111:f400:7e06::200) by VI1PR0602CA0013.outlook.office365.com (2603:10a6:800:bc::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1601.19 via Frontend Transport; Mon, 11 Feb 2019 16:05:56 +0000 Authentication-Results: spf=pass (sender IP is 188.184.36.50) smtp.mailfrom=cern.ch; korsgaard.com; dkim=none (message not signed) header.d=none;korsgaard.com; dmarc=bestguesspass action=none header.from=cern.ch; Received-SPF: Pass (protection.outlook.com: domain of cern.ch designates 188.184.36.50 as permitted sender) receiver=protection.outlook.com; client-ip=188.184.36.50; helo=cernmxgwlb4.cern.ch; Received: from cernmxgwlb4.cern.ch (188.184.36.50) by VE1EUR02FT009.mail.protection.outlook.com (10.152.12.226) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.1580.10 via Frontend Transport; Mon, 11 Feb 2019 16:05:56 +0000 Received: from cernfe03.cern.ch (188.184.36.39) by cernmxgwlb4.cern.ch (188.184.36.50) with Microsoft SMTP Server (TLS) id 14.3.408.0; Mon, 11 Feb 2019 17:05:38 +0100 Received: from cwe-513-vol689.cern.ch (188.185.69.206) by smtp.cern.ch (188.184.36.52) with Microsoft SMTP Server (TLS) id 14.3.408.0; Mon, 11 Feb 2019 17:05:39 +0100 From: Federico Vaga To: Peter Korsgaard , Andrew Lunn CC: , , Federico Vaga Subject: [PATCH v5 1/5] i2c:ocores: stop transfer on timeout Date: Mon, 11 Feb 2019 17:05:25 +0100 Message-ID: <20190211160529.23858-2-federico.vaga@cern.ch> X-Mailer: git-send-email 2.15.0 In-Reply-To: <20190211160529.23858-1-federico.vaga@cern.ch> References: <20190211160529.23858-1-federico.vaga@cern.ch> MIME-Version: 1.0 X-Originating-IP: [188.185.69.206] X-EOPAttributedMessage: 0 X-Forefront-Antispam-Report: CIP:188.184.36.50; IPV:NLI; CTRY:CH; EFV:NLI; SFV:NSPM; SFS:(10009020)(136003)(396003)(346002)(376002)(39860400002)(2980300002)(189003)(199004)(4326008)(486006)(426003)(66066001)(8936002)(110136005)(11346002)(126002)(106002)(16586007)(476003)(2616005)(956004)(336012)(106466001)(8676002)(51416003)(44832011)(446003)(7696005)(47776003)(54906003)(36756003)(246002)(6116002)(74482002)(3846002)(316002)(305945005)(7636002)(7736002)(76176011)(50226002)(2906002)(786003)(1076003)(50466002)(16526019)(356004)(86362001)(6666004)(107886003)(478600001)(53416004)(26005)(14444005)(186003)(48376002); DIR:OUT; SFP:1101; SCL:1; SRVR:AM4PR0601MB2146; H:cernmxgwlb4.cern.ch; FPR:; SPF:Pass; LANG:en; PTR:cernmx11.cern.ch; MX:1; A:1; X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: dbf5e449-e95f-4b3f-8992-08d6903ace81 X-Microsoft-Antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(5600110)(711020)(4605077)(4608076)(4709027)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7153060)(7193020); SRVR:AM4PR0601MB2146; X-MS-TrafficTypeDiagnostic: AM4PR0601MB2146: X-Microsoft-Exchange-Diagnostics: 1; AM4PR0601MB2146; 20:8AWKBah5El5dLwonjugPdTlbigpL7kU+/AfzHnAy/vVCOL01zgEzuYvMvEUvuBQJmWFdWM5WVN0K72N4jRv0UVrWYSChp6My8eV+ZQjC2BKSjIFsVjRgq/iypUSdnsJ67v7hSEs2fvy7i8mRQuCrjdOqBDbvylfL8HE14TuuKtNwK7njmdwhAL+PkZ+tgrj0vYO0tCzy69LDtII+c1KEhABbUwSKL0NYgSVCiz5aVJ3QWXK0kwsZzihJo7fW0k6Cw6MqWz+MGKV4UTAsT+HPXwZ9WIln4HMfrvfJ2shE4BvDvegHjNsVKCYKttksMJc2yeYZ+pY/R5VkZhixsSGlZg+g1J328jg6fWMEit6DQg5Z83hSqUbxuP6pM0gaHJtPRwMTQSZREZN77pXktDwpd2+l2Oy5Wl8JEbxoR6avKfx8O9BI2WM14xoc8b7DxjTKN03mhkbFOEo03ZVbsT9rdvHmbiM9AG4kU+heLrGkxyvM8cvMdraLZxzR0UoI1XoG; 4:s+VuCcvDFArrs+JQEwT7lq6ECnOvZZweHH1q2rYql7P97owbCoFo4E2P5XlegRPk+Bo7rekpiuLS+F4PtPIeVSXW9Buy10nQ57YL4rJL0FNd+o9IWzXbngtoOjYRvQT+jJezvRNQ7X/egstivVpeVtm9YMiPtFtk+rBzAm0dvOczZGdMwhXf3BheAehkCxg9mODGDW6HuKXvj57ceRlHnZFKLRpTlFq+4J0QcXM+XyHKfloCNEaIhobl4jd6QB98YzwsQm1wvJhuMvHCW0WbU7eeNVPQoZB3J6d7NeSXgWXr0gtnI4Lqc5mfel4j+t2A X-Microsoft-Antispam-PRVS: X-Forefront-PRVS: 0945B0CC72 X-Microsoft-Exchange-Diagnostics: 1; AM4PR0601MB2146; 23:CnxcSJltXNMCybf1hU6agCcwjYuSTI+m21O5lDjafU4W6s5wRGajaKc5plUPgT8iPabM3L0Tqg7XU6Fr0oiFeWou5+sHFMSni1F7520XrLPXxr52hYmDhEKhhnz2CsFaptkivaW4T+CLlAMFadydWKnMmRmxfgNKbePWlRdN0JhNZLwU3T+7T8fi/ZOyWoxIzHRniHtgsiK8qjIPAQJN2b1QDvTri9pCmCFKqVj7Mzvd990EpEKdq4vcNDyVquzCUcxwGol40ip1bFgJ8so9blRUnkhEFyUVxRuFpAAwuofImleNHnPOi40cVqPuKRQbm4mjJkQshXz72eGccSTcegtrl4/caEo4b7vO9Taqlv6yptws72sbyggXA9ibQKLHDdUzwtrr2AW380eBvYwVErGdokEhXzgXwBDjcDTPs6dabN0+IDqIibaKqljpDQk1Be9BrdG/Ct125lMe/skCZDkQTUBdQFYpkbr+/aNB65Z8YTyZwTcQpDllRg6LxjHjBOCtzNACoMHbnjcRgjh78YbH9+R6xVplvf9x9jC1LZnVaQPk4Ne+a8NTKZQQAWXQ+w7E209JhkgGeOGFNPpYkc+DqQr07UWWxVjlk6r54nkcoP9WPieLKrv5g7aBiqLxgTZa0kJpU7fLd76jVbk34UxXweEV4k4KnICD69JYLn/8RLRSvpY3g9WvAcBPhfJATtA2bZ1mhfZ3bnwLFDvNwZjzrA0x+kwh4K+J9n+gu0S8AQ7zrCcxsnMFwG7ZhDCo3Qas14ysIZyIVSH93CH0my+ywZCXloumioO3FhTgor0uuY3Pw24w8/JeT+S52SVAh/QAP1EzQ0nNuK8AP0/mhSmcT5SA6uCwLk4N1W5ekLfcQYiiq2+WZ++x9dLzLW2926ttGdGlqzOKZU9kWjWj+WzGRmUNc1WrkDCYGGvb5jfYSUgIEGS8oUc58xtszi7ifR3mot2PRjGDvdGPGjsaOXik31gf3yD5YBelmu8vFwtBQ57fJ5Lelm16uukSbrGsk15wyfrVSBM1douxkV8JaYPM6JV53I9hp5HtKTz2qqMnKAoS+x1atCqrQUVigbm+TF20cMuwBx//h8PinndX3CZN0wbg+HPJmVw4Adk9NO7orPSYfv65ZynMWwhbOGwBtQE/CODE0HfhMEiS+KVTDHOLo6deISD7YhEg1s7y2Vs4poOA7ZoJ4kGUyYbwRNOo X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam-Message-Info: E/NX5rBy923DHcAybSmU/mW3FOODynAfcmIjAjmHsJMIqMWvyuWkkPNMSQD3HSqlVD+xwKPSwZ0FliAoyu9lNzQNwZoZQbpraZLc3hHPobVx2QbOSTnx+o+6W6Uqw62WStRSltKZMNCM8VYP+A5/Co+5o1m8ZVqlpq4O1F2Tmab1i/Nd0fLmmCpWbtJ0QLabhl6aQ1W9LoRZWiTc1Avm1NjRqAXcEv4cIRFh83jZ4uCwyy2dz2b2MJWU9w7A2AovSNFtp8crJ62dIw9/O9IbyLngq/p/YxLIuuWz0EtAXGF66l3yKu3m/hp4F1t2uMuvVS4e+zW2q3d88EAlHmEaZGxWR5TcUGWGmneFomKMJz3Hz4hH+FW/wY9Qt4vX+4+t2FyDTlIvU8qjx9S0y2PO8QuES1bABuqhzcIeJi29QWI= X-Microsoft-Exchange-Diagnostics: 1; AM4PR0601MB2146; 6:GnZqKy7aPzaHzbul0gVoxa+oWL+JIatRlwDpq/Ae7Tq/P+d5gOifX/fw+epNwzdWV1sIhdNJjPE0AhLAqFylbO+LGUuokpKpPce76UxuG/XMJrcb2pHugrmO2tzrknZbiFS0nFWgNpqrjAjlWXpKJjnoseD6UwUqbjOJx9TP4/6th8sgABZvHCjWJbZ0sVa4fUNTao8ot31diOWsEwhVViF+fSity9x4fDAlCaYiG+f46oF3oAxzQ2IFbm79eIHysCpD7hVL8vMNvpghhB8mlBXwk1jg+9JauaEH/oC7CgOTokfNOuqRqPooDmFHJ+z8zd3QvZYW3Z5sAGfr4FKfkEjag3sW0XzfCjEiG/JqdjD+P8e+0wb/znnXIlROW01vyYEqZE5F1n6WMF1H1HIdpyBzuceVUAyQGWk/tplZxiCL0xW2LDgQhmM8Qzwfb5HZsIvj0IgdXrQEb2G61G43Cg==; 5:Er66ZR4oXbSKxeqbPk2VQZPjjZhCSbCRsU+I8VssRQ1Vvs0gyRd/xNIbb0A9xn/i0dwhrJ1jrhEGBCn8EGKMX5zIj9E1VrjmQUdgSItZBwO908fooZuWmSkkGJg8VpydMDvRGV1I9lheGoaDzy6OOiXw1ThMCFeU/1VxGAlBYe7FP+PTbLw8/nX/3BDAmp6D/gfJyjyYkuVnUXZczItSKQ==; 7:TBXerIOXPTAq2t+mb9dweNTXrBbRn8k/7ZauTEJHW13LkaFRS9UTS1vFMVGLeGxuz0uJ//ka2YOI8NK55rzcAKHdFzLFI+sxOhAcljIsSC/DEBwXcUk0Kmc8K5sTrajV59WRqEzvHwDUK21FKdz6+A== X-OriginatorOrg: cern.ch X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 Feb 2019 16:05:56.3970 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: dbf5e449-e95f-4b3f-8992-08d6903ace81 X-MS-Exchange-CrossTenant-Id: c80d3499-4a40-4a8c-986e-abce017d6b19 X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=c80d3499-4a40-4a8c-986e-abce017d6b19; Ip=[188.184.36.50]; Helo=[cernmxgwlb4.cern.ch] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM4PR0601MB2146 Sender: linux-i2c-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-i2c@vger.kernel.org Detecting a timeout is ok, but we also need to assert a STOP command on the bus in order to prevent it from generating interrupts when there are no on going transfers. Example: very long transmission. 1. ocores_xfer: START a transfer 2. ocores_isr : handle byte by byte the transfer 3. ocores_xfer: goes in timeout [[bugfix here]] 4. ocores_xfer: return to I2C subsystem and to the I2C driver 5. I2C driver : it may clean up the i2c_msg memory 6. ocores_isr : receives another interrupt (pending bytes to be transferred) but the i2c_msg memory is invalid now So, since the transfer was too long, we have to detect the timeout and STOP the transfer. Another point is that we have a critical region here. When handling the timeout condition we may have a running IRQ handler. For this reason I introduce a spinlock. In order to make easier to understan locking I have: - added a new function to handle timeout - modified the current ocores_process() function in order to be protected by the new spinlock Like this it is obvious at first sight that this locking serializes the execution of ocores_process() and ocores_process_timeout() Signed-off-by: Federico Vaga --- drivers/i2c/busses/i2c-ocores.c | 54 ++++++++++++++++++++++++++++++++++------- 1 file changed, 45 insertions(+), 9 deletions(-) diff --git a/drivers/i2c/busses/i2c-ocores.c b/drivers/i2c/busses/i2c-ocores.c index 87f9caa..aa85202 100644 --- a/drivers/i2c/busses/i2c-ocores.c +++ b/drivers/i2c/busses/i2c-ocores.c @@ -25,7 +25,12 @@ #include #include #include +#include +/** + * @process_lock: protect I2C transfer process. + * ocores_process() and ocores_process_timeout() can't run in parallel. + */ struct ocores_i2c { void __iomem *base; u32 reg_shift; @@ -36,6 +41,7 @@ struct ocores_i2c { int pos; int nmsgs; int state; /* see STATE_ */ + spinlock_t process_lock; struct clk *clk; int ip_clock_khz; int bus_clock_khz; @@ -141,19 +147,26 @@ static void ocores_process(struct ocores_i2c *i2c) { struct i2c_msg *msg = i2c->msg; u8 stat = oc_getreg(i2c, OCI2C_STATUS); + unsigned long flags; + + /* + * If we spin here is because we are in timeout, so we are going + * to be in STATE_ERROR. See ocores_process_timeout() + */ + spin_lock_irqsave(&i2c->process_lock, flags); if ((i2c->state == STATE_DONE) || (i2c->state == STATE_ERROR)) { /* stop has been sent */ oc_setreg(i2c, OCI2C_CMD, OCI2C_CMD_IACK); wake_up(&i2c->wait); - return; + goto out; } /* error? */ if (stat & OCI2C_STAT_ARBLOST) { i2c->state = STATE_ERROR; oc_setreg(i2c, OCI2C_CMD, OCI2C_CMD_STOP); - return; + goto out; } if ((i2c->state == STATE_START) || (i2c->state == STATE_WRITE)) { @@ -163,7 +176,7 @@ static void ocores_process(struct ocores_i2c *i2c) if (stat & OCI2C_STAT_NACK) { i2c->state = STATE_ERROR; oc_setreg(i2c, OCI2C_CMD, OCI2C_CMD_STOP); - return; + goto out; } } else msg->buf[i2c->pos++] = oc_getreg(i2c, OCI2C_DATA); @@ -184,14 +197,14 @@ static void ocores_process(struct ocores_i2c *i2c) oc_setreg(i2c, OCI2C_DATA, addr); oc_setreg(i2c, OCI2C_CMD, OCI2C_CMD_START); - return; + goto out; } else i2c->state = (msg->flags & I2C_M_RD) ? STATE_READ : STATE_WRITE; } else { i2c->state = STATE_DONE; oc_setreg(i2c, OCI2C_CMD, OCI2C_CMD_STOP); - return; + goto out; } } @@ -202,6 +215,9 @@ static void ocores_process(struct ocores_i2c *i2c) oc_setreg(i2c, OCI2C_DATA, msg->buf[i2c->pos++]); oc_setreg(i2c, OCI2C_CMD, OCI2C_CMD_WRITE); } + +out: + spin_unlock_irqrestore(&i2c->process_lock, flags); } static irqreturn_t ocores_isr(int irq, void *dev_id) @@ -213,9 +229,24 @@ static irqreturn_t ocores_isr(int irq, void *dev_id) return IRQ_HANDLED; } +/** + * Process timeout event + * @i2c: ocores I2C device instance + */ +static void ocores_process_timeout(struct ocores_i2c *i2c) +{ + unsigned long flags; + + spin_lock_irqsave(&i2c->process_lock, flags); + i2c->state = STATE_ERROR; + oc_setreg(i2c, OCI2C_CMD, OCI2C_CMD_STOP); + spin_unlock_irqrestore(&i2c->process_lock, flags); +} + static int ocores_xfer(struct i2c_adapter *adap, struct i2c_msg *msgs, int num) { struct ocores_i2c *i2c = i2c_get_adapdata(adap); + int ret; i2c->msg = msgs; i2c->pos = 0; @@ -225,11 +256,14 @@ static int ocores_xfer(struct i2c_adapter *adap, struct i2c_msg *msgs, int num) oc_setreg(i2c, OCI2C_DATA, i2c_8bit_addr_from_msg(i2c->msg)); oc_setreg(i2c, OCI2C_CMD, OCI2C_CMD_START); - if (wait_event_timeout(i2c->wait, (i2c->state == STATE_ERROR) || - (i2c->state == STATE_DONE), HZ)) - return (i2c->state == STATE_DONE) ? num : -EIO; - else + ret = wait_event_timeout(i2c->wait, (i2c->state == STATE_ERROR) || + (i2c->state == STATE_DONE), HZ); + if (ret == 0) { + ocores_process_timeout(i2c); return -ETIMEDOUT; + } + + return (i2c->state == STATE_DONE) ? num : -EIO; } static int ocores_init(struct device *dev, struct ocores_i2c *i2c) @@ -422,6 +456,8 @@ static int ocores_i2c_probe(struct platform_device *pdev) if (!i2c) return -ENOMEM; + spin_lock_init(&i2c->process_lock); + res = platform_get_resource(pdev, IORESOURCE_MEM, 0); i2c->base = devm_ioremap_resource(&pdev->dev, res); if (IS_ERR(i2c->base)) From patchwork Mon Feb 11 16:05:26 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Federico Vaga X-Patchwork-Id: 1039913 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=none (p=none dis=none) header.from=cern.ch Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=cern.onmicrosoft.com header.i=@cern.onmicrosoft.com header.b="oU4x4xhx"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43yrHR6Lhdz9sML for ; Tue, 12 Feb 2019 03:05:55 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728566AbfBKQFt (ORCPT ); Mon, 11 Feb 2019 11:05:49 -0500 Received: from mail-eopbgr20043.outbound.protection.outlook.com ([40.107.2.43]:42002 "EHLO EUR02-VE1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1728015AbfBKQFt (ORCPT ); Mon, 11 Feb 2019 11:05:49 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cern.onmicrosoft.com; s=selector1-cern-ch; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=G8tAcT/apF6DPLLmFySVdcDsEcqNwhs0WLE6X7Q3J0c=; b=oU4x4xhx5G2So46+5fwXj6XjKr1aDV3EFF0AwoPHmwB9IJSSh045bGnoWtOSAuX753TkYhDNVstUz7DmM7/rRY9ibgY/n7LZjoKaP+YGQ5eAHDaJRynecbCWUjf0/DJpmw2ly2zBCIVxMLK+1+/pqWec0LOccLaKql+6ms0agUc= Received: from DB6PR06CA0013.eurprd06.prod.outlook.com (2603:10a6:6:1::26) by AM6PR0602MB3526.eurprd06.prod.outlook.com (2603:10a6:209:e::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1601.19; Mon, 11 Feb 2019 16:05:46 +0000 Received: from AM5EUR02FT063.eop-EUR02.prod.protection.outlook.com (2a01:111:f400:7e1e::204) by DB6PR06CA0013.outlook.office365.com (2603:10a6:6:1::26) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1601.17 via Frontend Transport; Mon, 11 Feb 2019 16:05:45 +0000 Authentication-Results: spf=pass (sender IP is 188.184.36.46) smtp.mailfrom=cern.ch; korsgaard.com; dkim=none (message not signed) header.d=none;korsgaard.com; dmarc=bestguesspass action=none header.from=cern.ch; Received-SPF: Pass (protection.outlook.com: domain of cern.ch designates 188.184.36.46 as permitted sender) receiver=protection.outlook.com; client-ip=188.184.36.46; helo=cernmxgwlb4.cern.ch; Received: from cernmxgwlb4.cern.ch (188.184.36.46) by AM5EUR02FT063.mail.protection.outlook.com (10.152.9.234) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.1580.10 via Frontend Transport; Mon, 11 Feb 2019 16:05:45 +0000 Received: from cernfe03.cern.ch (188.184.36.39) by cernmxgwlb4.cern.ch (188.184.36.46) with Microsoft SMTP Server (TLS) id 14.3.408.0; Mon, 11 Feb 2019 17:05:41 +0100 Received: from cwe-513-vol689.cern.ch (188.185.69.206) by smtp.cern.ch (188.184.36.52) with Microsoft SMTP Server (TLS) id 14.3.408.0; Mon, 11 Feb 2019 17:05:40 +0100 From: Federico Vaga To: Peter Korsgaard , Andrew Lunn CC: , , Federico Vaga Subject: [PATCH v5 2/5] i2c:ocores: do not handle IRQ if IF is not set Date: Mon, 11 Feb 2019 17:05:26 +0100 Message-ID: <20190211160529.23858-3-federico.vaga@cern.ch> X-Mailer: git-send-email 2.15.0 In-Reply-To: <20190211160529.23858-1-federico.vaga@cern.ch> References: <20190211160529.23858-1-federico.vaga@cern.ch> MIME-Version: 1.0 X-Originating-IP: [188.185.69.206] X-EOPAttributedMessage: 0 X-Forefront-Antispam-Report: CIP:188.184.36.46; IPV:NLI; CTRY:CH; EFV:NLI; SFV:NSPM; SFS:(10001)(10009020)(459900002); DIR:OUT; SFP:1101; SCL:1; SRVR:AM6PR0602MB3526; H:cernmxgwlb4.cern.ch; FPR:; SPF:None; LANG:en; X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: c825e68a-b80c-45d2-348d-08d6903ac7df X-Microsoft-Antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600110)(711020)(4605077)(4608076)(4709027)(5565046)(2017052603328)(7153060)(7193020); SRVR:AM6PR0602MB3526; X-MS-TrafficTypeDiagnostic: AM6PR0602MB3526: X-Microsoft-Exchange-Diagnostics: 1; AM6PR0602MB3526; 20:p0/0Eie7baV98kHh3H5oVUBudIaXUINPKqYa+9VaU+9Gw9wMDCuNQ2wKOSrEDZy4vtORHUnNeC8rr3Vd47a7cHNDFRH+sJQmHuygiqqFiy289/Fx4yewMqI34yxP/PnhoyLSTxoEb8zYzT/K9N9y07GGg9p9I+ZS17bFnw674sPOH0MhHQvKWjXFc8az7Xsxz4DgDl4UiAOV9BvDK0VX6IGCFHG2dwUWi2qXc2OhRQ+oUMfQsmMPzl99iv/aEtq4CsozCG5vqsFdMDF963Wyw/QSQoB6bqMjIFXe78yDQnI8ufyMkGfcceWw+4rYQJXzJcyj7QoQxix54nOXP7X9L3MjS2IT5kELLRmZbNfegUq9be9mzv2+2dgY1QZNGY/P2zZPMS+lVuWK51cTT5gKlj3ppGAByzPAjdCGrav9izhNdWUaPos7HIqdmOAA3bmJYH6Zmqvis4KzKi6PUt6IdMuT4+jiGK/W3DkmaXIGeyz+Z91vZF/8LzLHt3+MbnSW; 4:eRncCLdePETIRIUtjdXxMjNwyY/X/Ax3sewHBq2chwEkiAKrgjSNVTZodgqjuIumxkdxJbKErnDyAXNwtPrTPTlV8oxcyiPiWqoeCTsD/iAL2katC0a0kyCGcIVguOR0+tKrKBVPQDMJRPKdoDOVZeeCWDdyJ2xHAR/43mqx3hXvTybi9NlzryQ++7mWZXuCLgBk0OzJBl663+AG5BQOaMe24oSmLbivgQ8hqBMeXhGk4W/UNqdh6OQv6MkHSUEymJnAF3LBKTxSj2bjaDDSbbNslWEbSAlb+hb6POvzlbEmVBKRJ5sYdXAoEaQXWTHp X-Microsoft-Antispam-PRVS: X-Forefront-PRVS: 0945B0CC72 X-Microsoft-Exchange-Diagnostics: 1; AM6PR0602MB3526; 23:0f4mfUb4b8cvnknITcOB4OmLAg+EYlFhUF2kocRS5fuw3vqP9gndLjWsWCBxGp/b2UJ1zN0kwaJLExz0wBiFmEcxgTj+8UfUeTaRIfZQD5iqkLnVagPG2d1uYo85H0aE3D4PsEdrv1YRzBYJ3xCdKufiGeYRrawBRpRuXd3cD75wdXrb9u3yhwiOKyg3W+Ra; 6:Tq3diMl3Vy/QwGOqwNMojzu8PRIEG/jlRlqBvVoXwDLFbcfB/TbbedjSPbmiqFPEkDRoSJwmBY2gqzR9BkG/XIgUTEjcaT2bF0ABOW4Nd4a7Em9jJy+zm6CJhFaZH9QA6pwKkkKn+uq+7nDG/yrLNwX9xT8v6UgFewgDeitZBbkClQFtokcCGvyQWUTZ+t4ybhaan82OZNNsF1bnZB9KveBoKxD8mwtQIVfxXJd4HO949jlzHddEQwecgf7NCZCQXWiYH8j9NfVY+rMV42hrOuWwpaX2zFjUzv3ex0i7sEnudOX0C35SvKo65rgksd0K1zRYkazmAL5cMcMYw5Jfd+I1TXNwB03fdan+Fnt5FmBBBk0F9E1kgBCgqZTYVBOymyxWTr5vtsJKsOhrlFdSDBRe4zKyRKORFlubnkLBxGXJlklVmqT62KVlvmVhOOTQQu1CTUJ2419c1yJSD00lIA==; 5:aUVEF5CeQIeH3bMAIUo7hQKiovDq9z4lYfMxT0hQHPGKZ9gNS0gJ8VamTL/smpVGtkE9I8Fipxuw79uTXChZfRLK/yB9LEka1RGX+vpG9CUd95grHzIgQlmYCusdzOo+dSld4A+rqMbSUrvEWD51wykO0E59Ckn3D5hqPTQAc6XM2U4tRfly5o/E0V0mqc/BZVsXZwHDtJE/NsVvZ+t//w== X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam-Message-Info: 9P5aK0mAGgywwkVTOvzT1F+ZGuMVUtmfKIDJWz8mC4uehvoh4h2YXnJSk8trDwC8QRTnJJ66vF5tXD4kUsZHIqNQHnle3rdewJt2sEuSr66SOMPo0HukwJwNoTEgSNk5pfLibOWYvD+k1As9Pepzhc8bAwHMIaEBr2j9GR0h8+Pov2RilHSGrODiN45lRQNX7oiub5I0xCh1hFDc4s5E+uZ9ZK+WFi0k+kpUFYI+6oft6r0TXk6CFojqPO69MND0/RbzRx4rksjn+9UhtlFn43y0tKIYJ6lRrLcq4rJyZcFmd7AxKaACV62l/wfQEJ+NW1mCrJHY/D5e3pSoGCdDVyuCZehEVnZRAF9vNPbfiXeo96mb9G+5UsqG9JngdIb6S0Dt1iBbhLicliUY4OO7q+CaqlrsYbAB0WbsARHvYBR3b7xEvpoUWziFk+vBUgkp5WBUB6w3Ks5QKZ0DBxMlYFnXzqiW39dz5ANNGDLN1DZlD0XLMn9miQgdPaAqP6FLy+wdpTdfXW/6fvPVaS4FH7Cz1ggZ4LlVBT28nqq0+Bk= X-Microsoft-Exchange-Diagnostics: 1; AM6PR0602MB3526; 7:BacPdaQjvKmjIpwbkpMEjRxwsJy2m6kXSm4mn1gsscaq2YU+cfl8XhHzJakJqoukdsd/iDOQTAJ/zgS6KWZV63sw0k0ULTBvEZ4/lYcMUzSw0jvu2Jbq8lUxHh2+x2I77/VID4yT3rWN1vtD0+801A== X-OriginatorOrg: cern.ch X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 Feb 2019 16:05:45.2818 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: c825e68a-b80c-45d2-348d-08d6903ac7df X-MS-Exchange-CrossTenant-Id: c80d3499-4a40-4a8c-986e-abce017d6b19 X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=c80d3499-4a40-4a8c-986e-abce017d6b19; Ip=[188.184.36.46]; Helo=[cernmxgwlb4.cern.ch] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR0602MB3526 Sender: linux-i2c-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-i2c@vger.kernel.org If the Interrupt Flag (IF) is not set, we should not handle the IRQ: - the line can be shared with other devices - it can be a spurious interrupt To avoid reading twice the status register, the ocores_process() function expects it to be read by the caller. Signed-off-by: Federico Vaga Acked-by: Peter Korsgaard --- drivers/i2c/busses/i2c-ocores.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/drivers/i2c/busses/i2c-ocores.c b/drivers/i2c/busses/i2c-ocores.c index aa85202..fcc2558 100644 --- a/drivers/i2c/busses/i2c-ocores.c +++ b/drivers/i2c/busses/i2c-ocores.c @@ -143,10 +143,9 @@ static inline u8 oc_getreg(struct ocores_i2c *i2c, int reg) return i2c->getreg(i2c, reg); } -static void ocores_process(struct ocores_i2c *i2c) +static void ocores_process(struct ocores_i2c *i2c, u8 stat) { struct i2c_msg *msg = i2c->msg; - u8 stat = oc_getreg(i2c, OCI2C_STATUS); unsigned long flags; /* @@ -223,8 +222,12 @@ out: static irqreturn_t ocores_isr(int irq, void *dev_id) { struct ocores_i2c *i2c = dev_id; + u8 stat = oc_getreg(i2c, OCI2C_STATUS); + + if (!(stat & OCI2C_STAT_IF)) + return IRQ_NONE; - ocores_process(i2c); + ocores_process(i2c, stat); return IRQ_HANDLED; } From patchwork Mon Feb 11 16:05:27 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Federico Vaga X-Patchwork-Id: 1039914 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=none (p=none dis=none) header.from=cern.ch Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=cern.onmicrosoft.com header.i=@cern.onmicrosoft.com header.b="iFtBFzQi"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43yrHp4C9cz9sML for ; Tue, 12 Feb 2019 03:06:14 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1732615AbfBKQGH (ORCPT ); Mon, 11 Feb 2019 11:06:07 -0500 Received: from mail-eopbgr60059.outbound.protection.outlook.com ([40.107.6.59]:16304 "EHLO EUR04-DB3-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1731555AbfBKQGG (ORCPT ); Mon, 11 Feb 2019 11:06:06 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cern.onmicrosoft.com; s=selector1-cern-ch; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=02EEmL7KkDY0boFc52AqfVdNRQfQIlh3LJdfe8zrT4s=; b=iFtBFzQiOi/mdgq7P2LsssAdvtynnoyU08/GW3YiAuPLNk5DF8Z5HoKwFWa+W60GwWcyAPmF7NlMWbcctUbNq+aSE66qdDH0M/iOXpSEujh69v909E8MGsirRY6kYONnHmC5Iig5yo5+GI7CGSN4CRwXDUmbo2AOTIAWf+8GhWU= Received: from AM5PR0601CA0030.eurprd06.prod.outlook.com (2603:10a6:203:68::16) by VI1PR0602MB3533.eurprd06.prod.outlook.com (2603:10a6:803:a::30) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1601.21; Mon, 11 Feb 2019 16:05:56 +0000 Received: from VE1EUR02FT012.eop-EUR02.prod.protection.outlook.com (2a01:111:f400:7e06::206) by AM5PR0601CA0030.outlook.office365.com (2603:10a6:203:68::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1601.19 via Frontend Transport; Mon, 11 Feb 2019 16:05:56 +0000 Authentication-Results: spf=pass (sender IP is 188.184.36.48) smtp.mailfrom=cern.ch; korsgaard.com; dkim=none (message not signed) header.d=none;korsgaard.com; dmarc=bestguesspass action=none header.from=cern.ch; Received-SPF: Pass (protection.outlook.com: domain of cern.ch designates 188.184.36.48 as permitted sender) receiver=protection.outlook.com; client-ip=188.184.36.48; helo=cernmxgwlb4.cern.ch; Received: from cernmxgwlb4.cern.ch (188.184.36.48) by VE1EUR02FT012.mail.protection.outlook.com (10.152.12.122) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.1580.10 via Frontend Transport; Mon, 11 Feb 2019 16:05:56 +0000 Received: from cernfe03.cern.ch (188.184.36.39) by cernmxgwlb4.cern.ch (188.184.36.48) with Microsoft SMTP Server (TLS) id 14.3.408.0; Mon, 11 Feb 2019 17:05:40 +0100 Received: from cwe-513-vol689.cern.ch (188.185.69.206) by smtp.cern.ch (188.184.36.52) with Microsoft SMTP Server (TLS) id 14.3.408.0; Mon, 11 Feb 2019 17:05:40 +0100 From: Federico Vaga To: Peter Korsgaard , Andrew Lunn CC: , , Federico Vaga Subject: [PATCH v5 3/5] i2c:ocores: add polling interface Date: Mon, 11 Feb 2019 17:05:27 +0100 Message-ID: <20190211160529.23858-4-federico.vaga@cern.ch> X-Mailer: git-send-email 2.15.0 In-Reply-To: <20190211160529.23858-1-federico.vaga@cern.ch> References: <20190211160529.23858-1-federico.vaga@cern.ch> MIME-Version: 1.0 X-Originating-IP: [188.185.69.206] X-EOPAttributedMessage: 0 X-Forefront-Antispam-Report: CIP:188.184.36.48; IPV:NLI; CTRY:CH; EFV:NLI; SFV:NSPM; SFS:(10009020)(396003)(136003)(346002)(376002)(39860400002)(2980300002)(189003)(199004)(51416003)(106466001)(8676002)(66066001)(426003)(74482002)(76176011)(47776003)(4326008)(3846002)(316002)(786003)(16586007)(6116002)(336012)(7696005)(107886003)(44832011)(14444005)(26005)(478600001)(50466002)(8936002)(1076003)(956004)(53416004)(186003)(54906003)(48376002)(446003)(126002)(36756003)(7736002)(7636002)(86362001)(486006)(305945005)(16526019)(11346002)(50226002)(356004)(6666004)(106002)(110136005)(476003)(2906002)(246002)(2616005); DIR:OUT; SFP:1101; SCL:1; SRVR:VI1PR0602MB3533; H:cernmxgwlb4.cern.ch; FPR:; SPF:Pass; LANG:en; PTR:cernmx12.cern.ch; MX:1; A:1; X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: c0ef9e26-1aa7-4564-b705-08d6903ace6a X-Microsoft-Antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(5600110)(711020)(4605077)(4608076)(4709027)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7153060)(7193020); SRVR:VI1PR0602MB3533; X-MS-TrafficTypeDiagnostic: VI1PR0602MB3533: X-Microsoft-Exchange-Diagnostics: 1; VI1PR0602MB3533; 20:D1HjWI0bzv3iHnDUV8/A1IKLCo9zP/BA2jPU13YDRjNq3PUjGFxML+5Boi4B5UFiRmusOwpgG8tObSqNNlDzftceh934qS64o6Ab3jBZJvHyuLxuJUYHL46im/OiEo7g9S94LOo9m1RRgxjVbo5aX98BnFQnesXyvl0Mmtvw52qe8noK2ObiiQq4gm1qUZ3GTsjvoYRt3fJoyEJrnQpLfWdmqeIZw2aQBetC8AtDrByV3PTJ7UoRv/pZsGyTx4PUyX/1rEla1yX4G1yys2GnoJWxFwC4EkRJygDrGkoga/jL64rOU37xZv4N+y+UP3e6NrlkBgThy6fvTEFt/LR7rcbYtlcCMqV8+qMbzImZ+DHEwHQtVvCHsZ+L5/D4NAb6ThQsIseD9nmRIzPcg7AGsTAZTYOGxgdMP7t1yK2xhl9yI62aTTY8A1hgGB5YkW5BRxusRebJ792G4bfzzzI6uGA5wLbRPwYJOJdospPbUkbFbuD3puv25eFT9puSfSNn; 4:vrw60cF6Y4aSbKy8DYQGU+CNU7o4XGmqnYvpmF7UQACWS3mA37heKE+o4/l0XjuWO6Z1JiIYNLNZMPFoPE9lmY5WuhhlBLpDbT126yvaSerunOGx/Mpz9enfLLMOXQxBIXrqU6WwjQ9NC/jYQTEfhNSOo8DuXrUxcPU4UUvLvCNmE5tCHq/YG18WPi5L/98FdIPQ0Z5J7ZPfwuU3RqLyEENjPEaTWPSO30NKdjrxQibdwe4KdDTmz4KsRmqvlw1b4CACLjdI/C6ljIu0MZ2E4GNcD5js6iNFkU+4qOLbsaA= X-Microsoft-Antispam-PRVS: X-Forefront-PRVS: 0945B0CC72 X-Microsoft-Exchange-Diagnostics: 1; VI1PR0602MB3533; 23:ZvfaSu4XlXQWCXM6hYfPsT6KNhGG97EFRSuHEgmPSNmIX0ygzoeFTOgKmvtvycDrJL647o6FqcusBb27/0i3wSbZ6FPa1r2sCh4Zqt6xhiD/LBJLszYgLtKSfojLugZWcSUolXIYpGJ5kiIo/M9YiKHZ8Gsf00qpT5zMB0YVFsGMzMrSRKsctvSTLAANVSnNWgDaeKh/XpqvLPwYGAxoON/uk/tHDQ+ruk8ZCk3Gyw1dKUAyeTxZb/N8cRtYefXA2OttfASeBKDOC2TPX9L6CKfdIeI98lB2ENs725LsC/7HvIhP25Fj0CZBzoHr7Km4ub4u6o6pbXwNsUuktIbPTBL6GtbOWf9LKHBO9P1RdR8hJTvRkIM+TgDB2G85Mhxb3iBQQxF9AKpLTEIDPKW3OnBhmzwj82kO9DdG2FimSaxvdIhHnGQTIQJ35pjNrtmKQ/em7dSLmwQfCsAowUfig7KYVablKF9jH/cBSL+/7iCOyqpY5rClGaqY8+aFtSYhaaKV+GtNSJ8iJZpoK/qNnzfimplWHsjs+MxRtYb89NoEv8RYOY4BtWSmGGXZ8IGZ1VWhnfUN8KMUgwrKlwmJquRahkEQgEGhUBv28SqNDyjIzLMRtMEa+cEATDDYJu6tk5yah2xc99RsT0ptbS04vMAipOyvb072B98WyqU9XM2Jdoh5+M4wT+Q2sGGW0vzGaFCQHI8LKMZo0azJ0/lQp44x4pVQWbKGQlFiMa8f+9zQT/6lz/pYRhee3gqEF+7o1r0g4UFzq+Vi5p7OlWr4cd8DaJcuedCPUfCouqA/197j5Pqy+gpV8Myv3j/TmCaKyDfmtFTVaZqNhE9QM6ex40fH3iEA/6+lZ6qt0CWbu50b/mT0XRKIT+CJPYKAMC/wQqfTOw1fBEsJnUC0rDp1QDAbnj/LHPzt9BeAeG43SWlkT/OKHhGqhI6n7tNCBDVsp1WGQSwG/fHx3FfxtKtC/v1voHiXzFUMs0F17McdJ85fepEVXVbcGQ3eThmLf5BYpqmFjkeRUlJNQ4I4mzpj7u5Iolcuo1/irxZeOrmY40fWmJBrKhLgpuNisANHfEPSwg7LZgrc8LHQDEm9bXyidHQ09fSGKo/2uhWcWaro+rNo24a/fzLhWzz2ThPDrJbadnF2M6bTgIo76ipIW/laPrrUMxPyaII9u2lEF+QVcd6IPYr638tPwEfvbwcC7YZC X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam-Message-Info: 11tPss6EPUv57BzlPJZe60mHL4gZjg/bLgVOeA5ue7Hq0SeI8jNm+p72AkYs1rbh2mRlbDwxRmGGI1jKx774frp2sXgtB8gpVGfmjwrYOSbWTqzuPp0hnzO/8Rt32T/Y7y0nl/yegSNKSTOJq/wUNPS0xNMpTDg7U9u+U6jhlohN2SRhG6QRqzmydrtcAcTJpfkUcEbBmVyi9szi6Mht6l+8tf0QIFrWiDrBMHpM3RPUvCi+j5p/DUINEBkGBCg90mQIHlsabc7DgaP+qiAyFsURe4oHbYp5iSkpOF7KnqbvR572rm3zhcSJ627WhGhPbkQW6Kqu/2Yxp0jQ8zkDkhuk2y+ZZhN25iqZY3aZgpjNPHR5uxKEY5wEPLpuO+vazucU7fQtW9cwfIN8E4GuJEtQTNuw7xOIfoKANpHrgJQ= X-Microsoft-Exchange-Diagnostics: 1; VI1PR0602MB3533; 6:W2NC/CChrATcBB3IuXWDO2/J6dyEBOvuwOJIH1vEbfKnLuSsdp6kfUwoL8htqF51Jt+7Q1qUU3OuHIdwqwpoZh9BxJTi8LhVAsB8HAFXd4OdKcF6qvpJS5V+9zIK9LxWphWLhVqXl5clvL/lUybhhppyzgnV+cCzOsRI5fjDPe6aq70QM3H/45WNeKLKnXb8UZ4j3i0jOgTxAq3hW0whMLXyEvID2qOUyNOPvHgiFgUG7sg1fSWdrlEuJePih10q4EWkuEM9vurjoPQiF2XDUlPaTWaJ1Ql0q9UX8feja5wcyf+8nd4LkSAMIKxyArB+iEU5eADsaHCmpVyS05vKur/RG3VmHxhKylpyoccwXZzbWB93sA+WyLIC+sGegbi6AjUNxSkXk7OiUR2alQ79CcfOBu2Mxbw4ZrgBlhA3yyzf4LzQW90QESangFBuFW0r7PEqIcNBb/eJKeNjQObRog==; 5:Fl8WEOrlN9i3C8TKyLOJ0tq/svHNgiSAX8vfl4YbGBo54cnkdDjaNaS9prl3cc+Tc5oyvVb+vzinxWmQWQO+n4JvrELG/MZPgJ1XdgsD4oVF1Ts9wOuGCRFMB+CjafBqZh4D6JG66+pcz895ufkKBv8vqEJVqg7RBUwanBeZ9X4H9LkK3xS1aVvqBhegaNl6LzQGw0yJC6gEqCTaGhFWww==; 7:x0nliI+ffNhyyyNisjadkmA/9NiZZEX6Y+avqVxEe09B5m9cL0iBzXWQS/mSmQxsv/t8ApkloEZ0D9Gsws0l50wbSX4+OZZ2FnOQXMpUDX6mP1E91ELgVsyTOy8YZg2a1moARXa6GMH0xYKkvx+jNg== X-OriginatorOrg: cern.ch X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 Feb 2019 16:05:56.2444 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: c0ef9e26-1aa7-4564-b705-08d6903ace6a X-MS-Exchange-CrossTenant-Id: c80d3499-4a40-4a8c-986e-abce017d6b19 X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=c80d3499-4a40-4a8c-986e-abce017d6b19; Ip=[188.184.36.48]; Helo=[cernmxgwlb4.cern.ch] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0602MB3533 Sender: linux-i2c-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-i2c@vger.kernel.org This driver assumes that an interrupt line is always available for the I2C master. This is not always the case and this patch adds support for a polling version. Report from Andrew Lunn: I did some timing tests for this. On my box, we request a udelay of 80uS. The kernel actually delays for about 79uS. We then spin in ocores_wait() for an additional 10-11uS, which is 3 to 4 iterations. There are actually 9 bits on the wire, not 8, since there is an ACK/NACK bit after the actual data transfer. So i changed the delay to (9 * 1000) / i2c->bus_clock_khz. That resulted in ocores_wait() mostly not looping at all. But for reading an 4K AT24 EEPROM, it increased the read time by 10ms, from 424ms to 434ms. So we should probably keep with 8. Signed-off-by: Federico Vaga Tested-by: Andrew Lunn --- drivers/i2c/busses/i2c-ocores.c | 182 +++++++++++++++++++++++++++++++++++----- 1 file changed, 161 insertions(+), 21 deletions(-) diff --git a/drivers/i2c/busses/i2c-ocores.c b/drivers/i2c/busses/i2c-ocores.c index fcc2558..5dea7b9 100644 --- a/drivers/i2c/busses/i2c-ocores.c +++ b/drivers/i2c/busses/i2c-ocores.c @@ -13,6 +13,7 @@ */ #include +#include #include #include #include @@ -26,6 +27,9 @@ #include #include #include +#include + +#define OCORES_FLAG_POLL BIT(0) /** * @process_lock: protect I2C transfer process. @@ -35,6 +39,7 @@ struct ocores_i2c { void __iomem *base; u32 reg_shift; u32 reg_io_width; + unsigned long flags; wait_queue_head_t wait; struct i2c_adapter adap; struct i2c_msg *msg; @@ -246,10 +251,116 @@ static void ocores_process_timeout(struct ocores_i2c *i2c) spin_unlock_irqrestore(&i2c->process_lock, flags); } -static int ocores_xfer(struct i2c_adapter *adap, struct i2c_msg *msgs, int num) +/** + * Wait until something change in a given register + * @i2c: ocores I2C device instance + * @reg: register to query + * @mask: bitmask to apply on register value + * @val: expected result + * @timeout: timeout in jiffies + * + * Timeout is necessary to avoid to stay here forever when the chip + * does not answer correctly. + * + * Return: 0 on success, -ETIMEDOUT on timeout + */ +static int ocores_wait(struct ocores_i2c *i2c, + int reg, u8 mask, u8 val, + const unsigned long timeout) +{ + unsigned long j; + + j = jiffies + timeout; + while (1) { + u8 status = oc_getreg(i2c, reg); + + if ((status & mask) == val) + break; + + if (time_after(jiffies, j)) + return -ETIMEDOUT; + } + return 0; +} + +/** + * Wait until is possible to process some data + * @i2c: ocores I2C device instance + * + * Used when the device is in polling mode (interrupts disabled). + * + * Return: 0 on success, -ETIMEDOUT on timeout + */ +static int ocores_poll_wait(struct ocores_i2c *i2c) +{ + u8 mask; + int err; + + if (i2c->state == STATE_DONE || i2c->state == STATE_ERROR) { + /* transfer is over */ + mask = OCI2C_STAT_BUSY; + } else { + /* on going transfer */ + mask = OCI2C_STAT_TIP; + /* + * We wait for the data to be transferred (8bit), + * then we start polling on the ACK/NACK bit + */ + udelay((8 * 1000) / i2c->bus_clock_khz); + } + + /* + * once we are here we expect to get the expected result immediately + * so if after 1ms we timeout then something is broken. + */ + err = ocores_wait(i2c, OCI2C_STATUS, mask, 0, msecs_to_jiffies(1)); + if (err) + dev_warn(i2c->adap.dev.parent, + "%s: STATUS timeout, bit 0x%x did not clear in 1ms\n", + __func__, mask); + return err; +} + +/** + * It handles an IRQ-less transfer + * @i2c: ocores I2C device instance + * + * Even if IRQ are disabled, the I2C OpenCore IP behavior is exactly the same + * (only that IRQ are not produced). This means that we can re-use entirely + * ocores_isr(), we just add our polling code around it. + * + * It can run in atomic context + */ +static void ocores_process_polling(struct ocores_i2c *i2c) +{ + while (1) { + irqreturn_t ret; + int err; + + err = ocores_poll_wait(i2c); + if (err) { + i2c->state = STATE_ERROR; + break; /* timeout */ + } + + ret = ocores_isr(-1, i2c); + if (ret == IRQ_NONE) + break; /* all messages have been transferred */ + } +} + +static int ocores_xfer_core(struct ocores_i2c *i2c, + struct i2c_msg *msgs, int num, + bool polling) { - struct ocores_i2c *i2c = i2c_get_adapdata(adap); int ret; + u8 ctrl; + + ctrl = oc_getreg(i2c, OCI2C_CONTROL); + if (polling) + oc_setreg(i2c, OCI2C_CONTROL, ctrl & ~OCI2C_CTRL_IEN); + else + oc_setreg(i2c, OCI2C_CONTROL, ctrl | OCI2C_CTRL_IEN); i2c->msg = msgs; i2c->pos = 0; @@ -259,16 +370,37 @@ static int ocores_xfer(struct i2c_adapter *adap, struct i2c_msg *msgs, int num) oc_setreg(i2c, OCI2C_DATA, i2c_8bit_addr_from_msg(i2c->msg)); oc_setreg(i2c, OCI2C_CMD, OCI2C_CMD_START); - ret = wait_event_timeout(i2c->wait, (i2c->state == STATE_ERROR) || - (i2c->state == STATE_DONE), HZ); - if (ret == 0) { - ocores_process_timeout(i2c); - return -ETIMEDOUT; + if (polling) { + ocores_process_polling(i2c); + } else { + ret = wait_event_timeout(i2c->wait, + (i2c->state == STATE_ERROR) || + (i2c->state == STATE_DONE), HZ); + if (ret == 0) { + ocores_process_timeout(i2c); + return -ETIMEDOUT; + } } return (i2c->state == STATE_DONE) ? num : -EIO; } +static int ocores_xfer_polling(struct i2c_adapter *adap, + struct i2c_msg *msgs, int num) +{ + return ocores_xfer_core(i2c_get_adapdata(adap), msgs, num, true); +} + +static int ocores_xfer(struct i2c_adapter *adap, + struct i2c_msg *msgs, int num) +{ + struct ocores_i2c *i2c = i2c_get_adapdata(adap); + + if (i2c->flags & OCORES_FLAG_POLL) + return ocores_xfer_polling(adap, msgs, num); + return ocores_xfer_core(i2c, msgs, num, false); +} + static int ocores_init(struct device *dev, struct ocores_i2c *i2c) { int prescale; @@ -276,7 +408,8 @@ static int ocores_init(struct device *dev, struct ocores_i2c *i2c) u8 ctrl = oc_getreg(i2c, OCI2C_CONTROL); /* make sure the device is disabled */ - oc_setreg(i2c, OCI2C_CONTROL, ctrl & ~(OCI2C_CTRL_EN|OCI2C_CTRL_IEN)); + ctrl &= ~(OCI2C_CTRL_EN | OCI2C_CTRL_IEN); + oc_setreg(i2c, OCI2C_CONTROL, ctrl); prescale = (i2c->ip_clock_khz / (5 * i2c->bus_clock_khz)) - 1; prescale = clamp(prescale, 0, 0xffff); @@ -294,7 +427,7 @@ static int ocores_init(struct device *dev, struct ocores_i2c *i2c) /* Init the device */ oc_setreg(i2c, OCI2C_CMD, OCI2C_CMD_IACK); - oc_setreg(i2c, OCI2C_CONTROL, ctrl | OCI2C_CTRL_IEN | OCI2C_CTRL_EN); + oc_setreg(i2c, OCI2C_CONTROL, ctrl | OCI2C_CTRL_EN); return 0; } @@ -451,10 +584,6 @@ static int ocores_i2c_probe(struct platform_device *pdev) int ret; int i; - irq = platform_get_irq(pdev, 0); - if (irq < 0) - return irq; - i2c = devm_kzalloc(&pdev->dev, sizeof(*i2c), GFP_KERNEL); if (!i2c) return -ENOMEM; @@ -509,18 +638,29 @@ static int ocores_i2c_probe(struct platform_device *pdev) } } + init_waitqueue_head(&i2c->wait); + + irq = platform_get_irq(pdev, 0); + if (irq == -ENXIO) { + i2c->flags |= OCORES_FLAG_POLL; + } else { + if (irq < 0) + return irq; + } + + if (!(i2c->flags & OCORES_FLAG_POLL)) { + ret = devm_request_irq(&pdev->dev, irq, ocores_isr, 0, + pdev->name, i2c); + if (ret) { + dev_err(&pdev->dev, "Cannot claim IRQ\n"); + goto err_clk; + } + } + ret = ocores_init(&pdev->dev, i2c); if (ret) goto err_clk; - init_waitqueue_head(&i2c->wait); - ret = devm_request_irq(&pdev->dev, irq, ocores_isr, 0, - pdev->name, i2c); - if (ret) { - dev_err(&pdev->dev, "Cannot claim IRQ\n"); - goto err_clk; - } - /* hook up driver to tree */ platform_set_drvdata(pdev, i2c); i2c->adap = ocores_adapter; From patchwork Mon Feb 11 16:05:28 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Federico Vaga X-Patchwork-Id: 1039915 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=none (p=none dis=none) header.from=cern.ch Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=cern.onmicrosoft.com header.i=@cern.onmicrosoft.com header.b="teSTd7St"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43yrHq6TQgz9sMp for ; Tue, 12 Feb 2019 03:06:15 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729669AbfBKQGC (ORCPT ); Mon, 11 Feb 2019 11:06:02 -0500 Received: from mail-eopbgr30052.outbound.protection.outlook.com ([40.107.3.52]:61248 "EHLO EUR03-AM5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1732479AbfBKQGC (ORCPT ); Mon, 11 Feb 2019 11:06:02 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cern.onmicrosoft.com; s=selector1-cern-ch; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=QBVm7vn2whs9bYtdJvLQZRIQ/YXQCA5/XUjonZ4b62E=; b=teSTd7StAHzqCTL4HFHh2NTk45yMEfrgauPQBrx3AgE3Rv12z18bMNKcIe2PSM7xaOh9C7tODvY+CUPDze6nlhvApovNfVjl0HAdzlR3P0ZSA4SmJfkNYxR3g93SoJTm6CO3B/7jmAcwomFdGqXtllaWGKiNxqkOrJK/oaYP7+k= Received: from VI1PR0602CA0015.eurprd06.prod.outlook.com (2603:10a6:800:bc::25) by DB7PR06MB4728.eurprd06.prod.outlook.com (2603:10a6:10:56::32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1601.22; Mon, 11 Feb 2019 16:05:58 +0000 Received: from VE1EUR02FT009.eop-EUR02.prod.protection.outlook.com (2a01:111:f400:7e06::203) by VI1PR0602CA0015.outlook.office365.com (2603:10a6:800:bc::25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1601.24 via Frontend Transport; Mon, 11 Feb 2019 16:05:58 +0000 Authentication-Results: spf=pass (sender IP is 188.184.36.50) smtp.mailfrom=cern.ch; korsgaard.com; dkim=none (message not signed) header.d=none;korsgaard.com; dmarc=bestguesspass action=none header.from=cern.ch; Received-SPF: Pass (protection.outlook.com: domain of cern.ch designates 188.184.36.50 as permitted sender) receiver=protection.outlook.com; client-ip=188.184.36.50; helo=cernmxgwlb4.cern.ch; Received: from cernmxgwlb4.cern.ch (188.184.36.50) by VE1EUR02FT009.mail.protection.outlook.com (10.152.12.226) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.1580.10 via Frontend Transport; Mon, 11 Feb 2019 16:05:58 +0000 Received: from cernfe03.cern.ch (188.184.36.39) by cernmxgwlb4.cern.ch (188.184.36.50) with Microsoft SMTP Server (TLS) id 14.3.408.0; Mon, 11 Feb 2019 17:05:41 +0100 Received: from cwe-513-vol689.cern.ch (188.185.69.206) by smtp.cern.ch (188.184.36.52) with Microsoft SMTP Server (TLS) id 14.3.408.0; Mon, 11 Feb 2019 17:05:41 +0100 From: Federico Vaga To: Peter Korsgaard , Andrew Lunn CC: , , Federico Vaga Subject: [PATCH v5 4/5] i2c:ocores: add SPDX tag Date: Mon, 11 Feb 2019 17:05:28 +0100 Message-ID: <20190211160529.23858-5-federico.vaga@cern.ch> X-Mailer: git-send-email 2.15.0 In-Reply-To: <20190211160529.23858-1-federico.vaga@cern.ch> References: <20190211160529.23858-1-federico.vaga@cern.ch> MIME-Version: 1.0 X-Originating-IP: [188.185.69.206] X-EOPAttributedMessage: 0 X-Forefront-Antispam-Report: CIP:188.184.36.50; IPV:NLI; CTRY:CH; EFV:NLI; SFV:NSPM; SFS:(10009020)(346002)(376002)(396003)(39860400002)(136003)(2980300002)(199004)(189003)(106002)(478600001)(7696005)(51416003)(54906003)(8676002)(76176011)(7636002)(110136005)(16586007)(107886003)(186003)(16526019)(26005)(7736002)(305945005)(106466001)(50226002)(246002)(6116002)(3846002)(74482002)(36756003)(48376002)(8936002)(316002)(786003)(486006)(11346002)(356004)(53416004)(44832011)(6306002)(4744005)(66066001)(336012)(4326008)(956004)(1076003)(2906002)(86362001)(2616005)(426003)(446003)(126002)(476003)(47776003)(50466002)(6666004); DIR:OUT; SFP:1101; SCL:1; SRVR:DB7PR06MB4728; H:cernmxgwlb4.cern.ch; FPR:; SPF:Pass; LANG:en; PTR:cernmx11.cern.ch; A:1; MX:1; X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: e694ac43-a4ef-49a8-c4c4-08d6903acf8e X-Microsoft-Antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600110)(711020)(4605077)(4608076)(4709027)(2017052603328)(7153060)(7193020); SRVR:DB7PR06MB4728; X-MS-TrafficTypeDiagnostic: DB7PR06MB4728: X-MS-Exchange-PUrlCount: 1 X-Microsoft-Exchange-Diagnostics: 1; DB7PR06MB4728; 20:YC/eXcblXAr6qY2tu4YMLtcCr+kl/Zn0OV8/m4/4YLWr58No+4BXrPZRbIBrgdseqOVCrXJZHVzyQdPmw8kZjqAgXTeTBQtPJISo5Nu+Wszirkt9qu1Vx1juLsZmmTFtKlpZexVhyvz1mVnlVZzF9GzvJhLlP4pQuJ7ntqMcZtclTZhLAYQ/SrFqIxAPswfgj7kqw2C88Vh51fBEJQ4gC+JNUn3t5oWchrKML9DdT0LB5OiJ8h4OJSRNd8x+H8oaGo6E9FSa+t5mMRLYhou8sC6lRLP7Q8JKl3XUtM+1uT+4wc7mtZAzLxLGj/gY7ImjOlLv+Chl6hQQ4VWizT1FZYUy/FK0llRZOULe7k2fpI/2FkTOo58ldPwnQOQArk71P+9ManThdGZhhNYp41hKhFZhioa85lvjQtQaxYwaHfOtFCGd58/2pCMOhW6NeMaUm7lnpXrmC4mrfVx5AwYmmZq1ys1sRKxiNG4r+9KoxPaIxI3gWZgKsspaAMJl1s5J; 4:LABmwde0BmtQnpXEGe8O/uJE3rcbYNNn+OCOvugdH5j1Y1q3rdagZbdLLKv+FSmD4H8n1RsRqAr4Fv08td9Mawv3G1ncqWoN6lHttT4BF3PRq88EChXc/d7C8HurzOXVGU5YQsfhDcg7s3ubpZtJgRjkc7ZvWP08ErU/NtiOgAwCEwfEsJ54bLjCWonz+CS/UYX4iU/OZjZ0MrUm8lo0J+UFfk10IU1n2S9OFg+i0WU/tjvHiogVk2YuIiQvfzVERXBl0wNtPIB20OzHn8JXX3PatpdFynZ9GMG/291fihTuBKXSD8EPbqiQ6FntY0Hj X-Microsoft-Antispam-PRVS: X-Forefront-PRVS: 0945B0CC72 X-Microsoft-Exchange-Diagnostics: 1; DB7PR06MB4728; 23:H6VYt083vIPrXtyLSSNjCWdhVTF1zED2aTdmFwCmCmEzjqdd3JnxL0RHx+EtYHvk2Ub4DXp/E01YN3Anjs6sMMJemtHv3enqUkikiia6qT5TmBkUR5L69gGUc468HoNdzI8H65+lwf/JZpcyC7fx7v/2mQMbfxlBXAGUIyFbz/ozZwoJuh57GUqGgBDluDi1IEwezNa3H938QLM7uTRnkxq9IYcSaAQDIW8aW/dQ3uMkPA0rTK8Kf5kfg/sTEzQd2AlScVg/86ONG/u0dFG3aMb1hJ85UwayDGb25BpiUZ/d4v9AKxWKVOwp4PfgEZZiDcRfKPEysXxp4m6hMhLvKOwYZHPo5jWPPhhZasy7GpbP/HZZ6gsZUbgLV4Su9bP3pJvYxozXOtd66KumRfumSRGPL5uh9iq48d5nxVeqrS0f+vhiGupm/MN4M+eqh9h5vgzKUpuEAs1GhFyuLY7nvx8gmNxe2meZUQHBYgBwQinFQ5Cjvz315bSpnoDN9tYvkLZMNcbjZ1EY8aQ5dHJMoOtQ6utYe9gYx8MOkfi26mbgoVkCRU0SsVXqOjcg78JyjVz3vObD6QrEIbXSOH0nevDvrvYRfOt+Y9NiGKqUqR8xgo5+9wTKRKRajvQCxZRVikacG+O8vCqLTRZITbgKHR/NMdYgzf83qXISnVrTCe0nCkg+fkq5uyaa1HBpBJWvf8UUHMDUJ6dU8aMPRUr0UvcMh6aGo4Tk0UYJaInZQv1p4RVmi5xidhALHRnMAq5D6mUhKj9+DKQsD/48Vts9TAnAnB0D/hbhgq7t4kNBvE79++pkuNJTijX89KgoLCO1Ob3SZnyU4qgC5E3PG7sO7TXbH0+JkrDtJ+5pR6ZjgwxScVbyqgH11EhLJwTJ5kcP4wbiCjtyjH+ueb2yp/oxvCnuuNqxrLstlmKjxoxLHhiQSPufD8m6AGka73++7dQNtuPvAqyCQPD2/9vu+sAvplmdqn3mwfOpLoTHs56CTjKWZ3O+wZ+HWn5HkyB2e1bfvkRcDTgfWspf321MQclhpy8NsfogtzGWOAg15Th5A6Ct8Od6rHdjuqIvLJx7/CsrPblatHJftFnPmOmV6R/3ARxR8cQihpHIggMuJH/drahbTQJjalOhdvGG2wPahZEsot+HRsrtG+21ufOQcVh+QsBfrdZysExVORxMAqXFZN+f8C65dNTTdectutjiufPTWZQyr8Xw9lKate+bgs0bZw== X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam-Message-Info: CBlqgN2RiMu2bXFCeTs23s3tfHo7BoDvXR+RIY+U3aEULUG69o7YhxMNOMkVqwIYMUK0cNDjZtQXgpPtXykhsYDX/d9qyqfNUZeTuUCvc04P2T9dVSg6YR+0wKou1Nc+0xHEgD0kwiwpDBecT9yl1oMCDSBq3RckjsewxNw/YtHwISvILFlnHdGcTi0savR7wWfgFdxerKsDfaxyrxzFFdK0qJNzz+Xfrhq4ye6g0++vJ0+ZrnDQzPm0deT4XGE9uVXUeqkft95uEo1SQuS4aWtsJh2N9z7iwuriaPeVoRiF7YrpQHD9mR1wLHcZenD0Z9GxM3V3EiuwOMNxz5wPAUtT6HDhac+k7LIepoI8SllVlFo5ZOyNktfbrkdLsseHjq42ITONvkK1d+GVK7bK38HRqOFfwwUYM+orF3iYK7w= X-Microsoft-Exchange-Diagnostics: 1; DB7PR06MB4728; 6:HvMPEPAelNbXeulZwNAY6xYRFWrm3BWlDplhDjj1shZIC8XdJ5YYkMT31n96XrqTtOVOM2qljiqqE+aBkaw8tCbb0RlG9+lWnVshnQHVx2v9VpruRAholP/vN2uQTC7XhMonbFjHg5ZGf0worj4WREfeyMVeHbHAAaZ/XIwJYtTYrIp+XB7g8AG4ePVjYqYhqAKxPsbIWhgJmSOPsPCoxiAKPwcU3qYy3rJmUPmkRjUhkgBmQxb3XfMA7mjMPV2YLti18/KhGYTER0z418PNstarOuLwDbirqiNqEV2hBiPpxbBjNCMyKofmsyrgE1ijFhk84BPDSxHKPCMYU2Mi7Qq9Rwj6sN7eE/ATC5VrLHfJfkpmSuI5ulsjXPur5zsVFeeV2/Wmc+4+1eUBCUaIQzFWTG3eW4DL8mB+qnmFHa//mBXsC1s00rv35hoFWaDpafSH2WNHqHDqw58bXzlQEg==; 5:O5jQGzrILomkt8YV1Eg8SCP+dkARDdriD/hB6FHIUYZzOnfIFmlpJYf+xJrvUdCCBXimFyrM3ZP8YrfY4PcJbfBNnOnVgEpPffVBt8jAIEYLyyg3EZojFocS1PVbsdjH8CZVCbQA8h+aEdrInPPYXA7DugjxZ77DLGiagGhbGRtjJ+hphtqNXesPuj2aADKNjNa/NsuUA98faDSW0TRhJA==; 7:/SIBZK9hgx2xwtcXgWc+WQFdL8xV+ulDXkIX/pOze2yhMcQRlE16gh/+jTC/tf3mH0sH7aHim8mWjYVQ/YLshVC3RZqSOyAQ/LzPY3mPGANc0wLJXZc7I44zKn1lSI+/iJN2o3ml4IouPB42Zrx42w== X-OriginatorOrg: cern.ch X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 Feb 2019 16:05:58.1564 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: e694ac43-a4ef-49a8-c4c4-08d6903acf8e X-MS-Exchange-CrossTenant-Id: c80d3499-4a40-4a8c-986e-abce017d6b19 X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=c80d3499-4a40-4a8c-986e-abce017d6b19; Ip=[188.184.36.50]; Helo=[cernmxgwlb4.cern.ch] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB7PR06MB4728 Sender: linux-i2c-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-i2c@vger.kernel.org It adds the SPDX tag and it removes the old text about the GPLv2. Signed-off-by: Federico Vaga --- drivers/i2c/busses/i2c-ocores.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/drivers/i2c/busses/i2c-ocores.c b/drivers/i2c/busses/i2c-ocores.c index 5dea7b9..78085a8 100644 --- a/drivers/i2c/busses/i2c-ocores.c +++ b/drivers/i2c/busses/i2c-ocores.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: GPL-2.0 /* * i2c-ocores.c: I2C bus driver for OpenCores I2C controller * (https://opencores.org/project/i2c/overview) @@ -6,10 +7,6 @@ * * Support for the GRLIB port of the controller by * Andreas Larsson - * - * This file is licensed under the terms of the GNU General Public License - * version 2. This program is licensed "as is" without any warranty of any - * kind, whether express or implied. */ #include From patchwork Mon Feb 11 16:05:29 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Federico Vaga X-Patchwork-Id: 1039918 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=none (p=none dis=none) header.from=cern.ch Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=cern.onmicrosoft.com header.i=@cern.onmicrosoft.com header.b="dZ4q8P4D"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43yrJ60zPqz9sMr for ; Tue, 12 Feb 2019 03:06:30 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1732164AbfBKQF7 (ORCPT ); Mon, 11 Feb 2019 11:05:59 -0500 Received: from mail-eopbgr150053.outbound.protection.outlook.com ([40.107.15.53]:10080 "EHLO EUR01-DB5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1728015AbfBKQF6 (ORCPT ); Mon, 11 Feb 2019 11:05:58 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cern.onmicrosoft.com; s=selector1-cern-ch; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=166USv8LtM5kWNjMW+EFOP9fjjPAG6JfgPZJuHW8ubM=; b=dZ4q8P4DZ6VQ9fTd3EGF92c+4tyOImQVGcpCPsZHIPNhugtiqxPH/5w18niXngHxVJ+NRT92CdgCm5kyuRetUJ0uL/mASZwLnXcrTDz/SBVQDhy0lftzVBmPDLjDCkC9cVIeNtKosUAskVir47nMzKFmehJbIvKqr6T2ckyIf9A= Received: from AM6PR06CA0014.eurprd06.prod.outlook.com (2603:10a6:20b:14::27) by AM4PR0601MB2147.eurprd06.prod.outlook.com (2603:10a6:200:47::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1601.22; Mon, 11 Feb 2019 16:05:54 +0000 Received: from AM5EUR02FT053.eop-EUR02.prod.protection.outlook.com (2a01:111:f400:7e1e::201) by AM6PR06CA0014.outlook.office365.com (2603:10a6:20b:14::27) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.1601.19 via Frontend Transport; Mon, 11 Feb 2019 16:05:54 +0000 Received-SPF: Pass (protection.outlook.com: domain of cern.ch designates 188.184.36.46 as permitted sender) receiver=protection.outlook.com; client-ip=188.184.36.46; helo=cernmxgwlb4.cern.ch; Received: from cernmxgwlb4.cern.ch (188.184.36.46) by AM5EUR02FT053.mail.protection.outlook.com (10.152.9.196) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.1580.10 via Frontend Transport; Mon, 11 Feb 2019 16:05:54 +0000 Received: from cernfe03.cern.ch (188.184.36.39) by cernmxgwlb4.cern.ch (188.184.36.46) with Microsoft SMTP Server (TLS) id 14.3.408.0; Mon, 11 Feb 2019 17:05:44 +0100 Received: from cwe-513-vol689.cern.ch (188.185.69.206) by smtp.cern.ch (188.184.36.52) with Microsoft SMTP Server (TLS) id 14.3.408.0; Mon, 11 Feb 2019 17:05:42 +0100 From: Federico Vaga To: Peter Korsgaard , Andrew Lunn CC: , , Federico Vaga Subject: [PATCH v5 5/5] i2c:ocores: checkpatch fixes Date: Mon, 11 Feb 2019 17:05:29 +0100 Message-ID: <20190211160529.23858-6-federico.vaga@cern.ch> X-Mailer: git-send-email 2.15.0 In-Reply-To: <20190211160529.23858-1-federico.vaga@cern.ch> References: <20190211160529.23858-1-federico.vaga@cern.ch> MIME-Version: 1.0 X-Originating-IP: [188.185.69.206] X-EOPAttributedMessage: 0 X-Forefront-Antispam-Report: CIP:188.184.36.46; IPV:NLI; CTRY:CH; EFV:NLI; SFV:NSPM; SFS:(10001)(10009020)(459900002); DIR:OUT; SFP:1101; SCL:1; SRVR:AM4PR0601MB2147; H:cernmxgwlb4.cern.ch; FPR:; SPF:None; LANG:en; X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 1bc91249-652f-4817-5213-08d6903acd32 X-Microsoft-Antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(5600110)(711020)(4605077)(4608076)(4709027)(5565046)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7153060)(7193020); SRVR:AM4PR0601MB2147; X-MS-TrafficTypeDiagnostic: AM4PR0601MB2147: X-Microsoft-Exchange-Diagnostics: 1; AM4PR0601MB2147; 20:pcDUzFXMkZk67qbGk/al9butmU7qFejWIAkixFi1BOiKJ7g3Szbgo9DI24W13IaIIvBDIiVukg1r8WyU9Wvw0aoxxobPZtqjLYM6bXSO/I1hABRPos81OxnkQzE1cwb5ToByB22eW5/61UofLylBB80cCVzdhaALRvOyYOTFVKiQFh9XHUznMYVLFCywaWNwtWuPylOLqFdqPPbSObisrrmXd+oMYv/9cTL9vqBIcSmTQ5sqgOUagXzRnB3HlwXzoPAPAVO2XiHnIKnhhkpz8+YV3Dggh7bU9wDgXWTmA3I4w9lKoM4CsB/WcUFkvdwZeWyRfiQx4VsfOhNw+Teut4BJ2rYTs2tn2btvLa7SR38PlqJm8DSoeE+kjFE91qdp5IVJ8iMG7AjfvjbRPP/ELTMmKAZowRMqDEN+diZmQ8yJ47MkUH1n4LVkfEiIY23zGxvAzNEViUQ40Ey5sDjqXSWQOdmuACuw5Te1Hi6Tk350Wn9M+ojKE6Rdb88eAaVz; 4:Ouay76eHOmAE857qk5UpnhDFJ0WkXgxmuCktfzzOZkwcvni1adS4swXPWgLLWUEfAh9sQ2ndgPA3HQhG7Yv69cCdsy91YmgGVK06qBvQuANbNetyNFdYH6hctKP7sZcJE/H5mPm2OTC2fIF6fAXB08jUrfCcG/cHS06GMHhIk/78HgnehEo17miM/Pix4Z8kwiS0pd25UNRSlClyhg5Ut/4LglvryfHilwGgX80Ahf64RbFXzXeNBvcAaqjaCEHdJMR8Tol5Spg8/QBI46Wr6liZcV0M3iVpQtyYjOUcw/361IqQ1svdeYTd/GdCPxc8 X-Microsoft-Antispam-PRVS: X-Forefront-PRVS: 0945B0CC72 X-Microsoft-Exchange-Diagnostics: 1; AM4PR0601MB2147; 23:NzgxoFaa1zKT7B4Eno341B7uxZNLQQfP+nqU8DSmFZHkzLaOIVVVpIuOSl8hzTCoYSkPXl7POlRSIUPX5d4WR1o7US3Syt0vNx6RzAH/PDJN/amtuUT6MsJT4Ss9mq2gZFbEMKiYBd+yRRn9IiCnOQfbkY3x6OW/nIVKErIztPePCC1CPUArPaeNT2LMeEPN; 6:98AnRUtxiQ2S7cj0QRW9eaODzlWBTJiJBoBpHjJIYf6eb025ej0apIK4zwfVq5iU4Ts3s+p3/3yQvR95HlAq1PtcmwrNxWeSIKRxNeleWUOvjfa6+3XGeP63hATQqr8pNc0QBJ8kWVaz+XVYsotcLgnwtQlNW8UoIe9sDmRcJHFI6p8X6I2bieMTsY6UlE9TMQEt6oKBTFlaP12U9DfZNH9jK9K2GLza7WJHchqb2VOjbi94zhoYzzdkr1irmzj7hPi/qrqgRnq+INxxxfvVNWBbLrK1YRT68yQRSYd1/mwzlVFwaIWiJNjMujxyUSq0oPmGT9oIOltpCXgJmYS141sfjMfodB0EY44aM7b0y3b+6FrZRwaGOE3XDKSlp4YuTjBQ5uxdmIaqp4kqUCv80Vg9IS3t8CUBb+RLeeV85y1HeovVhNaCsAtPn4ycB/HRpb3Cl3bbWCdaiTm6hQBJwQ==; 5:YpjoG+ZvE3n7/+kaSluazrnfpR88pZfhw74W3FtWJTHP1rZKwlHOBRYfxHblG5Lrbf4CIABAHnzDsMyZ9RDXio/oZt8l77BAidSl7/zCGfyC9ne91z//OO/7dpZ4RwV6uhYpCIuZrCV1wwROnCd6olWukkZwEngqYsjleuC71nMB98lCp6SACqbXYDKPDg9JdistOwwb+ZdBVq3cwU8vuA== X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam-Message-Info: KxZJIhFCzL2wLoMiaDtbPt3U55gG9S26zb1YC7nGqoQAziXn9RMhCW7pVsMfdm4Mt21V0AoqFNrvuRszauJxoWDDjfKWG4qvm2DEygkZg7k9PPeXYAPkFnPAq0lMXoSJXeJLme7S8wV/8Uo3OMlm1tVOTfr2h6eQjiDGHYIsGWODB11yuQYxZeXS78sJseOsIITB65A7c4L1tT7Ie2JYc2GyQqceSGsEyckDcb08lqJDwI4Zip4YOcsitThy2TXloymfw6HORxSq4auktnzgXylNVQtrza3pjtJ9uYN+5ukaXOmEYBoM7ISIlM5Az3R9zRQqskdGqniCCF0JWcHn4wtOp2SHLqcPiC07DaQ55GvWkJo5JYluyl0KjD7mHYM3ruRyol21ddgfkXYSh9kNBvJQSEk0XYHcCywJszzTTAa2kTTf63B3fMeyeIuqjDoOoHjBR0nVxRgfY2sUUg/rKaiaIXOIJaRs1bEA9++B0zZD0aA/3E0v5rcMT8qexJSwsNnYJsgKITYzMkORxAT9XifwOit4QRoGthCU02WB7kU= X-Microsoft-Exchange-Diagnostics: 1; AM4PR0601MB2147; 7:U9UFrTTIPNK/zBj/kNoIc//4whau/PpF7w62E4/MTpWk6xA0fQtCw98OiGKO77wpqZ0JjBJcwpDbcYlznRLUON6Y2LPOIcFwGhLzQU75W1NlBcFESLZ3UBkIuGJBvmbfc/AoU3Xvmr2D8YO0bQe1PQ== X-OriginatorOrg: cern.ch X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 Feb 2019 16:05:54.2241 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 1bc91249-652f-4817-5213-08d6903acd32 X-MS-Exchange-CrossTenant-Id: c80d3499-4a40-4a8c-986e-abce017d6b19 X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=c80d3499-4a40-4a8c-986e-abce017d6b19; Ip=[188.184.36.46]; Helo=[cernmxgwlb4.cern.ch] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM4PR0601MB2147 Sender: linux-i2c-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-i2c@vger.kernel.org Miscellaneous style fixes from checkpatch Signed-off-by: Federico Vaga --- drivers/i2c/busses/i2c-ocores.c | 30 +++++++++++++++++++----------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/drivers/i2c/busses/i2c-ocores.c b/drivers/i2c/busses/i2c-ocores.c index 78085a8..54b2156 100644 --- a/drivers/i2c/busses/i2c-ocores.c +++ b/drivers/i2c/busses/i2c-ocores.c @@ -179,8 +179,9 @@ static void ocores_process(struct ocores_i2c *i2c, u8 stat) oc_setreg(i2c, OCI2C_CMD, OCI2C_CMD_STOP); goto out; } - } else + } else { msg->buf[i2c->pos++] = oc_getreg(i2c, OCI2C_DATA); + } /* end of msg? */ if (i2c->pos == msg->len) { @@ -197,11 +198,11 @@ static void ocores_process(struct ocores_i2c *i2c, u8 stat) i2c->state = STATE_START; oc_setreg(i2c, OCI2C_DATA, addr); - oc_setreg(i2c, OCI2C_CMD, OCI2C_CMD_START); + oc_setreg(i2c, OCI2C_CMD, OCI2C_CMD_START); goto out; - } else - i2c->state = (msg->flags & I2C_M_RD) - ? STATE_READ : STATE_WRITE; + } + i2c->state = (msg->flags & I2C_M_RD) + ? STATE_READ : STATE_WRITE; } else { i2c->state = STATE_DONE; oc_setreg(i2c, OCI2C_CMD, OCI2C_CMD_STOP); @@ -461,13 +462,16 @@ static const struct of_device_id ocores_i2c_match[] = { MODULE_DEVICE_TABLE(of, ocores_i2c_match); #ifdef CONFIG_OF -/* Read and write functions for the GRLIB port of the controller. Registers are +/* + * Read and write functions for the GRLIB port of the controller. Registers are * 32-bit big endian and the PRELOW and PREHIGH registers are merged into one - * register. The subsequent registers has their offset decreased accordingly. */ + * register. The subsequent registers have their offsets decreased accordingly. + */ static u8 oc_getreg_grlib(struct ocores_i2c *i2c, int reg) { u32 rd; int rreg = reg; + if (reg != OCI2C_PRELOW) rreg--; rd = ioread32be(i2c->base + (rreg << i2c->reg_shift)); @@ -481,6 +485,7 @@ static void oc_setreg_grlib(struct ocores_i2c *i2c, int reg, u8 value) { u32 curr, wr; int rreg = reg; + if (reg != OCI2C_PRELOW) rreg--; if (reg == OCI2C_PRELOW || reg == OCI2C_PREHIGH) { @@ -569,7 +574,7 @@ static int ocores_i2c_of_probe(struct platform_device *pdev, return 0; } #else -#define ocores_i2c_of_probe(pdev,i2c) -ENODEV +#define ocores_i2c_of_probe(pdev, i2c) -ENODEV #endif static int ocores_i2c_probe(struct platform_device *pdev) @@ -686,10 +691,11 @@ err_clk: static int ocores_i2c_remove(struct platform_device *pdev) { struct ocores_i2c *i2c = platform_get_drvdata(pdev); + u8 ctrl = oc_getreg(i2c, OCI2C_CONTROL); /* disable i2c logic */ - oc_setreg(i2c, OCI2C_CONTROL, oc_getreg(i2c, OCI2C_CONTROL) - & ~(OCI2C_CTRL_EN|OCI2C_CTRL_IEN)); + ctrl &= ~(OCI2C_CTRL_EN | OCI2C_CTRL_IEN); + oc_setreg(i2c, OCI2C_CONTROL, ctrl); /* remove adapter & data */ i2c_del_adapter(&i2c->adap); @@ -707,7 +713,9 @@ static int ocores_i2c_suspend(struct device *dev) u8 ctrl = oc_getreg(i2c, OCI2C_CONTROL); /* make sure the device is disabled */ - oc_setreg(i2c, OCI2C_CONTROL, ctrl & ~(OCI2C_CTRL_EN|OCI2C_CTRL_IEN)); + ctrl = oc_getreg(i2c, OCI2C_CONTROL); + ctrl &= ~(OCI2C_CTRL_EN | OCI2C_CTRL_IEN); + oc_setreg(i2c, OCI2C_CONTROL, ctrl); if (!IS_ERR(i2c->clk)) clk_disable_unprepare(i2c->clk);