diff --git a/src/mainboard/prodrive/hermes/Makefile.inc b/src/mainboard/prodrive/hermes/Makefile.inc index 2dba6dac76..6f6a638aff 100644 --- a/src/mainboard/prodrive/hermes/Makefile.inc +++ b/src/mainboard/prodrive/hermes/Makefile.inc @@ -10,3 +10,6 @@ romstage-y += eeprom.c 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 be7dbb4ec6..23c542c478 100644 --- a/src/mainboard/prodrive/hermes/hda_verb.c +++ b/src/mainboard/prodrive/hermes/hda_verb.c @@ -2,232 +2,17 @@ #include #include +#include #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 0000000000..dc9779496c --- /dev/null +++ b/src/mainboard/prodrive/hermes/variants/baseboard/hda_verb.c @@ -0,0 +1,77 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ + +#include +#include + +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 83cf232dd8..54a116143f 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 +#include /* 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 0000000000..ec008e9993 --- /dev/null +++ b/src/mainboard/prodrive/hermes/variants/r04/hda_verb.c @@ -0,0 +1,72 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ + +#include +#include + +#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)); +}