[coreboot-gerrit] Patch set updated for coreboot: intel/kunimitsu: add nhlt support

Martin Roth (martinroth@google.com) gerrit at coreboot.org
Sat Jan 16 21:36:33 CET 2016


Martin Roth (martinroth at google.com) just uploaded a new patch set to gerrit, which you can find at https://review.coreboot.org/12959

-gerrit

commit 646f95d50dd68d322fefab1ec537af61bd115249
Author: Naresh G Solanki <Naresh.Solanki at intel.com>
Date:   Wed Dec 2 16:21:20 2015 +0530

    intel/kunimitsu: add nhlt support
    
    Provide an option for including the NHLT blobs within the
    kunimitsu mainboard directory while also adding the ACPI NHLT
    table generation that the current hardware supports.
    
    Kunimitsu do support two audio codec, ADI and MAXIM,
    hence use AUDIO_DB_ID to read correct codec and craete
    NHLT table, this will also help to load only one amplifier ASL
    for machine driver consumption.
    
    BUG=chrome-os-partner:44481
    BRANCH=None
    TEST=Built and booted kunimitsu board. Audio worked
    with both ADI and MAXIM audio card.
    CQ-DEPEND=CL:316352
    
    Change-Id: Ic9b9af83a0229fdf5f1cb019245ae65ad9d2f06c
    Signed-off-by: Patrick Georgi <pgeorgi at chromium.org>
    Original-Commit-Id: 2db85062d65c5e831da297588aa4abb18d6ed1bb
    Original-Change-Id: I3b08f3f23b334799a81cde81a30d6f231cc8583f
    Original-Signed-off-by: Naresh G Solanki <Naresh.Solanki at intel.com>
    Original-Signed-off-by: Subrata Banik <subrata.banik at intel.com>
    Original-Reviewed-on: https://chromium-review.googlesource.com/315450
    Original-Reviewed-by: Aaron Durbin <adurbin at chromium.org>
---
 src/mainboard/intel/kunimitsu/Kconfig            |  9 ++++
 src/mainboard/intel/kunimitsu/acpi/mainboard.asl | 21 +++++++--
 src/mainboard/intel/kunimitsu/mainboard.c        | 59 ++++++++++++++++++++++++
 3 files changed, 86 insertions(+), 3 deletions(-)

diff --git a/src/mainboard/intel/kunimitsu/Kconfig b/src/mainboard/intel/kunimitsu/Kconfig
index 6dabee6..9c1236a 100644
--- a/src/mainboard/intel/kunimitsu/Kconfig
+++ b/src/mainboard/intel/kunimitsu/Kconfig
@@ -51,4 +51,13 @@ config MAX_CPUS
 	int
 	default 8
 
+config INCLUDE_NHLT_BLOBS
+	bool "Include blobs for audio."
+	select NHLT_DMIC_2CH
+	select NHLT_DMIC_4CH
+	select NHLT_MAX98357
+	select NHLT_NAU88L25
+	select NHLT_SSM4567
+
 endif
+
diff --git a/src/mainboard/intel/kunimitsu/acpi/mainboard.asl b/src/mainboard/intel/kunimitsu/acpi/mainboard.asl
index 2eaee84..8006713 100644
--- a/src/mainboard/intel/kunimitsu/acpi/mainboard.asl
+++ b/src/mainboard/intel/kunimitsu/acpi/mainboard.asl
@@ -80,7 +80,12 @@ Scope (\_SB)
 
 		Method (_STA)
 		{
-			Return (0xF)
+			/* AUDIO_DB_ID = 0 If MAXIM Codec Present */
+			If (LEqual (\_SB.PCI0.GRXS (AUDIO_DB_ID), 0x0)) {
+				Return (0xF)
+			} Else {
+				Return (0x0)
+			}
 		}
 	}
 }
