From e4b9af15d8775b602020ccadbfc138378fbc7c1e Mon Sep 17 00:00:00 2001 From: Martin Roth Date: Tue, 29 Nov 2016 10:50:52 -0700 Subject: rockchip/rk3399: display: Update edp initialization retry Follow on patch to clean up the previous retry code. Previous patches: coreboot commit 079b5c65 (rockchip/rk3399: display: Retry edp initialization if it fails) cros commit 28c57a6e (rockchip/rk3399: display: retry edp initialization if edp initial fail) - Reduce the jumping around via goto statements - Break the retry code out into a separate function that also prints the error messages. BRANCH=gru BUG=chrome-os-partner:60150 TEST=Rebuild Kevin and Gru Change-Id: I3b6cf572073e4dcac83da09621bafde179af2613 Signed-off-by: Martin Roth Reviewed-on: https://review.coreboot.org/17642 Tested-by: build bot (Jenkins) Reviewed-by: Julius Werner --- src/soc/rockchip/rk3399/display.c | 49 ++++++++++++++++++++++----------------- 1 file changed, 28 insertions(+), 21 deletions(-) diff --git a/src/soc/rockchip/rk3399/display.c b/src/soc/rockchip/rk3399/display.c index 4261b26399..5199bf3d34 100644 --- a/src/soc/rockchip/rk3399/display.c +++ b/src/soc/rockchip/rk3399/display.c @@ -36,6 +36,17 @@ #include "chip.h" +static void reset_edp(void) +{ + /* rst edp */ + write32(&cru_ptr->softrst_con[17], + RK_SETBITS(1 << 12 | 1 << 13)); + udelay(1); + write32(&cru_ptr->softrst_con[17], + RK_CLRBITS(1 << 12 | 1 << 13)); + printk(BIOS_WARNING, "Retrying epd initialization.\n"); +} + void rk_display_init(device_t dev) { struct edid edid; @@ -65,14 +76,20 @@ void rk_display_init(device_t dev) write32(&rk3399_grf->soc_con25, RK_SETBITS(1 << 11)); retry_edp: - rk_edp_init(); - if (rk_edp_get_edid(&edid) == 0) { - detected_mode = VOP_MODE_EDP; - break; + while (retry_count++ < 3) { + rk_edp_init(); + if (rk_edp_get_edid(&edid) == 0) { + detected_mode = VOP_MODE_EDP; + break; + } + if (retry_count == 3) { + printk(BIOS_WARNING, "Warning: epd initialization failed.\n"); + return; + } else { + reset_edp(); + } } - goto edp_error; - - /* fall thru */ + break; case VOP_MODE_HDMI: printk(BIOS_WARNING, "HDMI display is NOT supported yet.\n"); return; @@ -100,24 +117,14 @@ retry_edp: case VOP_MODE_EDP: default: /* will enable edp in depthcharge */ - if (rk_edp_prepare()) - goto edp_error; + if (rk_edp_prepare()) { + reset_edp(); + goto retry_edp; /* Rerun entire init sequence */ + } mainboard_power_on_backlight(); break; } set_vbe_mode_info_valid(&edid, (uintptr_t)0); return; - -edp_error: - if (retry_count++ < 3) { - /* rst edp */ - write32(&cru_ptr->softrst_con[17], - RK_SETBITS(1 << 12 | 1 << 13)); - udelay(1); - write32(&cru_ptr->softrst_con[17], - RK_CLRBITS(1 << 12 | 1 << 13)); - goto retry_edp; - } - printk(BIOS_WARNING, "epd initial error\n"); } -- cgit v1.2.3