Lines Matching +full:- +full:- +full:retry

60 	return &enc_to_dig_port(encoder)->lspcon;  in enc_to_intel_lspcon()
68 return &dig_port->dp; in lspcon_to_intel_dp()
93 if (drm_dp_read_desc(&intel_dp->aux, &intel_dp->desc, drm_dp_is_branch(intel_dp->dpcd))) { in lspcon_detect_vendor()
94 drm_err(display->drm, "Can't read description\n"); in lspcon_detect_vendor()
98 ident = &intel_dp->desc.ident; in lspcon_detect_vendor()
99 vendor_oui = (ident->oui[0] << 16) | (ident->oui[1] << 8) | in lspcon_detect_vendor()
100 ident->oui[2]; in lspcon_detect_vendor()
104 lspcon->vendor = LSPCON_VENDOR_MCA; in lspcon_detect_vendor()
105 drm_dbg_kms(display->drm, "Vendor: Mega Chips\n"); in lspcon_detect_vendor()
109 lspcon->vendor = LSPCON_VENDOR_PARADE; in lspcon_detect_vendor()
110 drm_dbg_kms(display->drm, "Vendor: Parade Tech\n"); in lspcon_detect_vendor()
114 drm_err(display->drm, "Invalid/Unknown vendor OUI\n"); in lspcon_detect_vendor()
123 if (lspcon->vendor == LSPCON_VENDOR_MCA) in get_hdr_status_reg()
131 struct intel_lspcon *lspcon = &dig_port->lspcon; in intel_lspcon_detect_hdr_capability()
137 ret = drm_dp_dpcd_read(&intel_dp->aux, get_hdr_status_reg(lspcon), in intel_lspcon_detect_hdr_capability()
141 drm_dbg_kms(display->drm, "HDR capability detection failed\n"); in intel_lspcon_detect_hdr_capability()
142 lspcon->hdr_supported = false; in intel_lspcon_detect_hdr_capability()
144 drm_dbg_kms(display->drm, "LSPCON capable of HDR\n"); in intel_lspcon_detect_hdr_capability()
145 lspcon->hdr_supported = true; in intel_lspcon_detect_hdr_capability()
148 return lspcon->hdr_supported; in intel_lspcon_detect_hdr_capability()
156 struct i2c_adapter *ddc = &intel_dp->aux.ddc; in lspcon_get_current_mode()
158 if (drm_lspcon_get_mode(intel_dp->aux.drm_dev, ddc, &current_mode)) { in lspcon_get_current_mode()
159 drm_dbg_kms(display->drm, "Error reading LSPCON mode\n"); in lspcon_get_current_mode()
168 * On some CometLake-based device designs the Parade PS175 takes more in lspcon_get_mode_settle_timeout()
174 return lspcon->vendor == LSPCON_VENDOR_PARADE ? 800 : 400; in lspcon_get_mode_settle_timeout()
188 drm_dbg_kms(display->drm, "Waiting for LSPCON mode %s to settle\n", in lspcon_wait_mode()
194 drm_err(display->drm, "LSPCON mode hasn't settled\n"); in lspcon_wait_mode()
197 drm_dbg_kms(display->drm, "Current LSPCON mode %s\n", in lspcon_wait_mode()
210 struct i2c_adapter *ddc = &intel_dp->aux.ddc; in lspcon_change_mode()
212 err = drm_lspcon_get_mode(intel_dp->aux.drm_dev, ddc, &current_mode); in lspcon_change_mode()
214 drm_err(display->drm, "Error reading LSPCON mode\n"); in lspcon_change_mode()
219 drm_dbg_kms(display->drm, "Current mode = desired LSPCON mode\n"); in lspcon_change_mode()
223 err = drm_lspcon_set_mode(intel_dp->aux.drm_dev, ddc, mode, in lspcon_change_mode()
226 drm_err(display->drm, "LSPCON mode change failed\n"); in lspcon_change_mode()
230 lspcon->mode = mode; in lspcon_change_mode()
231 drm_dbg_kms(display->drm, "LSPCON mode changed done\n"); in lspcon_change_mode()
241 if (drm_dp_dpcd_readb(&lspcon_to_intel_dp(lspcon)->aux, DP_DPCD_REV, in lspcon_wake_native_aux_ch()
243 drm_dbg_kms(display->drm, "Native AUX CH down\n"); in lspcon_wake_native_aux_ch()
247 drm_dbg_kms(display->drm, "Native AUX CH up, DPCD version: %d.%d\n", in lspcon_wake_native_aux_ch()
257 struct i2c_adapter *ddc = &intel_dp->aux.ddc; in lspcon_probe()
260 int retry; in lspcon_probe() local
266 for (retry = 0; retry < 6; retry++) { in lspcon_probe()
267 if (retry) in lspcon_probe()
270 adaptor_type = drm_dp_dual_mode_detect(intel_dp->aux.drm_dev, ddc); in lspcon_probe()
276 drm_dbg_kms(display->drm, "No LSPCON detected, found %s\n", in lspcon_probe()
282 drm_dbg_kms(display->drm, "LSPCON detected\n"); in lspcon_probe()
283 lspcon->mode = lspcon_wait_mode(lspcon, expected_mode); in lspcon_probe()
290 if (lspcon->mode != DRM_LSPCON_MODE_PCON) { in lspcon_probe()
292 drm_err(display->drm, "LSPCON mode change to PCON failed\n"); in lspcon_probe()
307 if (intel_digital_port_connected(&dig_port->base)) { in lspcon_resume_in_pcon_wa()
308 drm_dbg_kms(display->drm, "LSPCON recovering in PCON mode after %u ms\n", in lspcon_resume_in_pcon_wa()
309 jiffies_to_msecs(jiffies - start)); in lspcon_resume_in_pcon_wa()
319 drm_dbg_kms(display->drm, "LSPCON DP descriptor mismatch after resume\n"); in lspcon_resume_in_pcon_wa()
325 u8 retry; in lspcon_parade_fw_ready() local
329 for (retry = 0; retry < 5; retry++) { in lspcon_parade_fw_ready()
330 if (retry) in lspcon_parade_fw_ready()
336 drm_err(aux->drm_dev, "Failed to read AVI IF control\n"); in lspcon_parade_fw_ready()
344 drm_err(aux->drm_dev, "Parade FW not ready to accept AVI IF\n"); in lspcon_parade_fw_ready()
359 drm_dbg_kms(aux->drm_dev, "LSPCON FW not ready, block %d\n", in _lspcon_parade_write_infoframe_blocks()
368 drm_err(aux->drm_dev, "Failed to write AVI IF block %d\n", in _lspcon_parade_write_infoframe_blocks()
376 * - set the kickoff bit[7] to 1 in _lspcon_parade_write_infoframe_blocks()
377 * - write the block no. to bits[1:0] in _lspcon_parade_write_infoframe_blocks()
383 drm_err(aux->drm_dev, "Failed to update (0x%x), block %d\n", in _lspcon_parade_write_infoframe_blocks()
391 drm_dbg_kms(aux->drm_dev, "Wrote AVI IF blocks successfully\n"); in _lspcon_parade_write_infoframe_blocks()
404 * Token byte (first byte of first frame, must be non-zero) in _lspcon_write_avi_infoframe_parade()
408 * first block: | <token> <HB0-HB2> <DB0-DB3> | in _lspcon_write_avi_infoframe_parade()
409 * next 3 blocks: |<DB4-DB11>|<DB12-DB19>|<DB20-DB28>| in _lspcon_write_avi_infoframe_parade()
412 if (len > LSPCON_PARADE_AVI_IF_DATA_SIZE - 1) { in _lspcon_write_avi_infoframe_parade()
413 drm_err(aux->drm_dev, "Invalid length of infoframes\n"); in _lspcon_write_avi_infoframe_parade()
420 drm_dbg_kms(aux->drm_dev, "Failed to write infoframe blocks\n"); in _lspcon_write_avi_infoframe_parade()
432 u32 retry; in _lspcon_write_avi_infoframe_mca() local
438 /* DPCD write for AVI IF can fail on a slow FW day, so retry */ in _lspcon_write_avi_infoframe_mca()
439 for (retry = 0; retry < 5; retry++) { in _lspcon_write_avi_infoframe_mca()
443 } else if (retry < 4) { in _lspcon_write_avi_infoframe_mca()
447 drm_err(aux->drm_dev, "DPCD write failed at: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()
468 drm_err(aux->drm_dev, "DPCD read failed, address 0x%x\n", reg); in _lspcon_write_avi_infoframe_mca()
475 drm_err(aux->drm_dev, "DPCD read failed, address 0x%x\n", reg); in _lspcon_write_avi_infoframe_mca()
480 drm_dbg_kms(aux->drm_dev, "AVI IF handled by FW\n"); in _lspcon_write_avi_infoframe_mca()
497 if (lspcon->vendor == LSPCON_VENDOR_MCA) in lspcon_write_infoframe()
498 ret = _lspcon_write_avi_infoframe_mca(&intel_dp->aux, in lspcon_write_infoframe()
501 ret = _lspcon_write_avi_infoframe_parade(&intel_dp->aux, in lspcon_write_infoframe()
505 drm_dbg_kms(display->drm, "Update HDR metadata for lspcon\n"); in lspcon_write_infoframe()
514 drm_err(display->drm, "Failed to write infoframes\n"); in lspcon_write_infoframe()
537 struct intel_lspcon *lspcon = &dig_port->lspcon; in lspcon_set_infoframes()
539 &crtc_state->hw.adjusted_mode; in lspcon_set_infoframes()
544 if (!lspcon->active) { in lspcon_set_infoframes()
545 drm_err(display->drm, "Writing infoframes while LSPCON disabled ?\n"); in lspcon_set_infoframes()
552 conn_state->connector, in lspcon_set_infoframes()
555 drm_err(display->drm, "couldn't fill AVI infoframe\n"); in lspcon_set_infoframes()
568 if (crtc_state->output_format == INTEL_OUTPUT_FORMAT_YCBCR444) in lspcon_set_infoframes()
577 drm_WARN_ON(encoder->base.dev, crtc_state->limited_color_range && in lspcon_set_infoframes()
578 crtc_state->output_format != INTEL_OUTPUT_FORMAT_RGB); in lspcon_set_infoframes()
580 if (crtc_state->output_format == INTEL_OUTPUT_FORMAT_RGB) { in lspcon_set_infoframes()
582 conn_state->connector, in lspcon_set_infoframes()
584 crtc_state->limited_color_range ? in lspcon_set_infoframes()
596 drm_err(display->drm, "Failed to pack AVI IF\n"); in lspcon_set_infoframes()
600 dig_port->write_infoframe(encoder, crtc_state, HDMI_INFOFRAME_TYPE_AVI, in lspcon_set_infoframes()
612 drm_err(aux->drm_dev, "DPCD read failed, address 0x%x\n", reg); in _lspcon_read_avi_infoframe_enabled_mca()
627 drm_err(aux->drm_dev, "DPCD read failed, address 0x%x\n", reg); in _lspcon_read_avi_infoframe_enabled_parade()
644 if (lspcon->vendor == LSPCON_VENDOR_MCA) in lspcon_infoframes_enabled()
645 infoframes_enabled = _lspcon_read_avi_infoframe_enabled_mca(&intel_dp->aux); in lspcon_infoframes_enabled()
647 infoframes_enabled = _lspcon_read_avi_infoframe_enabled_parade(&intel_dp->aux); in lspcon_infoframes_enabled()
652 if (lspcon->hdr_supported) { in lspcon_infoframes_enabled()
654 HSW_TVIDEO_DIP_CTL(display, pipe_config->cpu_transcoder)); in lspcon_infoframes_enabled()
666 struct intel_lspcon *lspcon = &dig_port->lspcon; in intel_lspcon_wait_pcon_mode()
674 struct intel_dp *intel_dp = &dig_port->dp; in intel_lspcon_init()
675 struct intel_lspcon *lspcon = &dig_port->lspcon; in intel_lspcon_init()
676 struct drm_connector *connector = &intel_dp->attached_connector->base; in intel_lspcon_init()
678 lspcon->active = false; in intel_lspcon_init()
679 lspcon->mode = DRM_LSPCON_MODE_INVALID; in intel_lspcon_init()
682 drm_err(display->drm, "Failed to probe lspcon\n"); in intel_lspcon_init()
686 if (drm_dp_read_dpcd_caps(&intel_dp->aux, intel_dp->dpcd) != 0) { in intel_lspcon_init()
687 drm_err(display->drm, "LSPCON DPCD read failed\n"); in intel_lspcon_init()
692 drm_err(display->drm, "LSPCON vendor detection failed\n"); in intel_lspcon_init()
696 connector->ycbcr_420_allowed = true; in intel_lspcon_init()
697 lspcon->active = true; in intel_lspcon_init()
698 drm_dbg_kms(display->drm, "Success: LSPCON init\n"); in intel_lspcon_init()
704 struct intel_lspcon *lspcon = &dig_port->lspcon; in intel_lspcon_active()
706 return lspcon->active; in intel_lspcon_active()
714 return dig_port->infoframes_enabled(encoder, pipe_config); in intel_lspcon_infoframes_enabled()
720 struct intel_lspcon *lspcon = &dig_port->lspcon; in intel_lspcon_resume()
723 if (!intel_bios_encoder_is_lspcon(dig_port->base.devdata)) in intel_lspcon_resume()
726 if (!lspcon->active) { in intel_lspcon_resume()
728 drm_err(display->drm, "LSPCON init failed on port %c\n", in intel_lspcon_resume()
729 port_name(dig_port->base.port)); in intel_lspcon_resume()
745 drm_err(display->drm, "LSPCON resume failed\n"); in intel_lspcon_resume()
747 drm_dbg_kms(display->drm, "LSPCON resume success\n"); in intel_lspcon_resume()