Lines Matching +full:- +full:- +full:retry
62 return &dig_port->dp; in lspcon_to_intel_dp()
87 if (drm_dp_read_desc(&intel_dp->aux, &intel_dp->desc, drm_dp_is_branch(intel_dp->dpcd))) { in lspcon_detect_vendor()
88 drm_err(display->drm, "Can't read description\n"); in lspcon_detect_vendor()
92 ident = &intel_dp->desc.ident; in lspcon_detect_vendor()
93 vendor_oui = (ident->oui[0] << 16) | (ident->oui[1] << 8) | in lspcon_detect_vendor()
94 ident->oui[2]; in lspcon_detect_vendor()
98 lspcon->vendor = LSPCON_VENDOR_MCA; in lspcon_detect_vendor()
99 drm_dbg_kms(display->drm, "Vendor: Mega Chips\n"); in lspcon_detect_vendor()
103 lspcon->vendor = LSPCON_VENDOR_PARADE; in lspcon_detect_vendor()
104 drm_dbg_kms(display->drm, "Vendor: Parade Tech\n"); in lspcon_detect_vendor()
108 drm_err(display->drm, "Invalid/Unknown vendor OUI\n"); in lspcon_detect_vendor()
117 if (lspcon->vendor == LSPCON_VENDOR_MCA) in get_hdr_status_reg()
130 ret = drm_dp_dpcd_read(&intel_dp->aux, get_hdr_status_reg(lspcon), in lspcon_detect_hdr_capability()
134 drm_dbg_kms(display->drm, "HDR capability detection failed\n"); in lspcon_detect_hdr_capability()
135 lspcon->hdr_supported = false; in lspcon_detect_hdr_capability()
137 drm_dbg_kms(display->drm, "LSPCON capable of HDR\n"); in lspcon_detect_hdr_capability()
138 lspcon->hdr_supported = true; in lspcon_detect_hdr_capability()
147 struct i2c_adapter *ddc = &intel_dp->aux.ddc; in lspcon_get_current_mode()
149 if (drm_lspcon_get_mode(intel_dp->aux.drm_dev, ddc, ¤t_mode)) { in lspcon_get_current_mode()
150 drm_dbg_kms(display->drm, "Error reading LSPCON mode\n"); in lspcon_get_current_mode()
159 * On some CometLake-based device designs the Parade PS175 takes more in lspcon_get_mode_settle_timeout()
165 return lspcon->vendor == LSPCON_VENDOR_PARADE ? 800 : 400; in lspcon_get_mode_settle_timeout()
179 drm_dbg_kms(display->drm, "Waiting for LSPCON mode %s to settle\n", in lspcon_wait_mode()
185 drm_err(display->drm, "LSPCON mode hasn't settled\n"); in lspcon_wait_mode()
188 drm_dbg_kms(display->drm, "Current LSPCON mode %s\n", in lspcon_wait_mode()
201 struct i2c_adapter *ddc = &intel_dp->aux.ddc; in lspcon_change_mode()
203 err = drm_lspcon_get_mode(intel_dp->aux.drm_dev, ddc, ¤t_mode); in lspcon_change_mode()
205 drm_err(display->drm, "Error reading LSPCON mode\n"); in lspcon_change_mode()
210 drm_dbg_kms(display->drm, "Current mode = desired LSPCON mode\n"); in lspcon_change_mode()
214 err = drm_lspcon_set_mode(intel_dp->aux.drm_dev, ddc, mode); in lspcon_change_mode()
216 drm_err(display->drm, "LSPCON mode change failed\n"); in lspcon_change_mode()
220 lspcon->mode = mode; in lspcon_change_mode()
221 drm_dbg_kms(display->drm, "LSPCON mode changed done\n"); in lspcon_change_mode()
231 if (drm_dp_dpcd_readb(&lspcon_to_intel_dp(lspcon)->aux, DP_DPCD_REV, in lspcon_wake_native_aux_ch()
233 drm_dbg_kms(display->drm, "Native AUX CH down\n"); in lspcon_wake_native_aux_ch()
237 drm_dbg_kms(display->drm, "Native AUX CH up, DPCD version: %d.%d\n", in lspcon_wake_native_aux_ch()
247 struct i2c_adapter *ddc = &intel_dp->aux.ddc; in lspcon_probe()
250 int retry; in lspcon_probe() local
256 for (retry = 0; retry < 6; retry++) { in lspcon_probe()
257 if (retry) in lspcon_probe()
260 adaptor_type = drm_dp_dual_mode_detect(intel_dp->aux.drm_dev, ddc); in lspcon_probe()
266 drm_dbg_kms(display->drm, "No LSPCON detected, found %s\n", in lspcon_probe()
272 drm_dbg_kms(display->drm, "LSPCON detected\n"); in lspcon_probe()
273 lspcon->mode = lspcon_wait_mode(lspcon, expected_mode); in lspcon_probe()
280 if (lspcon->mode != DRM_LSPCON_MODE_PCON) { in lspcon_probe()
282 drm_err(display->drm, "LSPCON mode change to PCON failed\n"); in lspcon_probe()
297 if (intel_digital_port_connected(&dig_port->base)) { in lspcon_resume_in_pcon_wa()
298 drm_dbg_kms(display->drm, "LSPCON recovering in PCON mode after %u ms\n", in lspcon_resume_in_pcon_wa()
299 jiffies_to_msecs(jiffies - start)); in lspcon_resume_in_pcon_wa()
309 drm_dbg_kms(display->drm, "LSPCON DP descriptor mismatch after resume\n"); in lspcon_resume_in_pcon_wa()
315 u8 retry; in lspcon_parade_fw_ready() local
319 for (retry = 0; retry < 5; retry++) { in lspcon_parade_fw_ready()
320 if (retry) in lspcon_parade_fw_ready()
326 drm_err(aux->drm_dev, "Failed to read AVI IF control\n"); in lspcon_parade_fw_ready()
334 drm_err(aux->drm_dev, "Parade FW not ready to accept AVI IF\n"); in lspcon_parade_fw_ready()
349 drm_dbg_kms(aux->drm_dev, "LSPCON FW not ready, block %d\n", in _lspcon_parade_write_infoframe_blocks()
358 drm_err(aux->drm_dev, "Failed to write AVI IF block %d\n", in _lspcon_parade_write_infoframe_blocks()
366 * - set the kickoff bit[7] to 1 in _lspcon_parade_write_infoframe_blocks()
367 * - write the block no. to bits[1:0] in _lspcon_parade_write_infoframe_blocks()
373 drm_err(aux->drm_dev, "Failed to update (0x%x), block %d\n", in _lspcon_parade_write_infoframe_blocks()
381 drm_dbg_kms(aux->drm_dev, "Wrote AVI IF blocks successfully\n"); in _lspcon_parade_write_infoframe_blocks()
394 * Token byte (first byte of first frame, must be non-zero) in _lspcon_write_avi_infoframe_parade()
398 * first block: | <token> <HB0-HB2> <DB0-DB3> | in _lspcon_write_avi_infoframe_parade()
399 * next 3 blocks: |<DB4-DB11>|<DB12-DB19>|<DB20-DB28>| in _lspcon_write_avi_infoframe_parade()
402 if (len > LSPCON_PARADE_AVI_IF_DATA_SIZE - 1) { in _lspcon_write_avi_infoframe_parade()
403 drm_err(aux->drm_dev, "Invalid length of infoframes\n"); in _lspcon_write_avi_infoframe_parade()
410 drm_dbg_kms(aux->drm_dev, "Failed to write infoframe blocks\n"); in _lspcon_write_avi_infoframe_parade()
422 u32 retry; in _lspcon_write_avi_infoframe_mca() local
428 /* DPCD write for AVI IF can fail on a slow FW day, so retry */ in _lspcon_write_avi_infoframe_mca()
429 for (retry = 0; retry < 5; retry++) { in _lspcon_write_avi_infoframe_mca()
433 } else if (retry < 4) { in _lspcon_write_avi_infoframe_mca()
437 drm_err(aux->drm_dev, "DPCD write failed at:0x%x\n", reg); in _lspcon_write_avi_infoframe_mca()
448 drm_err(aux->drm_dev, "DPCD read failed, address 0x%x\n", reg); in _lspcon_write_avi_infoframe_mca()
458 drm_err(aux->drm_dev, "DPCD read failed, address 0x%x\n", reg); in _lspcon_write_avi_infoframe_mca()
465 drm_err(aux->drm_dev, "DPCD read failed, address 0x%x\n", reg); in _lspcon_write_avi_infoframe_mca()
470 drm_dbg_kms(aux->drm_dev, "AVI IF handled by FW\n"); in _lspcon_write_avi_infoframe_mca()
487 if (lspcon->vendor == LSPCON_VENDOR_MCA) in lspcon_write_infoframe()
488 ret = _lspcon_write_avi_infoframe_mca(&intel_dp->aux, in lspcon_write_infoframe()
491 ret = _lspcon_write_avi_infoframe_parade(&intel_dp->aux, in lspcon_write_infoframe()
495 drm_dbg_kms(display->drm, "Update HDR metadata for lspcon\n"); in lspcon_write_infoframe()
504 drm_err(display->drm, "Failed to write infoframes\n"); in lspcon_write_infoframe()
527 struct intel_lspcon *lspcon = &dig_port->lspcon; in lspcon_set_infoframes()
529 &crtc_state->hw.adjusted_mode; in lspcon_set_infoframes()
534 if (!lspcon->active) { in lspcon_set_infoframes()
535 drm_err(display->drm, "Writing infoframes while LSPCON disabled ?\n"); in lspcon_set_infoframes()
542 conn_state->connector, in lspcon_set_infoframes()
545 drm_err(display->drm, "couldn't fill AVI infoframe\n"); in lspcon_set_infoframes()
558 if (crtc_state->output_format == INTEL_OUTPUT_FORMAT_YCBCR444) in lspcon_set_infoframes()
567 drm_WARN_ON(encoder->base.dev, crtc_state->limited_color_range && in lspcon_set_infoframes()
568 crtc_state->output_format != INTEL_OUTPUT_FORMAT_RGB); in lspcon_set_infoframes()
570 if (crtc_state->output_format == INTEL_OUTPUT_FORMAT_RGB) { in lspcon_set_infoframes()
572 conn_state->connector, in lspcon_set_infoframes()
574 crtc_state->limited_color_range ? in lspcon_set_infoframes()
586 drm_err(display->drm, "Failed to pack AVI IF\n"); in lspcon_set_infoframes()
590 dig_port->write_infoframe(encoder, crtc_state, HDMI_INFOFRAME_TYPE_AVI, in lspcon_set_infoframes()
602 drm_err(aux->drm_dev, "DPCD read failed, address 0x%x\n", reg); in _lspcon_read_avi_infoframe_enabled_mca()
617 drm_err(aux->drm_dev, "DPCD read failed, address 0x%x\n", reg); in _lspcon_read_avi_infoframe_enabled_parade()
634 if (lspcon->vendor == LSPCON_VENDOR_MCA) in lspcon_infoframes_enabled()
635 infoframes_enabled = _lspcon_read_avi_infoframe_enabled_mca(&intel_dp->aux); in lspcon_infoframes_enabled()
637 infoframes_enabled = _lspcon_read_avi_infoframe_enabled_parade(&intel_dp->aux); in lspcon_infoframes_enabled()
642 if (lspcon->hdr_supported) { in lspcon_infoframes_enabled()
644 HSW_TVIDEO_DIP_CTL(display, pipe_config->cpu_transcoder)); in lspcon_infoframes_enabled()
662 struct intel_dp *intel_dp = &dig_port->dp; in lspcon_init()
663 struct intel_lspcon *lspcon = &dig_port->lspcon; in lspcon_init()
664 struct drm_connector *connector = &intel_dp->attached_connector->base; in lspcon_init()
666 lspcon->active = false; in lspcon_init()
667 lspcon->mode = DRM_LSPCON_MODE_INVALID; in lspcon_init()
670 drm_err(display->drm, "Failed to probe lspcon\n"); in lspcon_init()
674 if (drm_dp_read_dpcd_caps(&intel_dp->aux, intel_dp->dpcd) != 0) { in lspcon_init()
675 drm_err(display->drm, "LSPCON DPCD read failed\n"); in lspcon_init()
680 drm_err(display->drm, "LSPCON vendor detection failed\n"); in lspcon_init()
684 connector->ycbcr_420_allowed = true; in lspcon_init()
685 lspcon->active = true; in lspcon_init()
686 drm_dbg_kms(display->drm, "Success: LSPCON init\n"); in lspcon_init()
695 return dig_port->infoframes_enabled(encoder, pipe_config); in intel_lspcon_infoframes_enabled()
701 struct intel_lspcon *lspcon = &dig_port->lspcon; in lspcon_resume()
704 if (!intel_bios_encoder_is_lspcon(dig_port->base.devdata)) in lspcon_resume()
707 if (!lspcon->active) { in lspcon_resume()
709 drm_err(display->drm, "LSPCON init failed on port %c\n", in lspcon_resume()
710 port_name(dig_port->base.port)); in lspcon_resume()
726 drm_err(display->drm, "LSPCON resume failed\n"); in lspcon_resume()
728 drm_dbg_kms(display->drm, "LSPCON resume success\n"); in lspcon_resume()