|
@@ -42,15 +42,25 @@ void hubp1_set_blank(struct hubp *hubp, bool blank)
|
|
|
{
|
|
|
struct dcn10_hubp *hubp1 = TO_DCN10_HUBP(hubp);
|
|
|
uint32_t blank_en = blank ? 1 : 0;
|
|
|
+ uint32_t reg_val = 0;
|
|
|
|
|
|
- REG_UPDATE_2(DCHUBP_CNTL,
|
|
|
+ reg_val = REG_UPDATE_2(DCHUBP_CNTL,
|
|
|
HUBP_BLANK_EN, blank_en,
|
|
|
HUBP_TTU_DISABLE, blank_en);
|
|
|
|
|
|
if (blank) {
|
|
|
- REG_WAIT(DCHUBP_CNTL,
|
|
|
- HUBP_NO_OUTSTANDING_REQ, 1,
|
|
|
- 1, 200);
|
|
|
+ if (reg_val) {
|
|
|
+ /* init sequence workaround: in case HUBP is
|
|
|
+ * power gated, this wait would timeout.
|
|
|
+ *
|
|
|
+ * we just wrote reg_val to non-0, if it stay 0
|
|
|
+ * it means HUBP is gated
|
|
|
+ */
|
|
|
+ REG_WAIT(DCHUBP_CNTL,
|
|
|
+ HUBP_NO_OUTSTANDING_REQ, 1,
|
|
|
+ 1, 200);
|
|
|
+ }
|
|
|
+
|
|
|
hubp->mpcc_id = 0xf;
|
|
|
hubp->opp_id = 0xf;
|
|
|
}
|