<p>HARSHAPRIYA N has uploaded this change for <strong>review</strong>.</p><p><a href="https://review.coreboot.org/25334">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">Eve: NHLT changes to enable Windows use audio codecs<br><br>This patch adds changes to nhlt to enable windows use audio codecs<br>and enable audio functionality<br><br>Change-Id: Ib13110f4d42e140aa1356ed0b6a6127943b6e800<br>---<br>M src/include/nhlt.h<br>M src/lib/nhlt.c<br>M src/mainboard/google/eve/mainboard.c<br>M src/soc/intel/skylake/include/soc/nhlt.h<br>M src/soc/intel/skylake/nhlt/max98927.c<br>M src/soc/intel/skylake/nhlt/rt5514.c<br>M src/soc/intel/skylake/nhlt/rt5663.c<br>7 files changed, 58 insertions(+), 17 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://review.coreboot.org:29418/coreboot refs/changes/34/25334/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/include/nhlt.h b/src/include/nhlt.h</span><br><span>index 5b72320..ddebd5f 100644</span><br><span>--- a/src/include/nhlt.h</span><br><span>+++ b/src/include/nhlt.h</span><br><span>@@ -207,6 +207,7 @@</span><br><span>      NHLT_DIR_RENDER,</span><br><span>     NHLT_DIR_CAPTURE,</span><br><span>    NHLT_DIR_BIDIRECTIONAL,</span><br><span style="color: hsl(120, 100%, 40%);">+       NHLT_DIR_FEEDBACK,</span><br><span> };</span><br><span> </span><br><span> /* Channel Mask for an endpoint. While they are prefixed with 'SPEAKER' the</span><br><span>@@ -301,6 +302,7 @@</span><br><span>    uint8_t num_endpoints;</span><br><span>       struct nhlt_endpoint endpoints[MAX_ENDPOINTS];</span><br><span>       uint8_t current_instance_id[NHLT_MAX_LINK_TYPES];</span><br><span style="color: hsl(120, 100%, 40%);">+     uint32_t buffer_size;</span><br><span> };</span><br><span> </span><br><span> struct nhlt_tdm_config {</span><br><span>@@ -313,6 +315,13 @@</span><br><span>   NHLT_TDM_MIC_ARRAY,</span><br><span> };</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+struct maxm_array_config {</span><br><span style="color: hsl(120, 100%, 40%);">+     struct nhlt_tdm_config tdm_config1;</span><br><span style="color: hsl(120, 100%, 40%);">+   uint8_t feedback_virtual_slot;</span><br><span style="color: hsl(120, 100%, 40%);">+        uint16_t feedback_channels;</span><br><span style="color: hsl(120, 100%, 40%);">+   uint16_t feedback_valid_bits_per_sample;</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> struct nhlt_dmic_array_config {</span><br><span>    struct nhlt_tdm_config tdm_config;</span><br><span>   uint8_t array_type;</span><br><span>diff --git a/src/lib/nhlt.c b/src/lib/nhlt.c</span><br><span>index da94415..723123c 100644</span><br><span>--- a/src/lib/nhlt.c</span><br><span>+++ b/src/lib/nhlt.c</span><br><span>@@ -275,7 +275,7 @@</span><br><span> </span><br><span> size_t nhlt_current_size(struct nhlt *nhlt)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-  return calc_size(nhlt) + sizeof(acpi_header_t);</span><br><span style="color: hsl(120, 100%, 40%);">+       return calc_size(nhlt) + sizeof(acpi_header_t) + sizeof(uint32_t);</span><br><span> }</span><br><span> </span><br><span> static void nhlt_free_resources(struct nhlt *nhlt)</span><br><span>@@ -386,6 +386,7 @@</span><br><span> </span><br><span>  for (i = 0; i < nhlt->num_endpoints; i++)</span><br><span>              serialize_endpoint(&nhlt->endpoints[i], cur);</span><br><span style="color: hsl(120, 100%, 40%);">+  ser32(cur, nhlt->buffer_size);</span><br><span> }</span><br><span> </span><br><span> uintptr_t nhlt_serialize(struct nhlt *nhlt, uintptr_t acpi_addr)</span><br><span>diff --git a/src/mainboard/google/eve/mainboard.c b/src/mainboard/google/eve/mainboard.c</span><br><span>index d30eff2..f8e3126 100644</span><br><span>--- a/src/mainboard/google/eve/mainboard.c</span><br><span>+++ b/src/mainboard/google/eve/mainboard.c</span><br><span>@@ -45,14 +45,26 @@</span><br><span>    /* 4 Channel DMIC array */</span><br><span>   if (nhlt_soc_add_rt5514(nhlt, AUDIO_LINK_SSP0, 4))</span><br><span>           printk(BIOS_ERR, "Couldn't add rt5514.\n");</span><br><span style="color: hsl(120, 100%, 40%);">+     nhlt->endpoints[nhlt->num_endpoints-1].instance_id = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+ nhlt->endpoints[nhlt->num_endpoints-1].subsystem_id = 0x006B;</span><br><span> </span><br><span>      /* RT5663 Headset codec */</span><br><span>   if (nhlt_soc_add_rt5663(nhlt, AUDIO_LINK_SSP1))</span><br><span>              printk(BIOS_ERR, "Couldn't add headset codec.\n");</span><br><span style="color: hsl(120, 100%, 40%);">+      nhlt->endpoints[nhlt->num_endpoints-1].instance_id = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+ nhlt->endpoints[nhlt->num_endpoints-1].subsystem_id = 0x006B;</span><br><span style="color: hsl(120, 100%, 40%);">+   nhlt->endpoints[nhlt->num_endpoints-2].instance_id = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+ nhlt->endpoints[nhlt->num_endpoints-2].subsystem_id = 0x006B;</span><br><span> </span><br><span>      /* MAXIM98927 Smart Amps for left and right channel */</span><br><span>       if (nhlt_soc_add_max98927(nhlt, AUDIO_LINK_SSP0))</span><br><span>            printk(BIOS_ERR, "Couldn't add max98927\n");</span><br><span style="color: hsl(120, 100%, 40%);">+    nhlt->endpoints[nhlt->num_endpoints-1].instance_id = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+ nhlt->endpoints[nhlt->num_endpoints-1].subsystem_id = 0x006B;</span><br><span style="color: hsl(120, 100%, 40%);">+   nhlt->endpoints[nhlt->num_endpoints-2].instance_id = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+ nhlt->endpoints[nhlt->num_endpoints-2].subsystem_id = 0x006B;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ nhlt->buffer_size = 0;</span><br><span> </span><br><span>        end_addr = nhlt_soc_serialize_oem_overrides(nhlt, start_addr,</span><br><span>                                    oem_id_maxim, oem_table_id_maxim, 0);</span><br><span>diff --git a/src/soc/intel/skylake/include/soc/nhlt.h b/src/soc/intel/skylake/include/soc/nhlt.h</span><br><span>index 1af27e8..b74d2e2 100644</span><br><span>--- a/src/soc/intel/skylake/include/soc/nhlt.h</span><br><span>+++ b/src/soc/intel/skylake/include/soc/nhlt.h</span><br><span>@@ -19,6 +19,7 @@</span><br><span> #include <nhlt.h></span><br><span> </span><br><span> #define NHLT_VID 0x8086</span><br><span style="color: hsl(120, 100%, 40%);">+#define NHLT_GOOGLE_VID 0x1ae0</span><br><span> #define NHLT_DID_DMIC 0xae20</span><br><span> #define NHLT_DID_BT 0xae30</span><br><span> #define NHLT_DID_SSP 0xae34</span><br><span>diff --git a/src/soc/intel/skylake/nhlt/max98927.c b/src/soc/intel/skylake/nhlt/max98927.c</span><br><span>index bbaf15d..060657a 100644</span><br><span>--- a/src/soc/intel/skylake/nhlt/max98927.c</span><br><span>+++ b/src/soc/intel/skylake/nhlt/max98927.c</span><br><span>@@ -16,15 +16,6 @@</span><br><span> #include <soc/nhlt.h></span><br><span> </span><br><span> static const struct nhlt_format_config max98927_render_formats[] = {</span><br><span style="color: hsl(0, 100%, 40%);">-      /* 48 KHz 24-bits per sample. */</span><br><span style="color: hsl(0, 100%, 40%);">-        {</span><br><span style="color: hsl(0, 100%, 40%);">-               .num_channels = 2,</span><br><span style="color: hsl(0, 100%, 40%);">-              .sample_freq_khz = 48,</span><br><span style="color: hsl(0, 100%, 40%);">-          .container_bits_per_sample = 32,</span><br><span style="color: hsl(0, 100%, 40%);">-                .valid_bits_per_sample = 24,</span><br><span style="color: hsl(0, 100%, 40%);">-            .speaker_mask = SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT,</span><br><span style="color: hsl(0, 100%, 40%);">-               .settings_file = "max98927-render-2ch-48khz-24b.bin",</span><br><span style="color: hsl(0, 100%, 40%);">- },</span><br><span>   /* 48 KHz 16-bits per sample. */</span><br><span>     {</span><br><span>            .num_channels = 2,</span><br><span>@@ -41,29 +32,55 @@</span><br><span>     {</span><br><span>            .num_channels = 4,</span><br><span>           .sample_freq_khz = 48,</span><br><span style="color: hsl(0, 100%, 40%);">-          .container_bits_per_sample = 32,</span><br><span style="color: hsl(120, 100%, 40%);">+              .container_bits_per_sample = 16,</span><br><span>             .valid_bits_per_sample = 16,</span><br><span>                 .speaker_mask = SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT |</span><br><span>                           SPEAKER_BACK_LEFT | SPEAKER_BACK_RIGHT,</span><br><span>              .settings_file = "max98927-render-2ch-48khz-16b.bin",</span><br><span>      },</span><br><span> };</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+static const struct maxm_array_config render_config = {</span><br><span style="color: hsl(120, 100%, 40%);">+   .tdm_config1 = {</span><br><span style="color: hsl(120, 100%, 40%);">+              .virtual_slot = 0x0,</span><br><span style="color: hsl(120, 100%, 40%);">+          .config_type = 0x3,</span><br><span style="color: hsl(120, 100%, 40%);">+   },</span><br><span style="color: hsl(120, 100%, 40%);">+    .feedback_virtual_slot = 2,</span><br><span style="color: hsl(120, 100%, 40%);">+   .feedback_channels = 4,</span><br><span style="color: hsl(120, 100%, 40%);">+       .feedback_valid_bits_per_sample = 16,</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+static const struct maxm_array_config capture_config = {</span><br><span style="color: hsl(120, 100%, 40%);">+ .tdm_config1 = {</span><br><span style="color: hsl(120, 100%, 40%);">+              .virtual_slot = 0x2,</span><br><span style="color: hsl(120, 100%, 40%);">+          .config_type = 0x3,</span><br><span style="color: hsl(120, 100%, 40%);">+   },</span><br><span style="color: hsl(120, 100%, 40%);">+    .feedback_virtual_slot = 0,</span><br><span style="color: hsl(120, 100%, 40%);">+   .feedback_channels = 2,</span><br><span style="color: hsl(120, 100%, 40%);">+       .feedback_valid_bits_per_sample = 16,</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> static const struct nhlt_endp_descriptor max98927_descriptors[] = {</span><br><span>         {</span><br><span>            .link = NHLT_LINK_SSP,</span><br><span>               .device = NHLT_SSP_DEV_I2S,</span><br><span>          .direction = NHLT_DIR_RENDER,</span><br><span style="color: hsl(0, 100%, 40%);">-           .vid = NHLT_VID,</span><br><span style="color: hsl(120, 100%, 40%);">+              .vid = NHLT_GOOGLE_VID,</span><br><span>              .did = NHLT_DID_SSP,</span><br><span style="color: hsl(120, 100%, 40%);">+          .cfg = &render_config,</span><br><span style="color: hsl(120, 100%, 40%);">+            .cfg_size = sizeof(render_config),</span><br><span>           .formats = max98927_render_formats,</span><br><span>          .num_formats = ARRAY_SIZE(max98927_render_formats),</span><br><span>  },</span><br><span>   {</span><br><span>            .link = NHLT_LINK_SSP,</span><br><span>               .device = NHLT_SSP_DEV_I2S,</span><br><span style="color: hsl(0, 100%, 40%);">-             .direction = NHLT_DIR_CAPTURE,</span><br><span style="color: hsl(0, 100%, 40%);">-          .vid = NHLT_VID,</span><br><span style="color: hsl(120, 100%, 40%);">+              .direction = NHLT_DIR_FEEDBACK,</span><br><span style="color: hsl(120, 100%, 40%);">+               .vid = NHLT_GOOGLE_VID,</span><br><span>              .did = NHLT_DID_SSP,</span><br><span style="color: hsl(120, 100%, 40%);">+          .cfg = &capture_config,</span><br><span style="color: hsl(120, 100%, 40%);">+           .cfg_size = sizeof(capture_config),</span><br><span>          .formats = max98927_capture_formats,</span><br><span>                 .num_formats = ARRAY_SIZE(max98927_capture_formats),</span><br><span>         },</span><br><span>diff --git a/src/soc/intel/skylake/nhlt/rt5514.c b/src/soc/intel/skylake/nhlt/rt5514.c</span><br><span>index 9c48c7b..686f3a4 100644</span><br><span>--- a/src/soc/intel/skylake/nhlt/rt5514.c</span><br><span>+++ b/src/soc/intel/skylake/nhlt/rt5514.c</span><br><span>@@ -30,6 +30,7 @@</span><br><span> </span><br><span> static const struct nhlt_dmic_array_config rt5514_4ch_mic_config = {</span><br><span>  .tdm_config = {</span><br><span style="color: hsl(120, 100%, 40%);">+               .virtual_slot = 0x1,</span><br><span>                 .config_type = NHLT_TDM_MIC_ARRAY,</span><br><span>   },</span><br><span>   .array_type = NHLT_MIC_ARRAY_4CH_L_SHAPED,</span><br><span>@@ -40,7 +41,7 @@</span><br><span>               .link = NHLT_LINK_SSP,</span><br><span>               .device = NHLT_SSP_DEV_I2S,</span><br><span>          .direction = NHLT_DIR_CAPTURE,</span><br><span style="color: hsl(0, 100%, 40%);">-          .vid = NHLT_VID,</span><br><span style="color: hsl(120, 100%, 40%);">+              .vid = NHLT_GOOGLE_VID,</span><br><span>              .did = NHLT_DID_SSP,</span><br><span>                 .cfg = &rt5514_4ch_mic_config,</span><br><span>           .cfg_size = sizeof(rt5514_4ch_mic_config),</span><br><span>diff --git a/src/soc/intel/skylake/nhlt/rt5663.c b/src/soc/intel/skylake/nhlt/rt5663.c</span><br><span>index c5a3f53..d602425 100644</span><br><span>--- a/src/soc/intel/skylake/nhlt/rt5663.c</span><br><span>+++ b/src/soc/intel/skylake/nhlt/rt5663.c</span><br><span>@@ -46,7 +46,7 @@</span><br><span>              .link = NHLT_LINK_SSP,</span><br><span>               .device = NHLT_SSP_DEV_I2S,</span><br><span>          .direction = NHLT_DIR_RENDER,</span><br><span style="color: hsl(0, 100%, 40%);">-           .vid = NHLT_VID,</span><br><span style="color: hsl(120, 100%, 40%);">+              .vid = NHLT_GOOGLE_VID,</span><br><span>              .did = NHLT_DID_SSP,</span><br><span>                 .cfg = &tdm_config,</span><br><span>              .cfg_size = sizeof(tdm_config),</span><br><span>@@ -58,7 +58,7 @@</span><br><span>          .link = NHLT_LINK_SSP,</span><br><span>               .device = NHLT_SSP_DEV_I2S,</span><br><span>          .direction = NHLT_DIR_CAPTURE,</span><br><span style="color: hsl(0, 100%, 40%);">-          .vid = NHLT_VID,</span><br><span style="color: hsl(120, 100%, 40%);">+              .vid = NHLT_GOOGLE_VID,</span><br><span>              .did = NHLT_DID_SSP,</span><br><span>                 .cfg = &tdm_config,</span><br><span>              .cfg_size = sizeof(tdm_config),</span><br><span></span><br></pre><p>To view, visit <a href="https://review.coreboot.org/25334">change 25334</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://review.coreboot.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://review.coreboot.org/25334"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: coreboot </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>
<div style="display:none"> Gerrit-Change-Id: Ib13110f4d42e140aa1356ed0b6a6127943b6e800 </div>
<div style="display:none"> Gerrit-Change-Number: 25334 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: HARSHAPRIYA N <harshapriya.n@intel.com> </div>