coreboot/src/include
Nicholas Sudsgaard 31fc5b06a6 device: Introduce reworked azalia verb table
The current implementation of the HDA verb table has been shown to have
some problems. The primary issue is that it requires the programmer to
keep track of the amount of verbs that are going to be loaded. While
this may sound simple, in practice there have been numerous cases where
this "count field" has been forgotten to be updated or miscounted. In
the case where the "count field" is incorrect, coreboot will start
looking for codecs in some random memory location, essentially making
loading further codecs impossible.

Another issue is the "count field" treats 4 32-bit values as a single
group, therefore the amount of verbs in the table must be a multiple
of 4. This makes intuitive sense when only using the AZALIA_PIN_CFG() or
AZALIA_SUBVENDOR() macros. However, once the verb table requires
"controls" that use < 4 verbs (e.g. "Coefficient Index"), we need to add
padding values to ensure the alignment is correct. This adds unnecessary
verbs to the table which can further lead to unnecessary processing.

Therefore, in this change we proprose a solution by separating the codec
entries in the verb table into structures, which allows us to separate
the verbs into an array and automatically calculate the "count field"
using the ARRAY_SIZE() macro. It also makes iteration and access to
member fields easier. We also now count the verbs and not 4 32-bit
groups, eliminating the aforementioned alignment issue.

Additionally, this change also changes the way coreboot searches for
entries in the verb table. Before, we searched the table for only a
matching vendor ID, but now we search for a matching vendor ID and
codec address pair. This allows a mainboard to be able to correctly load
multiple audio codecs that use the same chips.

To make reviewing this large rework easier, we temporarily keep both
implementations (legacy and reworked) and allow boards to choose which
implementation to use by selecting a Kconfig. Newer boards are
discouraged from using the legacy implementation, as it is not selected
by default. This allows us to slowly change the codebase instead of
changing everything at once.

TEST=
  1. Timeless build with AZALIA_USE_LEGACY_VERB_TABLE=y produces
     identical binaries (with INCLUDE_CONFIG_FILE=n)
  2. HP ProBook 450 G3 using reworked verb table was able to load all
     verbs successfully.

