mb/amd/bilby: Add support for HDMI display

DDI 0/1 ports are shared for DP and HDMI. This implementation
adds support for HDMI display when HDMI is set as connector type
in ddi descriptors.

TEST=verify display over HDMI(0 and 1) in OS.

Signed-off-by: Aamir Bohra <aamirbohra@gmail.com>
Change-Id: I9697211c556f12d1fc0d49418b227fbe6b342673
Reviewed-on: https://review.coreboot.org/c/coreboot/+/56756
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Felix Held <felix-coreboot@felixheld.de>
This commit is contained in:
Aamir Bohra 2021-03-31 17:35:20 +05:30 committed by Paul Fagerburg
parent 9e34060d52
commit 9fe70ed197
5 changed files with 66 additions and 4 deletions

View File

@ -106,4 +106,36 @@ config EFS_SPI_MICRON_FLAG
int int
default 0 default 0
choice
prompt "DDI-0 connector type"
default CONNECT_DP_ON_DDI_0
config CONNECT_HDMI_ON_DDI_0
bool "Use HDMI interface"
config CONNECT_DP_ON_DDI_0
bool "Use Displayport interface"
endchoice
config DDI0_CONNECTOR_TYPE
int
default 0 if CONNECT_DP_ON_DDI_0
default 4 if CONNECT_HDMI_ON_DDI_0
choice
prompt "DDI-1 connector type"
default CONNECT_DP_ON_DDI_1
config CONNECT_HDMI_ON_DDI_1
bool "Use HDMI interface"
config CONNECT_DP_ON_DDI_1
bool "Use Displayport interface"
endchoice
config DDI1_CONNECTOR_TYPE
int
default 0 if CONNECT_DP_ON_DDI_1
default 4 if CONNECT_HDMI_ON_DDI_1
endif # BOARD_AMD_BILBY endif # BOARD_AMD_BILBY

View File

@ -17,8 +17,6 @@ static const struct soc_amd_gpio gpio_set_stage_ram[] = {
PAD_GPI(GPIO_11, PULL_UP), PAD_GPI(GPIO_11, PULL_UP),
/* APU_ALS_INT# */ /* APU_ALS_INT# */
PAD_SCI(GPIO_24, PULL_UP, EDGE_LOW), PAD_SCI(GPIO_24, PULL_UP, EDGE_LOW),
/* SD card detect */
PAD_GPI(GPIO_31, PULL_UP),
/* NFC IRQ */ /* NFC IRQ */
PAD_INT(GPIO_69, PULL_UP, EDGE_LOW, STATUS), PAD_INT(GPIO_69, PULL_UP, EDGE_LOW, STATUS),
}; };

View File

@ -5,13 +5,18 @@
#include <acpi/acpi.h> #include <acpi/acpi.h>
#include <amdblocks/amd_pci_util.h> #include <amdblocks/amd_pci_util.h>
#include <FspsUpd.h> #include <FspsUpd.h>
#include <gpio.h>
#include <soc/cpu.h> #include <soc/cpu.h>
#include <soc/southbridge.h> #include <soc/southbridge.h>
#include <soc/pci_devs.h> #include <soc/pci_devs.h>
#include <soc/platform_descriptors.h>
#include <types.h> #include <types.h>
#include <commonlib/helpers.h> #include <commonlib/helpers.h>
#include <chip.h> #include <chip.h>
#include "gpio.h" #include "gpio.h"
#include "mainboard.h"
#define MAINBOARD_SHARED_DDI_PORTS 2
/* TODO: recheck IRQ tables */ /* TODO: recheck IRQ tables */
@ -79,6 +84,22 @@ static void pirq_setup(void)
picr_data_ptr = fch_pic_routing; picr_data_ptr = fch_pic_routing;
} }
static void program_display_sel_gpios(void)
{
int idx, port_type;
gpio_t display_sel[MAINBOARD_SHARED_DDI_PORTS] = {GPIO_29, GPIO_31};
for (idx = 0; idx < MAINBOARD_SHARED_DDI_PORTS; idx++) {
port_type = get_ddi_port_conn_type(idx);
if (port_type == HDMI)
gpio_output(display_sel[idx], 0);
else if (port_type == DP)
gpio_output(display_sel[idx], 1);
}
}
static void mainboard_init(void *chip_info) static void mainboard_init(void *chip_info)
{ {
struct soc_amd_picasso_config *cfg = config_of_soc(); struct soc_amd_picasso_config *cfg = config_of_soc();
@ -88,6 +109,8 @@ static void mainboard_init(void *chip_info)
mainboard_program_gpios(); mainboard_program_gpios();
program_display_sel_gpios();
/* Re-muxing LPCCLK0 can hang the system if LPC is in use. */ /* Re-muxing LPCCLK0 can hang the system if LPC is in use. */
if (CONFIG(BILBY_LPC)) if (CONFIG(BILBY_LPC))
printk(BIOS_INFO, "eMMC not available due to LPC requirement\n"); printk(BIOS_INFO, "eMMC not available due to LPC requirement\n");

View File

@ -0,0 +1,3 @@
/* SPDX-License-Identifier: GPL-2.0-only */
int get_ddi_port_conn_type(uint8_t port_num);

View File

@ -2,6 +2,7 @@
#include <soc/platform_descriptors.h> #include <soc/platform_descriptors.h>
#include <types.h> #include <types.h>
#include "mainboard.h"
static const fsp_dxio_descriptor pco_dxio_descriptors[] = { static const fsp_dxio_descriptor pco_dxio_descriptors[] = {
{ /* MXM - Entry 0 */ { /* MXM - Entry 0 */
@ -47,12 +48,12 @@ static const fsp_dxio_descriptor pco_dxio_descriptors[] = {
static const fsp_ddi_descriptor pco_ddi_descriptors[] = { static const fsp_ddi_descriptor pco_ddi_descriptors[] = {
{ /* DDI0 - DP */ { /* DDI0 - DP */
.connector_type = DP, .connector_type = CONFIG_DDI0_CONNECTOR_TYPE,
.aux_index = AUX1, .aux_index = AUX1,
.hdp_index = HDP1 .hdp_index = HDP1
}, },
{ /* DDI1 - DP */ { /* DDI1 - DP */
.connector_type = DP, .connector_type = CONFIG_DDI1_CONNECTOR_TYPE,
.aux_index = AUX2, .aux_index = AUX2,
.hdp_index = HDP2 .hdp_index = HDP2
}, },
@ -68,6 +69,11 @@ static const fsp_ddi_descriptor pco_ddi_descriptors[] = {
} }
}; };
int get_ddi_port_conn_type(uint8_t port_num)
{
return pco_ddi_descriptors[port_num].connector_type;
}
void mainboard_get_dxio_ddi_descriptors( void mainboard_get_dxio_ddi_descriptors(
const fsp_dxio_descriptor **dxio_descs, size_t *dxio_num, const fsp_dxio_descriptor **dxio_descs, size_t *dxio_num,
const fsp_ddi_descriptor **ddi_descs, size_t *ddi_num) const fsp_ddi_descriptor **ddi_descs, size_t *ddi_num)