@@ -261,7 +266,12 @@ Scope (\_SB.PCI0.I2C4)
 
 		Method (_STA)
 		{
-			Return (0xF)
+			/* AUDIO_DB_ID = 1 If ADI Codec Present */
+			If (LEqual (GRXS (AUDIO_DB_ID), 0x1)) {
+				Return (0xF)
+			} Else {
+				Return (0x0)
+			}
 		}
 	}
 
@@ -285,7 +295,12 @@ Scope (\_SB.PCI0.I2C4)
 
 		Method (_STA)
 		{
-			Return (0xF)
+			/* AUDIO_DB_ID = 1 If ADI Codec Present */
+			If (LEqual (GRXS (AUDIO_DB_ID), 0x1)) {
+				Return (0xF)
+			} Else {
+				Return (0x0)
+			}
 		}
 	}
 }
diff --git a/src/mainboard/intel/kunimitsu/mainboard.c b/src/mainboard/intel/kunimitsu/mainboard.c
index bf54747..da5a2d4 100644
--- a/src/mainboard/intel/kunimitsu/mainboard.c
+++ b/src/mainboard/intel/kunimitsu/mainboard.c
@@ -15,15 +15,73 @@
  * GNU General Public License for more details.
  */
 
+#include <arch/acpi.h>
+#include <console/console.h>
 #include <device/device.h>
+#include <gpio.h>
 #include <stdlib.h>
+#include <soc/nhlt.h>
 #include "ec.h"
+#include "gpio.h"
 
 static void mainboard_init(device_t dev)
 {
 	mainboard_ec_init();
 }
 
+static uint8_t select_audio_codec(void)
+{
+	int audio_db_sel = gpio_get(AUDIO_DB_ID);
+
+	return audio_db_sel;
+}
+
+static unsigned long mainboard_write_acpi_tables(
+	device_t device, unsigned long current, acpi_rsdp_t *rsdp)
+{
+		uintptr_t start_addr;
+		uintptr_t end_addr;
+		struct nhlt *nhlt;
+
+		start_addr = current;
+
+		nhlt = nhlt_init();
+
+		if (nhlt == NULL)
+			return start_addr;
+
+		/* 2 Channel DMIC array. */
+		if (nhlt_soc_add_dmic_array(nhlt, 2))
+			printk(BIOS_ERR, "Couldn't add 2CH DMIC array.\n");
+
+
+		/* 4 Channel DMIC array. */
+		if (nhlt_soc_add_dmic_array(nhlt, 4))
+			printk(BIOS_ERR, "Couldn't add 4CH DMIC arrays.\n");
+
+		if (select_audio_codec()) {
+			/* ADI Smart Amps for left and right. */
+			if (nhlt_soc_add_ssm4567(nhlt, AUDIO_LINK_SSP0))
+				printk(BIOS_ERR, "Couldn't add ssm4567.\n");
+		}
+		else {
+			/* MAXIM Smart Amps for left and right. */
+			if (nhlt_soc_add_max98357(nhlt, AUDIO_LINK_SSP0))
+				printk(BIOS_ERR, "Couldn't add max98357.\n");
+		}
+
+		/* NAU88l25 Headset codec. */
+		if (nhlt_soc_add_nau88l25(nhlt, AUDIO_LINK_SSP1))
+			printk(BIOS_ERR, "Couldn't add headset codec.\n");
+
+		end_addr = nhlt_soc_serialize(nhlt, start_addr);
+
+		if (end_addr != start_addr)
+			acpi_add_table(rsdp, (void *)start_addr);
+
+		return end_addr;
+}
+
 /*
  * mainboard_enable is executed as first thing after
  * enumerate_buses().
@@ -31,6 +89,7 @@ static void mainboard_init(device_t dev)
 static void mainboard_enable(device_t dev)
 {
 	dev->ops->init = mainboard_init;
+	dev->ops->write_acpi_tables = mainboard_write_acpi_tables;
 }
 
 struct chip_operations mainboard_ops = {



More information about the coreboot-gerrit mailing list