Change-Id: Ib16237de89956405afa3be5b4e3f64a4d62e6a48
Signed-off-by: Nicholas Sudsgaard <devel+coreboot@nsudsgaard.com>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/88656
Reviewed-by: Elyes Haouas <ehaouas@noos.fr>
Reviewed-by: Angel Pons <th3fanbus@gmail.com>
Reviewed-by: Maximilian Brune <maximilian.brune@9elements.com>
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
2025-09-28 18:18:14 +00:00
..
acpi acpi/acpi.h: Use boolean 2025-07-01 15:08:32 +00:00
arch-generic soc/amd/common/psp_verstage: Remove arch/io.h 2025-04-02 16:03:34 +00:00
boot lib: Add boot mode information to coreboot tables 2025-09-05 04:22:21 +00:00
console include/console: Add CFR object for setting the logging level 2025-05-02 13:59:14 +00:00
cpu soc/intel/pantherlake: Add support for a new Panther Lake B0 SKU 2025-09-13 22:00:24 +00:00
device device: Introduce reworked azalia verb table 2025-09-28 18:18:14 +00:00
efi efi: Set EFIAPI to 32-bit ABI for FSP1_1 2024-09-20 23:25:30 +00:00
mipi drivers/soundwire/cs35l56: Support Cirrus Logic CS35L56 Smart Amplifier Family 2025-09-26 19:03:27 +00:00
pc80 drivers/pc80/pc/keyboard.c: Add function to change a command byte bit 2025-01-22 20:45:37 +00:00
smp include/smp/node: Drop unused is_smp_boot 2025-07-01 15:08:52 +00:00
superio src/include: Add PnP/HWM unset_and_set functions 2020-09-18 12:06:38 +00:00
sys include: Add SPDX-License-Identifiers to files missing them 2022-08-01 13:59:11 +00:00
adainit.h Add option to use Ada code in romstage 2022-12-17 20:48:06 +00:00
asan.h include: Add SPDX-License-Identifiers to files missing them 2022-08-01 13:59:11 +00:00
assert.h treewide: Remove 'extern' from functions declaration 2023-05-26 13:45:24 +00:00
b64_decode.h
base3.h
boardid.h
boot_device.h drivers/ipmi to lib: Fix misspellings & capitalization issues 2023-12-13 10:42:30 +00:00
bootblock_common.h decompressor: Add CBFS_VERIFICATION support 2021-04-06 07:49:15 +00:00
bootmem.h include/bootmem.h: Add comment 2024-01-18 15:30:35 +00:00
bootmode.h mb/google,samsung: Drop init_bootmode_straps() 2022-04-09 02:50:01 +00:00
bootsplash.h lib/vga_gfx: Add API to render text on a bitmap buffer 2025-09-28 18:17:51 +00:00
bootstate.h tree: Remove unused <string.h> 2024-05-29 10:34:08 +00:00
cbfs.h cbfs: Add a function to wait for all CBFS preload operations to complete 2025-07-21 13:45:12 +00:00
cbfs_glue.h vboot: Add VBOOT_CBFS_INTEGRATION support 2022-11-08 23:03:49 +00:00
cbmem.h cbmem.h: Change return type of cbmem_get_region 2024-08-29 13:58:21 +00:00
cper.h include/cper.h: Add CPER Memory Error Section definitions 2022-12-09 03:46:33 +00:00
crc_byte.h lib/crc_byte: Parenthesize buffer address in CRC macro 2025-01-23 23:00:53 +00:00
ctype.h include: Add SPDX-License-Identifiers to files missing them 2022-08-01 13:59:11 +00:00
delay.h include: Add SPDX-License-Identifiers to files missing them 2022-08-01 13:59:11 +00:00
dimm_info_util.h arch/x86: Refactor the SMBIOS type 17 write function 2021-11-11 09:10:10 +00:00
dp_aux.h google/trogdor: Add backlight support for Parade ps8640 2021-11-02 08:17:21 +00:00
edid.h include/edid.h: Remove repeated word 2021-01-18 07:37:04 +00:00
elog.h treewide: Remove 'extern' from functions declaration 2023-05-26 13:45:24 +00:00
endian.h include/endian.h: Add 'always aligned access' support 2025-03-28 20:28:34 +00:00
espi.h include/espi.h: Switch to types.h 2022-03-27 15:13:31 +00:00
fallback.h include: Add SPDX-License-Identifiers to files missing them 2022-08-01 13:59:11 +00:00
fit.h treewide: Move device_tree to commonlib 2024-06-22 04:02:04 +00:00
fmap.h include/fmap.h: Require FMAP_SECTION_FLASH_START == 0 2025-04-18 14:56:59 +00:00
framebuffer_info.h drivers/intel/gma: Fix mismatching types for fb_add_framebuffer_info 2024-09-02 09:33:59 +00:00
fw_config.h lib/fw_config: Make fw_config_is_provisioned() always available 2023-06-17 02:40:57 +00:00
gpio.h soc/intel/common/gpio: Add function to read GPIO TX value 2023-01-25 14:33:06 +00:00
halt.h treewide: Move stdlib.h to commonlib 2024-03-15 10:09:43 +00:00
identity.h lib/version: Move board identification strings 2023-04-22 16:20:49 +00:00
imd.h include/imd: Improve API documentation 2020-08-26 07:32:37 +00:00
imd_private.h include/imd_private.h: Use C99 flexible arrays 2023-07-30 09:58:12 +00:00
input-event-codes.h include/input-event-codes.h: Update to latest HID tree 2024-06-21 16:46:04 +00:00
inttypes.h
kconfig.h
lib.h lib: Add __fls() (Find Last Set) 2021-12-13 02:57:07 +00:00
limits.h include: Add SPDX-License-Identifiers to files missing them 2022-08-01 13:59:11 +00:00
main_decl.h include: Add SPDX-License-Identifiers to files missing them 2022-08-01 13:59:11 +00:00
memlayout.h include: Make DRAM an explicit region 2025-08-16 01:58:58 +00:00
memory_info.h memory_info: Bump to 64 DIMMs 2023-07-18 15:06:05 +00:00
memrange.h include/memrange.h: Remove trailing semicolon 2022-09-28 16:12:04 +00:00
metadata_hash.h src: Drop "This file is part of the coreboot project" lines 2021-05-10 15:07:33 +00:00
mrc_cache.h drivers/intel/fsp2_0: Introduce MRC cache store after FSP-M/S APIs 2023-09-05 09:36:17 +00:00
mtcl.h drivers/wifi: Add MTCL function to ACPI SSDT 2024-02-06 03:37:19 +00:00
nhlt.h drivers/ipmi to lib: Fix misspellings & capitalization issues 2023-12-13 10:42:30 +00:00
option.h drivers/option: Add CBFS file based option backend 2025-01-22 03:25:40 +00:00
post.h
program_loading.h lib/program_loaders.c: Mark run_ramstage with __noreturn 2022-07-14 23:10:17 +00:00
ramdetect.h src/include/ramdetect.h: Add missing includes 2020-07-25 01:25:57 +00:00
random.h arch/x86: Use 'enum cb_err' 2022-12-25 15:09:16 +00:00
reg_script.h tree: Drop duplicated <device/{path,resource}.h> 2024-04-12 04:24:20 +00:00
region_file.h region_file_update_data_arr: Modify region_file with array of buffers 2020-09-16 16:02:54 +00:00
reset.h lib: Introduce early power off support Kconfig option 2025-02-15 18:59:11 +00:00
rmodule.h tree: Remove unused <string.h> 2024-05-29 10:34:08 +00:00
romstage_common.h arch/x86: Add a common romstage entry 2022-06-07 12:54:39 +00:00
romstage_handoff.h
rtc.h lib/rtc: Add sanity check for time and date 2021-05-30 20:24:13 +00:00
rules.h soc/amd/common/block/cpu/noncar: Move BSS and DATA out of PT_LOAD 2025-07-18 16:50:07 +00:00
sar.h drivers/wifi: Update Drive Strength BRI Rsp Table revision 2024-12-17 17:27:54 +00:00
sdram_mode.h
smbios.h smbios.h: Update smbios_memory_type 2025-09-05 23:57:40 +00:00
smmstore.h drivers/smmstore: Support 64-bit MMIO addresses 2025-05-08 22:28:16 +00:00
spd.h include/spd.h: Add SPD_MEMORY_TYPE_LPDDR3_INTEL into spd_memory_type 2024-05-09 11:24:40 +00:00
spd_bin.h soc/common/smbus: Support reading SPD5 hubs for DDR5 2025-08-02 01:47:44 +00:00
spd_cache.h src/lib: Add Kconfig option for SPD cache in FMAP 2020-12-14 08:23:41 +00:00
spi-generic.h drivers/spi: add Numonyx and Micron names to STMicro case 2024-10-09 18:09:42 +00:00
spi_bitbang.h
spi_flash.h drivers/spi: add RPMC support 2024-12-03 17:40:39 +00:00
spi_sdcard.h src/include: Add missing includes 2020-07-26 21:37:35 +00:00
stage_cache.h stage_cache: Add resume_from_stage_cache() 2021-01-29 10:53:33 +00:00
stdarg.h tree: Remove unused <stdarg.h> 2024-05-28 03:22:34 +00:00
stdbool.h include/stdbool: Don't unconditionally typedef bool 2024-09-25 01:05:32 +00:00
stddef.h stddef.h: Introduce nullptr constant 2024-10-03 02:05:44 +00:00
stdint.h
stdio.h tree: Use <stdio.h> for snprintf 2024-05-29 10:33:54 +00:00
stdlib.h treewide: Move stdlib.h to commonlib 2024-03-15 10:09:43 +00:00
string.h commonlib/bsd: Add strlen() and strnlen() functions 2024-08-14 03:09:03 +00:00
swab.h include: Add SPDX-License-Identifiers to files missing them 2022-08-01 13:59:11 +00:00
symbols.h include: Make DRAM an explicit region 2025-08-16 01:58:58 +00:00
thread.h rules.h: Use more consistent naming 2022-05-16 21:52:22 +00:00
timer.h timer: Change timer util functions to 64-bit 2022-09-14 11:55:39 +00:00
timestamp.h include: Add 'IWYU pragma: export' comment 2024-04-15 05:30:24 +00:00
types.h src/include: Introduce a new BIT_FLAG_32(x) macro 2024-09-04 18:31:25 +00:00
uuid.h
ux_locales.h lib: Add low battery UX locale message 2025-02-15 18:58:48 +00:00
vbe.h include: Add SPDX-License-Identifiers to files missing them 2022-08-01 13:59:11 +00:00
version.h lib/version: Move board identification strings 2023-04-22 16:20:49 +00:00
watchdog.h include: Add SPDX-License-Identifiers to files missing them 2022-08-01 13:59:11 +00:00
wrdd.h
xxhash.h lib/xxhash.c: Add new hash functions 2022-09-07 22:24:51 +00:00