From nobody Sun Feb 8 13:28:15 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id A2E40C001DF for ; Thu, 3 Aug 2023 06:25:06 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233243AbjHCGZE (ORCPT ); Thu, 3 Aug 2023 02:25:04 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41590 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232377AbjHCGY6 (ORCPT ); Thu, 3 Aug 2023 02:24:58 -0400 Received: from mgamail.intel.com (unknown [192.55.52.151]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id CB3F51724 for ; Wed, 2 Aug 2023 23:24:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1691043895; x=1722579895; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=W+Eg75sBaZEQWO5+zNepejl6stQbwCVziILn+2POhMQ=; b=IWsZMFcmSwwS/yoiI3VOdPbh3xyQRWA3JZ+E+6LnKDjZfrQTGJMnyh31 CNAmaDSHRbbbH2Uwkci1JBPY1fLUGeNbnXJen/u/Ka6GkaBmXoycZR0sK mfNrUroFUcMWseSMvaePgEmMk3KXVl9VDTz2+jUype6MhVVLZieyB192r 7wmKxpBH93RGFa6rQzFq/1+7oHgP7QshQxmkK8JYVL08SjiOwpD3ncuVf ZNLA1XEEEEKh9EGpuiNzMlK2Mk4Viak0L1x4V3ee/6Nna3HG5FKZTTNbh 59SCrrOrSK3l2ctHpwJKeaRiDUEV88mRWaNmJSkEe2D+Uii9+ypwkqkMf A==; X-IronPort-AV: E=McAfee;i="6600,9927,10790"; a="350075275" X-IronPort-AV: E=Sophos;i="6.01,251,1684825200"; d="scan'208";a="350075275" Received: from fmsmga005.fm.intel.com ([10.253.24.32]) by fmsmga107.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 02 Aug 2023 23:24:00 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10790"; a="1060117891" X-IronPort-AV: E=Sophos;i="6.01,251,1684825200"; d="scan'208";a="1060117891" Received: from bard-ubuntu.sh.intel.com ([10.239.185.57]) by fmsmga005-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 02 Aug 2023 23:23:59 -0700 From: Bard Liao To: alsa-devel@alsa-project.org, vkoul@kernel.org Cc: vinod.koul@linaro.org, linux-kernel@vger.kernel.org, pierre-louis.bossart@linux.intel.com, bard.liao@intel.com Subject: [PATCH 1/2] soundwire: intel_auxdevice: enable pm_runtime earlier on startup Date: Thu, 3 Aug 2023 14:52:19 +0800 Message-Id: <20230803065220.3823269-2-yung-chuan.liao@linux.intel.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230803065220.3823269-1-yung-chuan.liao@linux.intel.com> References: <20230803065220.3823269-1-yung-chuan.liao@linux.intel.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" From: Pierre-Louis Bossart As soon as the bus starts, physical peripheral devices may report as ATTACHED and set their status with pm_runtime_set_active() in their update_status()/io_init(). This is problematic with the existing code, since the parent pm_runtime status is changed to "active" after starting the bus. This creates a time window where the pm_runtime framework can report an issue, e.g. "rt711 sdw:0:025d:0711:00: runtime PM trying to activate child device sdw:0:025d:0711:00 but parent (sdw-master-0) is not active" This patch enables runtime_pm earlier to make sure the auxiliary device is pm_runtime active after powering-up, but before starting the bus. This problem was exposed by recent changes in the timing of the bus reset, but was present in this driver since we introduced pm_runtime support. Closes: https://github.com/thesofproject/linux/issues/4328 Signed-off-by: Pierre-Louis Bossart Reviewed-by: Ranjani Sridharan Reviewed-by: Rander Wang Signed-off-by: Bard Liao Tested-by: Charles Keepax --- drivers/soundwire/intel_auxdevice.c | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/drivers/soundwire/intel_auxdevice.c b/drivers/soundwire/intel_= auxdevice.c index 0daa6ca9a224..f51c776eeeff 100644 --- a/drivers/soundwire/intel_auxdevice.c +++ b/drivers/soundwire/intel_auxdevice.c @@ -248,13 +248,6 @@ int intel_link_startup(struct auxiliary_device *auxdev) =20 sdw_intel_debugfs_init(sdw); =20 - /* start bus */ - ret =3D sdw_intel_start_bus(sdw); - if (ret) { - dev_err(dev, "bus start failed: %d\n", ret); - goto err_power_up; - } - /* Enable runtime PM */ if (!(link_flags & SDW_INTEL_MASTER_DISABLE_PM_RUNTIME)) { pm_runtime_set_autosuspend_delay(dev, @@ -266,6 +259,13 @@ int intel_link_startup(struct auxiliary_device *auxdev) pm_runtime_enable(dev); } =20 + /* start bus */ + ret =3D sdw_intel_start_bus(sdw); + if (ret) { + dev_err(dev, "bus start failed: %d\n", ret); + goto err_pm_runtime; + } + clock_stop_quirks =3D sdw->link_res->clock_stop_quirks; if (clock_stop_quirks & SDW_INTEL_CLK_STOP_NOT_ALLOWED) { /* @@ -293,12 +293,17 @@ int intel_link_startup(struct auxiliary_device *auxde= v) * with a delay. A more complete solution would require the * definition of Master properties. */ - if (!(link_flags & SDW_INTEL_MASTER_DISABLE_PM_RUNTIME_IDLE)) + if (!(link_flags & SDW_INTEL_MASTER_DISABLE_PM_RUNTIME_IDLE)) { + pm_runtime_mark_last_busy(dev); pm_runtime_idle(dev); + } =20 sdw->startup_done =3D true; return 0; =20 +err_pm_runtime: + if (!(link_flags & SDW_INTEL_MASTER_DISABLE_PM_RUNTIME)) + pm_runtime_disable(dev); err_power_up: sdw_intel_link_power_down(sdw); err_init: --=20 2.25.1 From nobody Sun Feb 8 13:28:15 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 80610C001E0 for ; Thu, 3 Aug 2023 06:25:20 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233295AbjHCGZT (ORCPT ); Thu, 3 Aug 2023 02:25:19 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41740 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233250AbjHCGZF (ORCPT ); Thu, 3 Aug 2023 02:25:05 -0400 Received: from mgamail.intel.com (unknown [192.55.52.151]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 19CF630D2 for ; Wed, 2 Aug 2023 23:25:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1691043903; x=1722579903; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=vGIa0chkbTg20wwAn5D+PJYLJpAtUvruvhIslT2Po64=; b=FuVk6Fcz1N773jST5g9oa6AGJ4zuVIiCu2ydTwXkpnnZDWGN2J2cDrff /4kbN96UTf0Z+06LW8dU/d+Qc7aYuZamWnOxzVbreni6EUQO14opbzxgx elpw1d3Zpsz8WUs1SfHHXaAeWlSwGc8FDOdSzeX72w473FjnZJxAHO0Q9 e6zN/T9WlPrru90AXvsGONBJoMOBjJZ4vMKBTwv0A3NGJavgDnetYXL+z rKvPTTLM/ZwP78o5nwY3iFv0kpIUKS1w23MK7WOiJpqx0EJ4Yhv4pAYE1 OX0pllHEV6n30VaCKmzFzGts0Pz3mOYRxkaPWdVKQ5l8lo6qj5jxtb5jg A==; X-IronPort-AV: E=McAfee;i="6600,9927,10790"; a="350075340" X-IronPort-AV: E=Sophos;i="6.01,251,1684825200"; d="scan'208";a="350075340" Received: from fmsmga005.fm.intel.com ([10.253.24.32]) by fmsmga107.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 02 Aug 2023 23:24:03 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10790"; a="1060117900" X-IronPort-AV: E=Sophos;i="6.01,251,1684825200"; d="scan'208";a="1060117900" Received: from bard-ubuntu.sh.intel.com ([10.239.185.57]) by fmsmga005-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 02 Aug 2023 23:24:00 -0700 From: Bard Liao To: alsa-devel@alsa-project.org, vkoul@kernel.org Cc: vinod.koul@linaro.org, linux-kernel@vger.kernel.org, pierre-louis.bossart@linux.intel.com, bard.liao@intel.com Subject: [PATCH 2/2] soundWire: intel_auxdevice: resume 'sdw-master' on startup and system resume Date: Thu, 3 Aug 2023 14:52:20 +0800 Message-Id: <20230803065220.3823269-3-yung-chuan.liao@linux.intel.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230803065220.3823269-1-yung-chuan.liao@linux.intel.com> References: <20230803065220.3823269-1-yung-chuan.liao@linux.intel.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" From: Pierre-Louis Bossart The SoundWire bus is handled with a dedicated device, which is placed between the Intel auxiliary device and peripheral devices, e.g. soundwire_intel.link.0/sdw-master-0/sdw:0:025d:0711:01 The functionality of this 'sdw-master' device is limited, specifically for pm_runtime the ASoC framework will not rely on pm_runtime_get_sync() since it does not register any components. It will only change status thanks to the parent-child relationship which guarantees that the 'sdw-master' device will be pm_runtime resumed before any peripheral device. However on startup and system resume it's possible that only the auxiliary device is pm_runtime active, and the peripheral will only become active during its io_init routine, leading to another occurrence of the error reported by the pm_runtime framework: rt711 sdw:0:025d:0711:00: runtime PM trying to activate child device sdw:0:025d:0711:00 but parent (sdw-master-0) is not active This patch suggests aligning the sdw-master device status to that of the auxiliary device. The difference between the two is completely notional and their pm_status shouldn't be different during the startup and system resume steps. This problem was exposed by recent changes in the timing of the bus reset, but was present in this driver since we introduced pm_runtime support. Closes: https://github.com/thesofproject/linux/issues/4328 Signed-off-by: Pierre-Louis Bossart Reviewed-by: Ranjani Sridharan Reviewed-by: Rander Wang Signed-off-by: Bard Liao Tested-by: Charles Keepax --- drivers/soundwire/intel_auxdevice.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/drivers/soundwire/intel_auxdevice.c b/drivers/soundwire/intel_= auxdevice.c index f51c776eeeff..91c86b46a5a1 100644 --- a/drivers/soundwire/intel_auxdevice.c +++ b/drivers/soundwire/intel_auxdevice.c @@ -257,6 +257,8 @@ int intel_link_startup(struct auxiliary_device *auxdev) =20 pm_runtime_set_active(dev); pm_runtime_enable(dev); + + pm_runtime_resume(bus->dev); } =20 /* start bus */ @@ -294,6 +296,7 @@ int intel_link_startup(struct auxiliary_device *auxdev) * definition of Master properties. */ if (!(link_flags & SDW_INTEL_MASTER_DISABLE_PM_RUNTIME_IDLE)) { + pm_runtime_mark_last_busy(bus->dev); pm_runtime_mark_last_busy(dev); pm_runtime_idle(dev); } @@ -557,6 +560,8 @@ static int __maybe_unused intel_resume(struct device *d= ev) pm_runtime_mark_last_busy(dev); pm_runtime_enable(dev); =20 + pm_runtime_resume(bus->dev); + link_flags =3D md_flags >> (bus->link_id * 8); =20 if (!(link_flags & SDW_INTEL_MASTER_DISABLE_PM_RUNTIME_IDLE)) @@ -592,6 +597,7 @@ static int __maybe_unused intel_resume(struct device *d= ev) * counters and delay the pm_runtime suspend by several * seconds, by when all enumeration should be complete. */ + pm_runtime_mark_last_busy(bus->dev); pm_runtime_mark_last_busy(dev); =20 return 0; --=20 2.25.1