summaryrefslogtreecommitdiffstats
path: root/src/mainboard/amd
diff options
context:
space:
mode:
authorFred Reitberger <reitbergerfred@gmail.com>2023-03-31 12:11:14 -0400
committerFelix Held <felix-coreboot@felixheld.de>2023-04-03 13:41:59 +0000
commit3881b10c0eb098046fb3feb079bc0bb44968149f (patch)
treeae8356bb06e3d892885653c76fd883fa55d7430d /src/mainboard/amd
parentb99cd85f740e15688578ab16dd5156d5709baef0 (diff)
downloadcoreboot-3881b10c0eb098046fb3feb079bc0bb44968149f.tar.gz
coreboot-3881b10c0eb098046fb3feb079bc0bb44968149f.tar.bz2
coreboot-3881b10c0eb098046fb3feb079bc0bb44968149f.zip
mb/amd/birman/port_descriptors: split files for phoenix/glinda
Glinda and Phoenix have different requirements, so split the birman port_descriptors file to betty apply to each SoC. Signed-off-by: Fred Reitberger <reitbergerfred@gmail.com> Change-Id: Ia28cf4172b6adada10809e0135b2459077fa3da0 Reviewed-on: https://review.coreboot.org/c/coreboot/+/74123 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Felix Held <felix-coreboot@felixheld.de>
Diffstat (limited to 'src/mainboard/amd')
-rw-r--r--src/mainboard/amd/birman/Makefile.inc6
-rw-r--r--src/mainboard/amd/birman/port_descriptors_glinda.c (renamed from src/mainboard/amd/birman/port_descriptors.c)0
-rw-r--r--src/mainboard/amd/birman/port_descriptors_phoenix.c130
3 files changed, 134 insertions, 2 deletions
diff --git a/src/mainboard/amd/birman/Makefile.inc b/src/mainboard/amd/birman/Makefile.inc
index df931d991a8f..079e72b615c9 100644
--- a/src/mainboard/amd/birman/Makefile.inc
+++ b/src/mainboard/amd/birman/Makefile.inc
@@ -4,11 +4,13 @@ bootblock-y += bootblock.c
bootblock-y += early_gpio.c
bootblock-y += ec.c
-romstage-y += port_descriptors.c
+romstage-$(CONFIG_BOARD_AMD_BIRMAN_PHOENIX) += port_descriptors_phoenix.c
+romstage-$(CONFIG_BOARD_AMD_BIRMAN_GLINDA) += port_descriptors_glinda.c
ramstage-y += chromeos.c
ramstage-y += gpio.c
-ramstage-y += port_descriptors.c
+ramstage-$(CONFIG_BOARD_AMD_BIRMAN_PHOENIX) += port_descriptors_phoenix.c
+ramstage-$(CONFIG_BOARD_AMD_BIRMAN_GLINDA) += port_descriptors_glinda.c
ifneq ($(wildcard $(MAINBOARD_BLOBS_DIR)/APCB_FP8_LPDDR5.bin),)
APCB_SOURCES = $(MAINBOARD_BLOBS_DIR)/APCB_FP8_LPDDR5.bin
diff --git a/src/mainboard/amd/birman/port_descriptors.c b/src/mainboard/amd/birman/port_descriptors_glinda.c
index a2c4557eae3d..a2c4557eae3d 100644
--- a/src/mainboard/amd/birman/port_descriptors.c
+++ b/src/mainboard/amd/birman/port_descriptors_glinda.c
diff --git a/src/mainboard/amd/birman/port_descriptors_phoenix.c b/src/mainboard/amd/birman/port_descriptors_phoenix.c
new file mode 100644
index 000000000000..a2c4557eae3d
--- /dev/null
+++ b/src/mainboard/amd/birman/port_descriptors_phoenix.c
@@ -0,0 +1,130 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+
+#include <console/console.h>
+#include <device/i2c_simple.h>
+#include <gpio.h>
+#include <soc/platform_descriptors.h>
+#include <types.h>
+
+/* TODO: Update for birman */
+
+static const fsp_dxio_descriptor birman_dxio_descriptors[] = {
+ {
+ .engine_type = PCIE_ENGINE,
+ .port_present = true,
+ .start_logical_lane = 0,
+ .end_logical_lane = 0,
+ .device_number = 2,
+ .function_number = 1,
+ .link_speed_capability = GEN3,
+ .turn_off_unused_lanes = true,
+ .link_aspm = 2,
+ .link_hotplug = 3,
+ .clk_req = CLK_REQ3,
+ },
+ {
+ .engine_type = PCIE_ENGINE,
+ .port_present = true,
+ .start_logical_lane = 1,
+ .end_logical_lane = 1,
+ .device_number = 2,
+ .function_number = 2,
+ .link_speed_capability = GEN3,
+ .turn_off_unused_lanes = true,
+ .link_aspm = 2,
+ .link_hotplug = 3,
+ .clk_req = CLK_REQ1,
+ },
+ {
+ .engine_type = PCIE_ENGINE,
+ .port_present = true,
+ .start_logical_lane = 2,
+ .end_logical_lane = 3,
+ .device_number = 2,
+ .function_number = 3,
+ .link_speed_capability = GEN3,
+ .turn_off_unused_lanes = true,
+ .link_aspm = 2,
+ .link_hotplug = 3,
+ .gpio_group_id = GPIO_27,
+ .clk_req = CLK_REQ0,
+ },
+};
+
+static fsp_ddi_descriptor birman_ddi_descriptors[] = {
+ { /* DDI0 - eDP */
+ .connector_type = DDI_EDP,
+ .aux_index = DDI_AUX1,
+ .hdp_index = DDI_HDP1
+ },
+ { /* DDI1 - HDMI/DP */
+ .connector_type = DDI_HDMI,
+ .aux_index = DDI_AUX2,
+ .hdp_index = DDI_HDP2
+ },
+ { /* DDI2 - DP (type C) */
+ .connector_type = DDI_DP,
+ .aux_index = DDI_AUX3,
+ .hdp_index = DDI_HDP3,
+ },
+ { /* DDI3 - DP (type C) */
+ .connector_type = DDI_DP,
+ .aux_index = DDI_AUX4,
+ .hdp_index = DDI_HDP4,
+ },
+ { /* DDI4 - unused */
+ .connector_type = DDI_UNUSED_TYPE,
+ .aux_index = DDI_AUX5,
+ .hdp_index = DDI_HDP5,
+ }
+};
+
+static uint8_t get_ddi1_type(void)
+{
+ const uint8_t eeprom_i2c_bus = 2;
+ const uint8_t eeprom_i2c_address = 0x55;
+ const uint16_t eeprom_connector_type_offset = 2;
+ uint8_t eeprom_connector_type_data[2];
+ uint16_t connector_type;
+
+ if (i2c_2ba_read_bytes(eeprom_i2c_bus, eeprom_i2c_address,
+ eeprom_connector_type_offset, eeprom_connector_type_data,
+ sizeof(eeprom_connector_type_data))) {
+ printk(BIOS_NOTICE,
+ "Display connector type couldn't be determined. Disabling DDI1.\n");
+ return DDI_UNUSED_TYPE;
+ }
+
+ connector_type = eeprom_connector_type_data[1] | eeprom_connector_type_data[0] << 8;
+
+ switch (connector_type) {
+ case 0x0c:
+ printk(BIOS_DEBUG, "Configuring DDI1 as HDMI.\n");
+ return DDI_HDMI;
+ case 0x13:
+ printk(BIOS_DEBUG, "Configuring DDI1 as DP.\n");
+ return DDI_DP;
+ case 0x14:
+ printk(BIOS_DEBUG, "Configuring DDI1 as eDP.\n");
+ return DDI_EDP;
+ case 0x17:
+ printk(BIOS_DEBUG, "Configuring DDI1 as USB-C.\n");
+ return DDI_DP_W_TYPEC;
+ default:
+ printk(BIOS_WARNING, "Unexpected display connector type %x. Disabling DDI1.\n",
+ connector_type);
+ return DDI_UNUSED_TYPE;
+ }
+}
+
+void mainboard_get_dxio_ddi_descriptors(
+ const fsp_dxio_descriptor **dxio_descs, size_t *dxio_num,
+ const fsp_ddi_descriptor **ddi_descs, size_t *ddi_num)
+{
+ birman_ddi_descriptors[1].connector_type = get_ddi1_type();
+
+ *dxio_descs = birman_dxio_descriptors;
+ *dxio_num = ARRAY_SIZE(birman_dxio_descriptors);
+ *ddi_descs = birman_ddi_descriptors;
+ *ddi_num = ARRAY_SIZE(birman_ddi_descriptors);
+}