linux-sound.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/5] ASoC: Intel: avs: Refactor machine-board registration
@ 2025-08-27 14:22 Cezary Rojewski
  2025-08-27 14:22 ` [PATCH 1/5] ASoC: Intel: avs: New board registration routines Cezary Rojewski
                   ` (5 more replies)
  0 siblings, 6 replies; 11+ messages in thread
From: Cezary Rojewski @ 2025-08-27 14:22 UTC (permalink / raw)
  To: broonie; +Cc: tiwai, perex, amadeuszx.slawinski, linux-sound, Cezary Rojewski

Set of patches all connected to the machine-board registration process
and the board_selection.c file. Apart from LOC reduction, allows for
multiple cards of the same 'type' e.g.: avs_rt5640, to be present
simultanetously without any workarounds or tricks. The last patch
improves debugability - helps us (the devs) deal with basic I2S-boards
issues out there without forcing the user to constantly switch between
debug-friendly and non-debug options.

--

Initially I wanted to have the first two patches (new implementation and
the follow up cleanup) to be just one patch. However, the git diff, even
with --patience does not look good, at least in my opinion. Decided to
split the changes into two separate patches to make it easy to review
and comment.

As the first two patches carry heaviest load, the summary:
- provide a unified avs_register_board() wrapper for
  platform_device_register_data(PLATFORM_DEVID_AUTO). The _AUTO is what
  makes every device name unique and prevents any naming conflicts to
  occur when matching components <-> cards in runtime

- provide avs_register_board_pdata(), a wrapper one-level above
  avs_register_board() that takes all custom parameters in its argument
  list so that the initialization of 'struct avs_mach_pdata' does not
  need to be repeated in every function like its done today

- make use of the two above to write simpler registration functions:
  1. init any interface-type-specific values e.g.: SSP port for I2S
     board
  2. call avs_register_board_pdata()
  3. register the ASoC component with avs_register_xxx_component()

In regard to the last three patches - two are simplifications, no
functional changes just LOC reduction and readability.
The last one is to improve debug-ability, especially when working in the
open field - often we, the devs, find it useful when debugging
production systems to run i2s_test (the debug board) without impacting
the 'real' board e.g.: avs_rt5640. By default i2s_test is empty so a
typical user and their scenarios are not impacted.


Cezary Rojewski (5):
  ASoC: Intel: avs: New board registration routines
  ASoC: Intel: avs: Cleanup duplicate members
  ASoC: Intel: avs: Simplify dmi_match_quirk()
  ASoC: Intel: avs: Simplify avs_get_i2s_boards()
  ASoC: Intel: avs: Allow i2s test and non-test boards to coexist

 sound/soc/intel/avs/avs.h             |   1 -
 sound/soc/intel/avs/board_selection.c | 319 ++++++++++----------------
 2 files changed, 124 insertions(+), 196 deletions(-)

-- 
2.25.1


^ permalink raw reply	[flat|nested] 11+ messages in thread

* [PATCH 1/5] ASoC: Intel: avs: New board registration routines
  2025-08-27 14:22 [PATCH 0/5] ASoC: Intel: avs: Refactor machine-board registration Cezary Rojewski
@ 2025-08-27 14:22 ` Cezary Rojewski
  2025-08-27 14:22 ` [PATCH 2/5] ASoC: Intel: avs: Cleanup duplicate members Cezary Rojewski
                   ` (4 subsequent siblings)
  5 siblings, 0 replies; 11+ messages in thread
From: Cezary Rojewski @ 2025-08-27 14:22 UTC (permalink / raw)
  To: broonie; +Cc: tiwai, perex, amadeuszx.slawinski, linux-sound, Cezary Rojewski

To support multiple instances of the same card utilize
PLATFORM_DEVID_AUTO when registering new platform devices. This
adaptation is also an opportunity to streamline the devices
registration - avs_register_board().

All the new functions are equivalents of the existing ones apart from
adjusting platform_device_register_data() call with PLATFORM_DEVID_AUTO
and code size reduction given the presence of unified register function.
Follow up changes will complete the transition and cleanup the duplicate
members.

Reviewed-by: Amadeusz Sławiński <amadeuszx.slawinski@linux.intel.com>
Signed-off-by: Cezary Rojewski <cezary.rojewski@intel.com>
---
 sound/soc/intel/avs/board_selection.c | 145 ++++++++++++++++++++++++++
 1 file changed, 145 insertions(+)

diff --git a/sound/soc/intel/avs/board_selection.c b/sound/soc/intel/avs/board_selection.c
index e1d6fa344aa1..0195e5201a05 100644
--- a/sound/soc/intel/avs/board_selection.c
+++ b/sound/soc/intel/avs/board_selection.c
@@ -399,6 +399,90 @@ static const struct avs_acpi_boards *avs_get_i2s_boards(struct avs_dev *adev)
 	return NULL;
 }
 
+/* Platform devices spawned by AVS driver are removed with this hook. */
+static void avs_unregister_board(void *pdev)
+{
+	platform_device_unregister(pdev);
+}
+
+static struct platform_device *avs_register_board(struct avs_dev *adev, const char *name,
+						  const void *data, size_t size)
+{
+	struct platform_device *pdev;
+	int ret;
+
+	pdev = platform_device_register_data(NULL, name, PLATFORM_DEVID_AUTO, data, size);
+	if (IS_ERR(pdev))
+		return pdev;
+
+	ret = devm_add_action_or_reset(adev->dev, avs_unregister_board, pdev);
+	if (ret)
+		return ERR_PTR(ret);
+
+	return pdev;
+}
+
+static struct platform_device *avs_register_board_pdata(struct avs_dev *adev, const char *name,
+							struct snd_soc_acpi_mach *mach,
+							struct hda_codec *codec,
+							unsigned long *tdms, char *codec_name)
+{
+	struct avs_mach_pdata *pdata;
+
+	pdata = devm_kzalloc(adev->dev, sizeof(*pdata), GFP_KERNEL);
+	if (!pdata)
+		return ERR_PTR(-ENOMEM);
+
+	pdata->codec = codec;
+	pdata->tdms = tdms;
+	pdata->codec_name = codec_name;
+	pdata->obsolete_card_names = obsolete_card_names;
+	mach->pdata = pdata;
+
+	return avs_register_board(adev, name, mach, sizeof(*mach));
+}
+
+static int __maybe_unused avs_register_probe_board2(struct avs_dev *adev)
+{
+	struct platform_device *pdev;
+
+	pdev = avs_register_board(adev, "avs_probe_mb", NULL, 0);
+	if (IS_ERR(pdev))
+		return PTR_ERR(pdev);
+
+	return avs_register_probe_component(adev, dev_name(&pdev->dev));
+}
+
+__maybe_unused
+static int avs_register_dmic_board2(struct avs_dev *adev)
+{
+	static struct snd_soc_acpi_mach mach = {
+		.tplg_filename = "dmic-tplg.bin",
+	};
+	struct platform_device *pdev;
+	char *codec_name;
+
+	if (!acpi_nhlt_find_endpoint(ACPI_NHLT_LINKTYPE_PDM, -1, -1, -1)) {
+		dev_dbg(adev->dev, "no DMIC endpoints present\n");
+		return 0;
+	}
+
+	/* DMIC present in Intel PCH is enumerated statically. */
+	pdev = avs_register_board(adev, "dmic-codec", NULL, 0);
+	if (IS_ERR(pdev))
+		return PTR_ERR(pdev);
+
+	codec_name = devm_kstrdup(adev->dev, dev_name(&pdev->dev), GFP_KERNEL);
+	if (!codec_name)
+		return -ENOMEM;
+
+	pdev = avs_register_board_pdata(adev, "avs_dmic", &mach, NULL, NULL, codec_name);
+	if (IS_ERR(pdev))
+		return PTR_ERR(pdev);
+
+	return avs_register_dmic_component(adev, dev_name(&pdev->dev));
+}
+
 /* platform devices owned by AVS audio are removed with this hook */
 static void board_pdev_unregister(void *data)
 {
@@ -569,6 +653,31 @@ static int avs_register_i2s_test_board(struct avs_dev *adev, int ssp_port, int t
 	return 0;
 }
 
+__maybe_unused
+static int avs_register_i2s_test_board2(struct avs_dev *adev, int ssp_port, int tdm_slot)
+{
+	struct snd_soc_acpi_mach mach = {{0}};
+	struct platform_device *pdev;
+	unsigned long *tdms;
+
+	tdms = devm_kcalloc(adev->dev, ssp_port + 1, sizeof(*tdms), GFP_KERNEL);
+	mach.tplg_filename = devm_kasprintf(adev->dev, GFP_KERNEL,
+					    AVS_STRING_FMT("i2s", "-test-tplg.bin",
+							   ssp_port, tdm_slot));
+	if (!tdms || !mach.tplg_filename)
+		return -ENOMEM;
+
+	tdms[ssp_port] = BIT(tdm_slot);
+	mach.drv_name = "avs_i2s_test";
+	mach.mach_params.i2s_link_mask = AVS_SSP(ssp_port);
+
+	pdev = avs_register_board_pdata(adev, mach.drv_name, &mach, NULL, tdms, NULL);
+	if (IS_ERR(pdev))
+		return PTR_ERR(pdev);
+
+	return avs_register_i2s_component(adev, dev_name(&pdev->dev), AVS_SSP(ssp_port), tdms);
+}
+
 static int avs_register_i2s_test_boards(struct avs_dev *adev)
 {
 	int max_ssps = adev->hw_cfg.i2s_caps.ctrl_count;
@@ -601,6 +710,23 @@ static int avs_register_i2s_test_boards(struct avs_dev *adev)
 	return 0;
 }
 
+__maybe_unused
+static int avs_register_i2s_board2(struct avs_dev *adev, struct snd_soc_acpi_mach *mach)
+{
+	u32 i2s_mask = mach->mach_params.i2s_link_mask;
+	struct platform_device *pdev;
+	unsigned long *tdms = NULL;
+
+	if (mach->pdata)
+		tdms = ((struct avs_mach_pdata *)mach->pdata)->tdms;
+
+	pdev = avs_register_board_pdata(adev, mach->drv_name, mach, NULL, tdms, NULL);
+	if (IS_ERR(pdev))
+		return PTR_ERR(pdev);
+
+	return avs_register_i2s_component(adev, dev_name(&pdev->dev), i2s_mask, tdms);
+}
+
 static int avs_register_i2s_boards(struct avs_dev *adev)
 {
 	const struct avs_acpi_boards *boards;
@@ -684,6 +810,25 @@ static int avs_register_hda_board(struct avs_dev *adev, struct hda_codec *codec)
 	return 0;
 }
 
+__maybe_unused
+static int avs_register_hda_board2(struct avs_dev *adev, struct hda_codec *codec)
+{
+	struct hdac_device *hdev = &codec->core;
+	struct snd_soc_acpi_mach mach = {{0}};
+	struct platform_device *pdev;
+
+	mach.tplg_filename = devm_kasprintf(adev->dev, GFP_KERNEL, "hda-%08x-tplg.bin",
+					    hdev->vendor_id);
+	if (!mach.tplg_filename)
+		return -ENOMEM;
+
+	pdev = avs_register_board_pdata(adev, "avs_hdaudio", &mach, codec, NULL, NULL);
+	if (IS_ERR(pdev))
+		return PTR_ERR(pdev);
+
+	return avs_register_hda_component(adev, dev_name(&pdev->dev));
+}
+
 static int avs_register_hda_boards(struct avs_dev *adev)
 {
 	struct hdac_bus *bus = &adev->base.core;
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH 2/5] ASoC: Intel: avs: Cleanup duplicate members
  2025-08-27 14:22 [PATCH 0/5] ASoC: Intel: avs: Refactor machine-board registration Cezary Rojewski
  2025-08-27 14:22 ` [PATCH 1/5] ASoC: Intel: avs: New board registration routines Cezary Rojewski
