disp: msm: sde: fix compression info usage in resource alloc

Currently, compression info passed to resource manager is not
valid in atomic check phase. Also in current design allocation
of msm mode info object is from stack which is huge and causing
stack overflow in continuous splash use case. This change fixes
these issues by moving mode info object to heap allocation.

Change-Id: Ifaf39b3ae59c942da5c00b82c73cb97cdaf500d3
Signed-off-by: Prabhanjan Kandula <pkandula@codeaurora.org>
This commit is contained in:
Prabhanjan Kandula
2020-04-21 22:53:39 -07:00
committed by Gerrit - the friendly Code Review server
parent 947fa56080
commit 62cb53cc59
3 changed files with 84 additions and 24 deletions

View File

@@ -926,6 +926,52 @@ int sde_connector_helper_reset_custom_properties(
int sde_connector_state_get_mode_info(struct drm_connector_state *conn_state,
struct msm_mode_info *mode_info);
/**
* sde_connector_state_get_topology - get topology from given connector state
* conn_state: Pointer to the DRM connector state object
* topology: Pointer to store topology info of the display
*/
static inline int sde_connector_state_get_topology(
struct drm_connector_state *conn_state,
struct msm_display_topology *topology)
{
struct sde_connector_state *sde_conn_state = NULL;
if (!conn_state || !topology) {
SDE_ERROR("invalid arguments conn_state %d, topology %d\n",
!conn_state, !topology);
return -EINVAL;
}
sde_conn_state = to_sde_connector_state(conn_state);
memcpy(topology, &sde_conn_state->mode_info.topology,
sizeof(struct msm_display_topology));
return 0;
}
/**
* sde_connector_state_get_compression_info- get compression info of display
* from given connector state
* conn_state: Pointer to the DRM connector state object
* comp_info: Pointer to the compression info structure
*/
static inline int sde_connector_state_get_compression_info(
struct drm_connector_state *conn_state,
struct msm_compression_info *comp_info)
{
struct sde_connector_state *sde_conn_state = NULL;
if (!conn_state || !comp_info) {
SDE_ERROR("invalid arguments\n");
return -EINVAL;
}
sde_conn_state = to_sde_connector_state(conn_state);
memcpy(comp_info, &sde_conn_state->mode_info.comp_info,
sizeof(struct msm_compression_info));
return 0;
}
/**
* sde_connector_get_mode_info - retrieve mode info for given mode
* @connector: Pointer to drm connector structure