Loading drivers/gpu/drm/drm_auth.c +6 −0 Original line number Diff line number Diff line Loading @@ -232,6 +232,12 @@ int drm_dropmaster_ioctl(struct drm_device *dev, void *data, if (!dev->master) goto out_unlock; if (file_priv->master->lessor != NULL) { DRM_DEBUG_LEASE("Attempt to drop lessee %d as master\n", file_priv->master->lessee_id); ret = -EINVAL; goto out_unlock; } ret = 0; drm_drop_master(dev, file_priv); out_unlock: Loading drivers/gpu/drm/msm/dsi-staging/dsi_display.c +21 −5 Original line number Diff line number Diff line Loading @@ -6071,8 +6071,12 @@ int dsi_display_get_info(struct drm_connector *connector, case DSI_OP_VIDEO_MODE: info->curr_panel_mode = MSM_DISPLAY_VIDEO_MODE; info->capabilities |= MSM_DISPLAY_CAP_VID_MODE; if (display->panel->panel_mode_switch_enabled) if (display->panel->panel_mode_switch_enabled) { info->capabilities |= MSM_DISPLAY_CAP_CMD_MODE; info->is_te_using_watchdog_timer = display->panel->te_using_watchdog_timer | display->sw_te_using_wd; } break; case DSI_OP_CMD_MODE: info->curr_panel_mode = MSM_DISPLAY_CMD_MODE; Loading Loading @@ -6127,6 +6131,10 @@ static void dsi_display_adjust_mode_timing(struct dsi_display *display, struct dsi_dyn_clk_caps *dyn_clk_caps; u32 bits_per_symbol = 16, num_of_symbols = 7; /* For Cphy */ /* Constant FPS is not supported on command mode */ if (dsi_mode->panel_mode == DSI_OP_CMD_MODE) return; dyn_clk_caps = &(display->panel->dyn_clk_caps); if (!dyn_clk_caps->maintain_const_fps) return; Loading Loading @@ -6295,8 +6303,6 @@ int dsi_display_get_modes(struct dsi_display *display, dyn_clk_caps = &(display->panel->dyn_clk_caps); num_dfps_rates = !dfps_caps.dfps_support ? 1 : dfps_caps.dfps_list_len; timing_mode_count = display->panel->num_timing_nodes; for (mode_idx = 0; mode_idx < timing_mode_count; mode_idx++) { Loading @@ -6319,6 +6325,9 @@ int dsi_display_get_modes(struct dsi_display *display, is_cmd_mode = (display_mode.panel_mode == DSI_OP_CMD_MODE); num_dfps_rates = ((!dfps_caps.dfps_support || is_cmd_mode) ? 1 : dfps_caps.dfps_list_len); is_split_link = host->split_link.split_link_enabled; sublinks_count = host->split_link.num_sublinks; if (is_split_link && sublinks_count > 1) { Loading Loading @@ -6371,9 +6380,16 @@ int dsi_display_get_modes(struct dsi_display *display, } end = array_idx; /* * if dynamic clk switch is supported then update all the bit * clk rates. * if POMS is enabled and boot up mode is video mode, * skip bit clk rates update for command mode, * else if dynamic clk switch is supported then update all * the bit clk rates. */ if (is_cmd_mode && (display->panel->panel_mode == DSI_OP_VIDEO_MODE)) continue; _dsi_display_populate_bit_clks(display, start, end, &array_idx); } Loading drivers/gpu/drm/msm/dsi-staging/dsi_drm.c +8 −11 Original line number Diff line number Diff line /* * Copyright (c) 2016-2019, The Linux Foundation. All rights reserved. * Copyright (c) 2016-2020, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and Loading Loading @@ -263,6 +263,7 @@ static void dsi_bridge_disable(struct drm_bridge *bridge) int rc = 0; struct dsi_display *display; struct dsi_bridge *c_bridge = to_dsi_bridge(bridge); int private_flags; if (!bridge) { pr_err("Invalid params\n"); Loading @@ -270,18 +271,14 @@ static void dsi_bridge_disable(struct drm_bridge *bridge) } display = c_bridge->display; private_flags = bridge->encoder->crtc->state->adjusted_mode.private_flags; if (display && display->drm_conn) { if (bridge->encoder->crtc->state->adjusted_mode.private_flags & MSM_MODE_FLAG_SEAMLESS_POMS) { display->poms_pending = true; /* Disable ESD thread, during panel mode switch */ sde_connector_schedule_status_work(display->drm_conn, false); } else { display->poms_pending = false; display->poms_pending = private_flags & MSM_MODE_FLAG_SEAMLESS_POMS; sde_connector_helper_bridge_disable(display->drm_conn); } } rc = dsi_display_pre_disable(c_bridge->display); if (rc) { Loading drivers/gpu/drm/msm/dsi-staging/dsi_panel.c +20 −10 Original line number Diff line number Diff line Loading @@ -3500,7 +3500,6 @@ int dsi_panel_get_mode_count(struct dsi_panel *panel) int num_dfps_rates, num_bit_clks; int num_video_modes = 0, num_cmd_modes = 0; int count, rc = 0; void *utils_data = NULL; if (!panel) { pr_err("invalid params\n"); Loading Loading @@ -3537,10 +3536,9 @@ int dsi_panel_get_mode_count(struct dsi_panel *panel) panel->num_timing_nodes = count; dsi_for_each_child_node(timings_np, child_np) { utils_data = child_np; if (utils->read_bool(utils->data, "qcom,mdss-dsi-video-mode")) if (utils->read_bool(child_np, "qcom,mdss-dsi-video-mode")) num_video_modes++; else if (utils->read_bool(utils->data, else if (utils->read_bool(child_np, "qcom,mdss-dsi-cmd-mode")) num_cmd_modes++; else if (panel->panel_mode == DSI_OP_VIDEO_MODE) Loading @@ -3555,9 +3553,21 @@ int dsi_panel_get_mode_count(struct dsi_panel *panel) num_bit_clks = !panel->dyn_clk_caps.dyn_clk_support ? 1 : panel->dyn_clk_caps.bit_clk_list_len; /* Inflate num_of_modes by fps and bit clks in dfps */ panel->num_display_modes = (num_cmd_modes * num_bit_clks) + (num_video_modes * num_bit_clks * num_dfps_rates); /* * Inflate num_of_modes by fps and bit clks in dfps * Single command mode for video mode panels supporting * panel operating mode switch. */ num_video_modes = num_video_modes * num_bit_clks * num_dfps_rates; if ((panel->panel_mode == DSI_OP_VIDEO_MODE) && (panel->panel_mode_switch_enabled)) num_cmd_modes = 1; else num_cmd_modes = num_cmd_modes * num_bit_clks; panel->num_display_modes = num_video_modes + num_cmd_modes; error: return rc; Loading Loading @@ -3662,9 +3672,6 @@ int dsi_panel_get_mode(struct dsi_panel *panel, goto parse_fail; } if (panel->panel_mode == DSI_OP_VIDEO_MODE) mode->priv_info->mdp_transfer_time_us = 0; rc = dsi_panel_parse_dsc_params(mode, utils); if (rc) { pr_err("failed to parse dsc params, rc=%d\n", rc); Loading Loading @@ -3717,6 +3724,9 @@ int dsi_panel_get_mode(struct dsi_panel *panel, } else { mode->panel_mode = panel->panel_mode; } if (mode->panel_mode == DSI_OP_VIDEO_MODE) mode->priv_info->mdp_transfer_time_us = 0; } goto done; Loading drivers/gpu/drm/msm/sde/sde_connector.c +18 −10 Original line number Diff line number Diff line Loading @@ -92,8 +92,7 @@ static int sde_backlight_device_update_status(struct backlight_device *bd) if (!bl_lvl && brightness) bl_lvl = 1; if (display->panel->bl_config.bl_update == BL_UPDATE_DELAY_UNTIL_FIRST_FRAME && !c_conn->allow_bl_update) { if (!c_conn->allow_bl_update) { c_conn->unset_bl_level = bl_lvl; return 0; } Loading Loading @@ -480,8 +479,7 @@ static int _sde_connector_update_bl_scale(struct sde_connector *c_conn) bl_config = &dsi_display->panel->bl_config; if (dsi_display->panel->bl_config.bl_update == BL_UPDATE_DELAY_UNTIL_FIRST_FRAME && !c_conn->allow_bl_update) { if (!c_conn->allow_bl_update) { c_conn->unset_bl_level = bl_config->bl_level; return 0; } Loading Loading @@ -666,21 +664,31 @@ void sde_connector_helper_bridge_disable(struct drm_connector *connector) { int rc; struct sde_connector *c_conn = NULL; struct dsi_display *display; bool poms_pending = false; if (!connector) return; c_conn = to_sde_connector(connector); if (c_conn->connector_type == DRM_MODE_CONNECTOR_DSI) { display = (struct dsi_display *) c_conn->display; poms_pending = display->poms_pending; } if (!poms_pending) { rc = _sde_connector_update_dirty_properties(connector); if (rc) { SDE_ERROR("conn %d final pre kickoff failed %d\n", connector->base.id, rc); SDE_EVT32(connector->base.id, SDE_EVTLOG_ERROR); } } /* Disable ESD thread */ sde_connector_schedule_status_work(connector, false); c_conn = to_sde_connector(connector); if (c_conn->bl_device) { c_conn->bl_device->props.power = FB_BLANK_POWERDOWN; c_conn->bl_device->props.state |= BL_CORE_FBBLANK; Loading Loading
drivers/gpu/drm/drm_auth.c +6 −0 Original line number Diff line number Diff line Loading @@ -232,6 +232,12 @@ int drm_dropmaster_ioctl(struct drm_device *dev, void *data, if (!dev->master) goto out_unlock; if (file_priv->master->lessor != NULL) { DRM_DEBUG_LEASE("Attempt to drop lessee %d as master\n", file_priv->master->lessee_id); ret = -EINVAL; goto out_unlock; } ret = 0; drm_drop_master(dev, file_priv); out_unlock: Loading
drivers/gpu/drm/msm/dsi-staging/dsi_display.c +21 −5 Original line number Diff line number Diff line Loading @@ -6071,8 +6071,12 @@ int dsi_display_get_info(struct drm_connector *connector, case DSI_OP_VIDEO_MODE: info->curr_panel_mode = MSM_DISPLAY_VIDEO_MODE; info->capabilities |= MSM_DISPLAY_CAP_VID_MODE; if (display->panel->panel_mode_switch_enabled) if (display->panel->panel_mode_switch_enabled) { info->capabilities |= MSM_DISPLAY_CAP_CMD_MODE; info->is_te_using_watchdog_timer = display->panel->te_using_watchdog_timer | display->sw_te_using_wd; } break; case DSI_OP_CMD_MODE: info->curr_panel_mode = MSM_DISPLAY_CMD_MODE; Loading Loading @@ -6127,6 +6131,10 @@ static void dsi_display_adjust_mode_timing(struct dsi_display *display, struct dsi_dyn_clk_caps *dyn_clk_caps; u32 bits_per_symbol = 16, num_of_symbols = 7; /* For Cphy */ /* Constant FPS is not supported on command mode */ if (dsi_mode->panel_mode == DSI_OP_CMD_MODE) return; dyn_clk_caps = &(display->panel->dyn_clk_caps); if (!dyn_clk_caps->maintain_const_fps) return; Loading Loading @@ -6295,8 +6303,6 @@ int dsi_display_get_modes(struct dsi_display *display, dyn_clk_caps = &(display->panel->dyn_clk_caps); num_dfps_rates = !dfps_caps.dfps_support ? 1 : dfps_caps.dfps_list_len; timing_mode_count = display->panel->num_timing_nodes; for (mode_idx = 0; mode_idx < timing_mode_count; mode_idx++) { Loading @@ -6319,6 +6325,9 @@ int dsi_display_get_modes(struct dsi_display *display, is_cmd_mode = (display_mode.panel_mode == DSI_OP_CMD_MODE); num_dfps_rates = ((!dfps_caps.dfps_support || is_cmd_mode) ? 1 : dfps_caps.dfps_list_len); is_split_link = host->split_link.split_link_enabled; sublinks_count = host->split_link.num_sublinks; if (is_split_link && sublinks_count > 1) { Loading Loading @@ -6371,9 +6380,16 @@ int dsi_display_get_modes(struct dsi_display *display, } end = array_idx; /* * if dynamic clk switch is supported then update all the bit * clk rates. * if POMS is enabled and boot up mode is video mode, * skip bit clk rates update for command mode, * else if dynamic clk switch is supported then update all * the bit clk rates. */ if (is_cmd_mode && (display->panel->panel_mode == DSI_OP_VIDEO_MODE)) continue; _dsi_display_populate_bit_clks(display, start, end, &array_idx); } Loading
drivers/gpu/drm/msm/dsi-staging/dsi_drm.c +8 −11 Original line number Diff line number Diff line /* * Copyright (c) 2016-2019, The Linux Foundation. All rights reserved. * Copyright (c) 2016-2020, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and Loading Loading @@ -263,6 +263,7 @@ static void dsi_bridge_disable(struct drm_bridge *bridge) int rc = 0; struct dsi_display *display; struct dsi_bridge *c_bridge = to_dsi_bridge(bridge); int private_flags; if (!bridge) { pr_err("Invalid params\n"); Loading @@ -270,18 +271,14 @@ static void dsi_bridge_disable(struct drm_bridge *bridge) } display = c_bridge->display; private_flags = bridge->encoder->crtc->state->adjusted_mode.private_flags; if (display && display->drm_conn) { if (bridge->encoder->crtc->state->adjusted_mode.private_flags & MSM_MODE_FLAG_SEAMLESS_POMS) { display->poms_pending = true; /* Disable ESD thread, during panel mode switch */ sde_connector_schedule_status_work(display->drm_conn, false); } else { display->poms_pending = false; display->poms_pending = private_flags & MSM_MODE_FLAG_SEAMLESS_POMS; sde_connector_helper_bridge_disable(display->drm_conn); } } rc = dsi_display_pre_disable(c_bridge->display); if (rc) { Loading
drivers/gpu/drm/msm/dsi-staging/dsi_panel.c +20 −10 Original line number Diff line number Diff line Loading @@ -3500,7 +3500,6 @@ int dsi_panel_get_mode_count(struct dsi_panel *panel) int num_dfps_rates, num_bit_clks; int num_video_modes = 0, num_cmd_modes = 0; int count, rc = 0; void *utils_data = NULL; if (!panel) { pr_err("invalid params\n"); Loading Loading @@ -3537,10 +3536,9 @@ int dsi_panel_get_mode_count(struct dsi_panel *panel) panel->num_timing_nodes = count; dsi_for_each_child_node(timings_np, child_np) { utils_data = child_np; if (utils->read_bool(utils->data, "qcom,mdss-dsi-video-mode")) if (utils->read_bool(child_np, "qcom,mdss-dsi-video-mode")) num_video_modes++; else if (utils->read_bool(utils->data, else if (utils->read_bool(child_np, "qcom,mdss-dsi-cmd-mode")) num_cmd_modes++; else if (panel->panel_mode == DSI_OP_VIDEO_MODE) Loading @@ -3555,9 +3553,21 @@ int dsi_panel_get_mode_count(struct dsi_panel *panel) num_bit_clks = !panel->dyn_clk_caps.dyn_clk_support ? 1 : panel->dyn_clk_caps.bit_clk_list_len; /* Inflate num_of_modes by fps and bit clks in dfps */ panel->num_display_modes = (num_cmd_modes * num_bit_clks) + (num_video_modes * num_bit_clks * num_dfps_rates); /* * Inflate num_of_modes by fps and bit clks in dfps * Single command mode for video mode panels supporting * panel operating mode switch. */ num_video_modes = num_video_modes * num_bit_clks * num_dfps_rates; if ((panel->panel_mode == DSI_OP_VIDEO_MODE) && (panel->panel_mode_switch_enabled)) num_cmd_modes = 1; else num_cmd_modes = num_cmd_modes * num_bit_clks; panel->num_display_modes = num_video_modes + num_cmd_modes; error: return rc; Loading Loading @@ -3662,9 +3672,6 @@ int dsi_panel_get_mode(struct dsi_panel *panel, goto parse_fail; } if (panel->panel_mode == DSI_OP_VIDEO_MODE) mode->priv_info->mdp_transfer_time_us = 0; rc = dsi_panel_parse_dsc_params(mode, utils); if (rc) { pr_err("failed to parse dsc params, rc=%d\n", rc); Loading Loading @@ -3717,6 +3724,9 @@ int dsi_panel_get_mode(struct dsi_panel *panel, } else { mode->panel_mode = panel->panel_mode; } if (mode->panel_mode == DSI_OP_VIDEO_MODE) mode->priv_info->mdp_transfer_time_us = 0; } goto done; Loading
drivers/gpu/drm/msm/sde/sde_connector.c +18 −10 Original line number Diff line number Diff line Loading @@ -92,8 +92,7 @@ static int sde_backlight_device_update_status(struct backlight_device *bd) if (!bl_lvl && brightness) bl_lvl = 1; if (display->panel->bl_config.bl_update == BL_UPDATE_DELAY_UNTIL_FIRST_FRAME && !c_conn->allow_bl_update) { if (!c_conn->allow_bl_update) { c_conn->unset_bl_level = bl_lvl; return 0; } Loading Loading @@ -480,8 +479,7 @@ static int _sde_connector_update_bl_scale(struct sde_connector *c_conn) bl_config = &dsi_display->panel->bl_config; if (dsi_display->panel->bl_config.bl_update == BL_UPDATE_DELAY_UNTIL_FIRST_FRAME && !c_conn->allow_bl_update) { if (!c_conn->allow_bl_update) { c_conn->unset_bl_level = bl_config->bl_level; return 0; } Loading Loading @@ -666,21 +664,31 @@ void sde_connector_helper_bridge_disable(struct drm_connector *connector) { int rc; struct sde_connector *c_conn = NULL; struct dsi_display *display; bool poms_pending = false; if (!connector) return; c_conn = to_sde_connector(connector); if (c_conn->connector_type == DRM_MODE_CONNECTOR_DSI) { display = (struct dsi_display *) c_conn->display; poms_pending = display->poms_pending; } if (!poms_pending) { rc = _sde_connector_update_dirty_properties(connector); if (rc) { SDE_ERROR("conn %d final pre kickoff failed %d\n", connector->base.id, rc); SDE_EVT32(connector->base.id, SDE_EVTLOG_ERROR); } } /* Disable ESD thread */ sde_connector_schedule_status_work(connector, false); c_conn = to_sde_connector(connector); if (c_conn->bl_device) { c_conn->bl_device->props.power = FB_BLANK_POWERDOWN; c_conn->bl_device->props.state |= BL_CORE_FBBLANK; Loading