Received: by 2002:a05:6358:9144:b0:117:f937:c515 with SMTP id r4csp107746rwr; Tue, 25 Apr 2023 18:33:12 -0700 (PDT) X-Google-Smtp-Source: AKy350b72q2lP1DyPfEr62Zx2aSclUa1g88vNoVOQG2CUy8KRz2VLGIPUuEoPJp6AP555lNDtDAp X-Received: by 2002:a17:902:d583:b0:1a4:fcc9:ec61 with SMTP id k3-20020a170902d58300b001a4fcc9ec61mr19253780plh.5.1682472792663; Tue, 25 Apr 2023 18:33:12 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1682472792; cv=none; d=google.com; s=arc-20160816; b=SAeAHTrJZ5Lc+79mDdl+GIPSOtYw//DvoqRaGBX/DiKf6Jnk4stcnqfCj7QWQjrmSO ZtHCTIiOnpFiM9W3keqzU9erG3oRcUDhgKuGP4hUft93wdfGTqCI1tcoubMwm0vJ4Aoa vY1g55rkw4vBJdAoGJzVKe5YUVVSV/th6AtaGza2aJSc84bJRbVxjN1fzaSlFL/QVoXl 0q1X8MsZnvGvdCicnaBcCH8jDp5taCaaR/HEUXkxcYo3uZbIj5s4UhTuGW8L8NaEUCYK z4Pwc5DuYlHX0ThCsCC8rkc10XzUJnvMkX07b5QORXWzcZWEV1GmsrquPrR0pqjn89b/ KRSQ== 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 :message-id:date:subject:cc:to:from; bh=Tt9dELR2vWVH8vQezkvbMmdXRvg8EGFXeL9znOTvwKs=; b=egp9TdkmI4VOyAc3ZCypqtjaorP5PvzWQS3LbcvdYLy/OcIb1u+Z28U53yY1E7N5I2 dzrtjR68zQh7PkE9a3gknIca0+8fmnPLe2r0jHu9OcL947QS31F/eT06JQYvQ4Gqywes z9St3KaXbQw61QH4DvNKNLKhhNQRlUzwh2VTcyo+WsJarLdT0bXdarVkPdJYD1j4FWuO 3rlW1NTLT+ikb7rV6+Bds+whNZNobkpi3lbDcF56B6m5boSUS2xhBVtKVtO99q8ZKGHS zAyJh2gusX3ptUga7O4ifoHs42ul6EcyQZj5RdE2RQ9M5s3urJdK4TKzPzF+AFuahySy kJOA== ARC-Authentication-Results: i=1; mx.google.com; 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 Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id x22-20020a17090a8a9600b002478a461fe6si15017961pjn.54.2023.04.25.18.32.57; Tue, 25 Apr 2023 18:33:12 -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; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S239024AbjDZBZi (ORCPT + 99 others); Tue, 25 Apr 2023 21:25:38 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41436 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231622AbjDZBZh (ORCPT ); Tue, 25 Apr 2023 21:25:37 -0400 Received: from gfmail2.glenfly.com (unknown [113.31.180.36]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id BEBA67285 for ; Tue, 25 Apr 2023 18:25:34 -0700 (PDT) X-ASG-Debug-ID: 1682472332-196b961946149530001-xx1T2L Received: from GFSHEXCH03.glenfly.com (GFSHEXCH03.glenfly.com [10.5.250.53]) by gfmail2.glenfly.com with ESMTP id lVGUkD5434r3A4SB; Wed, 26 Apr 2023 09:25:32 +0800 (CST) X-Barracuda-Envelope-From: ReaperLiOC@glenfly.com X-Barracuda-RBL-Trusted-Forwarder: 10.5.250.53 Received: from sqa-PC.glenfly.com (10.30.16.40) by GFSHEXCH03.glenfly.com (10.5.250.53) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.23; Wed, 26 Apr 2023 09:25:55 +0800 From: Reaper Li X-Barracuda-RBL-Trusted-Forwarder: 10.5.250.53 To: , CC: , , jasontao , Reaper Li Subject: [PATCH v3] ALSA: hda: Glenfly: add HD Audio PCI IDs and HDMI Codec Vendor IDs. Date: Wed, 26 Apr 2023 09:30:59 +0800 X-ASG-Orig-Subj: [PATCH v3] ALSA: hda: Glenfly: add HD Audio PCI IDs and HDMI Codec Vendor IDs. Message-ID: <20230426013059.4329-1-reaperlioc@glenfly.com> X-Mailer: git-send-email 2.20.1 MIME-Version: 1.0 Content-Transfer-Encoding: 7BIT Content-Type: text/plain; charset=US-ASCII X-Originating-IP: [10.30.16.40] X-ClientProxiedBy: GFSHEXCH02.glenfly.com (10.5.250.52) To GFSHEXCH03.glenfly.com (10.5.250.53) X-Barracuda-Connect: GFSHEXCH03.glenfly.com[10.5.250.53] X-Barracuda-Start-Time: 1682472332 X-Barracuda-URL: https://10.5.252.52:443/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at glenfly.com X-Barracuda-Scan-Msg-Size: 5149 X-Barracuda-Bayes: SPAM GLOBAL 1.0000 1.0000 4.3430 X-Barracuda-Spam-Score: 4.34 X-Barracuda-Spam-Status: No, SCORE=4.34 using global scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=9.0 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.107934 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,SPF_HELO_NONE, SPF_PASS,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 From: jasontao Add a set of HD Audio PCI IDS, and the HDMI codec vendor IDs for Glenfly Gpus. - In default_bdl_pos_adj, set bdl to 128 as Glenfly Gpus have hardware limitation, need to increase hdac interrupt interval. - In azx_first_init, enable polling mode for Glenfly Gpu. When the codec complete the command, it sends interrupt and writes response entries to memory, howerver, the write requests sometimes are not actually synchronized to memory when driver handle hdac interrupt on Glenfly Gpus. If the RIRB status is not updated in the interrupt handler, azx_rirb_get_response keeps trying to recevie a response from rirb until 1s timeout. Enabling polling mode for Glenfly Gpu can fix the issue. - In patch_gf_hdmi, set Glenlfy Gpu Codec's no_sticky_stream as it need driver to do actual clean-ups for the linked codec when switch from one codec to another. Signed-off-by: jasontao Signed-off-by: Reaper Li --- v3: fix warnings for the patch. v2: add some comments for code and details in the commit log. sound/pci/hda/hda_intel.c | 21 +++++++++++++++++++++ sound/pci/hda/patch_hdmi.c | 22 ++++++++++++++++++++++ 2 files changed, 43 insertions(+) diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c index 77a592f21..31e16feaa 100644 --- a/sound/pci/hda/hda_intel.c +++ b/sound/pci/hda/hda_intel.c @@ -227,6 +227,7 @@ enum { AZX_DRIVER_ATI, AZX_DRIVER_ATIHDMI, AZX_DRIVER_ATIHDMI_NS, + AZX_DRIVER_GFHDMI, AZX_DRIVER_VIA, AZX_DRIVER_SIS, AZX_DRIVER_ULI, @@ -349,6 +350,7 @@ static const char * const driver_short_names[] = { [AZX_DRIVER_ATI] = "HDA ATI SB", [AZX_DRIVER_ATIHDMI] = "HDA ATI HDMI", [AZX_DRIVER_ATIHDMI_NS] = "HDA ATI HDMI", + [AZX_DRIVER_GFHDMI] = "HDA GF HDMI", [AZX_DRIVER_VIA] = "HDA VIA VT82xx", [AZX_DRIVER_SIS] = "HDA SIS966", [AZX_DRIVER_ULI] = "HDA ULI M5461", @@ -1743,6 +1745,12 @@ static int default_bdl_pos_adj(struct azx *chip) } switch (chip->driver_type) { + /* + * increase the bdl size for Glenfly Gpus for hardware + * limitation on hdac interrupt interval + */ + case AZX_DRIVER_GFHDMI: + return 128; case AZX_DRIVER_ICH: case AZX_DRIVER_PCH: return 1; @@ -1858,6 +1866,12 @@ static int azx_first_init(struct azx *chip) pci_write_config_dword(pci, PCI_BASE_ADDRESS_1, 0); } #endif + /* + * Fix response write request not synced to memory when handle + * hdac interrupt on Glenfly Gpus + */ + if (chip->driver_type == AZX_DRIVER_GFHDMI) + bus->polling_mode = 1; err = pcim_iomap_regions(pci, 1 << 0, "ICH HD audio"); if (err < 0) @@ -1959,6 +1973,7 @@ static int azx_first_init(struct azx *chip) chip->playback_streams = ATIHDMI_NUM_PLAYBACK; chip->capture_streams = ATIHDMI_NUM_CAPTURE; break; + case AZX_DRIVER_GFHDMI: case AZX_DRIVER_GENERIC: default: chip->playback_streams = ICH6_NUM_PLAYBACK; @@ -2724,6 +2739,12 @@ static const struct pci_device_id azx_ids[] = { { PCI_DEVICE(0x1002, 0xab38), .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI_NS | AZX_DCAPS_PM_RUNTIME }, + /* GLENFLY */ + { PCI_DEVICE(0x6766, PCI_ANY_ID), + .class = PCI_CLASS_MULTIMEDIA_HD_AUDIO << 8, + .class_mask = 0xffffff, + .driver_data = AZX_DRIVER_GFHDMI | AZX_DCAPS_POSFIX_LPIB | + AZX_DCAPS_NO_MSI | AZX_DCAPS_NO_64BIT }, /* VIA VT8251/VT8237A */ { PCI_DEVICE(0x1106, 0x3288), .driver_data = AZX_DRIVER_VIA }, /* VIA GFX VT7122/VX900 */ diff --git a/sound/pci/hda/patch_hdmi.c b/sound/pci/hda/patch_hdmi.c index 4ffa3a59f..0a1daef9d 100644 --- a/sound/pci/hda/patch_hdmi.c +++ b/sound/pci/hda/patch_hdmi.c @@ -4489,6 +4489,22 @@ static int patch_via_hdmi(struct hda_codec *codec) return patch_simple_hdmi(codec, VIAHDMI_CVT_NID, VIAHDMI_PIN_NID); } +static int patch_gf_hdmi(struct hda_codec *codec) +{ + int err; + + err = patch_generic_hdmi(codec); + if (err) + return err; + + /* + * Glenfly GPUs have two codecs, stream switches from one codec to + * another, need to do actual clean-ups in codec_cleanup_stream + */ + codec->no_sticky_stream = 1; + return 0; +} + /* * patch entries */ @@ -4579,6 +4595,12 @@ HDA_CODEC_ENTRY(0x10de009f, "GPU 9f HDMI/DP", patch_nvhdmi), HDA_CODEC_ENTRY(0x10de00a0, "GPU a0 HDMI/DP", patch_nvhdmi), HDA_CODEC_ENTRY(0x10de8001, "MCP73 HDMI", patch_nvhdmi_2ch), HDA_CODEC_ENTRY(0x10de8067, "MCP67/68 HDMI", patch_nvhdmi_2ch), +HDA_CODEC_ENTRY(0x67663d82, "Arise 82 HDMI/DP", patch_gf_hdmi), +HDA_CODEC_ENTRY(0x67663d83, "Arise 83 HDMI/DP", patch_gf_hdmi), +HDA_CODEC_ENTRY(0x67663d84, "Arise 84 HDMI/DP", patch_gf_hdmi), +HDA_CODEC_ENTRY(0x67663d85, "Arise 85 HDMI/DP", patch_gf_hdmi), +HDA_CODEC_ENTRY(0x67663d86, "Arise 86 HDMI/DP", patch_gf_hdmi), +HDA_CODEC_ENTRY(0x67663d87, "Arise 87 HDMI/DP", patch_gf_hdmi), HDA_CODEC_ENTRY(0x11069f80, "VX900 HDMI/DP", patch_via_hdmi), HDA_CODEC_ENTRY(0x11069f81, "VX900 HDMI/DP", patch_via_hdmi), HDA_CODEC_ENTRY(0x11069f84, "VX11 HDMI/DP", patch_generic_hdmi), -- 2.20.1