Received: by 2002:a05:6a10:8c0a:0:0:0:0 with SMTP id go10csp820750pxb; Thu, 21 Jan 2021 23:13:37 -0800 (PST) X-Google-Smtp-Source: ABdhPJyd25yBOJn0VAmqKYgfMxk5tlGvUFBmgRwCYCBqu8/0l/6+ZD3JF/okAeuqOU4sLjNSLw0b X-Received: by 2002:a50:bc14:: with SMTP id j20mr2101226edh.381.1611299617268; Thu, 21 Jan 2021 23:13:37 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1611299617; cv=none; d=google.com; s=arc-20160816; b=NL1KWrZoK8oFCQzEG7NFoGuuoCLYcItU7RQcmK0cI9rIF67trn0SkjhnCupuko1268 a4bP4WtqFF58JDG/J0ifCthA9ostSXhUAvLgC+Kfydi8lx0N080GVGcrESSUFtneL+Pd 0ZC9qCv8Z9YEBXxJejEl0zLAHvF85awo5BN2BSa1listI+j8hIi2LUYolIj6QmR6AasC tTN9eYDhNvJ65+APUbjfHmo/2C32r8q2O8iyF8dC3lnM6E/PpCivlep6SGgirtm/zEva x8/E/EbQ628ryiWLNDEqIw0TeRdEimgFnv03DMcPkXJxqEQ7k9Lr1JWWzuUTKqpi4T2O ZM9g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:references:in-reply-to:message-id:date:subject :cc:to:from:ironport-sdr:ironport-sdr; bh=Y6byVBURFd7XKp8UyJ0RycJOdRMQef0mKLsWPDl+7E4=; b=xI3i3bKOmXNSrhGMyOVnC1w+N0jqlb3hfvGqOTEC2NiCkFkdzs7qXR/bTWNUImccL3 4qXVdwJfZN41TOL6MeFvWlwylMJ72Yq+dRH6wucT3FK62vpulhYUUdE1/XEuxdsIwFVK /JPusqswu5Qdi/NDFeCj1KZmz7PtSZSbSoYYyJI10BGwfkDUmDFom89OK0csaiWg9mRj 5M/LyPEX76asBxYxlT8E1o3ILbejWPtxdiCy4NA/AW2rnr+9Q2x8UylU4m31ENBU3N7A CGbYy2OUuwA1UYKqa8NSdKZeawsN/jpTGM6pGJ+kZR3H6NotbCkqxhTOFm3NMLoryBOT n2Ng== ARC-Authentication-Results: i=1; mx.google.com; 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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id d18si2728478ejd.342.2021.01.21.23.13.14; Thu, 21 Jan 2021 23:13:37 -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; 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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726891AbhAVHJn (ORCPT + 99 others); Fri, 22 Jan 2021 02:09:43 -0500 Received: from mga05.intel.com ([192.55.52.43]:54246 "EHLO mga05.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726806AbhAVHJL (ORCPT ); Fri, 22 Jan 2021 02:09:11 -0500 IronPort-SDR: cZYnxwWgtp2z6yn38W0Q3M5V9VJN0rjPV8r3fK03Wugeoo1wJm7oEep7mdnYNP1090ZH1CHC+i Ls0fcjNL67Tg== X-IronPort-AV: E=McAfee;i="6000,8403,9871"; a="264221975" X-IronPort-AV: E=Sophos;i="5.79,366,1602572400"; d="scan'208";a="264221975" Received: from orsmga001.jf.intel.com ([10.7.209.18]) by fmsmga105.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 21 Jan 2021 23:06:36 -0800 IronPort-SDR: QNsZ5x96KhN6XaliDZbj1jU38zCFLPasLOcD363qhv7/Ujw45xR/KX/6Uo23ThR+nv3Khv5s2o vAOeO6RjZejw== X-IronPort-AV: E=Sophos;i="5.79,366,1602572400"; d="scan'208";a="427863421" Received: from bard-ubuntu.sh.intel.com ([10.239.13.33]) by orsmga001-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 21 Jan 2021 23:06:31 -0800 From: Bard Liao To: alsa-devel@alsa-project.org, vkoul@kernel.org Cc: vinod.koul@linaro.org, linux-kernel@vger.kernel.org, tiwai@suse.de, broonie@kernel.org, gregkh@linuxfoundation.org, jank@cadence.com, srinivas.kandagatla@linaro.org, rander.wang@linux.intel.com, ranjani.sridharan@linux.intel.com, hui.wang@canonical.com, pierre-louis.bossart@linux.intel.com, sanyog.r.kale@intel.com, bard.liao@intel.com Subject: [RESEND PATCH v2 1/9] soundwire: bus: use sdw_update_no_pm when initializing a device Date: Fri, 22 Jan 2021 15:06:26 +0800 Message-Id: <20210122070634.12825-2-yung-chuan.liao@linux.intel.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20210122070634.12825-1-yung-chuan.liao@linux.intel.com> References: <20210122070634.12825-1-yung-chuan.liao@linux.intel.com> Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Pierre-Louis Bossart When a Slave device is resumed, it may resume the bus and restart the enumeration. During that process, we absolutely don't want to call regular read/write routines which will wait for the resume to complete, otherwise a deadlock occurs. Fixes: 60ee9be25571 ('soundwire: bus: add PM/no-PM versions of read/write functions') Signed-off-by: Pierre-Louis Bossart Reviewed-by: Rander Wang Signed-off-by: Bard Liao --- drivers/soundwire/bus.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/drivers/soundwire/bus.c b/drivers/soundwire/bus.c index d1e8c3a54976..60c42508c6c6 100644 --- a/drivers/soundwire/bus.c +++ b/drivers/soundwire/bus.c @@ -489,6 +489,18 @@ sdw_read_no_pm(struct sdw_slave *slave, u32 addr) return buf; } +static int sdw_update_no_pm(struct sdw_slave *slave, u32 addr, u8 mask, u8 val) +{ + int tmp; + + tmp = sdw_read_no_pm(slave, addr); + if (tmp < 0) + return tmp; + + tmp = (tmp & ~mask) | val; + return sdw_write_no_pm(slave, addr, tmp); +} + /** * sdw_nread() - Read "n" contiguous SDW Slave registers * @slave: SDW Slave @@ -1256,7 +1268,7 @@ static int sdw_initialize_slave(struct sdw_slave *slave) val = slave->prop.scp_int1_mask; /* Enable SCP interrupts */ - ret = sdw_update(slave, SDW_SCP_INTMASK1, val, val); + ret = sdw_update_no_pm(slave, SDW_SCP_INTMASK1, val, val); if (ret < 0) { dev_err(slave->bus->dev, "SDW_SCP_INTMASK1 write failed:%d\n", ret); @@ -1271,7 +1283,7 @@ static int sdw_initialize_slave(struct sdw_slave *slave) val = prop->dp0_prop->imp_def_interrupts; val |= SDW_DP0_INT_PORT_READY | SDW_DP0_INT_BRA_FAILURE; - ret = sdw_update(slave, SDW_DP0_INTMASK, val, val); + ret = sdw_update_no_pm(slave, SDW_DP0_INTMASK, val, val); if (ret < 0) dev_err(slave->bus->dev, "SDW_DP0_INTMASK read failed:%d\n", ret); -- 2.17.1