Patrick Georgi has submitted this change. ( https://review.coreboot.org/c/coreboot/+/44772 )
Change subject: mb/prodrive/hermes/hda_verb: Update verb table for latest board revision ......................................................................
mb/prodrive/hermes/hda_verb: Update verb table for latest board revision
Use different verb tables depending on board revision.
For board revision R03 and older use the existing verb tables.
For revisions newer than R03 use the new verb tables and also apply the dynamic audio configuration recently added.
Also do the following: * Use correct NID port mapping * Fix verb count in ALC888 header * Fix NID in Intel codec verbs
Change-Id: I24ea9149eb2cddb815ff82744a351c926a94aaef Signed-off-by: Patrick Rudolph patrick.rudolph@9elements.com Reviewed-on: https://review.coreboot.org/c/coreboot/+/44772 Tested-by: build bot (Jenkins) no-reply@coreboot.org Reviewed-by: Angel Pons th3fanbus@gmail.com --- M src/mainboard/prodrive/hermes/Makefile.inc M src/mainboard/prodrive/hermes/hda_verb.c A src/mainboard/prodrive/hermes/variants/baseboard/hda_verb.c M src/mainboard/prodrive/hermes/variants/baseboard/include/variant/variants.h A src/mainboard/prodrive/hermes/variants/r04/hda_verb.c 5 files changed, 164 insertions(+), 222 deletions(-)
Approvals: build bot (Jenkins): Verified Angel Pons: Looks good to me, approved
diff --git a/src/mainboard/prodrive/hermes/Makefile.inc b/src/mainboard/prodrive/hermes/Makefile.inc index 2dba6da..6f6a638 100644 --- a/src/mainboard/prodrive/hermes/Makefile.inc +++ b/src/mainboard/prodrive/hermes/Makefile.inc @@ -10,3 +10,6 @@ ramstage-y += ramstage.c ramstage-y += mainboard.c ramstage-y += eeprom.c + +ramstage-$(CONFIG_AZALIA_PLUGIN_SUPPORT) += variants/baseboard/hda_verb.c +ramstage-$(CONFIG_AZALIA_PLUGIN_SUPPORT) += variants/r04/hda_verb.c diff --git a/src/mainboard/prodrive/hermes/hda_verb.c b/src/mainboard/prodrive/hermes/hda_verb.c index be7dbb4..23c542c 100644 --- a/src/mainboard/prodrive/hermes/hda_verb.c +++ b/src/mainboard/prodrive/hermes/hda_verb.c @@ -2,232 +2,17 @@
#include <device/azalia_device.h> #include <types.h> +#include <console/console.h>
#include "variants/baseboard/include/eeprom.h" - -const u32 cim_verb_data[] = { - 0x10ec0888, /* Codec Vendor / Device ID: Realtek ALC888 */ - 0x10ec0888, /* Subsystem ID */ - 10, /* Number of 4 dword sets */ - AZALIA_SUBVENDOR(0, 0x10ec0888), - - /* Port A: Front, Audio Header #1 */ - AZALIA_PIN_CFG(0, 0x14, AZALIA_PIN_DESC( - INTEGRATED, - INTERNAL, - SPECIAL7, - LINE_OUT, - OTHER_ANALOG, - COLOR_UNKNOWN, - false, - 0xf, - 0 - )), - /* Port B: Mic1, Line input (pink) */ - AZALIA_PIN_CFG(0, 0x15, AZALIA_PIN_DESC( - JACK, - EXTERNAL_PRIMARY_CHASSIS, - REAR, //FIXME - LINE_IN, - STEREO_MONO_1_8, - PINK, - false, - 0xf, - 0 - )), - /* Port C: Line, Speaker (only L) */ - AZALIA_PIN_CFG(0, 0x16, AZALIA_PIN_DESC( - INTEGRATED, - INTERNAL, - NA, - SPEAKER, - TYPE_UNKNOWN, - COLOR_UNKNOWN, - false, - 0xf, - 0 - )), - /* Port D: Sidesurr, Line out (green) */ - AZALIA_PIN_CFG(0, 0x17, AZALIA_PIN_DESC( - //JACK, - LINE_OUT, - EXTERNAL_PRIMARY_CHASSIS, - REAR, //FIXME - LINE_OUT, - STEREO_MONO_1_8, - GREEN, - false, - 0xf, - 0 - )), - /* Port E: Line2, Line input (blue) */ - AZALIA_PIN_CFG(0, 0x18, AZALIA_PIN_DESC( - JACK, - EXTERNAL_PRIMARY_CHASSIS, - REAR, //FIXME - LINE_IN, - STEREO_MONO_1_8, - BLUE, - false, - 0xf, - 0 - )), - /* Port F: Mic2, Audio Header #2 */ - AZALIA_PIN_CFG(0, 0x19, AZALIA_PIN_DESC( - INTEGRATED, - INTERNAL, - SPECIAL7, - LINE_IN, - OTHER_ANALOG, - COLOR_UNKNOWN, - false, - 0xf, - 0 - )), - /* Port G: Not connected */ - AZALIA_PIN_CFG(0, 0x1a, AZALIA_PIN_DESC( - NC, - LOCATION_OTHER, - NA, - DEVICE_OTHER, - TYPE_OTHER, - COLOR_OTHER, - true, - 0, - 0 - )), - /* Port H: Not connected */ - AZALIA_PIN_CFG(0, 0x1b, AZALIA_PIN_DESC( - NC, - LOCATION_OTHER, - NA, - DEVICE_OTHER, - TYPE_OTHER, - COLOR_OTHER, - true, - 0, - 0 - )), - - /* S/PDIF-OUT */ - AZALIA_PIN_CFG(0, 0x1e, AZALIA_PIN_DESC( - INTEGRATED, - INTERNAL, - NA, - SPDIF_OUT, - OTHER_DIGITAL, - COLOR_UNKNOWN, - true, - 0xf, - 0 - )), - /* S/PDIF-IN */ - AZALIA_PIN_CFG(0, 0x1f, AZALIA_PIN_DESC( - INTEGRATED, - INTERNAL, - NA, - SPDIF_IN, - OTHER_DIGITAL, - COLOR_UNKNOWN, - true, - 0xf, - 0 - )), - - //FIXME COdec ID - /* - * VerbTable: CFL Display Audio Codec - * Revision ID = 0xFF - * Codec Vendor: 0x8086280B - */ - - 0x8086280B, - 0xFFFFFFFF, - 5, /* Number of 4 dword sets */ - - /* - * Display Audio Verb Table - * For GEN9, the Vendor Node ID is 08h - * Port to be exposed to the inbox driver in the vanilla mode - * PORT C - BIT[7:6] = 01b - */ - 0x00878140, - 0x00878140, - 0x00878140, - 0x00878140, - /* Pin Widget 5 - PORT B - Configuration Default: 0x18560010 */ - AZALIA_PIN_CFG(2, 0x05, 0x18560010), - /* Pin Widget 6 - PORT C - Configuration Default: 0x18560020 */ - AZALIA_PIN_CFG(2, 0x06, 0x18560020), - /* Pin Widget 7 - PORT D - Configuration Default: 0x18560030 */ - AZALIA_PIN_CFG(2, 0x07, 0x18560030), - /* Disable the third converter and third Pin (NID 08h) */ - 0x00878140, - 0x00878140, - 0x00878140, - 0x00878140, -}; - -const u32 pc_beep_verbs[0] = {}; - -AZALIA_ARRAY_SIZES; - -static u32 get_port_c_vref_cfg(uint8_t blue_rear_vref) -{ - switch (blue_rear_vref) { - default: - case 0: - return 0x02040000; - case 1: - return 0x02041000; - case 2: - return 0x02044000; - case 3: - return 0x02045000; - case 4: - return 0x02046000; - } -} - -static u32 get_internal_audio_cfg(uint8_t internal_audio_connection) -{ - switch (internal_audio_connection) { - default: - case 0: - return AZALIA_PIN_CFG_NC(0); - case 1: - return 0x022a4c40; - case 2: - return AZALIA_PIN_DESC( - INTEGRATED, - INTERNAL, - NA, - SPEAKER, - TYPE_UNKNOWN, - COLOR_UNKNOWN, - false, - 0xf, - 0); - } -} +#include "variants/baseboard/include/variant/variants.h"
void mainboard_azalia_program_runtime_verbs(u8 *base, u32 viddid) { - if (viddid != 0x10ec0888) - return; + if (viddid == 0x10ec0888) { + u8 hsi = get_bmc_hsi();
- const struct eeprom_board_settings *const board_cfg = get_board_settings(); - - if (!board_cfg) - return; - - const u32 config = get_internal_audio_cfg(board_cfg->internal_audio_connection); - - const u32 verbs[] = { - AZALIA_PIN_CFG(0, 0x1b, config), - 0x0205000d, - get_port_c_vref_cfg(board_cfg->blue_rear_vref), - }; - - azalia_program_verb_table(base, verbs, ARRAY_SIZE(verbs)); + if (hsi >= 4) + mainboard_r0x_configure_alc888(base, viddid); + } } diff --git a/src/mainboard/prodrive/hermes/variants/baseboard/hda_verb.c b/src/mainboard/prodrive/hermes/variants/baseboard/hda_verb.c new file mode 100644 index 0000000..dc97794 --- /dev/null +++ b/src/mainboard/prodrive/hermes/variants/baseboard/hda_verb.c @@ -0,0 +1,77 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ + +#include <device/azalia_device.h> +#include <types.h> + +const u32 cim_verb_data[] = { + 0x10ec0888, /* Codec Vendor / Device ID: Realtek ALC888 */ + 0x10ec0888, /* Subsystem ID */ + 17, /* Number of 4 dword sets */ + AZALIA_SUBVENDOR(0, 0x10ec0888), + + /* Port configuration control */ + + 0x018707e1, /* port B VREF 50% of LDO-OUT */ + 0x019707e1, /* port F VREF 50% of LDO-OUT */ + 0x01b707e1, /* port E VREF 50% of LDO-OUT*/ + 0x0205000d, /* pin 37 vrefo hidden register - used as port C vref */ + + 0x02041000, /* pin 37 vrefo 50% of LDO-OUT */ + 0x02041000, /* Dummy entry */ + 0x02041000, /* Dummy entry */ + 0x02041000, /* Dummy entry */ + + /* Pin widgets */ + AZALIA_PIN_CFG(0, 0x11, 0x411111f0), /* SPDIF-OUT2 - disabled */ + AZALIA_PIN_CFG(0, 0x12, 0x411111f0), /* digital MIC - disabled */ + AZALIA_PIN_CFG(0, 0x14, 0x01014430), /* PORT D - rear line out */ + AZALIA_PIN_CFG(0, 0x16, 0x411111f0), /* PORT G - disabled */ + AZALIA_PIN_CFG(0, 0x17, 0x411111f0), /* PORT H - disabled */ + AZALIA_PIN_CFG(0, 0x18, 0x01a19c50), /* PORT B - rear mic in */ + AZALIA_PIN_CFG(0, 0x1c, 0x411111f0), /* CD audio - disabled */ + AZALIA_PIN_CFG(0, 0x1d, 0x4004c601), /* BEEPIN */ + AZALIA_PIN_CFG(0, 0x1e, 0x01452160), /* SPDIF-OUT */ + AZALIA_PIN_CFG(0, 0x1f, 0x01C52170), /* SPDIF-IN */ + + /* Config for R02 and older */ + AZALIA_PIN_CFG(0, 0x19, 0x02214c40), /* port F - front hp out */ + AZALIA_PIN_CFG(0, 0x1a, 0x901001f0), /* port C - internal speaker */ + AZALIA_PIN_CFG(0, 0x1b, 0x01813c10), /* port E - rear line in/mic - Blue */ + AZALIA_PIN_CFG(0, 0x15, 0x02a19c20), /* port A - audio hdr input */ + + /* + * VerbTable: CFL Display Audio Codec + * Revision ID = 0xFF + * Codec Vendor: 0x8086280B + */ + 0x8086280B, + 0xFFFFFFFF, + 5, /* Number of 4 dword sets */ + + AZALIA_SUBVENDOR(2, 0x80860101), + + /* + * Display Audio Verb Table + * For GEN9, the Vendor Node ID is 08h + * Port to be exposed to the inbox driver in the vanilla mode + * PORT C - BIT[7:6] = 01b + */ + 0x20878101, + + /* Pin Widget 5 - PORT B - Configuration Default: 0x18560010 */ + AZALIA_PIN_CFG(2, 0x05, 0x18560010), + /* Pin Widget 6 - PORT C - Configuration Default: 0x18560020 */ + AZALIA_PIN_CFG(2, 0x06, 0x18560020), + /* Pin Widget 7 - PORT D - Configuration Default: 0x18560030 */ + AZALIA_PIN_CFG(2, 0x07, 0x18560030), + /* Disable the third converter and third Pin (NID 08h) */ + 0x20878100, + + /* Dummy entries */ + 0x20878100, + 0x20878100, +}; + +const u32 pc_beep_verbs[0] = {}; + +AZALIA_ARRAY_SIZES; diff --git a/src/mainboard/prodrive/hermes/variants/baseboard/include/variant/variants.h b/src/mainboard/prodrive/hermes/variants/baseboard/include/variant/variants.h index 83cf232..54a1161 100644 --- a/src/mainboard/prodrive/hermes/variants/baseboard/include/variant/variants.h +++ b/src/mainboard/prodrive/hermes/variants/baseboard/include/variant/variants.h @@ -1,4 +1,9 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ + #include <soc/cnl_memcfg_init.h> +#include <types.h>
/* Return memory configuration structure. */ const struct cnl_mb_cfg *variant_memcfg_config(void); + +void mainboard_r0x_configure_alc888(u8 *base, u32 viddid); diff --git a/src/mainboard/prodrive/hermes/variants/r04/hda_verb.c b/src/mainboard/prodrive/hermes/variants/r04/hda_verb.c new file mode 100644 index 0000000..ec008e9 --- /dev/null +++ b/src/mainboard/prodrive/hermes/variants/r04/hda_verb.c @@ -0,0 +1,72 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ + +#include <device/azalia_device.h> +#include <types.h> + +#include "variant/variants.h" +#include "eeprom.h" + +static const u32 r04_verb_data[] = { + AZALIA_PIN_CFG(0, 0x19, 0x02a19c20), /* PORT F - front mic in */ + AZALIA_PIN_CFG(0, 0x1a, 0x01813c51), /* PORT C - rear line in (mic support) */ + AZALIA_PIN_CFG(0, 0x15, 0x411111f0), /* PORT A - disabled */ +}; + +static u32 get_port_c_vref_cfg(uint8_t blue_rear_vref) +{ + switch (blue_rear_vref) { + default: + case 0: + return 0x02040000; + case 1: + return 0x02041000; + case 2: + return 0x02044000; + case 3: + return 0x02045000; + case 4: + return 0x02046000; + } +} + +static u32 get_internal_audio_cfg(uint8_t internal_audio_connection) +{ + switch (internal_audio_connection) { + default: + case 0: + return AZALIA_PIN_CFG_NC(0); + case 1: + return 0x022a4c40; + case 2: + return AZALIA_PIN_DESC( + INTEGRATED, + INTERNAL, + NA, + SPEAKER, + TYPE_UNKNOWN, + COLOR_UNKNOWN, + false, + 0xf, + 0); + } +} + +void mainboard_r0x_configure_alc888(u8 *base, u32 viddid) +{ + /* Overwrite settings made by baseboard */ + azalia_program_verb_table(base, r04_verb_data, ARRAY_SIZE(r04_verb_data)); + + const struct eeprom_board_settings *const board_cfg = get_board_settings(); + + if (!board_cfg) + return; + + const u32 config = get_internal_audio_cfg(board_cfg->internal_audio_connection); + + const u32 verbs[] = { + AZALIA_PIN_CFG(0, 0x1b, config), + 0x0205000d, + get_port_c_vref_cfg(board_cfg->blue_rear_vref), + }; + azalia_program_verb_table(base, verbs, ARRAY_SIZE(verbs)); +}