Received: by 2002:a05:6a10:a0d1:0:0:0:0 with SMTP id j17csp146319pxa; Tue, 18 Aug 2020 19:07:35 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxRRfIVP1Zdw2ZWhs6p21LFbhWye2VhgUrQCLNEUDmOPo2NKng2KkLjoexqJ0KU7q8sGoSu X-Received: by 2002:a17:906:8286:: with SMTP id h6mr22373130ejx.341.1597802855547; Tue, 18 Aug 2020 19:07:35 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1597802855; cv=none; d=google.com; s=arc-20160816; b=UVsnTgW9v+fR/gZNmVscmBVS90DsjEkZ53lL0/TYzQzUh2cXcv8FZy9qf6YFMdIqYO MbHJ0k8vAtyzI8hRnYTFqpWAzTQpzgaf9ekwjaIM75wzv3NdaS16UwT6Ot8ZbjOH1Fuf 6Pr8M7MrtA8k0nqCQTbybkc7DZzx6XflR/qkpR+Wbxl6TgikC4+GAI1RCerGJUGWLDmG Jz0p7FBkj4mHMGKV1k1oB8zOcgnlIPXwg7oZROf06L4KWio/NscjSqRpYRFrRt5qGDi7 ijZMy7SwvN5bEloUVt4u+B2VpWFWo8Sv+pTXATip2OpWBHeoG3wHk2CLQbXFw0Jxi5o2 gqUA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:ironport-sdr:ironport-sdr; bh=rbbsqbfxRTysxPf1GzVLojfBLhN1/JElBRAJSM/lV2U=; b=mu0jCQuYK37iW0Rahv7hj0DOQ1HjNWF61dHWEtIZAOfxB1+ekZEw6jYknvGO1jwXZN HYV8oH/+4fpgFuWpBjecYzMv9WYyBmKjzW4lPCaW8mohIZKqZjEhSdHDeYlQWmiqpauD 5EdeHKkLlkzrAgTA3FOPf+c3fcA4Ib9t0WXQDwtVJduCNt0mcE8F6xeZytvLDDklpw5x b4CCEPODuNS9lP0wIK8vwwJy0J168S/p8t5EtbyqHfQZ+nvSgdQY14YKAyUSJePHJOjZ t5UC1N0P1rl08EmSKFbglHJ0ZkklMR30sRovEQ3O5xSJwnvU0v9XfalvOMdZpGlT+4Dm jR0A== 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 d13si14547229ejd.721.2020.08.18.19.07.12; Tue, 18 Aug 2020 19:07:35 -0700 (PDT) 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 S1727888AbgHSCAy (ORCPT + 99 others); Tue, 18 Aug 2020 22:00:54 -0400 Received: from mga04.intel.com ([192.55.52.120]:3696 "EHLO mga04.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726815AbgHSCAw (ORCPT ); Tue, 18 Aug 2020 22:00:52 -0400 IronPort-SDR: YwD8vWq9RXELTnDOiPUHGpHwA4pD3fubP0QO7o6ap1iu/tmZplc1zVVQ6/oeicgCKL0m7KyBFZ IW9JBVfXba7w== X-IronPort-AV: E=McAfee;i="6000,8403,9717"; a="152449439" X-IronPort-AV: E=Sophos;i="5.76,329,1592895600"; d="scan'208";a="152449439" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by fmsmga104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 Aug 2020 19:00:51 -0700 IronPort-SDR: s9c0d/XzZPEr3Zy2PPpg07nlISYLs6xtPDJsVZTsdT0LbbDhgRiIl+/vEFXdL8+AfGFRl0sDkx /VYmOGkZeMRg== X-IronPort-AV: E=Sophos;i="5.76,329,1592895600"; d="scan'208";a="279565060" Received: from bard-ubuntu.sh.intel.com ([10.239.13.33]) by fmsmga008-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 Aug 2020 19:00:47 -0700 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, mengdong.lin@intel.com, bard.liao@intel.com Subject: [PATCH 2/7] soundwire: bus: filter-out unwanted interrupt reports Date: Tue, 18 Aug 2020 22:06:51 +0800 Message-Id: <20200818140656.29014-3-yung-chuan.liao@linux.intel.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200818140656.29014-1-yung-chuan.liao@linux.intel.com> References: <20200818140656.29014-1-yung-chuan.liao@linux.intel.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Pierre-Louis Bossart Unlike the traditional usage, in the SoundWire specification the interrupt masks only gate the propagation of an interrupt condition to the PING frame status. They do not gate the changes of the INT_STAT registers, which will happen regardless of the mask settings. See Figure 116 of the SoundWire 1.2 specification for an in-depth description of the interrupt model. When the bus driver reads the SCP_INT1_STAT register, it will retrieve all the interrupt status, including for the mask fields that were not explicitly set. For example, even if the PARITY mask is not set, the PARITY error status will be reported if an implementation-defined interrupt for jack detection is enabled and occurs. Filtering undesired interrupt reports and handling has to be implemented in software. This patch enables this filtering for the INT1_IMPL_DEF, PARITY and BUS_CLASH interrupt sources. Signed-off-by: Pierre-Louis Bossart Reviewed-by: Kai Vehmanen Reviewed-by: Guennadi Liakhovetski Signed-off-by: Bard Liao --- drivers/soundwire/bus.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/drivers/soundwire/bus.c b/drivers/soundwire/bus.c index 3b6a87bc254e..9e5bcd0dd115 100644 --- a/drivers/soundwire/bus.c +++ b/drivers/soundwire/bus.c @@ -1394,12 +1394,14 @@ static int sdw_handle_slave_alerts(struct sdw_slave *slave) * interrupt */ if (buf & SDW_SCP_INT1_PARITY) { - dev_err(&slave->dev, "Parity error detected\n"); + if (slave->prop.scp_int1_mask & SDW_SCP_INT1_PARITY) + dev_err(&slave->dev, "Parity error detected\n"); clear |= SDW_SCP_INT1_PARITY; } if (buf & SDW_SCP_INT1_BUS_CLASH) { - dev_err(&slave->dev, "Bus clash error detected\n"); + if (slave->prop.scp_int1_mask & SDW_SCP_INT1_BUS_CLASH) + dev_err(&slave->dev, "Bus clash detected\n"); clear |= SDW_SCP_INT1_BUS_CLASH; } @@ -1411,9 +1413,11 @@ static int sdw_handle_slave_alerts(struct sdw_slave *slave) */ if (buf & SDW_SCP_INT1_IMPL_DEF) { - dev_dbg(&slave->dev, "Slave impl defined interrupt\n"); + if (slave->prop.scp_int1_mask & SDW_SCP_INT1_IMPL_DEF) { + dev_dbg(&slave->dev, "Slave impl defined interrupt\n"); + slave_notify = true; + } clear |= SDW_SCP_INT1_IMPL_DEF; - slave_notify = true; } /* Check port 0 - 3 interrupts */ -- 2.17.1