From patchwork Mon Feb 12 15:52:44 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ben Gardner X-Patchwork-Id: 872119 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; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="Y6GGhwbN"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3zg9Dt0nVkz9s7f for ; Tue, 13 Feb 2018 02:53:18 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932529AbeBLPxO (ORCPT ); Mon, 12 Feb 2018 10:53:14 -0500 Received: from mail-it0-f68.google.com ([209.85.214.68]:37519 "EHLO mail-it0-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932499AbeBLPxN (ORCPT ); Mon, 12 Feb 2018 10:53:13 -0500 Received: by mail-it0-f68.google.com with SMTP id d10so1093528itj.2 for ; Mon, 12 Feb 2018 07:53:12 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=ruIlYp7zFIAs8wIjt1tFPNvsCrwLtwlsQ1v7liWgVBQ=; b=Y6GGhwbNMG3Zu4bY6BAqNmPlVUSgVJt30Q4fGMmJhv5JIFwHyzO49W5Ky++rpoeaw4 ht4UUobFWFMo4nQ/548kcf9RyiSfcb0NWR2zNVmBRd+n80BOch77aC/Aie2+bLtb3mUz t0mfIvgFW/IfzAOlGxGAR5lq9usYJVm8u+on6P2pMsLR4kyE2UVd9BPsStZr77xNdTHj xjTb6x8R+AoBfUSJaZ8zYGu2wLc6GmWG9HZA68ug8Xt374yAP8XOoOA29hdECCHhNB2l YkTFCTJoR4N/+jz3p7EEl5AlMRHR8/dM7J130yTTfbg+7SXvs+5Q4d1mgkPIOR5W9Sz9 S/Qg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=ruIlYp7zFIAs8wIjt1tFPNvsCrwLtwlsQ1v7liWgVBQ=; b=O0jzvI5SVtCgaLI/CnCIOChnUczrBDSAV0+Ni6/QQAQM3Dwthq2ne1vYVM7IXx+fql r7GEi5o8dErjNhX3H8YgcPW3A1GFvf1+GnOQWT0Db2yCwM2VKooloHNSWIxj30BA2fn1 cFgEzsZODobLn5fGE/PHL8tBuEop8+mey4aORnKZsulFWoXo1zpOH+HlQAdytH/UCo0B 3HqGoT6ALt6Plj5bCw9zh/xlWofuku63v3LsJ0xqD94VwE+4qqU77AIPgNNUjYIW56NF 2bgPrY4aa0iGyasXt1oCiGhwGB2V3Ze6udGz7eGIFk0+lbj7IYpo1W+gX9mK6t5Ue6pY wHbA== X-Gm-Message-State: APf1xPCyPHnHgdprnI+TkDZemHfOCZjFgN02s26x7lif3cCA0hyPqb6m TnQ7YyIptg2/5h1x/RB/aJI= X-Google-Smtp-Source: AH8x227CGoueyw9rrb7dMON/LP0bNIKdfqjLyWOTIkRPJRgeeGdekXjwI3zYyD6VkZR/6/urNRvS1Q== X-Received: by 10.36.125.8 with SMTP id b8mr6004051itc.149.1518450792612; Mon, 12 Feb 2018 07:53:12 -0800 (PST) Received: from wcrdsk1072.ad.wabtec.com ([216.243.219.251]) by smtp.gmail.com with ESMTPSA id b41sm11731271iod.30.2018.02.12.07.53.11 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 12 Feb 2018 07:53:11 -0800 (PST) From: Ben Gardner To: Jarkko Nikula , linux-i2c@vger.kernel.org Cc: Ben Gardner , Andy Shevchenko , Mika Westerberg Subject: [PATCH] i2c: designware: Fix failure on baytrail Date: Mon, 12 Feb 2018 09:52:44 -0600 Message-Id: <1518450764-6652-1-git-send-email-gardner.ben@gmail.com> X-Mailer: git-send-email 2.7.4 Sender: linux-i2c-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-i2c@vger.kernel.org The I2C driver for my Atom E3845 board has been broken since 4.9. My board has two I2C devices on a bus that are declared via ACPI. At startup, both drivers attempt to access the devices at the same time, resulting in two back-to-back I2C transactions initiated by the kernel. The second transaction fails. The root issue is that the I2C port takes a while to enable and somewhere along the way, the 'enable-and-wait' approach to enabling the adapter was changed to 'enable'. That caused the driver and hardware to get out of sync and fail. These kernel logs show up whenever an I2C transaction is attempted after this failure. i2c-designware-pci 0000:00:18.3: timeout in disabling adapter i2c-designware-pci 0000:00:18.3: timeout waiting for bus ready The driver is unable to recover the bus at this point, but that is a separate issue. This patch has been tested on 4.9. Signed-off-by: Ben Gardner --- drivers/i2c/busses/i2c-designware-core.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/i2c/busses/i2c-designware-core.c b/drivers/i2c/busses/i2c-designware-core.c index b403fa5..980e5a1 100644 --- a/drivers/i2c/busses/i2c-designware-core.c +++ b/drivers/i2c/busses/i2c-designware-core.c @@ -509,7 +509,7 @@ static void i2c_dw_xfer_init(struct dw_i2c_dev *dev) i2c_dw_disable_int(dev); /* Enable the adapter */ - __i2c_dw_enable(dev, true); + __i2c_dw_enable_and_wait(dev, true); /* Clear and enable interrupts */ dw_readl(dev, DW_IC_CLR_INTR);