Skip to content

Commit 1bef84a

Browse files
committed
Merge tag 'drm-intel-next-fixes-2023-05-04-1' of git://anongit.freedesktop.org/drm/drm-intel into drm-next
Add missing GPU transcoder masks for MTL and fix DSI power on sequence for Nextbook Ares 8A. Fix GuC version corner case. Signed-off-by: Dave Airlie <airlied@redhat.com> From: Joonas Lahtinen <joonas.lahtinen@linux.intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/ZFOskabVuN45dNaA@jlahtine-mobl.ger.corp.intel.com
2 parents f4c41a7 + c8c2969 commit 1bef84a

6 files changed

Lines changed: 20 additions & 38 deletions

File tree

drivers/gpu/drm/i915/display/icl_dsi.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1140,7 +1140,7 @@ static void gen11_dsi_powerup_panel(struct intel_encoder *encoder)
11401140

11411141
/* panel power on related mipi dsi vbt sequences */
11421142
intel_dsi_vbt_exec_sequence(intel_dsi, MIPI_SEQ_POWER_ON);
1143-
intel_dsi_msleep(intel_dsi, intel_dsi->panel_on_delay);
1143+
msleep(intel_dsi->panel_on_delay);
11441144
intel_dsi_vbt_exec_sequence(intel_dsi, MIPI_SEQ_DEASSERT_RESET);
11451145
intel_dsi_vbt_exec_sequence(intel_dsi, MIPI_SEQ_INIT_OTP);
11461146
intel_dsi_vbt_exec_sequence(intel_dsi, MIPI_SEQ_DISPLAY_ON);

drivers/gpu/drm/i915/display/intel_dsi_vbt.c

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -763,17 +763,6 @@ void intel_dsi_vbt_exec_sequence(struct intel_dsi *intel_dsi,
763763
gpiod_set_value_cansleep(intel_dsi->gpio_backlight, 0);
764764
}
765765

