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
sys
adainit.h
asan.h
assert.h
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
bootmem.h include/bootmem.h: Add comment 2024-01-18 15:30:35 +00:00
bootmode.h
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
cbmem.h cbmem.h: Change return type of cbmem_get_region 2024-08-29 13:58:21 +00:00
cper.h
crc_byte.h lib/crc_byte: Parenthesize buffer address in CRC macro 2025-01-23 23:00:53 +00:00
ctype.h
delay.h
dimm_info_util.h
dp_aux.h
edid.h
elog.h
endian.h include/endian.h: Add 'always aligned access' support 2025-03-28 20:28:34 +00:00
espi.h
fallback.h
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
gpio.h
halt.h treewide: Move stdlib.h to commonlib 2024-03-15 10:09:43 +00:00
identity.h
imd.h
imd_private.h
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
limits.h
main_decl.h
memlayout.h include: Make DRAM an explicit region 2025-08-16 01:58:58 +00:00
memory_info.h
memrange.h
metadata_hash.h
mrc_cache.h
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
ramdetect.h
random.h
reg_script.h tree: Drop duplicated <device/{path,resource}.h> 2024-04-12 04:24:20 +00:00
region_file.h
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
romstage_handoff.h
rtc.h
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
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
stage_cache.h
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
symbols.h include: Make DRAM an explicit region 2025-08-16 01:58:58 +00:00
thread.h
timer.h
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
version.h
watchdog.h
wrdd.h
xxhash.h