@ 2025-08-27 14:22 ` Cezary Rojewski
  2025-08-29 22:55   ` Nathan Chancellor
  2025-08-27 14:22 ` [PATCH 3/5] ASoC: Intel: avs: Simplify dmi_match_quirk() Cezary Rojewski
                   ` (3 subsequent siblings)
  5 siblings, 1 reply; 11+ messages in thread
From: Cezary Rojewski @ 2025-08-27 14:22 UTC (permalink / raw)
  To: broonie; +Cc: tiwai, perex, amadeuszx.slawinski, linux-sound, Cezary Rojewski

Switch to the new board registration functions and remove the
then-unused code.

The SSP-number-check is still important and cannot be just dropped. Move
it from avs_register_i2s_board(), which is being removed with this
patch, to avs_register_i2s_boards() to maintain sanity when registering
a board.

Reviewed-by: Amadeusz Sławiński <amadeuszx.slawinski@linux.intel.com>
Signed-off-by: Cezary Rojewski <cezary.rojewski@intel.com>
---
 sound/soc/intel/avs/avs.h             |   1 -
 sound/soc/intel/avs/board_selection.c | 234 ++------------------------
 2 files changed, 10 insertions(+), 225 deletions(-)

diff --git a/sound/soc/intel/avs/avs.h b/sound/soc/intel/avs/avs.h
index 95f9ac2683c0..0f8ddd0e9e5f 100644
--- a/sound/soc/intel/avs/avs.h
+++ b/sound/soc/intel/avs/avs.h
@@ -22,7 +22,6 @@
 struct avs_dev;
 struct avs_tplg;
 struct avs_tplg_library;
-struct avs_soc_component;
 struct avs_ipc_msg;
 
 #ifdef CONFIG_ACPI
diff --git a/sound/soc/intel/avs/board_selection.c b/sound/soc/intel/avs/board_selection.c
index 0195e5201a05..edf20d7816ea 100644
--- a/sound/soc/intel/avs/board_selection.c
+++ b/sound/soc/intel/avs/board_selection.c
@@ -442,7 +442,7 @@ static struct platform_device *avs_register_board_pdata(struct avs_dev *adev, co
 	return avs_register_board(adev, name, mach, sizeof(*mach));
 }
 
-static int __maybe_unused avs_register_probe_board2(struct avs_dev *adev)
+static int __maybe_unused avs_register_probe_board(struct avs_dev *adev)
 {
 	struct platform_device *pdev;
 
@@ -453,8 +453,7 @@ static int __maybe_unused avs_register_probe_board2(struct avs_dev *adev)
 	return avs_register_probe_component(adev, dev_name(&pdev->dev));
 }
 
