From patchwork Thu Jan 6 18:41:08 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alex Hung X-Patchwork-Id: 1576244 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: bilbo.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=canonical.com header.i=@canonical.com header.a=rsa-sha256 header.s=20210705 header.b=NEIbQLlI; dkim-atps=neutral Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=lists.ubuntu.com (client-ip=91.189.94.19; helo=huckleberry.canonical.com; envelope-from=kernel-team-bounces@lists.ubuntu.com; receiver=) Received: from huckleberry.canonical.com (huckleberry.canonical.com [91.189.94.19]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by bilbo.ozlabs.org (Postfix) with ESMTPS id 4JVFYw19m6z9t6S for ; Fri, 7 Jan 2022 05:41:39 +1100 (AEDT) Received: from localhost ([127.0.0.1] helo=huckleberry.canonical.com) by huckleberry.canonical.com with esmtp (Exim 4.86_2) (envelope-from ) id 1n5Xha-0007rP-63; Thu, 06 Jan 2022 18:41:30 +0000 Received: from smtp-relay-internal-1.internal ([10.131.114.114] helo=smtp-relay-internal-1.canonical.com) by huckleberry.canonical.com with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.86_2) (envelope-from ) id 1n5XhY-0007ow-3H for kernel-team@lists.ubuntu.com; Thu, 06 Jan 2022 18:41:28 +0000 Received: from mail-pj1-f72.google.com (mail-pj1-f72.google.com [209.85.216.72]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by smtp-relay-internal-1.canonical.com (Postfix) with ESMTPS id D1BCC3F1A2 for ; Thu, 6 Jan 2022 18:41:27 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=canonical.com; s=20210705; t=1641494487; bh=LKZXcgJg3Z7w9GTQu94qpwwPpQKfxNwL+2eAV/kkE0I=; h=From:To:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=NEIbQLlIaJ+qnqghSrq4j9hLZaCmCwELhsHkRstwUIpHe7TONUBYVvIDoPEv2e/Qt WFbEPHS/2V4qHh1Kl/1pboY5s11A1dkkNmOLCiH6xRpFuarq3NhP3uY4qz1tzF7i/O Z2jhxUr30i11Dts6eQWcHau8QXJHmWmc/QuysMEV/DIrltt5T1jo2QF71+IyqnW1WT vkalVsTlVdKQgIb8az+2cDmohq9yAuJi99IbZO12nPY9xwwPeDjB/Wh93l9lAUjC2R vhkY+Fk+ZCETxoUWnEPNefrToegArejAfqXpSmNLRa8IAdBQFsz4IUk0Res6Kygs1P K2tUefs6Qfw5w== Received: by mail-pj1-f72.google.com with SMTP id ay21-20020a17090b031500b001b1269258b1so2471099pjb.1 for ; Thu, 06 Jan 2022 10:41:27 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=LKZXcgJg3Z7w9GTQu94qpwwPpQKfxNwL+2eAV/kkE0I=; b=sa0S/yaWE0lWgVmFsBzWKJzjwtjyk90Ldx3INb4JoM/cWTGfYHvuTjuST/nutjD95D LAN9zBL5lRo1CWMAsIa56YmKYMxI0VDdp+TkvJQn0t9sAt4D/4LyZ4y2zG68GhY871iW QVGKrUA0rcb4TwKhqngnMTnAOyeVoPG5PR78xg95BeMtkcFYNitnW1KAiWdqRhsn/Nq3 2D7CcvHpLinlZ3p93g6cw/ySbcgbyKnBdUWVRPQMULTURFUXn+P5xTy3S53KvjMr4VT5 FAiEgbtElavhsjmyZFe0n8gSN1zIrDunRMvMwRueAtHXC0vSd3t2LOir+Z6/ps9jdGds uaxg== X-Gm-Message-State: AOAM53364NfN+oZppBLE1guRy9fadfp9xigAZcwqXPaBVNwWv/Ou775G fv3GFnqqxP21xeyPVlMYcHlSrjhclmHW0uiE9y3jjY1eXkUMy/2eRnJqPJPfW3nyoCoesS6BKi8 zfqmgblPiM9Raw+cLjVgKLB1jfWJBWn592Fwnx+C+AA== X-Received: by 2002:a62:820e:0:b0:4b1:3cea:f0f6 with SMTP id w14-20020a62820e000000b004b13ceaf0f6mr61437533pfd.47.1641494486256; Thu, 06 Jan 2022 10:41:26 -0800 (PST) X-Google-Smtp-Source: ABdhPJwgd//i7AKfXwEuOthYecVJ/+auJNtC9VZRxjW9pBO98azzbMWaqKIm/G7xniYynRyfvHbzdQ== X-Received: by 2002:a62:820e:0:b0:4b1:3cea:f0f6 with SMTP id w14-20020a62820e000000b004b13ceaf0f6mr61437517pfd.47.1641494485926; Thu, 06 Jan 2022 10:41:25 -0800 (PST) Received: from canonical.com (node-1w7jr9yebujergqqm2zoerub6.ipv6.telus.net. [2001:56a:78ed:fb00:55b6:539c:aab3:b032]) by smtp.gmail.com with ESMTPSA id k2sm2603399pgh.11.2022.01.06.10.41.25 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 06 Jan 2022 10:41:25 -0800 (PST) From: Alex Hung To: kernel-team@lists.ubuntu.com Subject: [PATCH 06/15][SRU][J][V2] ASoC: amd: add acp6x irq handler Date: Thu, 6 Jan 2022 11:41:08 -0700 Message-Id: <20220106184117.1596692-7-alex.hung@canonical.com> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20220106184117.1596692-1-alex.hung@canonical.com> References: <20220106184117.1596692-1-alex.hung@canonical.com> MIME-Version: 1.0 X-BeenThere: kernel-team@lists.ubuntu.com X-Mailman-Version: 2.1.20 Precedence: list List-Id: Kernel team discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: kernel-team-bounces@lists.ubuntu.com Sender: "kernel-team" From: Vijendar Mukunda BugLink: https://bugs.launchpad.net/bugs/1949245 Add ACP6x irq handler for handling irq events for ACP IP. Add pdm irq events handling. Whenever audio data equal to the PDM watermark level are consumed, interrupt is generated. Acknowledge the interrupt. Signed-off-by: Vijendar Mukunda Link: https://lore.kernel.org/r/20211018112044.1705805-7-Vijendar.Mukunda@amd.com Signed-off-by: Mark Brown (cherry picked from commit cc0deaa2dc7300bb33e44e52cde0b6947a5d3a5d) Signed-off-by: Alex Hung --- sound/soc/amd/yc/acp6x.h | 2 ++ sound/soc/amd/yc/pci-acp6x.c | 31 +++++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/sound/soc/amd/yc/acp6x.h b/sound/soc/amd/yc/acp6x.h index d6b2c70c..4ea3779 100644 --- a/sound/soc/amd/yc/acp6x.h +++ b/sound/soc/amd/yc/acp6x.h @@ -25,6 +25,7 @@ #define ACP_ERROR_MASK 0x20000000 #define ACP_EXT_INTR_STAT_CLEAR_MASK 0xFFFFFFFF +#define PDM_DMA_STAT 0x10 enum acp_config { ACP_CONFIG_0 = 0, @@ -46,6 +47,7 @@ enum acp_config { }; struct pdm_dev_data { + u32 pdm_irq; void __iomem *acp6x_base; struct snd_pcm_substream *capture_stream; }; diff --git a/sound/soc/amd/yc/pci-acp6x.c b/sound/soc/amd/yc/pci-acp6x.c index bb66b4c..baf875c 100644 --- a/sound/soc/amd/yc/pci-acp6x.c +++ b/sound/soc/amd/yc/pci-acp6x.c @@ -10,6 +10,8 @@ #include #include #include +#include +#include #include "acp6x.h" @@ -117,6 +119,27 @@ static int acp6x_deinit(void __iomem *acp_base) return 0; } +static irqreturn_t acp6x_irq_handler(int irq, void *dev_id) +{ + struct acp6x_dev_data *adata; + struct pdm_dev_data *yc_pdm_data; + u32 val; + + adata = dev_id; + if (!adata) + return IRQ_NONE; + + val = acp6x_readl(adata->acp6x_base + ACP_EXTERNAL_INTR_STAT); + if (val & BIT(PDM_DMA_STAT)) { + yc_pdm_data = dev_get_drvdata(&adata->pdev[0]->dev); + acp6x_writel(BIT(PDM_DMA_STAT), adata->acp6x_base + ACP_EXTERNAL_INTR_STAT); + if (yc_pdm_data->capture_stream) + snd_pcm_period_elapsed(yc_pdm_data->capture_stream); + return IRQ_HANDLED; + } + return IRQ_NONE; +} + static int snd_acp6x_probe(struct pci_dev *pci, const struct pci_device_id *pci_id) { @@ -125,7 +148,9 @@ static int snd_acp6x_probe(struct pci_dev *pci, int ret, index; int val = 0x00; u32 addr; + unsigned int irqflags; + irqflags = IRQF_SHARED; /* Yellow Carp device check */ if (pci->revision != 0x60) return -ENODEV; @@ -209,6 +234,12 @@ static int snd_acp6x_probe(struct pci_dev *pci, } break; } + ret = devm_request_irq(&pci->dev, pci->irq, acp6x_irq_handler, + irqflags, "ACP_PCI_IRQ", adata); + if (ret) { + dev_err(&pci->dev, "ACP PCI IRQ request failed\n"); + goto unregister_devs; + } return 0; unregister_devs: for (--index; index >= 0; index--)