From patchwork Sun Jan 1 20:14:01 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hans de Goede X-Patchwork-Id: 710064 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3tsBHm6XtRz9sCG for ; Mon, 2 Jan 2017 07:14:12 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932398AbdAAUOL (ORCPT ); Sun, 1 Jan 2017 15:14:11 -0500 Received: from mx1.redhat.com ([209.132.183.28]:32982 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932229AbdAAUOL (ORCPT ); Sun, 1 Jan 2017 15:14:11 -0500 Received: from int-mx14.intmail.prod.int.phx2.redhat.com (int-mx14.intmail.prod.int.phx2.redhat.com [10.5.11.27]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id A6ED58553C; Sun, 1 Jan 2017 20:14:11 +0000 (UTC) Received: from shalem.localdomain.com (vpn1-7-169.ams2.redhat.com [10.36.7.169]) by int-mx14.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id v01KE5Hl015468; Sun, 1 Jan 2017 15:14:10 -0500 From: Hans de Goede To: Jarkko Nikula , Len Brown Cc: Jani Nikula , =?UTF-8?q?Ville=20Syrj=C3=A4l=C3=A4?= , "russianneuromancer @ ya . ru" , linux-i2c@vger.kernel.org, intel-gfx , Hans de Goede Subject: [RFC 2/4] i2c: designware-baytrail: Take punit lock on bus acquire Date: Sun, 1 Jan 2017 21:14:01 +0100 Message-Id: <20170101201403.12132-3-hdegoede@redhat.com> In-Reply-To: <20170101201403.12132-1-hdegoede@redhat.com> References: <20170101201403.12132-1-hdegoede@redhat.com> X-Scanned-By: MIMEDefang 2.68 on 10.5.11.27 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.28]); Sun, 01 Jan 2017 20:14:11 +0000 (UTC) Sender: linux-i2c-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-i2c@vger.kernel.org Take the punit lock to stop others from accessing the punit while the pmic i2c bus is in use. This is necessary because accessing the punit from the kernel may result in the punit trying to access the pmic i2c bus, which results in a hang when it happens while we own the pmic i2c bus semaphore. Signed-off-by: Hans de Goede --- drivers/i2c/busses/i2c-designware-baytrail.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/drivers/i2c/busses/i2c-designware-baytrail.c b/drivers/i2c/busses/i2c-designware-baytrail.c index 3effc9a..507875d 100644 --- a/drivers/i2c/busses/i2c-designware-baytrail.c +++ b/drivers/i2c/busses/i2c-designware-baytrail.c @@ -61,6 +61,8 @@ static void reset_semaphore(struct dw_i2c_dev *dev) 0, PUNIT_SEMAPHORE_BIT)) dev_err(dev->dev, "iosf failed to reset punit semaphore during write\n"); + iosf_mbi_punit_unlock(); + pm_qos_update_request(&dev->pm_qos, PM_QOS_DEFAULT_VALUE); } @@ -86,6 +88,8 @@ static int baytrail_i2c_acquire(struct dw_i2c_dev *dev) */ pm_qos_update_request(&dev->pm_qos, 0); + iosf_mbi_punit_lock(); + /* host driver writes to side band semaphore register */ ret = iosf_mbi_write(BT_MBI_UNIT_PMC, MBI_REG_WRITE, addr, sem); if (ret) {