From patchwork Thu May 18 02:41:17 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bard Liao X-Patchwork-Id: 95614 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b0ea:0:b0:3b6:4342:cba0 with SMTP id b10csp187972vqo; Wed, 17 May 2023 19:21:39 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ6DF8ANEnLPFOYlPzOKak2t/5FYTlGLNM6mmDNjgodta440vL3rnsLBZ4y1eXJdYcuUgwv9 X-Received: by 2002:a05:6a20:d68b:b0:104:2896:a61 with SMTP id it11-20020a056a20d68b00b0010428960a61mr473420pzb.19.1684376499050; Wed, 17 May 2023 19:21:39 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1684376499; cv=none; d=google.com; s=arc-20160816; b=0iKOm3JUFdiJfuhHnGYQlmsq9UmXTDKjOxOTRZfXulS/dO5aLodUXFuciYen2OHRSK C1pm7URM2UACigJwyWr4/jhrEJnxNBeQvLQQt6GvvCwy6HkFCf9XPFtNKMdoTxULWt6O MjLJGVEO3+4c+WqPTYOVrr0z8miglbBK0aPkxQZrq2/wCf2atFGCMPY3npkVwQPGCr7Z 613qmjiOYc8pQLVBDxM+XAvKSNGxFdjrgjhKM4cpA25PGOCSx/iDorAqMjYfoZoULow5 VY58G1efeXLFmWLVOBgqjMdEAcp8e7LehWI99pWwEqK9b6GUwB0sRACVRgmg/2l//tHg yWFA== 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=SBds6CZHx4Yl4tjeqtqzB50XAeABkejunCpR7anzKRo=; b=MkQO5foP7kvq47+w0nzto7dl7IzYLhuTnfMLMI3Qnf+yQnQJ3Evxd61QhZKW9JUJEt 9viQNLD0lvsn5TXgEKpUbZ/OaWMWB/YIAScdGR3oDNNyZcAov+Ggy9ZOascKnQ0Xg2As jOUMGHRkmTTiJK+GPOW3hfbaWO0o6CwVeUsdD6GVM5dymYHvqiq7UrYBNXr7swgveMXH NMk28wu02WykmoQlJjoVnmAZ9wtTzwF0Vkv6HQ/vxYdij9NbX23CiPmrx85ydTqqC92T Yi7BbMYCRwQ9FmLk925nZtXb7gLbqctVxpOKDggYkGAGUPOwde6V9QZ3DoTYM5Q8Tco8 +sIQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=j8RwnUUZ; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id l4-20020a17090a72c400b0025085980e07si545517pjk.110.2023.05.17.19.21.24; Wed, 17 May 2023 19:21:39 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=j8RwnUUZ; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229723AbjERCUi (ORCPT + 99 others); Wed, 17 May 2023 22:20:38 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57508 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229563AbjERCUg (ORCPT ); Wed, 17 May 2023 22:20:36 -0400 Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 14C192137 for ; Wed, 17 May 2023 19:20:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1684376435; x=1715912435; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=sNFf0anZ290+Br3dbHkevwq9kWheG2VgMEYEnF9HzNg=; b=j8RwnUUZkGFbcmwaec1KCL+3WVDFCHCE/HF0L9FyFLbaGbfa8h8jKPkt 2ls4VFo6KjIDASR+6AKmDAxv9DiXpBz/ubljbIIafnNRLP1shDMw2uDpw HOH0ZcU1hIgP2Fe4acdZhvXPeUw+4OLT5XvAtCWqejKB16j3Q8CQ+TPPH BzPs071H2H0iyUtCKbnP8dQsMMQpA8wxVQqtPIniWY2xCP+zUuxtmseEw mmOQSRp5WbBWit0bP5JA2odpvjt0nLUN5Hrv6kEWxDstfxlyIRDcaET/k /3rjogPuFVYBsrZwHUu2UrqAzklOb4HWdJbG2rTQBO7SxhI1TCFzENxHT Q==; X-IronPort-AV: E=McAfee;i="6600,9927,10713"; a="336504765" X-IronPort-AV: E=Sophos;i="5.99,284,1677571200"; d="scan'208";a="336504765" Received: from orsmga004.jf.intel.com ([10.7.209.38]) by orsmga106.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 17 May 2023 19:20:34 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10713"; a="826195213" X-IronPort-AV: E=Sophos;i="5.99,284,1677571200"; d="scan'208";a="826195213" Received: from bard-ubuntu.sh.intel.com ([10.239.185.57]) by orsmga004-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 17 May 2023 19:20:33 -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/3] soundwire: intel_bus_common: enable interrupts last Date: Thu, 18 May 2023 10:41:17 +0800 Message-Id: <20230518024119.164160-2-yung-chuan.liao@linux.intel.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230518024119.164160-1-yung-chuan.liao@linux.intel.com> References: <20230518024119.164160-1-yung-chuan.liao@linux.intel.com> MIME-Version: 1.0 X-Spam-Status: No, score=-2.0 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_EF,SPF_HELO_NONE,SPF_NONE, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1766196772003346560?= X-GMAIL-MSGID: =?utf-8?q?1766196772003346560?= From: Pierre-Louis Bossart It's not clear why we enabled interrupts in the Cadence IP first. The logical programming sequence should be to first start the bus, and only second to enable the interrupts. Signed-off-by: Pierre-Louis Bossart Reviewed-by: Rander Wang Signed-off-by: Bard Liao --- drivers/soundwire/intel_bus_common.c | 61 +++++++++++++--------------- 1 file changed, 28 insertions(+), 33 deletions(-) diff --git a/drivers/soundwire/intel_bus_common.c b/drivers/soundwire/intel_bus_common.c index f180e3bea989..901d4f5736c1 100644 --- a/drivers/soundwire/intel_bus_common.c +++ b/drivers/soundwire/intel_bus_common.c @@ -16,12 +16,6 @@ int intel_start_bus(struct sdw_intel *sdw) struct sdw_bus *bus = &cdns->bus; int ret; - ret = sdw_cdns_enable_interrupt(cdns, true); - if (ret < 0) { - dev_err(dev, "%s: cannot enable interrupts: %d\n", __func__, ret); - return ret; - } - /* * follow recommended programming flows to avoid timeouts when * gsync is enabled @@ -32,30 +26,33 @@ int intel_start_bus(struct sdw_intel *sdw) ret = sdw_cdns_init(cdns); if (ret < 0) { dev_err(dev, "%s: unable to initialize Cadence IP: %d\n", __func__, ret); - goto err_interrupt; + return ret; } ret = sdw_cdns_exit_reset(cdns); if (ret < 0) { dev_err(dev, "%s: unable to exit bus reset sequence: %d\n", __func__, ret); - goto err_interrupt; + return ret; } if (bus->multi_link) { ret = sdw_intel_sync_go(sdw); if (ret < 0) { dev_err(dev, "%s: sync go failed: %d\n", __func__, ret); - goto err_interrupt; + return ret; } } + + ret = sdw_cdns_enable_interrupt(cdns, true); + if (ret < 0) { + dev_err(dev, "%s: cannot enable interrupts: %d\n", __func__, ret); + return ret; + } + sdw_cdns_check_self_clearing_bits(cdns, __func__, true, INTEL_MASTER_RESET_ITERATIONS); return 0; - -err_interrupt: - sdw_cdns_enable_interrupt(cdns, false); - return ret; } int intel_start_bus_after_reset(struct sdw_intel *sdw) @@ -86,12 +83,6 @@ int intel_start_bus_after_reset(struct sdw_intel *sdw) status = SDW_UNATTACH_REQUEST_MASTER_RESET; sdw_clear_slave_status(bus, status); - ret = sdw_cdns_enable_interrupt(cdns, true); - if (ret < 0) { - dev_err(dev, "cannot enable interrupts during resume\n"); - return ret; - } - /* * follow recommended programming flows to avoid * timeouts when gsync is enabled @@ -115,31 +106,36 @@ int intel_start_bus_after_reset(struct sdw_intel *sdw) ret = sdw_cdns_clock_restart(cdns, !clock_stop0); if (ret < 0) { dev_err(dev, "unable to restart clock during resume\n"); - goto err_interrupt; + if (!clock_stop0) + sdw_cdns_enable_interrupt(cdns, false); + return ret; } if (!clock_stop0) { ret = sdw_cdns_exit_reset(cdns); if (ret < 0) { dev_err(dev, "unable to exit bus reset sequence during resume\n"); - goto err_interrupt; + return ret; } if (bus->multi_link) { ret = sdw_intel_sync_go(sdw); if (ret < 0) { dev_err(sdw->cdns.dev, "sync go failed during resume\n"); - goto err_interrupt; + return ret; } } + + ret = sdw_cdns_enable_interrupt(cdns, true); + if (ret < 0) { + dev_err(dev, "cannot enable interrupts during resume\n"); + return ret; + } + } sdw_cdns_check_self_clearing_bits(cdns, __func__, true, INTEL_MASTER_RESET_ITERATIONS); return 0; - -err_interrupt: - sdw_cdns_enable_interrupt(cdns, false); - return ret; } void intel_check_clock_stop(struct sdw_intel *sdw) @@ -158,16 +154,15 @@ int intel_start_bus_after_clock_stop(struct sdw_intel *sdw) struct sdw_cdns *cdns = &sdw->cdns; int ret; - ret = sdw_cdns_enable_interrupt(cdns, true); - if (ret < 0) { - dev_err(dev, "%s: cannot enable interrupts: %d\n", __func__, ret); - return ret; - } - ret = sdw_cdns_clock_restart(cdns, false); if (ret < 0) { dev_err(dev, "%s: unable to restart clock: %d\n", __func__, ret); - sdw_cdns_enable_interrupt(cdns, false); + return ret; + } + + ret = sdw_cdns_enable_interrupt(cdns, true); + if (ret < 0) { + dev_err(dev, "%s: cannot enable interrupts: %d\n", __func__, ret); return ret; } From patchwork Thu May 18 02:41:18 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bard Liao X-Patchwork-Id: 95615 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b0ea:0:b0:3b6:4342:cba0 with SMTP id b10csp188088vqo; Wed, 17 May 2023 19:21:56 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ79PWnmMckwvmF3L1n+boO+MW4sraKMU9PVEd7kYUmjDEedxBsABZmUR2DCncArjUYjL1r6 X-Received: by 2002:a17:903:25c4:b0:1ae:2e08:bacb with SMTP id jc4-20020a17090325c400b001ae2e08bacbmr954515plb.10.1684376515907; Wed, 17 May 2023 19:21:55 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1684376515; cv=none; d=google.com; s=arc-20160816; b=TVQOQOvP2GSmEO6uiMD/0jS6RfWRmsNtogZ7+lihtGUjrPAclK8lIaG5Hx2HncCm7A UMPN0ldfKBpyWBOejjnu5N5lSKm7RDZKzSyeB1mR7wGUrldqZhUcWD6SW4JATRmcYNJy yVGTa/oz6hg3LQ0k7OyAGow1QD8KEdOabKV8dj0vWgIr2lp3AYqc8Rgz5zQPplOUCDdd IDHuMGwFA1UX3Z9FZ/G5dkW5x4ng3Od4CPwJxjKs7BB28ZrCqvnP+sTkiQ3WqQTxNVlL OZ9skDUhsd25yx/3cV2iTvPQVGmPq6PmSR3q88g6iDHmXIBRm+umrHqK04eEzOTZj2h4 AY4A== 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=T5/z2Zx/rxGo0Jwtebg7v7P/c4dqgLSFUvLFY3chtfA=; b=ETgFGXimGjwWASHMnL8b5e2CK9FXuEezzkxaY+xRZaeZRm/pw4z/OxgqaZUAtH0Cqi juTp8hMlccfQzbI1Elc7k97WUl1B0DqFIye3FSoalhrXxwql/K6gidot5gBKxHjEAZ+2 bobKiI2zVx+FnhscvEPscfpEODw9f+fzWWZSpxwDSsXGhxCusgAUwVUPl0RLs6RO0fkA Pilpj2VyXllBLQrfDeFcxmXxDuit14MOV/VjHpb+K/qgHkT6/fCi1Riy6BUhT+8+HVhp +0+jBkOk5mr6+ePJtjjOq5oosSuIulwxiwUDHXg1TTFdh6EKTIylM75DG2mtcBUjxUK3 gMsQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=kqXlBA4N; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id j11-20020a170902758b00b001a95929ca08si94058pll.533.2023.05.17.19.21.41; Wed, 17 May 2023 19:21:55 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=kqXlBA4N; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229814AbjERCUl (ORCPT + 99 others); Wed, 17 May 2023 22:20:41 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57518 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229699AbjERCUh (ORCPT ); Wed, 17 May 2023 22:20:37 -0400 Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 02DA1210C for ; Wed, 17 May 2023 19:20:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1684376436; x=1715912436; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=CGSJ6BYZ+N5oz7mWJkH8v8GmgIqzQ0Y1D731giuwafc=; b=kqXlBA4NXeXAonStl2JuDUh7/uOTI1/1oH9bvesm8jWMTNah2Y3ygaDq v+padkvZ6oFc98xVXcIbQUuyhzYNWkNexCmMxoTWDrqAqmFfcSv23ce43 hT9FrvrGQcR7JbUuLYpQ4L+gGinMqNWnsbDMxCyTikNFCcaRZcLP5oIQo oTmtluUl+915Ou/W29DJEg9FHW9u051dLzK5+Xl/kLy0en/zJQmQ/KVPo BnjXZeq8XmbxX+LYz98mULisV5qbJtM8AjV7NzsHC2jxTIddOHjuOteWc g4VyeLySDyuYfskqqy4izmQSK4wnJWnVpQrJe4iOsaTinjpUBR2Wir1CA Q==; X-IronPort-AV: E=McAfee;i="6600,9927,10713"; a="336504774" X-IronPort-AV: E=Sophos;i="5.99,284,1677571200"; d="scan'208";a="336504774" Received: from orsmga004.jf.intel.com ([10.7.209.38]) by orsmga106.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 17 May 2023 19:20:36 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10713"; a="826195219" X-IronPort-AV: E=Sophos;i="5.99,284,1677571200"; d="scan'208";a="826195219" Received: from bard-ubuntu.sh.intel.com ([10.239.185.57]) by orsmga004-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 17 May 2023 19:20:34 -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/3] soundwire: intel/cadence: update hardware reset sequence Date: Thu, 18 May 2023 10:41:18 +0800 Message-Id: <20230518024119.164160-3-yung-chuan.liao@linux.intel.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230518024119.164160-1-yung-chuan.liao@linux.intel.com> References: <20230518024119.164160-1-yung-chuan.liao@linux.intel.com> MIME-Version: 1.0 X-Spam-Status: No, score=-2.0 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_EF,SPF_HELO_NONE,SPF_NONE, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1766196789521104222?= X-GMAIL-MSGID: =?utf-8?q?1766196789521104222?= From: Pierre-Louis Bossart Combining hardware reset with the multi-link mode leads to a shortened hardware reset pattern observed on the bus. The updated hardware programming sequence is to first enable the clock with the sync_arm/sync_go pattern, and only in a second step to issue the hardware reset sequence. Since there is no longer a dependency between sync_arm/sync_go and hw_reset, the behavior of sdw_cdns_exit_reset() is changed to wait for the self-clearing CONFIG_UPDATE to go back to zero, Link: https://github.com/thesofproject/linux/issues/4170 Signed-off-by: Pierre-Louis Bossart Reviewed-by: Rander Wang Signed-off-by: Bard Liao --- drivers/soundwire/cadence_master.c | 31 ++++++++++++++++++------ drivers/soundwire/cadence_master.h | 3 +++ drivers/soundwire/intel_bus_common.c | 36 ++++++++++++++++++++-------- 3 files changed, 53 insertions(+), 17 deletions(-) diff --git a/drivers/soundwire/cadence_master.c b/drivers/soundwire/cadence_master.c index 39502bc75712..58686ae50bbf 100644 --- a/drivers/soundwire/cadence_master.c +++ b/drivers/soundwire/cadence_master.c @@ -283,6 +283,29 @@ static int cdns_config_update(struct sdw_cdns *cdns) return ret; } +/** + * sdw_cdns_config_update() - Update configurations + * @cdns: Cadence instance + */ +void sdw_cdns_config_update(struct sdw_cdns *cdns) +{ + /* commit changes */ + cdns_writel(cdns, CDNS_MCP_CONFIG_UPDATE, CDNS_MCP_CONFIG_UPDATE_BIT); +} +EXPORT_SYMBOL(sdw_cdns_config_update); + +/** + * sdw_cdns_config_update_set_wait() - wait until configuration update bit is self-cleared + * @cdns: Cadence instance + */ +int sdw_cdns_config_update_set_wait(struct sdw_cdns *cdns) +{ + /* the hardware recommendation is to wait at least 300us */ + return cdns_set_wait(cdns, CDNS_MCP_CONFIG_UPDATE, + CDNS_MCP_CONFIG_UPDATE_BIT, 0); +} +EXPORT_SYMBOL(sdw_cdns_config_update_set_wait); + /* * debugfs */ @@ -1116,13 +1139,7 @@ int sdw_cdns_exit_reset(struct sdw_cdns *cdns) CDNS_MCP_CONTROL_HW_RST); /* commit changes */ - cdns_updatel(cdns, CDNS_MCP_CONFIG_UPDATE, - CDNS_MCP_CONFIG_UPDATE_BIT, - CDNS_MCP_CONFIG_UPDATE_BIT); - - /* don't wait here */ - return 0; - + return cdns_config_update(cdns); } EXPORT_SYMBOL(sdw_cdns_exit_reset); diff --git a/drivers/soundwire/cadence_master.h b/drivers/soundwire/cadence_master.h index 27c56274217f..8e328ba01c0a 100644 --- a/drivers/soundwire/cadence_master.h +++ b/drivers/soundwire/cadence_master.h @@ -197,4 +197,7 @@ int cdns_set_sdw_stream(struct snd_soc_dai *dai, void sdw_cdns_check_self_clearing_bits(struct sdw_cdns *cdns, const char *string, bool initial_delay, int reset_iterations); +void sdw_cdns_config_update(struct sdw_cdns *cdns); +int sdw_cdns_config_update_set_wait(struct sdw_cdns *cdns); + #endif /* __SDW_CADENCE_H */ diff --git a/drivers/soundwire/intel_bus_common.c b/drivers/soundwire/intel_bus_common.c index 901d4f5736c1..be0c93106fc8 100644 --- a/drivers/soundwire/intel_bus_common.c +++ b/drivers/soundwire/intel_bus_common.c @@ -29,11 +29,7 @@ int intel_start_bus(struct sdw_intel *sdw) return ret; } - ret = sdw_cdns_exit_reset(cdns); - if (ret < 0) { - dev_err(dev, "%s: unable to exit bus reset sequence: %d\n", __func__, ret); - return ret; - } + sdw_cdns_config_update(cdns); if (bus->multi_link) { ret = sdw_intel_sync_go(sdw); @@ -43,6 +39,18 @@ int intel_start_bus(struct sdw_intel *sdw) } } + ret = sdw_cdns_config_update_set_wait(cdns); + if (ret < 0) { + dev_err(dev, "%s: CONFIG_UPDATE BIT still set\n", __func__); + return ret; + } + + ret = sdw_cdns_exit_reset(cdns); + if (ret < 0) { + dev_err(dev, "%s: unable to exit bus reset sequence: %d\n", __func__, ret); + return ret; + } + ret = sdw_cdns_enable_interrupt(cdns, true); if (ret < 0) { dev_err(dev, "%s: cannot enable interrupts: %d\n", __func__, ret); @@ -112,11 +120,7 @@ int intel_start_bus_after_reset(struct sdw_intel *sdw) } if (!clock_stop0) { - ret = sdw_cdns_exit_reset(cdns); - if (ret < 0) { - dev_err(dev, "unable to exit bus reset sequence during resume\n"); - return ret; - } + sdw_cdns_config_update(cdns); if (bus->multi_link) { ret = sdw_intel_sync_go(sdw); @@ -126,6 +130,18 @@ int intel_start_bus_after_reset(struct sdw_intel *sdw) } } + ret = sdw_cdns_config_update_set_wait(cdns); + if (ret < 0) { + dev_err(dev, "%s: CONFIG_UPDATE BIT still set\n", __func__); + return ret; + } + + ret = sdw_cdns_exit_reset(cdns); + if (ret < 0) { + dev_err(dev, "unable to exit bus reset sequence during resume\n"); + return ret; + } + ret = sdw_cdns_enable_interrupt(cdns, true); if (ret < 0) { dev_err(dev, "cannot enable interrupts during resume\n"); From patchwork Thu May 18 02:41:19 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bard Liao X-Patchwork-Id: 95616 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b0ea:0:b0:3b6:4342:cba0 with SMTP id b10csp188171vqo; Wed, 17 May 2023 19:22:05 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ69gErn+cFBLhBgQq5E89xcx2eC1XQv7/d7GeButaOKlCB9PMbcYYm1/UDmrLKUODDd4rm2 X-Received: by 2002:a17:903:1206:b0:1ad:55e6:16fe with SMTP id l6-20020a170903120600b001ad55e616femr1216802plh.15.1684376525520; Wed, 17 May 2023 19:22:05 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1684376525; cv=none; d=google.com; s=arc-20160816; b=tp6lKx3ImknKX+UDnRNY/ugTo0ffTBNYY+dQZE7WcLKPzXlk7n+EqwCyb5mbFst3nS s8Dmn8EVYXDJ4eJfk0Gq6mSjVrVN/PNopPt0xtyZk/AWVIljjqlOkN6g2ADJYrV3x4bL wa3vgkQYm3iSQLXCHhOODj6hll+magarupxyQl1Q6ox/S6GnJ0mWQ8nYd04n2GbT0/u0 KYgufgBBSfHlPirES5tUxl68JaP+BCXaF0TpYSy/T4uXH6VlfrUS/rIBCPN8go9MqZpC xSTgSeIEMEkbjrMjfAnioeTQ6DXL/u+LdEfHaR7+KHZ3rPg4wHjHclXUTqcSDIyehV2y 2XXA== 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=531d4qj0XWfcAD/t1bH3mST8ltUsTWue6JUJG4gf6Ms=; b=bCn/XZ4tv6pGplKI4R8IbwRIHZOvDdSTtM0peZe9ELA+3MDB8XV3IRBo9xFEAKCMAB zVD0Ds53cmpxcZ0z2kaiZ/ko3RMv2GHQO8sFUpvVP7GEkD+qlzkr30WHSx/r9KGFYTD2 1OXpVFiXy9aI0Vrq02gh2SrwTE2w2e3fxXamyak/Ew40TFwSZr00UYdK/1Mzd+RlaRXW v2wI0uaQlCeVJetmebwUwyu9QVwA7EQj/D5vOvmq1e+Sl9os0LCH96LbL8U2ga9//qNH RaBUqVyRK99WeXQ0dcT+dWtDVI+24QnMB5DVR9aNOCIm2Kgjn5p3Gbb8cbu0CDCMOuVB F70Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=AJB4T5uN; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id n8-20020a170903110800b001adb600d4dcsi85477plh.607.2023.05.17.19.21.51; Wed, 17 May 2023 19:22:05 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=AJB4T5uN; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229843AbjERCUo (ORCPT + 99 others); Wed, 17 May 2023 22:20:44 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57530 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229563AbjERCUj (ORCPT ); Wed, 17 May 2023 22:20:39 -0400 Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E718A2139 for ; Wed, 17 May 2023 19:20:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1684376438; x=1715912438; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=hC2J1w9UVcDCukApVbW8vB9WSP4jIPusaB43jqHzChY=; b=AJB4T5uN14PWcqj0WvIB7OpjEgUDF/0yt2JCx3spssyrX2iW+oetL3Jx mihPA7H7CXbbX4bF8Rx4qrvmq6sDKPnEqsaC7sEMy4qpVCDj0RuDbMXzo fO6pP3kghw2qaUxcEeCfu+uZ2HwiFyOguvkJznMWiRD3oX/J8A1VUrRjF hCViObjJVywdkwbtMPRpuLI3O1WLIAwD/xTAPrseKiktI1OZHOR1E7CFH jPYb/2Kh/Zew9wztbgJWUeW/LEkjiDEX/e7yGPLSIgEGfij021dtISQnq S+H5ltn8WOQfpdWedssOIk9weZ3S6Q09P07zVjlnZ8tqsOVDiheYx1YH6 w==; X-IronPort-AV: E=McAfee;i="6600,9927,10713"; a="336504781" X-IronPort-AV: E=Sophos;i="5.99,284,1677571200"; d="scan'208";a="336504781" Received: from orsmga004.jf.intel.com ([10.7.209.38]) by orsmga106.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 17 May 2023 19:20:38 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10713"; a="826195226" X-IronPort-AV: E=Sophos;i="5.99,284,1677571200"; d="scan'208";a="826195226" Received: from bard-ubuntu.sh.intel.com ([10.239.185.57]) by orsmga004-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 17 May 2023 19:20:36 -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 3/3] soundwire: cadence: revisit parity injection Date: Thu, 18 May 2023 10:41:19 +0800 Message-Id: <20230518024119.164160-4-yung-chuan.liao@linux.intel.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230518024119.164160-1-yung-chuan.liao@linux.intel.com> References: <20230518024119.164160-1-yung-chuan.liao@linux.intel.com> MIME-Version: 1.0 X-Spam-Status: No, score=-2.0 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_EF,SPF_HELO_NONE,SPF_NONE, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1766196799532561823?= X-GMAIL-MSGID: =?utf-8?q?1766196799532561823?= From: Pierre-Louis Bossart We want to wait for the CONFIG_UPDATE bit to clear before doing something else. Signed-off-by: Pierre-Louis Bossart Reviewed-by: Rander Wang Signed-off-by: Bard Liao --- drivers/soundwire/cadence_master.c | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/drivers/soundwire/cadence_master.c b/drivers/soundwire/cadence_master.c index 58686ae50bbf..0efc1c3bee5f 100644 --- a/drivers/soundwire/cadence_master.c +++ b/drivers/soundwire/cadence_master.c @@ -456,9 +456,9 @@ static int cdns_parity_error_injection(void *data, u64 value) CDNS_IP_MCP_CMDCTRL_INSERT_PARITY_ERR); /* commit changes */ - cdns_updatel(cdns, CDNS_MCP_CONFIG_UPDATE, - CDNS_MCP_CONFIG_UPDATE_BIT, - CDNS_MCP_CONFIG_UPDATE_BIT); + ret = cdns_clear_bit(cdns, CDNS_MCP_CONFIG_UPDATE, CDNS_MCP_CONFIG_UPDATE_BIT); + if (ret < 0) + goto unlock; /* do a broadcast dummy read to avoid bus clashes */ ret = sdw_bread_no_pm_unlocked(&cdns->bus, 0xf, SDW_SCP_DEVID_0); @@ -470,16 +470,17 @@ static int cdns_parity_error_injection(void *data, u64 value) 0); /* commit changes */ - cdns_updatel(cdns, CDNS_MCP_CONFIG_UPDATE, - CDNS_MCP_CONFIG_UPDATE_BIT, - CDNS_MCP_CONFIG_UPDATE_BIT); + ret = cdns_clear_bit(cdns, CDNS_MCP_CONFIG_UPDATE, CDNS_MCP_CONFIG_UPDATE_BIT); + if (ret < 0) + goto unlock; + /* Userspace changed the hardware state behind the kernel's back */ + add_taint(TAINT_USER, LOCKDEP_STILL_OK); + +unlock: /* Continue bus operation with parity error injection disabled */ mutex_unlock(&bus->bus_lock); - /* Userspace changed the hardware state behind the kernel's back */ - add_taint(TAINT_USER, LOCKDEP_STILL_OK); - /* * allow Master device to enter pm_runtime suspend. This may * also result in Slave devices suspending.