vc/google: Decouple DSM_CALIB from CHROMEOS

DSM (Dynamic Speaker Management) uses calibration parameters stored in
a VPD (Vital Product Data) FMAP region to configure the audio output
via an ACPI _DSD table. This has no dependency on a ChromeOS, and can
be used by Linux/Windows drivers if appropriately configured.

Remove the dependency of DSM_CALIB (and the calibration file) on
CHROMEOS and replace it with VPD, so that non-CHROMEOS builds
can utilize this feature as well. Move files from underneath
vc/google/chromeos to underscore the point.

TEST=build/boot google/nightfury, dump ACPI, verify DSM calibraton
parameters present in _DSD table.

Change-Id: I643b3581bcc662befc9e30736dae806f94b055af
Signed-off-by: Matt DeVillier <matt.devillier@gmail.com>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/74812
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: CoolStar <coolstarorganization@gmail.com>
Reviewed-by: Sean Rhodes <sean@starlabs.systems>
Reviewed-by: Martin Roth <martin.roth@amd.corp-partner.google.com>
This commit is contained in:
Matt DeVillier 2023-01-17 13:51:29 -06:00 committed by Matt DeVillier
parent b78e462037
commit 1db8c57470
12 changed files with 59 additions and 47 deletions

View File

@ -8,7 +8,7 @@
#include <device/path.h> #include <device/path.h>
#include <identity.h> #include <identity.h>
#include <stdint.h> #include <stdint.h>
#include <vendorcode/google/chromeos/chromeos.h> #include <vendorcode/google/dsm_calib.h>
#include "chip.h" #include "chip.h"
#define MAX98390_ACPI_HID "MX98390" #define MAX98390_ACPI_HID "MX98390"
@ -47,7 +47,7 @@ static void max98390_fill_ssdt(const struct device *dev)
acpigen_write_resourcetemplate_footer(); acpigen_write_resourcetemplate_footer();
/* Device Properties */ /* Device Properties */
if (CONFIG(CHROMEOS_DSM_CALIB)) { if (CONFIG(GOOGLE_DSM_CALIB)) {
if (get_dsm_calibration_from_key(config->r0_calib_key, &r0_value) if (get_dsm_calibration_from_key(config->r0_calib_key, &r0_value)
|| get_dsm_calibration_from_key(config->temperature_calib_key, || get_dsm_calibration_from_key(config->temperature_calib_key,
&temp_value)) { &temp_value)) {
@ -63,7 +63,7 @@ static void max98390_fill_ssdt(const struct device *dev)
} }
} }
if (CONFIG(CHROMEOS_DSM_PARAM_FILE_NAME)) { if (CONFIG(GOOGLE_DSM_PARAM_FILE_NAME)) {
if (config->dsm_param_file_name) { if (config->dsm_param_file_name) {
if (!dp) if (!dp)
dp = acpi_dp_new_table("_DSD"); dp = acpi_dp_new_table("_DSD");

View File

@ -7,7 +7,7 @@
#include <device/device.h> #include <device/device.h>
#include <device/path.h> #include <device/path.h>
#include <stdint.h> #include <stdint.h>
#include <vendorcode/google/chromeos/chromeos.h> #include <vendorcode/google/dsm_calib.h>
#include "chip.h" #include "chip.h"
#define RT1011_ACPI_HID "10EC1011" #define RT1011_ACPI_HID "10EC1011"
@ -45,7 +45,7 @@ static void rt1011_fill_ssdt(const struct device *dev)
acpigen_write_resourcetemplate_footer(); acpigen_write_resourcetemplate_footer();
/* Device Properties */ /* Device Properties */
if (CONFIG(CHROMEOS_DSM_CALIB)) { if (CONFIG(GOOGLE_DSM_CALIB)) {
if (get_dsm_calibration_from_key(config->r0_calib_key, &r0_value) if (get_dsm_calibration_from_key(config->r0_calib_key, &r0_value)
|| get_dsm_calibration_from_key(config->temperature_calib_key, || get_dsm_calibration_from_key(config->temperature_calib_key,
&temp_value)) { &temp_value)) {

View File

@ -57,16 +57,16 @@ config BOARD_GOOGLE_FELWINTER
config BOARD_GOOGLE_GIMBLE config BOARD_GOOGLE_GIMBLE
bool "-> Gimble" bool "-> Gimble"
select BOARD_GOOGLE_BASEBOARD_BRYA select BOARD_GOOGLE_BASEBOARD_BRYA
select CHROMEOS_DSM_CALIB if CHROMEOS select GOOGLE_DSM_CALIB if VPD
select CHROMEOS_DSM_PARAM_FILE_NAME if CHROMEOS select GOOGLE_DSM_PARAM_FILE_NAME if VPD
select DRIVERS_GENESYSLOGIC_GL9750 select DRIVERS_GENESYSLOGIC_GL9750
select DRIVERS_I2C_MAX98390 select DRIVERS_I2C_MAX98390
config BOARD_GOOGLE_GIMBLE4ES config BOARD_GOOGLE_GIMBLE4ES
bool "-> Gimble4ES" bool "-> Gimble4ES"
select BOARD_GOOGLE_BASEBOARD_BRYA select BOARD_GOOGLE_BASEBOARD_BRYA
select CHROMEOS_DSM_CALIB if CHROMEOS select GOOGLE_DSM_CALIB if VPD
select CHROMEOS_DSM_PARAM_FILE_NAME if CHROMEOS select GOOGLE_DSM_PARAM_FILE_NAME if VPD
select DEFAULT_ADL_NEM select DEFAULT_ADL_NEM
select DRIVERS_GENESYSLOGIC_GL9750 select DRIVERS_GENESYSLOGIC_GL9750
select DRIVERS_I2C_MAX98390 select DRIVERS_I2C_MAX98390
@ -118,8 +118,8 @@ config BOARD_GOOGLE_PRIMUS4ES
config BOARD_GOOGLE_REDRIX config BOARD_GOOGLE_REDRIX
bool "-> Redrix" bool "-> Redrix"
select BOARD_GOOGLE_BASEBOARD_BRYA select BOARD_GOOGLE_BASEBOARD_BRYA
select CHROMEOS_DSM_CALIB if CHROMEOS select GOOGLE_DSM_CALIB if VPD
select CHROMEOS_DSM_PARAM_FILE_NAME if CHROMEOS select GOOGLE_DSM_PARAM_FILE_NAME if VPD
select DRIVERS_GENESYSLOGIC_GL9755 select DRIVERS_GENESYSLOGIC_GL9755
select DRIVERS_GFX_GENERIC select DRIVERS_GFX_GENERIC
select DRIVERS_I2C_MAX98390 select DRIVERS_I2C_MAX98390
@ -130,8 +130,8 @@ config BOARD_GOOGLE_REDRIX
config BOARD_GOOGLE_REDRIX4ES config BOARD_GOOGLE_REDRIX4ES
bool "-> Redrix4ES" bool "-> Redrix4ES"
select BOARD_GOOGLE_BASEBOARD_BRYA select BOARD_GOOGLE_BASEBOARD_BRYA
select CHROMEOS_DSM_CALIB if CHROMEOS select GOOGLE_DSM_CALIB if VPD
select CHROMEOS_DSM_PARAM_FILE_NAME if CHROMEOS select GOOGLE_DSM_PARAM_FILE_NAME if VPD
select DEFAULT_ADL_NEM select DEFAULT_ADL_NEM
select DRIVERS_GENESYSLOGIC_GL9755 select DRIVERS_GENESYSLOGIC_GL9755
select DRIVERS_GFX_GENERIC select DRIVERS_GFX_GENERIC

View File

@ -44,13 +44,13 @@ config BOARD_GOOGLE_HATCH
config BOARD_GOOGLE_HELIOS config BOARD_GOOGLE_HELIOS
select BOARD_GOOGLE_BASEBOARD_HATCH select BOARD_GOOGLE_BASEBOARD_HATCH
select CHROMEOS_DSM_CALIB if CHROMEOS select GOOGLE_DSM_CALIB if VPD
select DRIVERS_I2C_RT1011 select DRIVERS_I2C_RT1011
select INTEL_GMA_HAVE_VBT select INTEL_GMA_HAVE_VBT
config BOARD_GOOGLE_HELIOS_DISKSWAP config BOARD_GOOGLE_HELIOS_DISKSWAP
select BOARD_GOOGLE_BASEBOARD_HATCH select BOARD_GOOGLE_BASEBOARD_HATCH
select CHROMEOS_DSM_CALIB if CHROMEOS select GOOGLE_DSM_CALIB if VPD
select DRIVERS_I2C_RT1011 select DRIVERS_I2C_RT1011
select INTEL_GMA_HAVE_VBT select INTEL_GMA_HAVE_VBT
@ -74,13 +74,13 @@ config BOARD_GOOGLE_MUSHU
config BOARD_GOOGLE_NIGHTFURY config BOARD_GOOGLE_NIGHTFURY
select BOARD_GOOGLE_BASEBOARD_HATCH select BOARD_GOOGLE_BASEBOARD_HATCH
select CHROMEOS_DSM_CALIB if CHROMEOS select GOOGLE_DSM_CALIB if VPD
select DRIVERS_I2C_MAX98390 select DRIVERS_I2C_MAX98390
select INTEL_GMA_HAVE_VBT select INTEL_GMA_HAVE_VBT
config BOARD_GOOGLE_PALKIA config BOARD_GOOGLE_PALKIA
select BOARD_GOOGLE_BASEBOARD_HATCH select BOARD_GOOGLE_BASEBOARD_HATCH
select CHROMEOS_DSM_CALIB if CHROMEOS select GOOGLE_DSM_CALIB if VPD
select DRIVERS_I2C_RT1011 select DRIVERS_I2C_RT1011
if BOARD_GOOGLE_BASEBOARD_HATCH if BOARD_GOOGLE_BASEBOARD_HATCH

View File

@ -77,7 +77,7 @@ config BOARD_GOOGLE_HALVOR
config BOARD_GOOGLE_LINDAR config BOARD_GOOGLE_LINDAR
select BOARD_GOOGLE_BASEBOARD_VOLTEER select BOARD_GOOGLE_BASEBOARD_VOLTEER
select CHROMEOS_DSM_CALIB if CHROMEOS select GOOGLE_DSM_CALIB if VPD
select DRIVERS_GENERIC_BAYHUB_LV2 select DRIVERS_GENERIC_BAYHUB_LV2
select DRIVERS_I2C_RT1011 select DRIVERS_I2C_RT1011
select INTEL_CAR_NEM select INTEL_CAR_NEM

View File

@ -9,3 +9,22 @@ config GOOGLE_SMBIOS_MAINBOARD_VERSION
help help
Provide a common implementation for mainboard version, Provide a common implementation for mainboard version,
which returns a formatted 'rev%d' board_id() string. which returns a formatted 'rev%d' board_id() string.
config GOOGLE_DSM_CALIB
bool
default n
depends on VPD
help
On some boards, there are calibrated parameters for Dynamic Speaker Management(DSM)
stored in VPD. Enable this config to read and parse these VPD values and write them
to ACPI DSD table in device driver. These parameters will be applied by kernel driver
through device property at boot.
config GOOGLE_DSM_PARAM_FILE_NAME
bool
default n
depends on GOOGLE_DSM_CALIB
help
On some boards, there are different dsm parameter files for Dynamic Speaker
Management (DSM). Enable this config to assign dsm parameters file name in ACPI
SSDT table. Kernel driver uses this to load the DSM parameter file.

View File

@ -2,4 +2,5 @@
subdirs-$(CONFIG_CHROMEOS) += chromeos subdirs-$(CONFIG_CHROMEOS) += chromeos
ramstage-$(CONFIG_GOOGLE_DSM_CALIB) += dsm_calib.c
ramstage-$(CONFIG_GOOGLE_SMBIOS_MAINBOARD_VERSION) += smbios.c ramstage-$(CONFIG_GOOGLE_SMBIOS_MAINBOARD_VERSION) += smbios.c

View File

@ -57,23 +57,6 @@ config CHROMEOS_USE_EC_WATCHDOG_FLAG
help help
Use the AP watchdog flag stored in EC. Use the AP watchdog flag stored in EC.
config CHROMEOS_DSM_CALIB
bool
default n
help
On some boards, there are calibrated parameters for Dynamic Speaker Management(DSM)
stored in VPD. Enable this config to read and parse these VPD values and write them
to ACPI DSD table in device driver. These parameters will be applied by kernel driver
through device property at boot.
config CHROMEOS_DSM_PARAM_FILE_NAME
bool
default n
help
On some boards, there are different dsm parameter files for Dynamic Speaker
Management (DSM). Enable this config to assign dsm parameters file name in ACPI
SSDT table. Kernel driver uses this to load the DSM parameter file.
config CHROMEOS_CSE_BOARD_RESET_OVERRIDE config CHROMEOS_CSE_BOARD_RESET_OVERRIDE
bool bool
default n default n

View File

@ -8,7 +8,6 @@ ramstage-y += vpd_mac.c vpd_serialno.c vpd_calibration.c
ramstage-$(CONFIG_CHROMEOS_DISABLE_PLATFORM_HIERARCHY_ON_RESUME) += tpm2.c ramstage-$(CONFIG_CHROMEOS_DISABLE_PLATFORM_HIERARCHY_ON_RESUME) += tpm2.c
ramstage-$(CONFIG_HAVE_REGULATORY_DOMAIN) += wrdd.c ramstage-$(CONFIG_HAVE_REGULATORY_DOMAIN) += wrdd.c
ramstage-$(CONFIG_USE_SAR) += sar.c ramstage-$(CONFIG_USE_SAR) += sar.c
ramstage-$(CONFIG_CHROMEOS_DSM_CALIB) += dsm_calib.c
ramstage-$(CONFIG_TPM_GOOGLE) += cr50_enable_update.c ramstage-$(CONFIG_TPM_GOOGLE) += cr50_enable_update.c
romstage-$(CONFIG_CHROMEOS_CSE_BOARD_RESET_OVERRIDE) += cse_board_reset.c romstage-$(CONFIG_CHROMEOS_CSE_BOARD_RESET_OVERRIDE) += cse_board_reset.c

View File

@ -27,16 +27,6 @@ void cbmem_add_vpd_calibration_data(void);
void chromeos_set_me_hash(u32*, int); void chromeos_set_me_hash(u32*, int);
void chromeos_set_ramoops(void *ram_oops, size_t size); void chromeos_set_ramoops(void *ram_oops, size_t size);
/**
* get_dsm_calibration_from_key - Gets value related to DSM calibration from VPD
* @key: The key in RO_VPD. The valid prefix is "dsm_calib_". The valid keys are
* documented in https://chromeos.google.com/partner/dlm/docs/factory/vpd.html.
* @value: Output value. The value read from VPD parsed into uint64_t integer.
*
* Returns CB_SUCCESS on success or CB_ERR on failure.
*/
enum cb_err get_dsm_calibration_from_key(const char *key, uint64_t *value);
/* /*
* Declaration for mainboards to use to generate ACPI-specific ChromeOS needs. * Declaration for mainboards to use to generate ACPI-specific ChromeOS needs.
*/ */

View File

@ -5,7 +5,7 @@
#include <stdint.h> #include <stdint.h>
#include <string.h> #include <string.h>
#include <types.h> #include <types.h>
#include <vendorcode/google/chromeos/chromeos.h> #include "dsm_calib.h"
#define DSM_BUF_LEN 128 #define DSM_BUF_LEN 128
#define DSM_PREFIX "dsm_calib_" #define DSM_PREFIX "dsm_calib_"

View File

@ -0,0 +1,20 @@
/* SPDX-License-Identifier: GPL-2.0-only */
#ifndef __DSM_CALIB_H__
#define __DSM_CALIB_H__
#include <stddef.h>
#include <stdint.h>
#include <types.h>
/**
* get_dsm_calibration_from_key - Gets value related to DSM calibration from VPD
* @key: The key in RO_VPD. The valid prefix is "dsm_calib_". The valid keys are
* documented in https://chromeos.google.com/partner/dlm/docs/factory/vpd.html.
* @value: Output value. The value read from VPD parsed into uint64_t integer.
*
* Returns CB_SUCCESS on success or CB_ERR on failure.
*/
enum cb_err get_dsm_calibration_from_key(const char *key, uint64_t *value);
#endif /* __DSM_CALIB_H__ */