-__maybe_unused
-static int avs_register_dmic_board2(struct avs_dev *adev)
+static int avs_register_dmic_board(struct avs_dev *adev)
 {
 	static struct snd_soc_acpi_mach mach = {
 		.tplg_filename = "dmic-tplg.bin",
@@ -483,178 +482,7 @@ static int avs_register_dmic_board2(struct avs_dev *adev)
 	return avs_register_dmic_component(adev, dev_name(&pdev->dev));
 }
 
-/* platform devices owned by AVS audio are removed with this hook */
-static void board_pdev_unregister(void *data)
-{
-	platform_device_unregister(data);
-}
-
-static int __maybe_unused avs_register_probe_board(struct avs_dev *adev)
-{
-	struct platform_device *board;
-	struct snd_soc_acpi_mach mach = {{0}};
-	int ret;
-
-	ret = avs_register_probe_component(adev, "probe-platform");
-	if (ret < 0)
-		return ret;
-
-	mach.mach_params.platform = "probe-platform";
-
-	board = platform_device_register_data(NULL, "avs_probe_mb", PLATFORM_DEVID_NONE,
-					      (const void *)&mach, sizeof(mach));
-	if (IS_ERR(board)) {
-		dev_err(adev->dev, "probe board register failed\n");
-		return PTR_ERR(board);
-	}
-
-	ret = devm_add_action(adev->dev, board_pdev_unregister, board);
-	if (ret < 0) {
-		platform_device_unregister(board);
-		return ret;
-	}
-	return 0;
-}
-
-static int avs_register_dmic_board(struct avs_dev *adev)
-{
-	struct platform_device *codec, *board;
-	struct snd_soc_acpi_mach mach = {{0}};
-	struct avs_mach_pdata *pdata;
-	int ret;
-
-	if (!acpi_nhlt_find_endpoint(ACPI_NHLT_LINKTYPE_PDM, -1, -1, -1)) {
-		dev_dbg(adev->dev, "no DMIC endpoints present\n");
-		return 0;
-	}
-
-	codec = platform_device_register_simple("dmic-codec", PLATFORM_DEVID_NONE, NULL, 0);
-	if (IS_ERR(codec)) {
-		dev_err(adev->dev, "dmic codec register failed\n");
-		return PTR_ERR(codec);
-	}
-
-	ret = devm_add_action(adev->dev, board_pdev_unregister, codec);
-	if (ret < 0) {
-		platform_device_unregister(codec);
-		return ret;
-	}
-
-	ret = avs_register_dmic_component(adev, "dmic-platform");
-	if (ret < 0)
-		return ret;
-
-	pdata = devm_kzalloc(adev->dev, sizeof(*pdata), GFP_KERNEL);
-	if (!pdata)
-		return -ENOMEM;
-	pdata->obsolete_card_names = obsolete_card_names;
-	mach.pdata = pdata;
-	mach.tplg_filename = "dmic-tplg.bin";
-	mach.mach_params.platform = "dmic-platform";
-
-	board = platform_device_register_data(NULL, "avs_dmic", PLATFORM_DEVID_NONE,
-					(const void *)&mach, sizeof(mach));
-	if (IS_ERR(board)) {
-		dev_err(adev->dev, "dmic board register failed\n");
-		return PTR_ERR(board);
-	}
-
-	ret = devm_add_action(adev->dev, board_pdev_unregister, board);
-	if (ret < 0) {
-		platform_device_unregister(board);
-		return ret;
-	}
-
-	return 0;
-}
-
-static int avs_register_i2s_board(struct avs_dev *adev, struct snd_soc_acpi_mach *mach)
-{
-	struct platform_device *board;
-	struct avs_mach_pdata *pdata;
-	int num_ssps;
-	char *name;
-	int ret;
-	int uid;
-
-	num_ssps = adev->hw_cfg.i2s_caps.ctrl_count;
-	if (fls(mach->mach_params.i2s_link_mask) > num_ssps) {
-		dev_err(adev->dev, "Platform supports %d SSPs but board %s requires SSP%ld\n",
-			num_ssps, mach->drv_name,
-			(unsigned long)__fls(mach->mach_params.i2s_link_mask));
-		return -ENODEV;
-	}
-
-	pdata = mach->pdata;
-	if (!pdata)
-		pdata = devm_kzalloc(adev->dev, sizeof(*pdata), GFP_KERNEL);
-	if (!pdata)
-		return -ENOMEM;
-	pdata->obsolete_card_names = obsolete_card_names;
-	mach->pdata = pdata;
-
-	uid = mach->mach_params.i2s_link_mask;
-	if (avs_mach_singular_ssp(mach))
-		uid = (uid << AVS_CHANNELS_MAX) + avs_mach_ssp_tdm(mach, avs_mach_ssp_port(mach));
-
-	name = devm_kasprintf(adev->dev, GFP_KERNEL, "%s.%d-platform", mach->drv_name, uid);
-	if (!name)
-		return -ENOMEM;
-
-	ret = avs_register_i2s_component(adev, name, mach->mach_params.i2s_link_mask, pdata->tdms);
-	if (ret < 0)
-		return ret;
-
-	mach->mach_params.platform = name;
-
-	board = platform_device_register_data(NULL, mach->drv_name, uid,
-					      (const void *)mach, sizeof(*mach));
-	if (IS_ERR(board)) {
-		dev_err(adev->dev, "ssp board register failed\n");
-		return PTR_ERR(board);
-	}
-
-	ret = devm_add_action(adev->dev, board_pdev_unregister, board);
-	if (ret < 0) {
-		platform_device_unregister(board);
-		return ret;
-	}
-
-	return 0;
-}
-
 static int avs_register_i2s_test_board(struct avs_dev *adev, int ssp_port, int tdm_slot)
-{
-	struct snd_soc_acpi_mach *mach;
-	int tdm_mask = BIT(tdm_slot);
-	unsigned long *tdm_cfg;
-	char *tplg_name;
-	int ret;
-
-	mach = devm_kzalloc(adev->dev, sizeof(*mach), GFP_KERNEL);
-	tdm_cfg = devm_kcalloc(adev->dev, ssp_port + 1, sizeof(unsigned long), GFP_KERNEL);
-	tplg_name = devm_kasprintf(adev->dev, GFP_KERNEL, AVS_STRING_FMT("i2s", "-test-tplg.bin",
-				   ssp_port, tdm_slot));
-	if (!mach || !tdm_cfg || !tplg_name)
-		return -ENOMEM;
-
-	mach->drv_name = "avs_i2s_test";
-	mach->mach_params.i2s_link_mask = AVS_SSP(ssp_port);
-	tdm_cfg[ssp_port] = tdm_mask;
-	mach->pdata = tdm_cfg;
-	mach->tplg_filename = tplg_name;
-
-	ret = avs_register_i2s_board(adev, mach);
-	if (ret < 0) {
-		dev_warn(adev->dev, "register i2s %s failed: %d\n", mach->drv_name, ret);
-		return ret;
-	}
-
-	return 0;
-}
-
-__maybe_unused
-static int avs_register_i2s_test_board2(struct avs_dev *adev, int ssp_port, int tdm_slot)
 {
 	struct snd_soc_acpi_mach mach = {{0}};
 	struct platform_device *pdev;
@@ -710,8 +538,7 @@ static int avs_register_i2s_test_boards(struct avs_dev *adev)
 	return 0;
 }
 
-__maybe_unused
-static int avs_register_i2s_board2(struct avs_dev *adev, struct snd_soc_acpi_mach *mach)
+static int avs_register_i2s_board(struct avs_dev *adev, struct snd_soc_acpi_mach *mach)
 {
 	u32 i2s_mask = mach->mach_params.i2s_link_mask;
 	struct platform_device *pdev;
@@ -729,6 +556,7 @@ static int avs_register_i2s_board2(struct avs_dev *adev, struct snd_soc_acpi_mac
 
 static int avs_register_i2s_boards(struct avs_dev *adev)
 {
+	int num_ssps = adev->hw_cfg.i2s_caps.ctrl_count;
 	const struct avs_acpi_boards *boards;
 	struct snd_soc_acpi_mach *mach;
 	int ret;
@@ -751,6 +579,12 @@ static int avs_register_i2s_boards(struct avs_dev *adev)
 		if (!acpi_dev_present(mach->id, mach->uid, -1))
 			continue;
 
+		if (fls(mach->mach_params.i2s_link_mask) > num_ssps) {
+			dev_err(adev->dev, "Platform supports %d SSPs but board %s requires SSP%ld\n",
+				num_ssps, mach->drv_name,
+				(unsigned long)__fls(mach->mach_params.i2s_link_mask));
+			continue;
+		}
 		if (mach->machine_quirk)
 			if (!mach->machine_quirk(mach))
 				continue;
@@ -764,54 +598,6 @@ static int avs_register_i2s_boards(struct avs_dev *adev)
 }
 
 static int avs_register_hda_board(struct avs_dev *adev, struct hda_codec *codec)
-{
-	struct snd_soc_acpi_mach mach = {{0}};
-	struct platform_device *board;
-	struct avs_mach_pdata *pdata;
-	struct hdac_device *hdev = &codec->core;
-	char *pname;
-	int ret, id;
-
-	pname = devm_kasprintf(adev->dev, GFP_KERNEL, "%s-platform", dev_name(&hdev->dev));
-	if (!pname)
-		return -ENOMEM;
-
-	pdata = devm_kzalloc(adev->dev, sizeof(*pdata), GFP_KERNEL);
-	if (!pdata)
-		return -ENOMEM;
-	pdata->obsolete_card_names = obsolete_card_names;
-	pdata->codec = codec;
-
-	ret = avs_register_hda_component(adev, pname);
-	if (ret < 0)
-		return ret;
-
-	mach.pdata = pdata;
-	mach.mach_params.platform = pname;
-	mach.tplg_filename = devm_kasprintf(adev->dev, GFP_KERNEL, "hda-%08x-tplg.bin",
-					    hdev->vendor_id);
-	if (!mach.tplg_filename)
-		return -ENOMEM;
-
-	id = adev->base.core.idx * HDA_MAX_CODECS + hdev->addr;
-	board = platform_device_register_data(NULL, "avs_hdaudio", id, (const void *)&mach,
-					      sizeof(mach));
-	if (IS_ERR(board)) {
-		dev_err(adev->dev, "hda board register failed\n");
-		return PTR_ERR(board);
-	}
-
-	ret = devm_add_action(adev->dev, board_pdev_unregister, board);
-	if (ret < 0) {
-		platform_device_unregister(board);
-		return ret;
-	}
-
-	return 0;
-}
-
-__maybe_unused
-static int avs_register_hda_board2(struct avs_dev *adev, struct hda_codec *codec)
 {
 	struct hdac_device *hdev = &codec->core;
 	struct snd_soc_acpi_mach mach = {{0}};
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH 3/5] ASoC: Intel: avs: Simplify dmi_match_quirk()
  2025-08-27 14:22 [PATCH 0/5] ASoC: Intel: avs: Refactor machine-board registration Cezary Rojewski
  2025-08-27 14:22 ` [PATCH 1/5] ASoC: Intel: avs: New board registration routines Cezary Rojewski
  2025-08-27 14:22 ` [PATCH 2/5] ASoC: Intel: avs: Cleanup duplicate members Cezary Rojewski
@ 2025-08-27 14:22 ` Cezary Rojewski
  2025-08-27 14:22 ` [PATCH 4/5] ASoC: Intel: avs: Simplify avs_get_i2s_boards() Cezary Rojewski
                   ` (2 subsequent siblings)
  5 siblings, 0 replies; 11+ messages in thread
From: Cezary Rojewski @ 2025-08-27 14:22 UTC (permalink / raw)
  To: broonie; +Cc: tiwai, perex, amadeuszx.slawinski, linux-sound, Cezary Rojewski

No functional changes, just code lines reduction.

Reviewed-by: Amadeusz Sławiński <amadeuszx.slawinski@linux.intel.com>
Signed-off-by: Cezary Rojewski <cezary.rojewski@intel.com>
---
 sound/soc/intel/avs/board_selection.c | 12 +++---------
 1 file changed, 3 insertions(+), 9 deletions(-)

diff --git a/sound/soc/intel/avs/board_selection.c b/sound/soc/intel/avs/board_selection.c
index edf20d7816ea..4b0a8482af2e 100644
--- a/sound/soc/intel/avs/board_selection.c
+++ b/sound/soc/intel/avs/board_selection.c
@@ -58,19 +58,13 @@ static const struct dmi_system_id kblr_dmi_table[] = {
 static struct snd_soc_acpi_mach *dmi_match_quirk(void *arg)
 {
 	struct snd_soc_acpi_mach *mach = arg;
-	const struct dmi_system_id *dmi_id;
 	struct dmi_system_id *dmi_table;
 
-	if (mach->quirk_data == NULL)
-		return mach;
-
 	dmi_table = (struct dmi_system_id *)mach->quirk_data;
 
-	dmi_id = dmi_first_match(dmi_table);
-	if (!dmi_id)
-		return NULL;
-
-	return mach;
+	if (!dmi_table || dmi_first_match(dmi_table))
+		return mach;
+	return NULL;
 }
 
 #define AVS_SSP(x)		(BIT(x))
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH 4/5] ASoC: Intel: avs: Simplify avs_get_i2s_boards()
  2025-08-27 14:22 [PATCH 0/5] ASoC: Intel: avs: Refactor machine-board registration Cezary Rojewski
                   ` (2 preceding siblings ...)
  2025-08-27 14:22 ` [PATCH 3/5] ASoC: Intel: avs: Simplify dmi_match_quirk() Cezary Rojewski
@ 2025-08-27 14:22 ` Cezary Rojewski
  2025-08-27 14:22 ` [PATCH 5/5] ASoC: Intel: avs: Allow i2s test and non-test boards to coexist Cezary Rojewski
  2025-08-28 21:00 ` [PATCH 0/5] ASoC: Intel: avs: Refactor machine-board registration Mark Brown
  5 siblings, 0 replies; 11+ messages in thread
From: Cezary Rojewski @ 2025-08-27 14:22 UTC (permalink / raw)
  To: broonie; +Cc: tiwai, perex, amadeuszx.slawinski, linux-sound, Cezary Rojewski

No functional changes, just code simplification and readability
improvements as there is no need to operate on 'struct avs_acpi_boards'
if 'struct snd_soc_acpi_mach' is what interests us.

Reviewed-by: Amadeusz Sławiński <amadeuszx.slawinski@linux.intel.com>
Signed-off-by: Cezary Rojewski <cezary.rojewski@intel.com>
---
 sound/soc/intel/avs/board_selection.c | 20 ++++++++++----------
 1 file changed, 10 insertions(+), 10 deletions(-)

diff --git a/sound/soc/intel/avs/board_selection.c b/sound/soc/intel/avs/board_selection.c
index 4b0a8482af2e..8539ad3d97c4 100644
--- a/sound/soc/intel/avs/board_selection.c
+++ b/sound/soc/intel/avs/board_selection.c
@@ -364,10 +364,10 @@ struct avs_acpi_boards {
 
 /* supported I2S boards per platform */
 static const struct avs_acpi_boards i2s_boards[] = {
-	AVS_MACH_ENTRY(HDA_SKL_LP, avs_skl_i2s_machines),
-	AVS_MACH_ENTRY(HDA_KBL_LP, avs_kbl_i2s_machines),
-	AVS_MACH_ENTRY(HDA_APL, avs_apl_i2s_machines),
-	AVS_MACH_ENTRY(HDA_GML, avs_gml_i2s_machines),
+	AVS_MACH_ENTRY(HDA_SKL_LP,	avs_skl_i2s_machines),
+	AVS_MACH_ENTRY(HDA_KBL_LP,	avs_kbl_i2s_machines),
+	AVS_MACH_ENTRY(HDA_APL,		avs_apl_i2s_machines),
+	AVS_MACH_ENTRY(HDA_GML,		avs_gml_i2s_machines),
 	AVS_MACH_ENTRY(HDA_CNL_LP,	avs_cnl_i2s_machines),
 	AVS_MACH_ENTRY(HDA_CNL_H,	avs_cnl_i2s_machines),
 	AVS_MACH_ENTRY(HDA_CML_LP,	avs_cnl_i2s_machines),
@@ -382,14 +382,14 @@ static const struct avs_acpi_boards i2s_boards[] = {
 	{ },
 };
 
-static const struct avs_acpi_boards *avs_get_i2s_boards(struct avs_dev *adev)
+static struct snd_soc_acpi_mach *avs_get_i2s_machines(struct avs_dev *adev)
 {
 	int id, i;
 
 	id = adev->base.pci->device;
 	for (i = 0; i < ARRAY_SIZE(i2s_boards); i++)
 		if (i2s_boards[i].id == id)
-			return &i2s_boards[i];
+			return i2s_boards[i].machs;
 	return NULL;
 }
 
@@ -551,7 +551,7 @@ static int avs_register_i2s_board(struct avs_dev *adev, struct snd_soc_acpi_mach
 static int avs_register_i2s_boards(struct avs_dev *adev)
 {
 	int num_ssps = adev->hw_cfg.i2s_caps.ctrl_count;
-	const struct avs_acpi_boards *boards;
+	struct snd_soc_acpi_mach *machs;
 	struct snd_soc_acpi_mach *mach;
 	int ret;
 
@@ -563,13 +563,13 @@ static int avs_register_i2s_boards(struct avs_dev *adev)
 	if (i2s_test)
 		return avs_register_i2s_test_boards(adev);
 
-	boards = avs_get_i2s_boards(adev);
-	if (!boards) {
+	machs = avs_get_i2s_machines(adev);
+	if (!machs) {
 		dev_dbg(adev->dev, "no I2S endpoints supported\n");
 		return 0;
 	}
 
-	for (mach = boards->machs; mach->id[0]; mach++) {
+	for (mach = machs; mach->id[0]; mach++) {
 		if (!acpi_dev_present(mach->id, mach->uid, -1))
 			continue;
 
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH 5/5] ASoC: Intel: avs: Allow i2s test and non-test boards to coexist
  2025-08-27 14:22 [PATCH 0/5] ASoC: Intel: avs: Refactor machine-board registration Cezary Rojewski
                   ` (3 preceding siblings ...)
  2025-08-27 14:22 ` [PATCH 4/5] ASoC: Intel: avs: Simplify avs_get_i2s_boards() Cezary Rojewski
@ 2025-08-27 14:22 ` Cezary Rojewski
  2025-08-28 21:00 ` [PATCH 0/5] ASoC: Intel: avs: Refactor machine-board registration Mark Brown
  5 siblings, 0 replies; 11+ messages in thread
From: Cezary Rojewski @ 2025-08-27 14:22 UTC (permalink / raw)
  To: broonie; +Cc: tiwai, perex, amadeuszx.slawinski, linux-sound, Cezary Rojewski

The i2s_test card serves debug purpose and is not probed by default.
Currently i2s_test and non-i2s_test sound cards exclude each other. To
increase the test coverage, allow both board types to be probed
simultaneously and share the available SSP port pool.

As 'i2s_test' module parameter is empty by default and requires manual
input from user to activate, there is no impact for standard production
scenarios.

Reviewed-by: Amadeusz Sławiński <amadeuszx.slawinski@linux.intel.com>
Signed-off-by: Cezary Rojewski <cezary.rojewski@intel.com>
---
 sound/soc/intel/avs/board_selection.c | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/sound/soc/intel/avs/board_selection.c b/sound/soc/intel/avs/board_selection.c
index 8539ad3d97c4..52e6266a7cb8 100644
--- a/sound/soc/intel/avs/board_selection.c
+++ b/sound/soc/intel/avs/board_selection.c
@@ -507,6 +507,9 @@ static int avs_register_i2s_test_boards(struct avs_dev *adev)
 	unsigned long tdm_slots;
 	u32 *array, num_elems;
 
+	if (!i2s_test)
+		return 0;
+
 	ret = parse_int_array(i2s_test, strlen(i2s_test), (int **)&array);
 	if (ret) {
 		dev_err(adev->dev, "failed to parse i2s_test parameter\n");
@@ -560,9 +563,6 @@ static int avs_register_i2s_boards(struct avs_dev *adev)
 		return 0;
 	}
 
-	if (i2s_test)
-		return avs_register_i2s_test_boards(adev);
-
 	machs = avs_get_i2s_machines(adev);
 	if (!machs) {
 		dev_dbg(adev->dev, "no I2S endpoints supported\n");
@@ -649,6 +649,10 @@ int avs_register_all_boards(struct avs_dev *adev)
 		dev_warn(adev->dev, "enumerate DMIC endpoints failed: %d\n",
 			 ret);
 
+	ret = avs_register_i2s_test_boards(adev);
+	if (ret)
+		dev_dbg(adev->dev, "enumerate I2S TEST endpoints failed: %d\n", ret);
+
 	ret = avs_register_i2s_boards(adev);
 	if (ret < 0)
 		dev_warn(adev->dev, "enumerate I2S endpoints failed: %d\n",
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* Re: [PATCH 0/5] ASoC: Intel: avs: Refactor machine-board registration
  2025-08-27 14:22 [PATCH 0/5] ASoC: Intel: avs: Refactor machine-board registration Cezary Rojewski
                   ` (4 preceding siblings ...)
  2025-08-27 14:22 ` [PATCH 5/5] ASoC: Intel: avs: Allow i2s test and non-test boards to coexist Cezary Rojewski
@ 2025-08-28 21:00 ` Mark Brown
  5 siblings, 0 replies; 11+ messages in thread
From: Mark Brown @ 2025-08-28 21:00 UTC (permalink / raw)
  To: Cezary Rojewski; +Cc: tiwai, perex, amadeuszx.slawinski, linux-sound

On Wed, 27 Aug 2025 16:22:24 +0200, Cezary Rojewski wrote:
> Set of patches all connected to the machine-board registration process
> and the board_selection.c file. Apart from LOC reduction, allows for
> multiple cards of the same 'type' e.g.: avs_rt5640, to be present
> simultanetously without any workarounds or tricks. The last patch
> improves debugability - helps us (the devs) deal with basic I2S-boards
> issues out there without forcing the user to constantly switch between
> debug-friendly and non-debug options.
> 
> [...]

Applied to

   https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git for-next

Thanks!

[1/5] ASoC: Intel: avs: New board registration routines
      commit: 3351e814cb49dff7ef4808f5ebfb299162994118
[2/5] ASoC: Intel: avs: Cleanup duplicate members
      commit: 6acfaee44cbe9364a91dcc373fb4e6e395c5b20b
[3/5] ASoC: Intel: avs: Simplify dmi_match_quirk()
      commit: a44281b8b58a88ca3020c89fd697fc1cd18a31b4
[4/5] ASoC: Intel: avs: Simplify avs_get_i2s_boards()
      commit: db41fe9baa8b8bd1a1aa96962dd4294f2a9135c7
[5/5] ASoC: Intel: avs: Allow i2s test and non-test boards to coexist
      commit: a37280daa4d583c7212681c49b285de9464a5200

All being well this means that it will be integrated into the linux-next
tree (usually sometime in the next 24 hours) and sent to Linus during
the next merge window (or sooner if it is a bug fix), however if
problems are discovered then the patch may be dropped or reverted.

You may get further e-mails resulting from automated or manual testing
and review of the tree, please engage with people reporting problems and
send followup patches addressing any issues that are reported if needed.

If any updates are required or you are submitting further changes they
should be sent as incremental updates against current git, existing
patches will not be replaced.

Please add any relevant lists and maintainers to the CCs when replying
to this mail.

Thanks,
Mark


^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH 2/5] ASoC: Intel: avs: Cleanup duplicate members
  2025-08-27 14:22 ` [PATCH 2/5] ASoC: Intel: avs: Cleanup duplicate members Cezary Rojewski
@ 2025-08-29 22:55   ` Nathan Chancellor
  2025-09-01  7:58     ` Amadeusz Sławiński
  2025-09-01 15:42     ` Cezary Rojewski
  0 siblings, 2 replies; 11+ messages in thread
From: Nathan Chancellor @ 2025-08-29 22:55 UTC (permalink / raw)
  To: Cezary Rojewski; +Cc: broonie, tiwai, perex, amadeuszx.slawinski, linux-sound

Hi Cezary,

On Wed, Aug 27, 2025 at 04:22:26PM +0200, Cezary Rojewski wrote:
> Switch to the new board registration functions and remove the
> then-unused code.
> 
> The SSP-number-check is still important and cannot be just dropped. Move
> it from avs_register_i2s_board(), which is being removed with this
> patch, to avs_register_i2s_boards() to maintain sanity when registering
> a board.
> 
> Reviewed-by: Amadeusz Sławiński <amadeuszx.slawinski@linux.intel.com>
> Signed-off-by: Cezary Rojewski <cezary.rojewski@intel.com>

I just bisected a new NULL pointer dereference BUG on an old Chromebox
to this change as commit 6acfaee44cbe ("ASoC: Intel: avs: Cleanup
duplicate members") in next-20250829.

  # bad: [3cace99d63192a7250461b058279a42d91075d0c] Add linux-next specific files for 20250829
  # good: [07d9df80082b8d1f37e05658371b087cb6738770] Merge tag 'perf-tools-fixes-for-v6.17-2025-08-27' of git://git.kernel.org/pub/scm/linux/kernel/git/perf/perf-tools
  git bisect start '3cace99d63192a7250461b058279a42d91075d0c' '07d9df80082b8d1f37e05658371b087cb6738770'
  # good: [ed69ac5ab786c63567de97eabb2de68b1b825c70] Merge branch 'for-next' of https://git.kernel.org/pub/scm/linux/kernel/git/rdma/rdma.git
  git bisect good ed69ac5ab786c63567de97eabb2de68b1b825c70
  # good: [74439bec38b976b8bebfd9d1633336be49e7776f] Merge branch 'for-next' of https://git.kernel.org/pub/scm/linux/kernel/git/ieee1394/linux1394.git
  git bisect good 74439bec38b976b8bebfd9d1633336be49e7776f
  # bad: [afbaf44d1267d782ae2e199a46575cc42e8e412e] Merge branch 'next' of https://github.com/kvm-x86/linux.git
  git bisect bad afbaf44d1267d782ae2e199a46575cc42e8e412e
  # bad: [954addf857df7809d1d35a0cfccb8fc4d523bbcb] Merge branch 'for-next' of https://git.kernel.org/pub/scm/linux/kernel/git/broonie/spi.git
  git bisect bad 954addf857df7809d1d35a0cfccb8fc4d523bbcb
  # bad: [ae6606637e6d913bc3f2414f6bda2069e700c447] Merge branch 'pcmcia-next' of https://git.kernel.org/pub/scm/linux/kernel/git/brodo/linux.git
  git bisect bad ae6606637e6d913bc3f2414f6bda2069e700c447
  # bad: [fd92484f927ce7b4932ba767c9419f6b3b8c1ee2] Merge branch 'for-next' of https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git
  git bisect bad fd92484f927ce7b4932ba767c9419f6b3b8c1ee2
  # good: [7ed3723d612c200839820cea8a9ee86cbaa858a8] ASoC: es8323: power and mixer controls cleanup and
  git bisect good 7ed3723d612c200839820cea8a9ee86cbaa858a8
  # good: [bc017f28b1c6c3d44c3631f8f6d152b7e703e990] ASoC: imx-hdmi: remove cpu_pdev related code
  git bisect good bc017f28b1c6c3d44c3631f8f6d152b7e703e990
  # good: [f43095de82b04a11f7239fdf9e724d907ea3dc3b] ASoC: renesas: msiof: Make small adjustments to avoid
  git bisect good f43095de82b04a11f7239fdf9e724d907ea3dc3b
  # bad: [a37280daa4d583c7212681c49b285de9464a5200] ASoC: Intel: avs: Allow i2s test and non-test boards to coexist
  git bisect bad a37280daa4d583c7212681c49b285de9464a5200
  # bad: [6acfaee44cbe9364a91dcc373fb4e6e395c5b20b] ASoC: Intel: avs: Cleanup duplicate members
  git bisect bad 6acfaee44cbe9364a91dcc373fb4e6e395c5b20b
  # good: [3351e814cb49dff7ef4808f5ebfb299162994118] ASoC: Intel: avs: New board registration routines
  git bisect good 3351e814cb49dff7ef4808f5ebfb299162994118
  # first bad commit: [6acfaee44cbe9364a91dcc373fb4e6e395c5b20b] ASoC: Intel: avs: Cleanup duplicate members

  [    0.000000] Linux version 6.17.0-rc2-debug-00065-g6acfaee44cbe (nathan@ax162) (x86_64-linux-gcc (GCC) 15.2.0, GNU ld (GNU Binutils) 2.45) #1 SMP PREEMPT_DYNAMIC Fri Aug 29 15:20:49 MST 2025
  ...
  [    5.021907] BUG: kernel NULL pointer dereference, address: 0000000000000078
  [    5.022559] #PF: supervisor read access in kernel mode
  [    5.023201] #PF: error_code(0x0000) - not-present page
  [    5.023671] PGD 0 P4D 0
  [    5.024135] Oops: Oops: 0000 [#1] SMP PTI
  [    5.024600] CPU: 1 UID: 0 PID: 331 Comm: (udev-worker) Not tainted 6.17.0-rc2-debug-00065-g6acfaee44cbe #1 PREEMPT(full)  d53566f3620e7aa5231643b0a073759aa0a44325
  [    5.025086] Hardware name: Google Teemo/Teemo, BIOS MrChromebox-2503.0 04/27/2025
  [    5.025575] RIP: 0010:avs_probe_mb_probe+0x81/0x120 [snd_soc_avs_probe]
  [    5.026073] Code: 11 73 c1 4c 89 b0 98 00 00 00 48 c7 80 a8 00 00 00 80 f2 72 c1 48 c7 80 80 01 00 00 00 f1 72 c1 c7 80 88 01 00 00 01 00 00 00 <4c> 8b 6b 78 4d 85 ed 74 5c 45 31 e4 48 c7 c3 00 f1 72 c1 45 31 ff
  [    5.026605] RSP: 0018:ffffce34c0fb3958 EFLAGS: 00010202
  [    5.027146] RAX: ffff8a5a080a1828 RBX: 0000000000000000 RCX: ffff8a5a080a1800
  [    5.027691] RDX: ffff8a5a1176eec0 RSI: 0000000000000206 RDI: ffff8a5a1176eebc
  [    5.028238] RBP: ffff8a5a080a1828 R08: ffff8a5a080a1800 R09: 0000000000000000
  [    5.028783] R10: ffff8a5a1176ec10 R11: ffffffffb3fe0f1c R12: 0000000000000000
  [    5.029329] R13: ffffffffc172f048 R14: ffff8a5a1176ec10 R15: 0000000000000000
  [    5.029872] FS:  00007f77ba2ab880(0000) GS:ffff8a5bc0412000(0000) knlGS:0000000000000000
  [    5.030418] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
  [    5.030969] CR2: 0000000000000078 CR3: 0000000101596006 CR4: 00000000003726f0
  [    5.031523] Call Trace:
  [    5.032078]  <TASK>
  [    5.032631]  platform_probe+0x39/0x70
  [    5.033187]  really_probe+0xdb/0x340
  [    5.033744]  ? pm_runtime_barrier+0x55/0x90
  [    5.034299]  __driver_probe_device+0x78/0x140
  [    5.034851]  driver_probe_device+0x1f/0xa0
  [    5.035401]  ? __pfx___driver_attach+0x10/0x10
  [    5.035953]  __driver_attach+0xcb/0x1e0
  [    5.036496]  bus_for_each_dev+0x82/0xd0
  [    5.037035]  bus_add_driver+0x10b/0x1f0
  [    5.037569]  ? __pfx_avs_probe_mb_driver_init+0x10/0x10 [snd_soc_avs_probe 9609027b99174bdd389d56be49a8d1516e5fe3da]
  [    5.038121]  driver_register+0x75/0xe0
  [    5.038666]  do_one_initcall+0x58/0x300
  [    5.039209]  do_init_module+0x62/0x250
  [    5.039751]  ? init_module_from_file+0x8a/0xe0
  [    5.040292]  init_module_from_file+0x8a/0xe0
  [    5.040835]  idempotent_init_module+0x114/0x310
  [    5.041374]  __x64_sys_finit_module+0x6d/0xd0
  [    5.041911]  ? syscall_trace_enter+0x8d/0x1d0
  [    5.042449]  do_syscall_64+0x81/0x970
  [    5.042987]  ? switch_fpu_return+0x4e/0xd0
  [    5.043519]  ? do_syscall_64+0x214/0x970
  [    5.044056]  ? __pfx_page_put_link+0x10/0x10
  [    5.044597]  ? alloc_fd+0x12e/0x190
  [    5.045135]  ? do_sys_openat2+0xa2/0xe0
  [    5.045675]  ? __x64_sys_openat+0x61/0xa0
  [    5.046212]  ? do_syscall_64+0x81/0x970
  [    5.046744]  ? do_syscall_64+0x81/0x970
  [    5.047268]  ? do_syscall_64+0x81/0x970
  [    5.047790]  ? __irq_exit_rcu+0x4c/0xf0
  [    5.048316]  entry_SYSCALL_64_after_hwframe+0x76/0x7e
  [    5.048842] RIP: 0033:0x7f77ba11876d
  [    5.049380] Code: ff c3 66 2e 0f 1f 84 00 00 00 00 00 90 f3 0f 1e fa 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 8b 0d 73 05 0f 00 f7 d8 64 89 01 48
  [    5.049949] RSP: 002b:00007fff13465678 EFLAGS: 00000246 ORIG_RAX: 0000000000000139
  [    5.050534] RAX: ffffffffffffffda RBX: 000055feef565280 RCX: 00007f77ba11876d
  [    5.051122] RDX: 0000000000000004 RSI: 00007f77ba8b82f2 RDI: 0000000000000013
  [    5.051708] RBP: 00007fff13465710 R08: 0000000000000000 R09: 000055feef4d44a0
  [    5.052298] R10: 0000000000000000 R11: 0000000000000246 R12: 00007f77ba8b82f2
  [    5.052884] R13: 0000000000020000 R14: 000055feef572360 R15: 000055feef565280
  [    5.053474]  </TASK>
  [    5.054056] Modules linked in: snd_soc_avs_probe(+) ...
  [    5.054135]  ...
  [    5.061168] CR2: 0000000000000078
  [    5.061921] ---[ end trace 0000000000000000 ]---
  [    5.062777] RIP: 0010:avs_probe_mb_probe+0x81/0x120 [snd_soc_avs_probe]
  [    5.063624] Code: 11 73 c1 4c 89 b0 98 00 00 00 48 c7 80 a8 00 00 00 80 f2 72 c1 48 c7 80 80 01 00 00 00 f1 72 c1 c7 80 88 01 00 00 01 00 00 00 <4c> 8b 6b 78 4d 85 ed 74 5c 45 31 e4 48 c7 c3 00 f1 72 c1 45 31 ff
  [    5.064495] RSP: 0018:ffffce34c0fb3958 EFLAGS: 00010202
  [    5.065379] RAX: ffff8a5a080a1828 RBX: 0000000000000000 RCX: ffff8a5a080a1800
  [    5.066242] RDX: ffff8a5a1176eec0 RSI: 0000000000000206 RDI: ffff8a5a1176eebc
  [    5.067066] RBP: ffff8a5a080a1828 R08: ffff8a5a080a1800 R09: 0000000000000000
  [    5.067889] R10: ffff8a5a1176ec10 R11: ffffffffb3fe0f1c R12: 0000000000000000
  [    5.068711] R13: ffffffffc172f048 R14: ffff8a5a1176ec10 R15: 0000000000000000
  [    5.069535] FS:  00007f77ba2ab880(0000) GS:ffff8a5bc0412000(0000) knlGS:0000000000000000
  [    5.070364] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
  [    5.071195] CR2: 0000000000000078 CR3: 0000000101596006 CR4: 00000000003726f0
  [    5.072033] note: (udev-worker)[331] exited with irqs disabled
  [    5.074541] avs_hdaudio avs_hdaudio.14.auto: ASoC: Neither Component name/of_node are set for probing-LINK
  [    5.075468] avs_hdaudio avs_hdaudio.14.auto: probe with driver avs_hdaudio failed with error -22
  ...
  [    5.864482] avs_rt5663 avs_rt5663.13.auto: ASoC: Neither Component name/of_node are set for SSP1-Codec
  [    5.865189] avs_rt5663 avs_rt5663.13.auto: probe with driver avs_rt5663 failed with error -22
  ...

At the parent change, these are the messages I see with "avs" in them:

  [    4.664431] snd_soc_avs 0000:00:1f.3: bound 0000:00:02.0 (ops intel_audio_component_bind_ops [i915])
  [    5.046948] snd_soc_avs 0000:00:1f.3: Direct firmware load for intel/avs/hda-8086280b-tplg.bin failed with error -2
  [    5.046954] snd_soc_avs 0000:00:1f.3: request topology "intel/avs/hda-8086280b-tplg.bin" failed: -2
  [    5.047927] avs_hdaudio avs_hdaudio.2: trying to load fallback topology hda-8086-generic-tplg.bin
  [    5.048692] avs_hdaudio avs_hdaudio.2: ASoC: Parent card not yet available, widget card binding deferred
  [    5.050504] avs_hdaudio avs_hdaudio.2: avs_card_late_probe: mapping HDMI converter 1 to PCM 0 (000000005bf3f04e)
  [    5.050541] avs_hdaudio avs_hdaudio.2: avs_card_late_probe: mapping HDMI converter 2 to PCM 1 (00000000697f2eb5)
  [    5.050546] avs_hdaudio avs_hdaudio.2: avs_card_late_probe: mapping HDMI converter 3 to PCM 2 (0000000057bd76ab)
  [    5.056497] input: AVS HDMI HDMI/DP as /devices/platform/avs_hdaudio.2/sound/card0/input20
  [    5.056647] input: AVS HDMI HDMI/DP,pcm=1 as /devices/platform/avs_hdaudio.2/sound/card0/input21
  [    5.056706] input: AVS HDMI HDMI/DP,pcm=2 as /devices/platform/avs_hdaudio.2/sound/card0/input22
  [    5.849407] avs_rt5663 avs_rt5663.131072: ASoC: Parent card not yet available, widget card binding deferred
  [    5.850921] input: AVS I2S ALC5663 Headset Jack as /devices/platform/avs_rt5663.131072/sound/card2/input23

If there is any other additional information I can provide or patches I
can test, I am more than happy to do so.

Cheers,
Nathan

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH 2/5] ASoC: Intel: avs: Cleanup duplicate members
  2025-08-29 22:55   ` Nathan Chancellor
@ 2025-09-01  7:58     ` Amadeusz Sławiński
  2025-09-01 15:42     ` Cezary Rojewski
  1 sibling, 0 replies; 11+ messages in thread
From: Amadeusz Sławiński @ 2025-09-01  7:58 UTC (permalink / raw)
  To: Nathan Chancellor, Cezary Rojewski; +Cc: broonie, tiwai, perex, linux-sound

On 2025-08-30 00:55, Nathan Chancellor wrote:
> Hi Cezary,
> 
> On Wed, Aug 27, 2025 at 04:22:26PM +0200, Cezary Rojewski wrote:
>> Switch to the new board registration functions and remove the
>> then-unused code.
>>
>> The SSP-number-check is still important and cannot be just dropped. Move
>> it from avs_register_i2s_board(), which is being removed with this
>> patch, to avs_register_i2s_boards() to maintain sanity when registering
>> a board.
>>
>> Reviewed-by: Amadeusz Sławiński <amadeuszx.slawinski@linux.intel.com>
>> Signed-off-by: Cezary Rojewski <cezary.rojewski@intel.com>
> 
> I just bisected a new NULL pointer dereference BUG on an old Chromebox
> to this change as commit 6acfaee44cbe ("ASoC: Intel: avs: Cleanup
> duplicate members") in next-20250829.
> 
>    # bad: [3cace99d63192a7250461b058279a42d91075d0c] Add linux-next specific files for 20250829
>    # good: [07d9df80082b8d1f37e05658371b087cb6738770] Merge tag 'perf-tools-fixes-for-v6.17-2025-08-27' of git://git.kernel.org/pub/scm/linux/kernel/git/perf/perf-tools
>    git bisect start '3cace99d63192a7250461b058279a42d91075d0c' '07d9df80082b8d1f37e05658371b087cb6738770'
>    # good: [ed69ac5ab786c63567de97eabb2de68b1b825c70] Merge branch 'for-next' of https://git.kernel.org/pub/scm/linux/kernel/git/rdma/rdma.git
>    git bisect good ed69ac5ab786c63567de97eabb2de68b1b825c70
>    # good: [74439bec38b976b8bebfd9d1633336be49e7776f] Merge branch 'for-next' of https://git.kernel.org/pub/scm/linux/kernel/git/ieee1394/linux1394.git
>    git bisect good 74439bec38b976b8bebfd9d1633336be49e7776f
>    # bad: [afbaf44d1267d782ae2e199a46575cc42e8e412e] Merge branch 'next' of https://github.com/kvm-x86/linux.git
>    git bisect bad afbaf44d1267d782ae2e199a46575cc42e8e412e
>    # bad: [954addf857df7809d1d35a0cfccb8fc4d523bbcb] Merge branch 'for-next' of https://git.kernel.org/pub/scm/linux/kernel/git/broonie/spi.git
>    git bisect bad 954addf857df7809d1d35a0cfccb8fc4d523bbcb
>    # bad: [ae6606637e6d913bc3f2414f6bda2069e700c447] Merge branch 'pcmcia-next' of https://git.kernel.org/pub/scm/linux/kernel/git/brodo/linux.git
>    git bisect bad ae6606637e6d913bc3f2414f6bda2069e700c447
>    # bad: [fd92484f927ce7b4932ba767c9419f6b3b8c1ee2] Merge branch 'for-next' of https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git
>    git bisect bad fd92484f927ce7b4932ba767c9419f6b3b8c1ee2
>    # good: [7ed3723d612c200839820cea8a9ee86cbaa858a8] ASoC: es8323: power and mixer controls cleanup and
>    git bisect good 7ed3723d612c200839820cea8a9ee86cbaa858a8
>    # good: [bc017f28b1c6c3d44c3631f8f6d152b7e703e990] ASoC: imx-hdmi: remove cpu_pdev related code
>    git bisect good bc017f28b1c6c3d44c3631f8f6d152b7e703e990
>    # good: [f43095de82b04a11f7239fdf9e724d907ea3dc3b] ASoC: renesas: msiof: Make small adjustments to avoid
>    git bisect good f43095de82b04a11f7239fdf9e724d907ea3dc3b
>    # bad: [a37280daa4d583c7212681c49b285de9464a5200] ASoC: Intel: avs: Allow i2s test and non-test boards to coexist
>    git bisect bad a37280daa4d583c7212681c49b285de9464a5200
>    # bad: [6acfaee44cbe9364a91dcc373fb4e6e395c5b20b] ASoC: Intel: avs: Cleanup duplicate members
>    git bisect bad 6acfaee44cbe9364a91dcc373fb4e6e395c5b20b
>    # good: [3351e814cb49dff7ef4808f5ebfb299162994118] ASoC: Intel: avs: New board registration routines
>    git bisect good 3351e814cb49dff7ef4808f5ebfb299162994118
>    # first bad commit: [6acfaee44cbe9364a91dcc373fb4e6e395c5b20b] ASoC: Intel: avs: Cleanup duplicate members
> 
>    [    0.000000] Linux version 6.17.0-rc2-debug-00065-g6acfaee44cbe (nathan@ax162) (x86_64-linux-gcc (GCC) 15.2.0, GNU ld (GNU Binutils) 2.45) #1 SMP PREEMPT_DYNAMIC Fri Aug 29 15:20:49 MST 2025
>    ...
>    [    5.021907] BUG: kernel NULL pointer dereference, address: 0000000000000078
>    [    5.022559] #PF: supervisor read access in kernel mode
>    [    5.023201] #PF: error_code(0x0000) - not-present page
>    [    5.023671] PGD 0 P4D 0
>    [    5.024135] Oops: Oops: 0000 [#1] SMP PTI
>    [    5.024600] CPU: 1 UID: 0 PID: 331 Comm: (udev-worker) Not tainted 6.17.0-rc2-debug-00065-g6acfaee44cbe #1 PREEMPT(full)  d53566f3620e7aa5231643b0a073759aa0a44325
>    [    5.025086] Hardware name: Google Teemo/Teemo, BIOS MrChromebox-2503.0 04/27/2025
>    [    5.025575] RIP: 0010:avs_probe_mb_probe+0x81/0x120 [snd_soc_avs_probe]
>    [    5.026073] Code: 11 73 c1 4c 89 b0 98 00 00 00 48 c7 80 a8 00 00 00 80 f2 72 c1 48 c7 80 80 01 00 00 00 f1 72 c1 c7 80 88 01 00 00 01 00 00 00 <4c> 8b 6b 78 4d 85 ed 74 5c 45 31 e4 48 c7 c3 00 f1 72 c1 45 31 ff
>    [    5.026605] RSP: 0018:ffffce34c0fb3958 EFLAGS: 00010202
>    [    5.027146] RAX: ffff8a5a080a1828 RBX: 0000000000000000 RCX: ffff8a5a080a1800
>    [    5.027691] RDX: ffff8a5a1176eec0 RSI: 0000000000000206 RDI: ffff8a5a1176eebc
>    [    5.028238] RBP: ffff8a5a080a1828 R08: ffff8a5a080a1800 R09: 0000000000000000
>    [    5.028783] R10: ffff8a5a1176ec10 R11: ffffffffb3fe0f1c R12: 0000000000000000
>    [    5.029329] R13: ffffffffc172f048 R14: ffff8a5a1176ec10 R15: 0000000000000000
>    [    5.029872] FS:  00007f77ba2ab880(0000) GS:ffff8a5bc0412000(0000) knlGS:0000000000000000
>    [    5.030418] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
>    [    5.030969] CR2: 0000000000000078 CR3: 0000000101596006 CR4: 00000000003726f0
>    [    5.031523] Call Trace:
>    [    5.032078]  <TASK>
>    [    5.032631]  platform_probe+0x39/0x70
>    [    5.033187]  really_probe+0xdb/0x340
>    [    5.033744]  ? pm_runtime_barrier+0x55/0x90
>    [    5.034299]  __driver_probe_device+0x78/0x140
>    [    5.034851]  driver_probe_device+0x1f/0xa0
>    [    5.035401]  ? __pfx___driver_attach+0x10/0x10
>    [    5.035953]  __driver_attach+0xcb/0x1e0
>    [    5.036496]  bus_for_each_dev+0x82/0xd0
>    [    5.037035]  bus_add_driver+0x10b/0x1f0
>    [    5.037569]  ? __pfx_avs_probe_mb_driver_init+0x10/0x10 [snd_soc_avs_probe 9609027b99174bdd389d56be49a8d1516e5fe3da]
>    [    5.038121]  driver_register+0x75/0xe0
>    [    5.038666]  do_one_initcall+0x58/0x300
>    [    5.039209]  do_init_module+0x62/0x250
>    [    5.039751]  ? init_module_from_file+0x8a/0xe0
>    [    5.040292]  init_module_from_file+0x8a/0xe0
>    [    5.040835]  idempotent_init_module+0x114/0x310
>    [    5.041374]  __x64_sys_finit_module+0x6d/0xd0
>    [    5.041911]  ? syscall_trace_enter+0x8d/0x1d0
>    [    5.042449]  do_syscall_64+0x81/0x970
>    [    5.042987]  ? switch_fpu_return+0x4e/0xd0
>    [    5.043519]  ? do_syscall_64+0x214/0x970
>    [    5.044056]  ? __pfx_page_put_link+0x10/0x10
>    [    5.044597]  ? alloc_fd+0x12e/0x190
>    [    5.045135]  ? do_sys_openat2+0xa2/0xe0
>    [    5.045675]  ? __x64_sys_openat+0x61/0xa0
>    [    5.046212]  ? do_syscall_64+0x81/0x970
>    [    5.046744]  ? do_syscall_64+0x81/0x970
>    [    5.047268]  ? do_syscall_64+0x81/0x970
>    [    5.047790]  ? __irq_exit_rcu+0x4c/0xf0
>    [    5.048316]  entry_SYSCALL_64_after_hwframe+0x76/0x7e
>    [    5.048842] RIP: 0033:0x7f77ba11876d
>    [    5.049380] Code: ff c3 66 2e 0f 1f 84 00 00 00 00 00 90 f3 0f 1e fa 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 8b 0d 73 05 0f 00 f7 d8 64 89 01 48
>    [    5.049949] RSP: 002b:00007fff13465678 EFLAGS: 00000246 ORIG_RAX: 0000000000000139
>    [    5.050534] RAX: ffffffffffffffda RBX: 000055feef565280 RCX: 00007f77ba11876d
>    [    5.051122] RDX: 0000000000000004 RSI: 00007f77ba8b82f2 RDI: 0000000000000013
>    [    5.051708] RBP: 00007fff13465710 R08: 0000000000000000 R09: 000055feef4d44a0
>    [    5.052298] R10: 0000000000000000 R11: 0000000000000246 R12: 00007f77ba8b82f2
>    [    5.052884] R13: 0000000000020000 R14: 000055feef572360 R15: 000055feef565280
>    [    5.053474]  </TASK>
>    [    5.054056] Modules linked in: snd_soc_avs_probe(+) ...
>    [    5.054135]  ...
>    [    5.061168] CR2: 0000000000000078
>    [    5.061921] ---[ end trace 0000000000000000 ]---
>    [    5.062777] RIP: 0010:avs_probe_mb_probe+0x81/0x120 [snd_soc_avs_probe]
>    [    5.063624] Code: 11 73 c1 4c 89 b0 98 00 00 00 48 c7 80 a8 00 00 00 80 f2 72 c1 48 c7 80 80 01 00 00 00 f1 72 c1 c7 80 88 01 00 00 01 00 00 00 <4c> 8b 6b 78 4d 85 ed 74 5c 45 31 e4 48 c7 c3 00 f1 72 c1 45 31 ff
>    [    5.064495] RSP: 0018:ffffce34c0fb3958 EFLAGS: 00010202
>    [    5.065379] RAX: ffff8a5a080a1828 RBX: 0000000000000000 RCX: ffff8a5a080a1800
>    [    5.066242] RDX: ffff8a5a1176eec0 RSI: 0000000000000206 RDI: ffff8a5a1176eebc
>    [    5.067066] RBP: ffff8a5a080a1828 R08: ffff8a5a080a1800 R09: 0000000000000000
>    [    5.067889] R10: ffff8a5a1176ec10 R11: ffffffffb3fe0f1c R12: 0000000000000000
>    [    5.068711] R13: ffffffffc172f048 R14: ffff8a5a1176ec10 R15: 0000000000000000
>    [    5.069535] FS:  00007f77ba2ab880(0000) GS:ffff8a5bc0412000(0000) knlGS:0000000000000000
>    [    5.070364] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
>    [    5.071195] CR2: 0000000000000078 CR3: 0000000101596006 CR4: 00000000003726f0
>    [    5.072033] note: (udev-worker)[331] exited with irqs disabled
>    [    5.074541] avs_hdaudio avs_hdaudio.14.auto: ASoC: Neither Component name/of_node are set for probing-LINK
>    [    5.075468] avs_hdaudio avs_hdaudio.14.auto: probe with driver avs_hdaudio failed with error -22
>    ...
>    [    5.864482] avs_rt5663 avs_rt5663.13.auto: ASoC: Neither Component name/of_node are set for SSP1-Codec
>    [    5.865189] avs_rt5663 avs_rt5663.13.auto: probe with driver avs_rt5663 failed with error -22
>    ...
> 
> At the parent change, these are the messages I see with "avs" in them:
> 
>    [    4.664431] snd_soc_avs 0000:00:1f.3: bound 0000:00:02.0 (ops intel_audio_component_bind_ops [i915])
>    [    5.046948] snd_soc_avs 0000:00:1f.3: Direct firmware load for intel/avs/hda-8086280b-tplg.bin failed with error -2
>    [    5.046954] snd_soc_avs 0000:00:1f.3: request topology "intel/avs/hda-8086280b-tplg.bin" failed: -2
>    [    5.047927] avs_hdaudio avs_hdaudio.2: trying to load fallback topology hda-8086-generic-tplg.bin
>    [    5.048692] avs_hdaudio avs_hdaudio.2: ASoC: Parent card not yet available, widget card binding deferred
>    [    5.050504] avs_hdaudio avs_hdaudio.2: avs_card_late_probe: mapping HDMI converter 1 to PCM 0 (000000005bf3f04e)
>    [    5.050541] avs_hdaudio avs_hdaudio.2: avs_card_late_probe: mapping HDMI converter 2 to PCM 1 (00000000697f2eb5)
>    [    5.050546] avs_hdaudio avs_hdaudio.2: avs_card_late_probe: mapping HDMI converter 3 to PCM 2 (0000000057bd76ab)
>    [    5.056497] input: AVS HDMI HDMI/DP as /devices/platform/avs_hdaudio.2/sound/card0/input20
>    [    5.056647] input: AVS HDMI HDMI/DP,pcm=1 as /devices/platform/avs_hdaudio.2/sound/card0/input21
>    [    5.056706] input: AVS HDMI HDMI/DP,pcm=2 as /devices/platform/avs_hdaudio.2/sound/card0/input22
>    [    5.849407] avs_rt5663 avs_rt5663.131072: ASoC: Parent card not yet available, widget card binding deferred
>    [    5.850921] input: AVS I2S ALC5663 Headset Jack as /devices/platform/avs_rt5663.131072/sound/card2/input23
> 
> If there is any other additional information I can provide or patches I
> can test, I am more than happy to do so.
> 

Thanks for report, can you try disabling 
CONFIG_SND_SOC_INTEL_AVS_MACH_PROBE and see if that helps?


^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH 2/5] ASoC: Intel: avs: Cleanup duplicate members
  2025-08-29 22:55   ` Nathan Chancellor
  2025-09-01  7:58     ` Amadeusz Sławiński
@ 2025-09-01 15:42     ` Cezary Rojewski
  2025-09-01 15:58       ` Mark Brown
  1 sibling, 1 reply; 11+ messages in thread
From: Cezary Rojewski @ 2025-09-01 15:42 UTC (permalink / raw)
  To: Nathan Chancellor; +Cc: broonie, tiwai, perex, amadeuszx.slawinski, linux-sound

On 2025-08-30 12:55 AM, Nathan Chancellor wrote:
> Hi Cezary,
> 
> On Wed, Aug 27, 2025 at 04:22:26PM +0200, Cezary Rojewski wrote:
>> Switch to the new board registration functions and remove the
>> then-unused code.
>>
>> The SSP-number-check is still important and cannot be just dropped. Move
>> it from avs_register_i2s_board(), which is being removed with this
>> patch, to avs_register_i2s_boards() to maintain sanity when registering
>> a board.
>>
>> Reviewed-by: Amadeusz Sławiński <amadeuszx.slawinski@linux.intel.com>
>> Signed-off-by: Cezary Rojewski <cezary.rojewski@intel.com>
> 
> I just bisected a new NULL pointer dereference BUG on an old Chromebox
> to this change as commit 6acfaee44cbe ("ASoC: Intel: avs: Cleanup
> duplicate members") in next-20250829.

(...)

>    git bisect bad a37280daa4d583c7212681c49b285de9464a5200
>    # bad: [6acfaee44cbe9364a91dcc373fb4e6e395c5b20b] ASoC: Intel: avs: Cleanup duplicate members
>    git bisect bad 6acfaee44cbe9364a91dcc373fb4e6e395c5b20b
>    # good: [3351e814cb49dff7ef4808f5ebfb299162994118] ASoC: Intel: avs: New board registration routines
>    git bisect good 3351e814cb49dff7ef4808f5ebfb299162994118
>    # first bad commit: [6acfaee44cbe9364a91dcc373fb4e6e395c5b20b] ASoC: Intel: avs: Cleanup duplicate members
> 
>    [    0.000000] Linux version 6.17.0-rc2-debug-00065-g6acfaee44cbe (nathan@ax162) (x86_64-linux-gcc (GCC) 15.2.0, GNU ld (GNU Binutils) 2.45) #1 SMP PREEMPT_DYNAMIC Fri Aug 29 15:20:49 MST 2025
>    ...
>    [    5.021907] BUG: kernel NULL pointer dereference, address: 0000000000000078
>    [    5.022559] #PF: supervisor read access in kernel mode
>    [    5.023201] #PF: error_code(0x0000) - not-present page
>    [    5.023671] PGD 0 P4D 0
>    [    5.024135] Oops: Oops: 0000 [#1] SMP PTI
>    [    5.024600] CPU: 1 UID: 0 PID: 331 Comm: (udev-worker) Not tainted 6.17.0-rc2-debug-00065-g6acfaee44cbe #1 PREEMPT(full)  d53566f3620e7aa5231643b0a073759aa0a44325
>    [    5.025086] Hardware name: Google Teemo/Teemo, BIOS MrChromebox-2503.0 04/27/2025
>    [    5.025575] RIP: 0010:avs_probe_mb_probe+0x81/0x120 [snd_soc_avs_probe]

(...)

> If there is any other additional information I can provide or patches I
> can test, I am more than happy to do so.

Hi Nathan,

Thank you for the report - the form of your message made it easy to find 
the root cause, much appreciated. Hint pointed out by Amadeusz - try 
with probe-board disabled - sheds even more light on the problem.

Below diff is enough to address the null-ptr-deref:

diff --git a/sound/soc/intel/avs/board_selection.c 
b/sound/soc/intel/avs/board_selection.c
index 52e6266a7cb8..6412b0a010fa 100644
--- a/sound/soc/intel/avs/board_selection.c
+++ b/sound/soc/intel/avs/board_selection.c
@@ -438,9 +438,10 @@ static struct platform_device 
*avs_register_board_pdata(struct avs_dev *adev, co

  static int __maybe_unused avs_register_probe_board(struct avs_dev *adev)
  {
+       struct snd_soc_acpi_mach mach = {{0}};
         struct platform_device *pdev;

-       pdev = avs_register_board(adev, "avs_probe_mb", NULL, 0);
+       pdev = avs_register_board(adev, "avs_probe_mb", &mach, 
sizeof(mach));
         if (IS_ERR(pdev))
                 return PTR_ERR(pdev);
(end)

However, I do not believe that's the 'correct' way to proceed. The 
patchset of 5 is part of a larger series which I decided to split into 
smaller chunks to make it easier to review. Unfortunately, looks like I 
failed here and should have published a larger series instead. Even if 
harder to review, brings no problems as one observed above.

I see two options here:
a) revert this patchset and I'll simply sent a new, larger series
b) no revert and I'm sending the rest (~15 patches) to linux-sound

I believe Mark makes the call here, I'll follow up as required of me.

Kind regards,
Czarek

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* Re: [PATCH 2/5] ASoC: Intel: avs: Cleanup duplicate members
  2025-09-01 15:42     ` Cezary Rojewski
@ 2025-09-01 15:58       ` Mark Brown
  0 siblings, 0 replies; 11+ messages in thread
From: Mark Brown @ 2025-09-01 15:58 UTC (permalink / raw)
  To: Cezary Rojewski
  Cc: Nathan Chancellor, tiwai, perex, amadeuszx.slawinski, linux-sound

[-- Attachment #1: Type: text/plain, Size: 517 bytes --]

On Mon, Sep 01, 2025 at 05:42:39PM +0200, Cezary Rojewski wrote:

> I see two options here:
> a) revert this patchset and I'll simply sent a new, larger series
> b) no revert and I'm sending the rest (~15 patches) to linux-sound

> I believe Mark makes the call here, I'll follow up as required of me.

So long as it's sent promptly and doesn't take too long to review I
don't see any reason not to just do the second option, I'm assuming this
is already well tested internally and it was just the split that wasn't.

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2025-09-01 15:58 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-08-27 14:22 [PATCH 0/5] ASoC: Intel: avs: Refactor machine-board registration Cezary Rojewski
2025-08-27 14:22 ` [PATCH 1/5] ASoC: Intel: avs: New board registration routines Cezary Rojewski
2025-08-27 14:22 ` [PATCH 2/5] ASoC: Intel: avs: Cleanup duplicate members Cezary Rojewski
2025-08-29 22:55   ` Nathan Chancellor
2025-09-01  7:58     ` Amadeusz Sławiński
2025-09-01 15:42     ` Cezary Rojewski
2025-09-01 15:58       ` Mark Brown
2025-08-27 14:22 ` [PATCH 3/5] ASoC: Intel: avs: Simplify dmi_match_quirk() Cezary Rojewski
2025-08-27 14:22 ` [PATCH 4/5] ASoC: Intel: avs: Simplify avs_get_i2s_boards() Cezary Rojewski
2025-08-27 14:22 ` [PATCH 5/5] ASoC: Intel: avs: Allow i2s test and non-test boards to coexist Cezary Rojewski
2025-08-28 21:00 ` [PATCH 0/5] ASoC: Intel: avs: Refactor machine-board registration Mark Brown

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).