766-
void intel_dsi_msleep(struct intel_dsi *intel_dsi, int msec)
767-
{
768-
struct intel_connector *connector = intel_dsi->attached_connector;
769-
770-
/* For v3 VBTs in vid-mode the delays are part of the VBT sequences */
771-
if (is_vid_mode(intel_dsi) && connector->panel.vbt.dsi.seq_version >= 3)
772-
return;
773-
774-
msleep(msec);
775-
}
776-
777766
void intel_dsi_log_params(struct intel_dsi *intel_dsi)
778767
{
779768
struct drm_i915_private *i915 = to_i915(intel_dsi->base.base.dev);

drivers/gpu/drm/i915/display/intel_dsi_vbt.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ void intel_dsi_vbt_gpio_init(struct intel_dsi *intel_dsi, bool panel_is_on);
1616
void intel_dsi_vbt_gpio_cleanup(struct intel_dsi *intel_dsi);
1717
void intel_dsi_vbt_exec_sequence(struct intel_dsi *intel_dsi,
1818
enum mipi_seq seq_id);
19-
void intel_dsi_msleep(struct intel_dsi *intel_dsi, int msec);
2019
void intel_dsi_log_params(struct intel_dsi *intel_dsi);
2120

2221
#endif /* __INTEL_DSI_VBT_H__ */

drivers/gpu/drm/i915/display/vlv_dsi.c

Lines changed: 5 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -737,7 +737,6 @@ static void intel_dsi_pre_enable(struct intel_atomic_state *state,
737737
{
738738
struct intel_dsi *intel_dsi = enc_to_intel_dsi(encoder);
739739
struct intel_crtc *crtc = to_intel_crtc(pipe_config->uapi.crtc);
740-
struct intel_connector *connector = to_intel_connector(conn_state->connector);
741740
struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
742741
enum pipe pipe = crtc->pipe;
743742
enum port port;
@@ -779,21 +778,10 @@ static void intel_dsi_pre_enable(struct intel_atomic_state *state,
779778
if (!IS_GEMINILAKE(dev_priv))
780779
intel_dsi_prepare(encoder, pipe_config);
781780

781+
/* Give the panel time to power-on and then deassert its reset */
782782
intel_dsi_vbt_exec_sequence(intel_dsi, MIPI_SEQ_POWER_ON);
783-
784-
/*
785-
* Give the panel time to power-on and then deassert its reset.
786-
* Depending on the VBT MIPI sequences version the deassert-seq
787-
* may contain the necessary delay, intel_dsi_msleep() will skip
788-
* the delay in that case. If there is no deassert-seq, then an
789-
* unconditional msleep is used to give the panel time to power-on.
790-
*/
791-
if (connector->panel.vbt.dsi.sequence[MIPI_SEQ_DEASSERT_RESET]) {
792-
intel_dsi_msleep(intel_dsi, intel_dsi->panel_on_delay);
793-
intel_dsi_vbt_exec_sequence(intel_dsi, MIPI_SEQ_DEASSERT_RESET);
794-
} else {
795-
msleep(intel_dsi->panel_on_delay);
796-
}
783+
msleep(intel_dsi->panel_on_delay);
784+
intel_dsi_vbt_exec_sequence(intel_dsi, MIPI_SEQ_DEASSERT_RESET);
797785

798786
if (IS_GEMINILAKE(dev_priv)) {
799787
glk_cold_boot = glk_dsi_enable_io(encoder);
@@ -827,7 +815,7 @@ static void intel_dsi_pre_enable(struct intel_atomic_state *state,
827815
msleep(20); /* XXX */
828816
for_each_dsi_port(port, intel_dsi->ports)
829817
dpi_send_cmd(intel_dsi, TURN_ON, false, port);
830-
intel_dsi_msleep(intel_dsi, 100);
818+
msleep(100);
831819

832820
intel_dsi_vbt_exec_sequence(intel_dsi, MIPI_SEQ_DISPLAY_ON);
833821

@@ -949,7 +937,7 @@ static void intel_dsi_post_disable(struct intel_atomic_state *state,
949937
/* Assert reset */
950938
intel_dsi_vbt_exec_sequence(intel_dsi, MIPI_SEQ_ASSERT_RESET);
951939

952-
intel_dsi_msleep(intel_dsi, intel_dsi->panel_off_delay);
940+
msleep(intel_dsi->panel_off_delay);
953941
intel_dsi_vbt_exec_sequence(intel_dsi, MIPI_SEQ_POWER_OFF);
954942

955943
intel_dsi->panel_power_off_time = ktime_get_boottime();

drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -635,9 +635,10 @@ static bool is_ver_8bit(struct intel_uc_fw_ver *ver)
635635
return ver->major < 0xFF && ver->minor < 0xFF && ver->patch < 0xFF;
636636
}
637637

638-
static bool guc_check_version_range(struct intel_uc_fw *uc_fw)
638+
static int guc_check_version_range(struct intel_uc_fw *uc_fw)
639639
{
640640
struct intel_guc *guc = container_of(uc_fw, struct intel_guc, fw);
641+
struct intel_gt *gt = __uc_fw_to_gt(uc_fw);
641642

642643
/*
643644
* GuC version number components are defined as being 8-bits.
@@ -646,24 +647,24 @@ static bool guc_check_version_range(struct intel_uc_fw *uc_fw)
646647
*/
647648

648649
if (!is_ver_8bit(&uc_fw->file_selected.ver)) {
649-
gt_warn(__uc_fw_to_gt(uc_fw), "%s firmware: invalid file version: 0x%02X:%02X:%02X\n",
650+
gt_warn(gt, "%s firmware: invalid file version: 0x%02X:%02X:%02X\n",
650651
intel_uc_fw_type_repr(uc_fw->type),
651652
uc_fw->file_selected.ver.major,
652653
uc_fw->file_selected.ver.minor,
653654
uc_fw->file_selected.ver.patch);
654-
return false;
655+
return -EINVAL;
655656
}
656657

657658
if (!is_ver_8bit(&guc->submission_version)) {
658-
gt_warn(__uc_fw_to_gt(uc_fw), "%s firmware: invalid submit version: 0x%02X:%02X:%02X\n",
659+
gt_warn(gt, "%s firmware: invalid submit version: 0x%02X:%02X:%02X\n",
659660
intel_uc_fw_type_repr(uc_fw->type),
660661
guc->submission_version.major,
661662
guc->submission_version.minor,
662663
guc->submission_version.patch);
663-
return false;
664+
return -EINVAL;
664665
}
665666

666-
return true;
667+
return i915_inject_probe_error(gt->i915, -EINVAL);
667668
}
668669

669670
static int check_fw_header(struct intel_gt *gt,
@@ -772,8 +773,11 @@ int intel_uc_fw_fetch(struct intel_uc_fw *uc_fw)
772773
if (err)
773774
goto fail;
774775

775-
if (uc_fw->type == INTEL_UC_FW_TYPE_GUC && !guc_check_version_range(uc_fw))
776-
goto fail;
776+
if (uc_fw->type == INTEL_UC_FW_TYPE_GUC) {
777+
err = guc_check_version_range(uc_fw);
778+
if (err)
779+
goto fail;
780+
}
777781

778782
if (uc_fw->file_wanted.ver.major && uc_fw->file_selected.ver.major) {
779783
/* Check the file's major version was as it claimed */

drivers/gpu/drm/i915/i915_pci.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1134,6 +1134,8 @@ static const struct intel_gt_definition xelpmp_extra_gt[] = {
11341134
static const struct intel_device_info mtl_info = {
11351135
XE_HP_FEATURES,
11361136
XE_LPDP_FEATURES,
1137+
.__runtime.cpu_transcoder_mask = BIT(TRANSCODER_A) | BIT(TRANSCODER_B) |
1138+
BIT(TRANSCODER_C) | BIT(TRANSCODER_D),
11371139
/*
11381140
* Real graphics IP version will be obtained from hardware GMD_ID
11391141
* register. Value provided here is just for sanity checking.

0 commit comments

Comments
 (0)