From nobody Sun May 19 20:02:54 2024 Received: from mail-wm1-f50.google.com (mail-wm1-f50.google.com [209.85.128.50]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A127A14885A for ; Fri, 26 Apr 2024 15:29:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714145399; cv=none; b=AfTu0OcNHdyCkmtEX+xQkNjOMzP4jshYuAlnCgfW0XLXl2WShSu6j4mSpg84GNyXrxDPMcj1Ek9tE41v19pezpwpHdYQZMVQB0aiLNZMH54jPT4cFr6gdGj2IZgmLuhgedUC71AiHVIINP98fuDTNCh8+iV8RvZm3aWepcQ/yNI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714145399; c=relaxed/simple; bh=hMVnOvoSMf+JRMF8t9uSLpRgdcu8Yz7Hi23L/8tCSL4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=p9tlaRUS7hT8f9I/S755mFmgS67qAD6hqHRuih3wnriGM8q4tL7itj9zNj1HGcTvA4ZfMtdjBbDa6GLg+IrSTyEYQd0yhvPbzxuvtWp4e4LHsX5lJF9op3g9XOsu88p/7UfeBCNvoMy7cAs4dvWRMAK7tvSm3BqesiwxWKncOoY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com; spf=pass smtp.mailfrom=baylibre.com; dkim=pass (2048-bit key) header.d=baylibre-com.20230601.gappssmtp.com header.i=@baylibre-com.20230601.gappssmtp.com header.b=cXFXEgzj; arc=none smtp.client-ip=209.85.128.50 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=baylibre.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=baylibre-com.20230601.gappssmtp.com header.i=@baylibre-com.20230601.gappssmtp.com header.b="cXFXEgzj" Received: by mail-wm1-f50.google.com with SMTP id 5b1f17b1804b1-418e4cd2196so17945255e9.1 for ; Fri, 26 Apr 2024 08:29:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20230601.gappssmtp.com; s=20230601; t=1714145396; x=1714750196; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=wdxkC9xy0JdUlM4HJdidG8uU38VPySKk64XDlad2PLg=; b=cXFXEgzj/K2X3kBAXJ99vCqEiATNy1CRXgS9Yyix2JRFxGPd2nGGcvkdsSFDzG9pWM smmT6+jcRv19l+S3r4IxvaxvofvUegiYcf2PZDfDYAsq+i8Z0MHy3Cl1v0j4ULWFrk7p ddilr2oi6BM4OmJauunUmUnANum8Jg/0dDZrNMZrwRaKrAGfOiJ2o/cztA3ezz61cR5i /KNvXDIxxxLiDDKKb2ksGdAMeqmqhjnrcI5y6chRJ+cGX+QwS4gwwVZCkeoT3EH6qx4r kNbH16OtzdIp34D053GpOMvJrNidqqN8wK+2Q9EDPqglf+no9BUzI0Bwr9DPWFGdL4+J mRnw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1714145396; x=1714750196; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=wdxkC9xy0JdUlM4HJdidG8uU38VPySKk64XDlad2PLg=; b=Bw/MaQQG6d41D9IbPWizFsalLKGKa/+kvE4ikLBNERKCDana8XLs+jWgwQX3xRmUnV 2vVO+9HEeAL8tpRnP6zj6WMV5k+BlzdvLDn6ANbMlT6z52xcq3/OndaoRwltHrUqG7N5 +4EAuwM3ly2ZMZHrhF/tI5rRN6o7MDHPUp0Si9WkfR3LSivoergFY0DAhjABA4aJuX3B Ppv/zXp54eDcCBKc+snj6+uCV99kY5yQOpVOESXYCI9reCJPSAY7+kYIw09MKf/PrwSC xhn+35RXp2AEFzEI3XaMDod84UZAgJBra8G78HpiBKIIA/F9qujgIwdeDgXYFPTIdlyK oc0w== X-Forwarded-Encrypted: i=1; AJvYcCVbNAn8P3xz4vaKX+ptys/NUV/IeovWxeIh/kQUfjwOpFiafkn9RDuJjD+YrIH1pqI45tt5hSRLLQgHOCManE7y+WirFPmW2MXrabNN X-Gm-Message-State: AOJu0YzXCWW7MS3e+gfVleqLYxyo4DE0/pUrsGulTyvgdKts3SagfCB+ pIaiPMTs5vjooUCywo8PkTKA7LLOIvq+YWVGGdwyQLFg8Lpn6XvpWSU7ZsIOkkw= X-Google-Smtp-Source: AGHT+IHPpBP3QSa57mdn7C6mGnSnPPrJ1b15kSZTPSoFNzWhfVV6qwoJcqsNBhnR4twzoAilz89DKA== X-Received: by 2002:a05:600c:4ecf:b0:416:bc18:2a00 with SMTP id g15-20020a05600c4ecf00b00416bc182a00mr2136057wmq.38.1714145395834; Fri, 26 Apr 2024 08:29:55 -0700 (PDT) Received: from toaster.lan ([2a01:e0a:3c5:5fb1:1926:f73e:8b99:1c0a]) by smtp.googlemail.com with ESMTPSA id i13-20020a05600c354d00b00419fba938d8sm22628687wmq.27.2024.04.26.08.29.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 26 Apr 2024 08:29:55 -0700 (PDT) From: Jerome Brunet To: Mark Brown , Liam Girdwood Cc: Jerome Brunet , alsa-devel@alsa-project.org, linux-kernel@vger.kernel.org, linux-amlogic@lists.infradead.org Subject: [PATCH 1/4] ASoC: meson: axg-fifo: use threaded irq to check periods Date: Fri, 26 Apr 2024 17:29:38 +0200 Message-ID: <20240426152946.3078805-2-jbrunet@baylibre.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240426152946.3078805-1-jbrunet@baylibre.com> References: <20240426152946.3078805-1-jbrunet@baylibre.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Patchwork-Bot: notify Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" With the AXG audio subsystem, there is a possible random channel shift on TDM capture, when the slot number per lane is more than 2, and there is more than one lane used. The problem has been there since the introduction of the axg audio support but such scenario is pretty uncommon. This is why there is no loud complains about the problem. Solving the problem require to make the links non-atomic and use the trigger() callback to start FEs and BEs in the appropriate order. This was tried in the past and reverted because it caused the block irq to sleep while atomic. However, instead of reverting, the solution is to call snd_pcm_period_elapsed() in a non atomic context. Use the bottom half of a threaded IRQ to do so. Fixes: 6dc4fa179fb8 ("ASoC: meson: add axg fifo base driver") Signed-off-by: Jerome Brunet --- sound/soc/meson/axg-fifo.c | 29 +++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/sound/soc/meson/axg-fifo.c b/sound/soc/meson/axg-fifo.c index bebee0ca8e38..ecb3eb7a9723 100644 --- a/sound/soc/meson/axg-fifo.c +++ b/sound/soc/meson/axg-fifo.c @@ -204,18 +204,26 @@ static irqreturn_t axg_fifo_pcm_irq_block(int irq, vo= id *dev_id) unsigned int status; =20 regmap_read(fifo->map, FIFO_STATUS1, &status); - status =3D FIELD_GET(STATUS1_INT_STS, status); + axg_fifo_ack_irq(fifo, status); + + /* Use the thread to call period elapsed on nonatomic links */ if (status & FIFO_INT_COUNT_REPEAT) - snd_pcm_period_elapsed(ss); - else - dev_dbg(axg_fifo_dev(ss), "unexpected irq - STS 0x%02x\n", - status); + return IRQ_WAKE_THREAD; =20 - /* Ack irqs */ - axg_fifo_ack_irq(fifo, status); + dev_dbg(axg_fifo_dev(ss), "unexpected irq - STS 0x%02x\n", + status); + + return IRQ_NONE; +} + +static irqreturn_t axg_fifo_pcm_irq_block_thread(int irq, void *dev_id) +{ + struct snd_pcm_substream *ss =3D dev_id; + + snd_pcm_period_elapsed(ss); =20 - return IRQ_RETVAL(status); + return IRQ_HANDLED; } =20 int axg_fifo_pcm_open(struct snd_soc_component *component, @@ -243,8 +251,9 @@ int axg_fifo_pcm_open(struct snd_soc_component *compone= nt, if (ret) return ret; =20 - ret =3D request_irq(fifo->irq, axg_fifo_pcm_irq_block, 0, - dev_name(dev), ss); + ret =3D request_threaded_irq(fifo->irq, axg_fifo_pcm_irq_block, + axg_fifo_pcm_irq_block_thread, + IRQF_ONESHOT, dev_name(dev), ss); if (ret) return ret; =20 --=20 2.43.0 From nobody Sun May 19 20:02:54 2024 Received: from mail-wm1-f53.google.com (mail-wm1-f53.google.com [209.85.128.53]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4757D14885D for ; Fri, 26 Apr 2024 15:29:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.53 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714145400; cv=none; b=gI/bRUzUvyovE5LfTdCH1QflcpVOT5c2G3IxnJa6DpDOQ/6dSs3iVWBh8yemR+NB5yNlvo/KzZFEiSaHg5E94qgCu9gXtN9T2YQ7QJZkAq8QdO9ErouOdkHGOptR6d9nylddQrKgCDhchAHbxPSFZlQXZjVAWwpsUz2LLHOUe5Y= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714145400; c=relaxed/simple; bh=twiWpSK9Cb/9sMit7KrauKpyDpxWaybLQZDeq8xxcKY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=cytJFvtZXvsJyl7VUpeESOyROCbeE4IqwwH/do/v3vrUKJ4rUJ31Q4UaE+FdtIjZvRRWx1wyTKXNdGbO3yNLaeElKCwebHTp5oa1Ik3MTxCZ548BYrDFjE/O74dfY2qWmh0inOMeJLHlvnlrxkNm2ELDGAa8Gg/ZltBdYxffSJ8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com; spf=pass smtp.mailfrom=baylibre.com; dkim=pass (2048-bit key) header.d=baylibre-com.20230601.gappssmtp.com header.i=@baylibre-com.20230601.gappssmtp.com header.b=L4W5wNvE; arc=none smtp.client-ip=209.85.128.53 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=baylibre.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=baylibre-com.20230601.gappssmtp.com header.i=@baylibre-com.20230601.gappssmtp.com header.b="L4W5wNvE" Received: by mail-wm1-f53.google.com with SMTP id 5b1f17b1804b1-4196c62bb4eso17372285e9.2 for ; Fri, 26 Apr 2024 08:29:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20230601.gappssmtp.com; s=20230601; t=1714145396; x=1714750196; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=Vj88fGfTuV4/ceY0CRDNjfucEqH3NJ0Iz+8z4tgOcCE=; b=L4W5wNvE8ZtGmSLyT5BR0ewkJMXa/cIsH2KFCx9x3kG1k2ItO8x94TAQsU+zVU6faN JgJdBg6DzYKgwPOkkgVlV36d972Tc3A70QxQITEU9mwXtaIzQF+R/GcnFB0Do0C6DywQ O6EFKMuQOnQWFZoIvsS4a27pWgnqdLU6WBDvdfqTD6zWpv4gEdlHwV/OseJSQ7JkIbty +FWaNFARHMX2VmZm5oUKEANx5sTvyTP5EYU77Z7O2KesklZRgf3tvxbsPOkKB52BbIlM fWxVM41Rdj/ho1VY3L0UFBM38EzOFAOpzQW12LGLuEzzOD5qleXq9BTA9hbbX88yBi2U RvaQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1714145396; x=1714750196; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Vj88fGfTuV4/ceY0CRDNjfucEqH3NJ0Iz+8z4tgOcCE=; b=tikR30P5uNd21glQlv2+Eh3iRqQLTIIVy6BkqppX/tWRdc9PvVsr7fJ8Nj9rbWKfWI rUVcFhMBaUkdnzO4pc4603siojl/wSegCxGxXQCor4jnnTwAB1qyDZkbUmWMpseW2ogt VroM4AdqNxl+tIOddWd/hI/ElQYmiX9OvlLNq9NSWGoljRjPzVAO1zFrs+glEMUUrXKw uFP3HdUfrpt7nIgDbrQZwB0BaOi/O2RQD/ScUGwaPlUbGVHOYDHwMV/91tQwQBCxrIcu NobETf8KuuaNci7ntkFxwKMofMtV2eptNDiL9EtWxS85G6ByfL5BKwChfe0n+Wa2Rr3V vNOg== X-Forwarded-Encrypted: i=1; AJvYcCXUFOYEiIoGFHmcqT5xrdT1YzfqLGDgSIkM53xbM6K9HQ462dsU1lzu86I21clWlpuPwt51iT+ApaxYsItqnUO8jkw+AT+XDOX5364F X-Gm-Message-State: AOJu0YyCGklHCXwmYLoqC6BgRAGXh++/b8YvD1pezZHYeGmCaJL86ApS 8VUGG+mOd9PhuI1t2EkKoZVnRmCj0cjnawIG0Rfu2SlELe3c4sl4hLVFHtLKWro= X-Google-Smtp-Source: AGHT+IEJkZy/zcyYjS/mRx4ZV80tXFjeoyE7of0nB7BlzZ+4FKV/1yBAljbeQBu73IdnjR2X5uGAvA== X-Received: by 2002:a05:600c:b88:b0:418:f991:8ad4 with SMTP id fl8-20020a05600c0b8800b00418f9918ad4mr113607wmb.6.1714145396564; Fri, 26 Apr 2024 08:29:56 -0700 (PDT) Received: from toaster.lan ([2a01:e0a:3c5:5fb1:1926:f73e:8b99:1c0a]) by smtp.googlemail.com with ESMTPSA id i13-20020a05600c354d00b00419fba938d8sm22628687wmq.27.2024.04.26.08.29.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 26 Apr 2024 08:29:56 -0700 (PDT) From: Jerome Brunet To: Mark Brown , Liam Girdwood Cc: Jerome Brunet , alsa-devel@alsa-project.org, linux-kernel@vger.kernel.org, linux-amlogic@lists.infradead.org Subject: [PATCH 2/4] ASoC: meson: axg-card: make links nonatomic Date: Fri, 26 Apr 2024 17:29:39 +0200 Message-ID: <20240426152946.3078805-3-jbrunet@baylibre.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240426152946.3078805-1-jbrunet@baylibre.com> References: <20240426152946.3078805-1-jbrunet@baylibre.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Patchwork-Bot: notify Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Non atomic operations need to be performed in the trigger callback of the TDM interfaces. Those are BEs but what matters is the nonatomic flag of the FE in the DPCM context. Just set nonatomic for everything so, at least, what is done is clear. Fixes: 7864a79f37b5 ("ASoC: meson: add axg sound card support") Signed-off-by: Jerome Brunet --- sound/soc/meson/axg-card.c | 1 + 1 file changed, 1 insertion(+) diff --git a/sound/soc/meson/axg-card.c b/sound/soc/meson/axg-card.c index 3180aa4d3a15..8c5605c1e34e 100644 --- a/sound/soc/meson/axg-card.c +++ b/sound/soc/meson/axg-card.c @@ -318,6 +318,7 @@ static int axg_card_add_link(struct snd_soc_card *card,= struct device_node *np, =20 dai_link->cpus =3D cpu; dai_link->num_cpus =3D 1; + dai_link->nonatomic =3D true; =20 ret =3D meson_card_parse_dai(card, np, dai_link->cpus); if (ret) --=20 2.43.0 From nobody Sun May 19 20:02:54 2024 Received: from mail-wm1-f46.google.com (mail-wm1-f46.google.com [209.85.128.46]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id F3E18148FE6 for ; Fri, 26 Apr 2024 15:29:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714145400; cv=none; b=C7Wj4IBAu2rmtawK6TOiryYm4k9UnEO0Cv6RhD/OtFyL7/gTnlLlx1+4m5OxVGJ4kKnlNwnlv93sivYgzDRk5PdPHNnW4WSJKmx1RUcyMxKsZDtvY8TszHz9Ugj1lpSNqe+MyBhj2HVwozT0WB5SWefDQx7uXQ5NpzhQezM03No= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714145400; c=relaxed/simple; bh=XL4wNAHbKdLtic6750ztJIoB/ro7CVmirV6b234wNGE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=HWGpijATeLwb10XdNsxElB5moe+l3QzoNLe9jZtWmH16h4PsUj3ETQD1B/Jgl/ettRBYl+qUscY25UiU1n79qgwgDfa3+mOuH86yTM+7+vCY5LWMDpwnHELXUF45OqUW7hUPNIg92C5iVLUfidgydF20QSAK1YjdJ+60g33vNXA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com; spf=pass smtp.mailfrom=baylibre.com; dkim=pass (2048-bit key) header.d=baylibre-com.20230601.gappssmtp.com header.i=@baylibre-com.20230601.gappssmtp.com header.b=jjsewEpI; arc=none smtp.client-ip=209.85.128.46 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=baylibre.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=baylibre-com.20230601.gappssmtp.com header.i=@baylibre-com.20230601.gappssmtp.com header.b="jjsewEpI" Received: by mail-wm1-f46.google.com with SMTP id 5b1f17b1804b1-41bab13ca81so3892865e9.1 for ; Fri, 26 Apr 2024 08:29:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20230601.gappssmtp.com; s=20230601; t=1714145397; x=1714750197; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=LQ4CJQsXVTR1thlbAzx7uixAygG90ZyA723vL1wPyc4=; b=jjsewEpIM9BA/aQ3sktSAb8UzHcmuxtDsZQ2MRbw2uOxEakIRkwhrDKgzRFsgaI71P llbxbU96xo5tGaZUEnke4lTfiNAlYzQnm36mSCLebWxotO3Vz3t47UtrHn94bYob34CI eprpDUbB1OBd4PxskplrROfDGtwYUEvRAjDmyyZIvivHdBr5M9+WWwyGxkbyuONVpuof jBQ4nMskJQ3QHqFcceW+vkiFI+lYON+7jPls/djkJBG94yykUNLvzQTHvSzd1URUdsmf 2BEMYDSwWaRk/0XPlUvpPvsxsKrmjTMbgmDYYTpQ9p+9jNTjQMTHnvq83Ylb27e0HThD 5OhA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1714145397; x=1714750197; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=LQ4CJQsXVTR1thlbAzx7uixAygG90ZyA723vL1wPyc4=; b=nF3+mfME5SM1dEvF/t3k44Nh8/f0LjOTMRqu6WGFeB6lrmCxrTD+gdWVi6SrMlvC++ pZ4/4bkv7An1can+fd390IitFs72lgwYA60pf8oLxMzb7rtgykucImWHF7RF054+SfMC rhCwg4S7i4E5OZdmqgZfxk+oMrTKlj5k2derYcDO2QAKTPMfA1kLKISFQsvmPuzE3oPv 3LELf37QTvWzwq/TOYHuqYBc91Q+EmoRom9GKCTtvmUP1hBxdS9xUgblXOv6RGeF+JG+ CeO6ZxE+OhNMWu3qBSL9Y1TbB/IecxHNvuBRp+aFKBa0NEh6zh4nL8j709wZFL9czAOS jBLQ== X-Forwarded-Encrypted: i=1; AJvYcCWORe6j9KyR9V40fA50wgp7R61mfDDnNztybxC8ihk6jrTmQ8zmx98fqu6kHdQzioI90Y+W4eTr34dI40+c8wMubJN5S862V+zhp8Tw X-Gm-Message-State: AOJu0YySZItBmFRg9o/uvYq2O+5PRFd+scQeC8b4T6Lpg7TPMvCWFJNB pK+FqHsmyBPqnCB586yKx4MS2tV2//P3Wq+N1XSzeWt/ptBts2RHcFDTvy4y9iM= X-Google-Smtp-Source: AGHT+IH1/5s5CRPWdPZqkFw1JsMyITFCO5/+y/SMhOfip3B1nJoETVweJYnD+9vnKbqKCb2dr/aCkw== X-Received: by 2002:a05:600c:4508:b0:418:37e1:3f73 with SMTP id t8-20020a05600c450800b0041837e13f73mr3024524wmo.2.1714145397352; Fri, 26 Apr 2024 08:29:57 -0700 (PDT) Received: from toaster.lan ([2a01:e0a:3c5:5fb1:1926:f73e:8b99:1c0a]) by smtp.googlemail.com with ESMTPSA id i13-20020a05600c354d00b00419fba938d8sm22628687wmq.27.2024.04.26.08.29.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 26 Apr 2024 08:29:56 -0700 (PDT) From: Jerome Brunet To: Mark Brown , Liam Girdwood Cc: Jerome Brunet , alsa-devel@alsa-project.org, linux-kernel@vger.kernel.org, linux-amlogic@lists.infradead.org Subject: [PATCH 3/4] ASoC: meson: axg-tdm-interface: manage formatters in trigger Date: Fri, 26 Apr 2024 17:29:40 +0200 Message-ID: <20240426152946.3078805-4-jbrunet@baylibre.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240426152946.3078805-1-jbrunet@baylibre.com> References: <20240426152946.3078805-1-jbrunet@baylibre.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Patchwork-Bot: notify Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" So far, the formatters have been reset/enabled using the .prepare() callback. This was done in this callback because walking the formatters use a mutex. A mutex is used because formatter handling require dealing possibly slow clock operation. With the support of non-atomic, .trigger() callback may be used which also allows to properly enable and disable formatters on start but also pause/resume. This solve a random shift on TDMIN as well repeated samples on for TDMOUT. Fixes: d60e4f1e4be5 ("ASoC: meson: add tdm interface driver") Signed-off-by: Jerome Brunet --- sound/soc/meson/axg-tdm-interface.c | 34 ++++++++++++++++------------- 1 file changed, 19 insertions(+), 15 deletions(-) diff --git a/sound/soc/meson/axg-tdm-interface.c b/sound/soc/meson/axg-tdm-= interface.c index bf708717635b..8bf3735dedaa 100644 --- a/sound/soc/meson/axg-tdm-interface.c +++ b/sound/soc/meson/axg-tdm-interface.c @@ -349,26 +349,31 @@ static int axg_tdm_iface_hw_params(struct snd_pcm_sub= stream *substream, return 0; } =20 -static int axg_tdm_iface_hw_free(struct snd_pcm_substream *substream, +static int axg_tdm_iface_trigger(struct snd_pcm_substream *substream, + int cmd, struct snd_soc_dai *dai) { - struct axg_tdm_stream *ts =3D snd_soc_dai_get_dma_data(dai, substream); + struct axg_tdm_stream *ts =3D + snd_soc_dai_get_dma_data(dai, substream); =20 - /* Stop all attached formatters */ - axg_tdm_stream_stop(ts); + switch (cmd) { + case SNDRV_PCM_TRIGGER_START: + case SNDRV_PCM_TRIGGER_RESUME: + case SNDRV_PCM_TRIGGER_PAUSE_RELEASE: + axg_tdm_stream_start(ts); + break; + case SNDRV_PCM_TRIGGER_SUSPEND: + case SNDRV_PCM_TRIGGER_PAUSE_PUSH: + case SNDRV_PCM_TRIGGER_STOP: + axg_tdm_stream_stop(ts); + break; + default: + return -EINVAL; + } =20 return 0; } =20 -static int axg_tdm_iface_prepare(struct snd_pcm_substream *substream, - struct snd_soc_dai *dai) -{ - struct axg_tdm_stream *ts =3D snd_soc_dai_get_dma_data(dai, substream); - - /* Force all attached formatters to update */ - return axg_tdm_stream_reset(ts); -} - static int axg_tdm_iface_remove_dai(struct snd_soc_dai *dai) { int stream; @@ -412,8 +417,7 @@ static const struct snd_soc_dai_ops axg_tdm_iface_ops = =3D { .set_fmt =3D axg_tdm_iface_set_fmt, .startup =3D axg_tdm_iface_startup, .hw_params =3D axg_tdm_iface_hw_params, - .prepare =3D axg_tdm_iface_prepare, - .hw_free =3D axg_tdm_iface_hw_free, + .trigger =3D axg_tdm_iface_trigger, }; =20 /* TDM Backend DAIs */ --=20 2.43.0 From nobody Sun May 19 20:02:54 2024 Received: from mail-wm1-f48.google.com (mail-wm1-f48.google.com [209.85.128.48]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 71A5E149C75 for ; Fri, 26 Apr 2024 15:30:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714145402; cv=none; b=G5L5idoNE2jDqkV9KBD8B2QDlw7DLMysajhHzRBQpP0gLlTo+23ajp9disL3AZZML/WENBZNd5Y0HSbTsXPsOi6znqxvdk94exf8sJhR33qwVGT3j26I6xmcF5QxAEr13olR6aPEYF/y9D9MjLLlLUIsbYrDFqZH4lqdlzsYo8w= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714145402; c=relaxed/simple; bh=S7RONIxFeXwe67F6fo0qfGrsfEGqrrUtec1UUThnSXQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=j6/+rspVcJImuMmBYEaLEK6Tu80A0uJjXuKkAN9dj5iVBNrEprzGWOW15sN5T3VncLuiIYQmwdSCKitoB1FNXSwXj7JayonVUkl22qnu93jRlAsUAgEO7xo5BLl7qw6HJLHvKBUZeOcHmHzZDsTaJpoGZerdSkiLeYdOQExPcM4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com; spf=pass smtp.mailfrom=baylibre.com; dkim=pass (2048-bit key) header.d=baylibre-com.20230601.gappssmtp.com header.i=@baylibre-com.20230601.gappssmtp.com header.b=2sc9IIH6; arc=none smtp.client-ip=209.85.128.48 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=baylibre.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=baylibre-com.20230601.gappssmtp.com header.i=@baylibre-com.20230601.gappssmtp.com header.b="2sc9IIH6" Received: by mail-wm1-f48.google.com with SMTP id 5b1f17b1804b1-41ba1ba55ebso3668025e9.1 for ; Fri, 26 Apr 2024 08:30:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20230601.gappssmtp.com; s=20230601; t=1714145399; x=1714750199; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=4bQrmumSWoqJQMi/l6xj2yc8RNYXdlpvWVWdoITuaG8=; b=2sc9IIH6oNnxx6qGtFwsu+aNXx9eZ9qb6NAImpYO4wXII/y4GtDZMOKgu65k5sdvEC ZyRdtMiGnxiA4kvcHPwA3kANxOwWb9IPYbCfLvDNVXK/WY/ekNeJ0zTmyeNyNlDZt54+ WwvIhKy9whau9fRaVtsUQEUHLXW+we+ask9DvzGQ02Wm1LmQQe0Ru/Ql8+Y403GcFAUB MYcqqs6rWiFhDE+AwUDteQ9OWJwrv6kJXQ2BI0IJ4Nad/N8F3/jesVQmAAHkSGa7EHOR dSb1iSh80mtWjFuqby2mkxkakQ3CR9/HTgaVvcna7+gb5xUONT5KlCskD+Dne4VsvsDQ Igxw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1714145399; x=1714750199; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=4bQrmumSWoqJQMi/l6xj2yc8RNYXdlpvWVWdoITuaG8=; b=M9Aa6xXEY3lLR8oSxDxfubdXlAkljGURJ4M1CLS6RBv0NoQayzVfZ6Y9wDyQwErm6Y XwQvOL2NdqGKN6d2pkBIyo7yo7A+GnWlWmfyvlWWp7uk+FRAtC3opWzwly/ZLy/ptS0R v6YQU3wLXDNswbqSVD1Bvi3oqrVaaVeuIcetBhjD8mSmzntmi6Tddgfg5zvw93nhnbZA YS/eSyzuz0XhwTtea7TDOqPSaWA0aWIhv5P9T0/Hd8OXM6eZbOmaZLkE7xCUqIZ3B8LU IrVM8oDz40vsY2nAOoe1VXwHyi+1SbZjNva0fcB/XTfPPJpB7vRNTbjN0lhXWyJ/9zq+ 5JxA== X-Forwarded-Encrypted: i=1; AJvYcCUmsgTf26RkBpdGsllSsrQnV3PyGUhofU54KcPnBccEWVCRJE/FI1TDVjN119ru4ZZyzXhMh6a0E3B5W+LkKbEgC0o5znaO0A7uoMzE X-Gm-Message-State: AOJu0Yw2oahgnfVvjkI6EfLAh5/3dAaJNgwCSLXNVqmSvuRHKe+L70ax 5HwzUusvu//ABcCWqlroHmfKyV6AA56lRMA33UXAossOe3BQTXuyzpu9bpC3hW4= X-Google-Smtp-Source: AGHT+IHMerJdt74ThT9W2AwuFt/nqHhB935A349L3A9erdfLScSRYmjfvTF+QLgGqsuEAmQiV3l5MA== X-Received: by 2002:a05:600c:4f11:b0:419:87ab:f6db with SMTP id l17-20020a05600c4f1100b0041987abf6dbmr2369314wmq.23.1714145398045; Fri, 26 Apr 2024 08:29:58 -0700 (PDT) Received: from toaster.lan ([2a01:e0a:3c5:5fb1:1926:f73e:8b99:1c0a]) by smtp.googlemail.com with ESMTPSA id i13-20020a05600c354d00b00419fba938d8sm22628687wmq.27.2024.04.26.08.29.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 26 Apr 2024 08:29:57 -0700 (PDT) From: Jerome Brunet To: Mark Brown , Liam Girdwood Cc: Jerome Brunet , alsa-devel@alsa-project.org, linux-kernel@vger.kernel.org, linux-amlogic@lists.infradead.org Subject: [PATCH 4/4] ASoC: meson: axg-tdm: add continuous clock support Date: Fri, 26 Apr 2024 17:29:41 +0200 Message-ID: <20240426152946.3078805-5-jbrunet@baylibre.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240426152946.3078805-1-jbrunet@baylibre.com> References: <20240426152946.3078805-1-jbrunet@baylibre.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Patchwork-Bot: notify Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Some devices may need the clocks running, even while paused. Add support for this use case. Signed-off-by: Jerome Brunet --- sound/soc/meson/axg-tdm-formatter.c | 40 +++++++++++++++++++++++++++++ sound/soc/meson/axg-tdm-interface.c | 16 +++++++++++- sound/soc/meson/axg-tdm.h | 5 ++++ 3 files changed, 60 insertions(+), 1 deletion(-) diff --git a/sound/soc/meson/axg-tdm-formatter.c b/sound/soc/meson/axg-tdm-= formatter.c index 63333a2b0a9c..a6579efd3775 100644 --- a/sound/soc/meson/axg-tdm-formatter.c +++ b/sound/soc/meson/axg-tdm-formatter.c @@ -392,6 +392,46 @@ void axg_tdm_stream_free(struct axg_tdm_stream *ts) } EXPORT_SYMBOL_GPL(axg_tdm_stream_free); =20 +int axg_tdm_stream_set_cont_clocks(struct axg_tdm_stream *ts, + unsigned int fmt) +{ + int ret =3D 0; + + if (fmt & SND_SOC_DAIFMT_CONT) { + /* Clock are already enabled - skipping */ + if (ts->clk_enabled) + return 0; + + ret =3D clk_prepare_enable(ts->iface->mclk); + if (ret) + return ret; + + ret =3D clk_prepare_enable(ts->iface->sclk); + if (ret) + goto err_sclk; + + ret =3D clk_prepare_enable(ts->iface->lrclk); + if (ret) + goto err_lrclk; + + ts->clk_enabled =3D true; + return 0; + } + + /* Clocks are already disabled - skipping */ + if (!ts->clk_enabled) + return 0; + + clk_disable_unprepare(ts->iface->lrclk); +err_lrclk: + clk_disable_unprepare(ts->iface->sclk); +err_sclk: + clk_disable_unprepare(ts->iface->mclk); + ts->clk_enabled =3D false; + return ret; +} +EXPORT_SYMBOL_GPL(axg_tdm_stream_set_cont_clocks); + MODULE_DESCRIPTION("Amlogic AXG TDM formatter driver"); MODULE_AUTHOR("Jerome Brunet "); MODULE_LICENSE("GPL v2"); diff --git a/sound/soc/meson/axg-tdm-interface.c b/sound/soc/meson/axg-tdm-= interface.c index 8bf3735dedaa..62057c71f742 100644 --- a/sound/soc/meson/axg-tdm-interface.c +++ b/sound/soc/meson/axg-tdm-interface.c @@ -309,6 +309,7 @@ static int axg_tdm_iface_hw_params(struct snd_pcm_subst= ream *substream, struct snd_soc_dai *dai) { struct axg_tdm_iface *iface =3D snd_soc_dai_get_drvdata(dai); + struct axg_tdm_stream *ts =3D snd_soc_dai_get_dma_data(dai, substream); int ret; =20 switch (iface->fmt & SND_SOC_DAIFMT_FORMAT_MASK) { @@ -346,7 +347,19 @@ static int axg_tdm_iface_hw_params(struct snd_pcm_subs= tream *substream, return ret; } =20 - return 0; + ret =3D axg_tdm_stream_set_cont_clocks(ts, iface->fmt); + if (ret) + dev_err(dai->dev, "failed to apply continuous clock setting\n"); + + return ret; +} + +static int axg_tdm_iface_hw_free(struct snd_pcm_substream *substream, + struct snd_soc_dai *dai) +{ + struct axg_tdm_stream *ts =3D snd_soc_dai_get_dma_data(dai, substream); + + return axg_tdm_stream_set_cont_clocks(ts, 0); } =20 static int axg_tdm_iface_trigger(struct snd_pcm_substream *substream, @@ -417,6 +430,7 @@ static const struct snd_soc_dai_ops axg_tdm_iface_ops = =3D { .set_fmt =3D axg_tdm_iface_set_fmt, .startup =3D axg_tdm_iface_startup, .hw_params =3D axg_tdm_iface_hw_params, + .hw_free =3D axg_tdm_iface_hw_free, .trigger =3D axg_tdm_iface_trigger, }; =20 diff --git a/sound/soc/meson/axg-tdm.h b/sound/soc/meson/axg-tdm.h index 42f7470b9a7f..daaca10fec9e 100644 --- a/sound/soc/meson/axg-tdm.h +++ b/sound/soc/meson/axg-tdm.h @@ -58,12 +58,17 @@ struct axg_tdm_stream { unsigned int physical_width; u32 *mask; bool ready; + + /* For continuous clock tracking */ + bool clk_enabled; }; =20 struct axg_tdm_stream *axg_tdm_stream_alloc(struct axg_tdm_iface *iface); void axg_tdm_stream_free(struct axg_tdm_stream *ts); int axg_tdm_stream_start(struct axg_tdm_stream *ts); void axg_tdm_stream_stop(struct axg_tdm_stream *ts); +int axg_tdm_stream_set_cont_clocks(struct axg_tdm_stream *ts, + unsigned int fmt); =20 static inline int axg_tdm_stream_reset(struct axg_tdm_stream *ts) { --=20 2.43.0