Received: by 2002:a05:6a10:af89:0:0:0:0 with SMTP id iu9csp1206732pxb; Fri, 21 Jan 2022 12:14:26 -0800 (PST) X-Google-Smtp-Source: ABdhPJzo0otOZFPvZkGJea1dpqBqN5LBGcjjM1O/Amv8nFvS3pwbjVJDQFCD1azAKpJlvMJ0PacI X-Received: by 2002:a63:7251:: with SMTP id c17mr2229492pgn.579.1642796066235; Fri, 21 Jan 2022 12:14:26 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1642796066; cv=none; d=google.com; s=arc-20160816; b=yZxHjpY6M0DsIp4o9ECsN2v6enkMH4i6vbmf1XfEgtddzgZ1jReXAA7mvE68WoFiPn +C7fttoSv8ke/iH3AAQNsULZohazFiGT1vvegydyxDbaWX9cBtImCi57mxv1th2x1fo5 zJjYk+LUYQycmIyoxxvMPE9I2nSbbfb4fe77caGL/OvrnqvmxfJOKT1pSkK4kVVQlGXL +bkJBEvoEW9cH2euiSc34xQ8jJp69rpZPSpguG3bRDxeI5fb9eqy7kbTLKgFKQ55u4cC zT2nnhRmmfI1zva2eomEedeNJCsiuU2tujI5t2vflZjvlgIixmiHjZ2udTnudDOazidh bf6w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=ydaQOtsO8J3rEDVAHZkczUaWRrErRPN61zBPQ14lLEU=; b=gUtGfIdo7AI0mc1xU7gbZXXKoz0dJ8OgoWk87/vxDTnKYNcIYCZ1g1hxlGN14aThez 7DdayAbTDiPyyTGnPMdHwXQ7ibHJn4whMxtN77f4ga+k59OGviOc3p4r0ztXl/n54Xcn k/5fun545Sf5aPthGRJJouFRie0Vi5HYMVIcffP8pqfdrKleUUHDKlf+vh9QITWJPkrl 0mjz9XOpK1EGGpGtk//P3T90vx763GRhtPQ+p6Z520HF0DEoCKpyZ93JRqraKAjkNXYG zd0TL9ZsYjX8KEnyRSof1uAolnuEimbAZaadLEP7kmJOYGpOwla7m34vSLXMB8cJqJQy lztg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@semihalf-com.20210112.gappssmtp.com header.s=20210112 header.b=ImedxlUn; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id y6si9489422plg.343.2022.01.21.12.14.14; Fri, 21 Jan 2022 12:14:26 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@semihalf-com.20210112.gappssmtp.com header.s=20210112 header.b=ImedxlUn; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1357721AbiATARQ (ORCPT + 99 others); Wed, 19 Jan 2022 19:17:16 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37634 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1357671AbiATARJ (ORCPT ); Wed, 19 Jan 2022 19:17:09 -0500 Received: from mail-lf1-x135.google.com (mail-lf1-x135.google.com [IPv6:2a00:1450:4864:20::135]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 27DC5C06161C for ; Wed, 19 Jan 2022 16:17:09 -0800 (PST) Received: by mail-lf1-x135.google.com with SMTP id d3so14861834lfv.13 for ; Wed, 19 Jan 2022 16:17:09 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=semihalf-com.20210112.gappssmtp.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=ydaQOtsO8J3rEDVAHZkczUaWRrErRPN61zBPQ14lLEU=; b=ImedxlUnRg8MtRCbDmy8+q8XuGwTD5aK8RW+UItLhGVr+43NiR/0XeANuIL7WOj9ym 94Ju/uivjahx2doocsOehJSqg9UyFOayGEz346h9X3nvxUF/IIITqUT52shuRHzEZPC5 FdtjIMKCB0/zTZzVdRAq9H0E3L4i19xRTYOdMax9sNAjwjeOHLQ8dmzsLKz+wXA7KqM9 hxr4/2z/l0hO9A0r2YOLZ4iismORGYnDGaFdJOgiubqeKpikeaxqC7XxvJ4PxKWBiUNH VpNHyAaXH8hDh6jLkMtg73LKkXhMVcvX8Js8CCEcQFMehU6iO7WpG5DltpqG9FaaxrOs l45Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=ydaQOtsO8J3rEDVAHZkczUaWRrErRPN61zBPQ14lLEU=; b=QGgrOKlR+CZsELJvv/Huu2FFRnSb1ntlHIlWnnY5F0cNKXfma2sG0TCmw3x5MLd/yj FSealfw6fepeYhZcdTe0ZfMmy0QAk4Sq78sUwQAiIQbIszhpWCPCZUkjA/dgKzAcE4SZ HxfKRp1d2twI4E7mKH2FqER5AuLwy069DFFIN/3DKesG8GzM+UsFKb7vic8dg87h8wPL +55Ah9gc4iMGQqqzgD3XFJUbK9CgWuMSKe5BVrjY0hYGA6p/DK4mefo+kFUka1zlx9Ci roubJ+1hyNA8pWrkJb2cJ3GH9iPETn9F+sJvs8IBwSgKzMrU7WWlZljadWiKYSJaQZr9 JS7w== X-Gm-Message-State: AOAM530dtWi4Yc/vhUuj7BXv3AMLK4vXSq/X8X6r7AnWdzDUo7POeLxn XlFvk3uLGdGPHqNGqcPmDAuW8jUAGOy9YA== X-Received: by 2002:a2e:92c7:: with SMTP id k7mr24312200ljh.297.1642637827431; Wed, 19 Jan 2022 16:17:07 -0800 (PST) Received: from dabros-l.roam.corp.google.com ([185.157.14.92]) by smtp.gmail.com with ESMTPSA id v27sm119564lfo.243.2022.01.19.16.17.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 19 Jan 2022 16:17:07 -0800 (PST) From: Jan Dabros To: linux-kernel@vger.kernel.org, linux-i2c@vger.kernel.org, jarkko.nikula@linux.intel.com Cc: andriy.shevchenko@linux.intel.com, mika.westerberg@linux.intel.com, hdegoede@redhat.com, wsa@kernel.org, rrangel@chromium.org, mw@semihalf.com, jaz@semihalf.com, upstream@semihalf.com, jsd@semihalf.com Subject: [PATCH 1/2] i2c: designware: Add missing locks Date: Thu, 20 Jan 2022 01:16:20 +0100 Message-Id: <20220120001621.705352-2-jsd@semihalf.com> X-Mailer: git-send-email 2.34.1.703.g22d0c6ccf7-goog In-Reply-To: <20220120001621.705352-1-jsd@semihalf.com> References: <20220120001621.705352-1-jsd@semihalf.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org All accesses to controller's registers should be protected on probe, disable and xfer paths. This is needed for i2c bus controllers that are shared with but not controller by kernel. Signed-off-by: Jan Dabros --- drivers/i2c/busses/i2c-designware-common.c | 12 ++++++++++++ drivers/i2c/busses/i2c-designware-master.c | 6 ++++++ 2 files changed, 18 insertions(+) diff --git a/drivers/i2c/busses/i2c-designware-common.c b/drivers/i2c/busses/i2c-designware-common.c index bf2a4920638a..9f8574320eb2 100644 --- a/drivers/i2c/busses/i2c-designware-common.c +++ b/drivers/i2c/busses/i2c-designware-common.c @@ -578,7 +578,12 @@ int i2c_dw_set_fifo_size(struct dw_i2c_dev *dev) * Try to detect the FIFO depth if not set by interface driver, * the depth could be from 2 to 256 from HW spec. */ + ret = i2c_dw_acquire_lock(dev); + if (ret) + return ret; + ret = regmap_read(dev->map, DW_IC_COMP_PARAM_1, ¶m); + i2c_dw_release_lock(dev); if (ret) return ret; @@ -607,6 +612,11 @@ u32 i2c_dw_func(struct i2c_adapter *adap) void i2c_dw_disable(struct dw_i2c_dev *dev) { u32 dummy; + int ret; + + ret = i2c_dw_acquire_lock(dev); + if (ret) + return; /* Disable controller */ __i2c_dw_disable(dev); @@ -614,6 +624,8 @@ void i2c_dw_disable(struct dw_i2c_dev *dev) /* Disable all interrupts */ regmap_write(dev->map, DW_IC_INTR_MASK, 0); regmap_read(dev->map, DW_IC_CLR_INTR, &dummy); + + i2c_dw_release_lock(dev); } void i2c_dw_disable_int(struct dw_i2c_dev *dev) diff --git a/drivers/i2c/busses/i2c-designware-master.c b/drivers/i2c/busses/i2c-designware-master.c index 9177463c2cbb..1a4b23556db3 100644 --- a/drivers/i2c/busses/i2c-designware-master.c +++ b/drivers/i2c/busses/i2c-designware-master.c @@ -905,7 +905,13 @@ int i2c_dw_probe_master(struct dw_i2c_dev *dev) irq_flags = IRQF_SHARED | IRQF_COND_SUSPEND; } + ret = i2c_dw_acquire_lock(dev); + if (ret) + return ret; + i2c_dw_disable_int(dev); + i2c_dw_release_lock(dev); + ret = devm_request_irq(dev->dev, dev->irq, i2c_dw_isr, irq_flags, dev_name(dev->dev), dev); if (ret) { -- 2.34.1.703.g22d0c6ccf7-goog