diff options
author | Reka Norman <rekanorman@google.com> | 2022-04-06 20:34:07 +1000 |
---|---|---|
committer | Patrick Georgi <patrick@coreboot.org> | 2022-04-07 08:14:37 +0000 |
commit | a6de947a6baada8a0633d86e0bf3abda3e80405c (patch) | |
tree | 87fd9c92f74ba2be64df5d7dd411a11714326ed5 /src/mainboard/google | |
parent | e790f929bd6986958f89d0c20d55ff1bd13d2ec5 (diff) |
mb/google/brya/var/nereid: Configure descriptor for either Type-C or HDMI
Some bytes in the descriptor need to be set differently for Type-C and
HDMI. To allow using a single firmware variant for both cases, update
the descriptor at runtime based on fw_config. This is a temporary
workaround while we find a better solution.
The byte values were determined by changing the following CSE strap and
comparing the generated descriptors:
Type-C: TypeCPort2Config = "No Thunderbolt"
HDMI: TypeCPort2Config = "DP Fixed Connection"
The default value before updating the descriptor is Type-C, but this was
chosen arbitrarily.
BUG=b:226848617
TEST=Type-C and HDMI both work on nereid with fw_config set correctly.
Change-Id: I2cc230e3bd35816c81989ae7e01df5d2c152062e
Signed-off-by: Reka Norman <rekanorman@google.com>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/63366
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Eric Lai <eric_lai@quanta.corp-partner.google.com>
Reviewed-by: Sam McNally <sammc@google.com>
Diffstat (limited to 'src/mainboard/google')
5 files changed, 41 insertions, 0 deletions
diff --git a/src/mainboard/google/brya/Kconfig.name b/src/mainboard/google/brya/Kconfig.name index 3126d28495..4be201403b 100644 --- a/src/mainboard/google/brya/Kconfig.name +++ b/src/mainboard/google/brya/Kconfig.name @@ -90,6 +90,7 @@ config BOARD_GOOGLE_NIVVIKS config BOARD_GOOGLE_NEREID bool "-> Nereid" + select ALDERLAKE_CONFIGURE_DESCRIPTOR select BOARD_GOOGLE_BASEBOARD_NISSA config BOARD_GOOGLE_PRIMUS diff --git a/src/mainboard/google/brya/bootblock.c b/src/mainboard/google/brya/bootblock.c index 1815615f5e..c24e9590e2 100644 --- a/src/mainboard/google/brya/bootblock.c +++ b/src/mainboard/google/brya/bootblock.c @@ -10,3 +10,10 @@ void bootblock_mainboard_early_init(void) pads = variant_early_gpio_table(&num); gpio_configure_pads(pads, num); } + +void bootblock_mainboard_init(void) +{ + variant_update_descriptor(); +} + +void __weak variant_update_descriptor(void) {} diff --git a/src/mainboard/google/brya/variants/baseboard/include/baseboard/variants.h b/src/mainboard/google/brya/variants/baseboard/include/baseboard/variants.h index 8c79a8a871..baf05979ca 100644 --- a/src/mainboard/google/brya/variants/baseboard/include/baseboard/variants.h +++ b/src/mainboard/google/brya/variants/baseboard/include/baseboard/variants.h @@ -34,6 +34,8 @@ void variant_generate_s0ix_hook(enum s0ix_entry); /* Modify devictree settings during ramstage */ void variant_devtree_update(void); +void variant_update_descriptor(void); + struct cpu_power_limits { uint16_t mchid; u8 cpu_tdp; diff --git a/src/mainboard/google/brya/variants/nereid/Makefile.inc b/src/mainboard/google/brya/variants/nereid/Makefile.inc index 2e8157e135..16c9748225 100644 --- a/src/mainboard/google/brya/variants/nereid/Makefile.inc +++ b/src/mainboard/google/brya/variants/nereid/Makefile.inc @@ -1,5 +1,6 @@ # SPDX-License-Identifier: GPL-2.0-only bootblock-y += gpio.c +bootblock-y += variant.c romstage-y += gpio.c romstage-y += memory.c diff --git a/src/mainboard/google/brya/variants/nereid/variant.c b/src/mainboard/google/brya/variants/nereid/variant.c index 967fc9ad02..74afb2702b 100644 --- a/src/mainboard/google/brya/variants/nereid/variant.c +++ b/src/mainboard/google/brya/variants/nereid/variant.c @@ -1,7 +1,10 @@ /* SPDX-License-Identifier: GPL-2.0-or-later */ +#include <baseboard/variants.h> +#include <console/console.h> #include <drivers/intel/gma/opregion.h> #include <fw_config.h> +#include <soc/bootblock.h> const char *mainboard_vbt_filename(void) { @@ -10,3 +13,30 @@ const char *mainboard_vbt_filename(void) return "vbt.bin"; } + +void variant_update_descriptor(void) +{ + /* TypeCPort2Config = "No Thunderbolt" */ + struct descriptor_byte typec_bytes[] = { + { 0xc76, 0xb7 }, + { 0xc77, 0xb6 }, + { 0xc7c, 0xee }, + { 0xca0, 0x0c }, + }; + + /* TypeCPort2Config = "DP Fixed Connection" */ + struct descriptor_byte hdmi_bytes[] = { + { 0xc76, 0x75 }, + { 0xc77, 0xc4 }, + { 0xc7c, 0x1e }, + { 0xca0, 0x0e }, + }; + + if (fw_config_probe(FW_CONFIG(DB_USB, DB_1A_HDMI))) { + printk(BIOS_INFO, "Configuring descriptor for HDMI\n"); + configure_descriptor(hdmi_bytes, ARRAY_SIZE(hdmi_bytes)); + } else { + printk(BIOS_INFO, "Configuring descriptor for Type-C\n"); + configure_descriptor(typec_bytes, ARRAY_SIZE(typec_bytes)); + } +} |