[Sound-open-firmware] Machine drivers for SOF/non-SOF Intel configurations

Pierre-Louis Bossart pierre-louis.bossart at linux.intel.com
Mon Aug 26 18:12:09 CEST 2019


Hi Daniel,

> As far as I understand Intel uses the same machine drivers for SOF/non-SOF
> configurations.

Yes, but with restrictions: the BE dailinks make references to CPU DAIs 
whose names are exactly the same for SOF/non-SOF configurations. So 
that's an implicit naming compatibility requirement, e.g. 'SSP0 Pin'

In addition when the machine drivers define hard-coded FE-related 
dailinks, we tag and ignore them so that topology-defined ones are used.

> I don't exactly understand how this works.
> 
> 1) Can SOF/non-SOF sound cards co-exist?

it cannot happen since the SOF/non-SOF drivers cannot be probed at the 
same time, e.g. for Baytrail when you probe for a given ACPI ID you will 
have a single SOF/non-SOF driver probed, and as a result a single 
machine driver probed once the platform_device is created.

So the problem is rather SOF/non-SOF driver coexistence, not a machine 
driver problem.

> 2) In SOF the DAI is managed by the FW, how one prevents Linux DAI
> driver to be loaded in SOF.

there are different concepts here.

the topology and machine driver share the dai_link ID.
the topology and firmware share the dai_index information.

The dai->id is not something that the topology and firmware know about.

The DAI will be created by the Linux driver based on topology 
information (and a lookup of supported DAIs), and then the firmware will 
be configured with the topology-provided information.

I don't get how you see a conflict between driver and firmware, the 
driver is a proxy dealing with topology information and the firmware 
only deals with configurations provided by the driver.

> 3) Is there any SOF related information in ACPI tables.

no. ACPI tables are typically OS-independent, they only describe the DSP 
ID or codec ID.

Even when we use the initrd overlay method to add ACPI tables that 
aren't in the initial BIOS, there is nothing SOF-specific in those tables.

> 
> I am still trying to wrap my head around the idea implemented in sof-acpi-dev.c
> to make it work in the same way for sof-of-dev.c so sorry if the
> questions are not clear.

I think the key concept is that for ACPI we don't have a representation 
of the machine driver, which does exist for DeviceTree. This is not an 
ACPI limitation but rather the fact that Windows does not need anything 
in the firmware so we don't have anything to probe a machine driver. So 
we probe indirectly by looking for 'hints', e.g. a combination of other 
codec IDs and the CPU type, to manually probe the machine driver.

In the past for some Android-specific devices the machine driver was 
probed directly, but we've aligned with Windows usages. For prototyping 
we *could* go back in time and add a pretend device for machine drivers 
with the initrd overlays, that may be a way to test commonality with how 
DeviceTree works.

Hope this helps
Regards
-Pierre


More information about the Sound-open-firmware mailing list