Patrick Georgi (pgeorgi@google.com) just uploaded a new patch set to gerrit, which you can find at https://review.coreboot.org/17626
-gerrit
commit d96e4b1a9635bed868d08b43022b8c3aa96626ca Author: Lin Huang hl@rock-chips.com Date: Mon Nov 21 17:35:20 2016 +0800
rockchip/rk3399: display: retry edp initialization if edp initial fail
we found sometime edp get the edid or config video fail on kevin board after reboot. Now we will retry 3 times to initial edp if we found there are error happen in edp initial process.
BRANCH=gru BUG=chrome-os-partner:60150 TEST=reboot on kevin, not found edp initialization error again.
Change-Id: I96e20e526294fbc856fbdffcbd63accdc7371ef6 Signed-off-by: Patrick Georgi pgeorgi@chromium.org Original-Commit-Id: 28c57a6e5b89c7b3a96204ec19a080067460544a Original-Change-Id: I1382cdf4119fc4eeae5c2b36485030e3a38c2d91 Original-Signed-off-by: Lin Huang hl@rock-chips.com Original-Reviewed-on: https://chromium-review.googlesource.com/412622 Original-Reviewed-by: Julius Werner jwerner@chromium.org --- src/soc/rockchip/rk3399/display.c | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-)
diff --git a/src/soc/rockchip/rk3399/display.c b/src/soc/rockchip/rk3399/display.c index 671e518..4261b26 100644 --- a/src/soc/rockchip/rk3399/display.c +++ b/src/soc/rockchip/rk3399/display.c @@ -41,6 +41,7 @@ void rk_display_init(device_t dev) struct edid edid; struct soc_rockchip_rk3399_config *conf = dev->chip_info; enum vop_modes detected_mode = VOP_MODE_UNKNOWN; + int retry_count = 0;
/* let's use vop0 in rk3399 */ uint32_t vop_id = 0; @@ -63,15 +64,14 @@ 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; } - printk(BIOS_WARNING, "Cannot get EDID from EDP.\n"); - if (conf->vop_mode == VOP_MODE_EDP) - return; + goto edp_error; + /* fall thru */ case VOP_MODE_HDMI: printk(BIOS_WARNING, "HDMI display is NOT supported yet.\n"); @@ -100,13 +100,24 @@ void rk_display_init(device_t dev) case VOP_MODE_EDP: default: /* will enable edp in depthcharge */ - if (rk_edp_prepare()) { - printk(BIOS_WARNING, "edp prepare error\n"); - return; - } + if (rk_edp_prepare()) + goto edp_error; 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"); }