Received: by 2002:a05:7412:1703:b0:e2:908c:2ebd with SMTP id dm3csp4006048rdb; Wed, 30 Aug 2023 12:23:38 -0700 (PDT) X-Google-Smtp-Source: AGHT+IEA8GWGQQz862B5UJ7JK+oaDZOmoDFuZZsQiokyfq5ibt5DHHW1dAWnLC0kkDVIt9UQKqQg X-Received: by 2002:a17:906:100b:b0:9a5:ca17:b58d with SMTP id 11-20020a170906100b00b009a5ca17b58dmr2728295ejm.50.1693423418719; Wed, 30 Aug 2023 12:23:38 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1693423418; cv=none; d=google.com; s=arc-20160816; b=r5dUeKe9e2lbEIr9QAxBWymXdi0h7hRzWmx73j7r9l8B3HuBUTEjFIXrH47j5AUPAT 0yg7c29kwKbyYwYGoxy0PK/V6A6Q0mC2AE/EQi3SZulInpDRETv8d6F9Ep6oUrll+Kzk QI4tAIF40ga+mK1xJgKIovHSKk3Nw+HgmB+VSWJnmefARtm+f3y/vtyLZtYaMn5qYQRF urLJNJpXjMc6fF6qCUQC70Wbg5hNY2mYkPZBbxLFk7mmbdeUzaIQT3fW1lnEauvxnAYE /e0cjprjB8D3Bzo8yLHTbSFX9KoxYUqptp5XoGtewDFGyf/GAYaFtGW7SmZLOz5jNhVM 3I8Q== 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; bh=oT68ExbJwYdeGIE6yE+I+rSoPBeEj5Og96jncXuJF68=; fh=gSlqDyTAaX4sD5o7lNdgN6GT1mkO6Z4/Ye0T8jAhwnM=; b=p92JDHvzclutInf0AHIeVgXfPBMN8mlM1BFT4Lm2dl1nWyuRfoU/Qn62p4sC4OcTjG clo8kO+DV6jCNGHKlQa5o2zQipnJ7JE1QC362ZOhkwPY8R0x9h9RkjkGL7yWqHYJ722W rCfknaHiyU8j2Lu3oenz9nFy06DG0mgv+5dTzSBzZFfZ1iXG4uuao7reCJk0ufjy4uQg WhD7w2nwC5o8lQc/Mbs2dlWffnNLWaAF3+aTrP7s8NWIn2OtIVrMnNVgVazEJKhFVjtX Sfz7vQXjAAHPnqiC449o+PqVDURpOxQd/gHKx49wjp5JbacZYooJm0KArR2Jh98XnQYc j9SA== 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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id bk20-20020a170906b0d400b00977e729a2f7si8374230ejb.951.2023.08.30.12.23.13; Wed, 30 Aug 2023 12:23:38 -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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S245071AbjH3TPn (ORCPT + 99 others); Wed, 30 Aug 2023 15:15:43 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46378 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S245582AbjH3PhR (ORCPT ); Wed, 30 Aug 2023 11:37:17 -0400 Received: from mblankhorst.nl (lankhorst.se [141.105.120.124]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A94D6113 for ; Wed, 30 Aug 2023 08:37:14 -0700 (PDT) From: Maarten Lankhorst To: alsa-devel@alsa-project.org Cc: Maarten Lankhorst , Jaroslav Kysela , Takashi Iwai , Cezary Rojewski , Pierre-Louis Bossart , Liam Girdwood , Peter Ujfalusi , Bard Liao , Ranjani Sridharan , Kai Vehmanen , Mark Brown , Daniel Baluta , linux-kernel@vger.kernel.org, sound-open-firmware@alsa-project.org Subject: [PATCH v4 10/11] ASoC: SOF: Intel: Move binding to display driver outside of deferred probe Date: Wed, 30 Aug 2023 17:36:51 +0200 Message-Id: <20230830153652.217855-11-maarten.lankhorst@linux.intel.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230830153652.217855-1-maarten.lankhorst@linux.intel.com> References: <20230830153652.217855-1-maarten.lankhorst@linux.intel.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-1.6 required=5.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,RCVD_IN_DNSWL_BLOCKED,SPF_HELO_NONE, SPF_NONE autolearn=no 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 Now that we can use -EPROBE_DEFER, it's no longer required to spin off the snd_hdac_i915_init into a workqueue. Use the -EPROBE_DEFER mechanism instead, which must be returned in the probe function. The previously added probe_no_wq can be used for this, and we also use the newly added remove_no_wq for unbinding afterwards. Signed-off-by: Maarten Lankhorst Cc: Pierre-Louis Bossart --- sound/soc/sof/intel/hda-common-ops.c | 1 + sound/soc/sof/intel/hda.c | 15 ++++++--------- sound/soc/sof/intel/hda.h | 1 + 3 files changed, 8 insertions(+), 9 deletions(-) diff --git a/sound/soc/sof/intel/hda-common-ops.c b/sound/soc/sof/intel/hda-common-ops.c index 803b5e9087782..1e2e9b6a5c1c2 100644 --- a/sound/soc/sof/intel/hda-common-ops.c +++ b/sound/soc/sof/intel/hda-common-ops.c @@ -17,6 +17,7 @@ struct snd_sof_dsp_ops sof_hda_common_ops = { /* probe/remove/shutdown */ .probe_no_wq = hda_dsp_probe_no_wq, + .remove_no_wq = hda_dsp_remove_no_wq, .probe = hda_dsp_probe, .remove = hda_dsp_remove, diff --git a/sound/soc/sof/intel/hda.c b/sound/soc/sof/intel/hda.c index e918b5dadfa02..886073598e40f 100644 --- a/sound/soc/sof/intel/hda.c +++ b/sound/soc/sof/intel/hda.c @@ -1160,6 +1160,7 @@ int hda_dsp_probe_no_wq(struct snd_sof_dev *sdev) return -ENOMEM; sdev->pdata->hw_pdata = hdev; hdev->desc = chip; + ret = hda_init(sdev); err: return ret; @@ -1195,9 +1196,6 @@ int hda_dsp_probe(struct snd_sof_dev *sdev) /* set up HDA base */ bus = sof_to_bus(sdev); - ret = hda_init(sdev); - if (ret < 0) - goto hdac_bus_unmap; if (sdev->dspless_mode_selected) goto skip_dsp_setup; @@ -1307,8 +1305,6 @@ int hda_dsp_probe(struct snd_sof_dev *sdev) iounmap(sdev->bar[HDA_DSP_BAR]); hdac_bus_unmap: platform_device_unregister(hdev->dmic_dev); - iounmap(bus->remap_addr); - hda_codec_i915_exit(sdev); return ret; } @@ -1317,7 +1313,6 @@ int hda_dsp_remove(struct snd_sof_dev *sdev) { struct sof_intel_hda_dev *hda = sdev->pdata->hw_pdata; const struct sof_intel_dsp_desc *chip = hda->desc; - struct hdac_bus *bus = sof_to_bus(sdev); struct pci_dev *pci = to_pci_dev(sdev->dev); struct nhlt_acpi_table *nhlt = hda->nhlt; @@ -1368,10 +1363,12 @@ int hda_dsp_remove(struct snd_sof_dev *sdev) if (!sdev->dspless_mode_selected) iounmap(sdev->bar[HDA_DSP_BAR]); - iounmap(bus->remap_addr); - - sof_hda_bus_exit(sdev); + return 0; +} +int hda_dsp_remove_no_wq(struct snd_sof_dev *sdev) +{ + iounmap(sof_to_bus(sdev)->remap_addr); hda_codec_i915_exit(sdev); return 0; diff --git a/sound/soc/sof/intel/hda.h b/sound/soc/sof/intel/hda.h index 89b8c239e9a5e..26ae11e4e1240 100644 --- a/sound/soc/sof/intel/hda.h +++ b/sound/soc/sof/intel/hda.h @@ -574,6 +574,7 @@ struct sof_intel_hda_stream { * DSP Core services. */ int hda_dsp_probe_no_wq(struct snd_sof_dev *sdev); +int hda_dsp_remove_no_wq(struct snd_sof_dev *sdev); int hda_dsp_probe(struct snd_sof_dev *sdev); int hda_dsp_remove(struct snd_sof_dev *sdev); int hda_dsp_core_power_up(struct snd_sof_dev *sdev, unsigned int core_mask); -- 2.39.2