Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 8 additions & 3 deletions sound/soc/sof/intel/hda.c
Original file line number Diff line number Diff line change
Expand Up @@ -1337,6 +1337,8 @@ static struct snd_soc_acpi_mach *hda_sdw_machine_select(struct snd_sof_dev *sdev
return NULL;
}

chip = get_chip_info(sdev->pdata);

/*
* Select SoundWire machine driver if needed using the
* alternate tables. This case deals with SoundWire-only
Expand All @@ -1352,8 +1354,13 @@ static struct snd_soc_acpi_mach *hda_sdw_machine_select(struct snd_sof_dev *sdev
* first check whether link_mask of mach is subset of
* link_mask supported by hw and then go on searching
* link_adr
* For those platforms that can use the created SDW mach below,
* match the two masks exactly to avoid using an unexpected
* mach.
*/
if (~hdev->info.link_mask & mach->link_mask)
if (~hdev->info.link_mask & mach->link_mask ||
(hdev->info.link_mask != mach->link_mask &&
chip->hw_ip_version >= SOF_INTEL_ACE_2_0))
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

chip->hw_ip_version >= SOF_INTEL_ACE_2_0 because UpX is cAVS?
What we will do if a ACE3 hardware have all links enabled and only subset of that is used ?

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

chip->hw_ip_version >= SOF_INTEL_ACE_2_0 because UpX is cAVS?

No, it is because we will generate a machine match table for ACE 2.0+ platforms at line 1393 and below if no machine is selected.

What we will do if a ACE3 hardware have all links enabled and only subset of that is used ?

It will use the default SDW machine driver with function topology.

The PR is for #5721 where a subset topology is selected. Instead of removing all of the subsets or adding a new machine match table, I think don't match the subset makes more sense.

continue;

/* No need to match adr if there is no links defined */
Expand Down Expand Up @@ -1393,8 +1400,6 @@ static struct snd_soc_acpi_mach *hda_sdw_machine_select(struct snd_sof_dev *sdev
peripherals->array[i]->id.part_id,
peripherals->array[i]->id.sdw_version);

chip = get_chip_info(sdev->pdata);

/* SDCA was not well supported in the BIOS before ACE2.0 */
if (chip->hw_ip_version < SOF_INTEL_ACE_2_0)
return NULL;
Expand Down
Loading