Merge a94f99c621 on remote branch

Change-Id: I279410afa2699f1944289045d4f78c7cfd728122
This commit is contained in:
Linux Build Service Account
2023-07-21 06:21:09 -07:00
5 changed files with 34 additions and 21 deletions

View File

@@ -7100,6 +7100,17 @@ int dsi_display_get_modes_helper(struct dsi_display *display,
return rc; return rc;
} }
/*
* Update the host_config.dst_format for compressed RGB101010 pixel format.
*/
if (display->panel->host_config.dst_format == DSI_PIXEL_FORMAT_RGB101010 &&
display_mode.timing.dsc_enabled) {
display->panel->host_config.dst_format = DSI_PIXEL_FORMAT_RGB888;
DSI_DEBUG("updated dst_format from %d to %d\n",
DSI_PIXEL_FORMAT_RGB101010,
display->panel->host_config.dst_format);
}
if (display->cmdline_timing == display_mode.mode_idx) { if (display->cmdline_timing == display_mode.mode_idx) {
topology_override = display->cmdline_topology; topology_override = display->cmdline_topology;
is_preferred = true; is_preferred = true;

View File

@@ -964,6 +964,15 @@ static int dsi_panel_parse_pixel_format(struct dsi_host_common_cfg *host,
fmt = DSI_PIXEL_FORMAT_RGB666; fmt = DSI_PIXEL_FORMAT_RGB666;
break; break;
case 30: case 30:
/*
* The destination pixel format (host->dst_format) depends
* upon the compression, and should be RGB888 if the DSC is
* enable.
* The DSC status information is inside the timing modes, that
* is parsed during first dsi_display_get_modes() call.
* The dst_format will be updated there depending upon the
* DSC status.
*/
fmt = DSI_PIXEL_FORMAT_RGB101010; fmt = DSI_PIXEL_FORMAT_RGB101010;
break; break;
case 24: case 24:

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2021-2022 Qualcomm Innovation Center, Inc. All rights reserved. * Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
* Copyright (c) 2016-2021, The Linux Foundation. All rights reserved. * Copyright (c) 2016-2021, The Linux Foundation. All rights reserved.
* Copyright (C) 2013 Red Hat * Copyright (C) 2013 Red Hat
* Author: Rob Clark <robdclark@gmail.com> * Author: Rob Clark <robdclark@gmail.com>
@@ -977,11 +977,6 @@ static int msm_drm_component_init(struct device *dev)
drm_mode_config_reset(ddev); drm_mode_config_reset(ddev);
ret = drm_dev_register(ddev, 0);
if (ret)
goto fail;
priv->registered = true;
if (kms && kms->funcs && kms->funcs->cont_splash_config) { if (kms && kms->funcs && kms->funcs->cont_splash_config) {
ret = kms->funcs->cont_splash_config(kms, NULL); ret = kms->funcs->cont_splash_config(kms, NULL);
if (ret) { if (ret) {
@@ -990,6 +985,11 @@ static int msm_drm_component_init(struct device *dev)
} }
} }
ret = drm_dev_register(ddev, 0);
if (ret)
goto fail;
priv->registered = true;
#if IS_ENABLED(CONFIG_DRM_FBDEV_EMULATION) #if IS_ENABLED(CONFIG_DRM_FBDEV_EMULATION)
if (fbdev) if (fbdev)
priv->fbdev = msm_fbdev_init(ddev); priv->fbdev = msm_fbdev_init(ddev);

View File

@@ -5851,7 +5851,6 @@ enum sde_intf_mode sde_encoder_get_intf_mode(struct drm_encoder *encoder)
u32 sde_encoder_get_frame_count(struct drm_encoder *encoder) u32 sde_encoder_get_frame_count(struct drm_encoder *encoder)
{ {
struct sde_encoder_virt *sde_enc = NULL; struct sde_encoder_virt *sde_enc = NULL;
struct sde_encoder_phys *phys;
if (!encoder) { if (!encoder) {
SDE_ERROR("invalid encoder\n"); SDE_ERROR("invalid encoder\n");
@@ -5859,9 +5858,7 @@ u32 sde_encoder_get_frame_count(struct drm_encoder *encoder)
} }
sde_enc = to_sde_encoder_virt(encoder); sde_enc = to_sde_encoder_virt(encoder);
phys = sde_enc->cur_master; return atomic_read(&sde_enc->vsync_cnt);
return phys ? atomic_read(&sde_enc->vsync_cnt) : 0;
} }
bool sde_encoder_get_vblank_timestamp(struct drm_encoder *encoder, bool sde_encoder_get_vblank_timestamp(struct drm_encoder *encoder,

View File

@@ -1,6 +1,6 @@
// SPDX-License-Identifier: GPL-2.0-only // SPDX-License-Identifier: GPL-2.0-only
/* /*
* Copyright (c) 2021-2022 Qualcomm Innovation Center, Inc. All rights reserved. * Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
* Copyright (c) 2015-2021, The Linux Foundation. All rights reserved. * Copyright (c) 2015-2021, The Linux Foundation. All rights reserved.
*/ */
@@ -471,9 +471,6 @@ int sde_wb_get_mode_info(struct drm_connector *connector,
const u32 single_intf = 1; const u32 single_intf = 1;
const u32 no_enc = 0; const u32 no_enc = 0;
struct msm_display_topology *topology; struct msm_display_topology *topology;
struct sde_wb_device *wb_dev = display;
u16 hdisplay;
int i;
if (!drm_mode || !mode_info || !avail_res || if (!drm_mode || !mode_info || !avail_res ||
!avail_res->max_mixer_width || !display) { !avail_res->max_mixer_width || !display) {
@@ -481,18 +478,17 @@ int sde_wb_get_mode_info(struct drm_connector *connector,
return -EINVAL; return -EINVAL;
} }
hdisplay = drm_mode->hdisplay;
/* find maximum display width to support */
for (i = 0; i < wb_dev->count_modes; i++)
hdisplay = max(hdisplay, wb_dev->modes[i].hdisplay);
topology = &mode_info->topology; topology = &mode_info->topology;
topology->num_lm = (avail_res->max_mixer_width <= hdisplay) ? topology->num_lm = (avail_res->max_mixer_width <= drm_mode->hdisplay) ?
dual_lm : single_lm; dual_lm : single_lm;
topology->num_enc = no_enc; topology->num_enc = no_enc;
topology->num_intf = single_intf; topology->num_intf = single_intf;
if (topology->num_lm == dual_lm && (drm_mode->hdisplay % 4)) {
SDE_ERROR("invalid mode settings for 3d-merge, hdisplay:%d\n", drm_mode->hdisplay);
return -EINVAL;
}
mode_info->comp_info.comp_type = MSM_DISPLAY_COMPRESSION_NONE; mode_info->comp_info.comp_type = MSM_DISPLAY_COMPRESSION_NONE;
mode_info->wide_bus_en = false; mode_info->wide_bus_en = false;
mode_info->comp_info.comp_ratio = MSM_DISPLAY_COMPRESSION_RATIO_NONE; mode_info->comp_info.comp_ratio = MSM_DISPLAY_COMPRESSION_RATIO_NONE;