summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJulius Werner <jwerner@chromium.org>2021-09-28 14:46:59 -0700
committerJulius Werner <jwerner@chromium.org>2021-09-29 21:07:30 +0000
commitf67f2b0d4ca4d1d72fa077d69abef916c8c3a38c (patch)
treea14af3625199046da27cd0d2e95624973bb474c1 /src
parentefe57ebd40475d899e7585c02822cd0baebb8d30 (diff)
downloadcoreboot-f67f2b0d4ca4d1d72fa077d69abef916c8c3a38c.tar.gz
coreboot-f67f2b0d4ca4d1d72fa077d69abef916c8c3a38c.tar.bz2
coreboot-f67f2b0d4ca4d1d72fa077d69abef916c8c3a38c.zip
google/trogdor: Always initialize eDP bridge I2C QUP firmware
In CB:52662 when MIPI display support was added, we accidentally changed the code flow for eDP displays such that i2c_init() will no longer be called when display_init_required() is false. This is a problem because on this platform, i2c_init() does not just prepare the I2C controller for firmware use, it also loads firmware to the controller that makes it behave like an I2C device in the first place -- a step that the kernel cannot later do on its own if the firmware didn't already do it. Skipping this initialization means the I2C controller becomes unusable to the kernel. This patch fixes the issue by making the i2c_init() unconditional again. Signed-off-by: Julius Werner <jwerner@chromium.org> Change-Id: Ie4546c31d87d91113eeef7dc7a18599a87e6d6eb Reviewed-on: https://review.coreboot.org/c/coreboot/+/58026 Reviewed-by: Douglas Anderson <dianders@chromium.org> Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Diffstat (limited to 'src')
-rw-r--r--src/mainboard/google/trogdor/mainboard.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/src/mainboard/google/trogdor/mainboard.c b/src/mainboard/google/trogdor/mainboard.c
index 48949d5a9cbf..2d9dac3ce69e 100644
--- a/src/mainboard/google/trogdor/mainboard.c
+++ b/src/mainboard/google/trogdor/mainboard.c
@@ -23,7 +23,7 @@
#include "board.h"
#include <soc/addressmap.h>
-#define BRIDGE_BUS 0x2
+#define BRIDGE_BUS QUPV3_0_SE2
#define BRIDGE_CHIP 0x2d
static struct usb_board_data usb0_board_data = {
@@ -177,6 +177,9 @@ static void display_startup(void)
struct panel_serializable_data *panel = &edp_panel;
enum lb_fb_orientation orientation = LB_FB_ORIENTATION_NORMAL;
+ /* Always initialize this so QUP firmware is loaded for the kernel. */
+ i2c_init(BRIDGE_BUS, I2C_SPEED_FAST);
+
if (!display_init_required()) {
printk(BIOS_INFO, "Skipping display init.\n");
return;
@@ -189,7 +192,6 @@ static void display_startup(void)
return;
} else {
enum dp_pll_clk_src ref_clk = SN65_SEL_19MHZ;
- i2c_init(QUPV3_0_SE2, I2C_SPEED_FAST); /* EDP Bridge I2C */
power_on_bridge();
mdelay(250); /* Delay for the panel to be up */
sn65dsi86_bridge_init(BRIDGE_BUS, BRIDGE_CHIP, ref_clk);