Merge "disp: msm: sde: parse property for max concurrent TUI displays"

Cette révision appartient à :
qctecmdr
2020-07-10 21:28:17 -07:00
révisé par Gerrit - the friendly Code Review server
révision 0ea5003877
13 fichiers modifiés avec 357 ajouts et 11 suppressions

Voir le fichier

@@ -1342,7 +1342,7 @@ static int _sde_encoder_update_rsc_client(
return ret;
}
static void _sde_encoder_irq_control(struct drm_encoder *drm_enc, bool enable)
void sde_encoder_irq_control(struct drm_encoder *drm_enc, bool enable)
{
struct sde_encoder_virt *sde_enc;
int i;
@@ -1452,7 +1452,7 @@ static int _sde_encoder_resource_control_helper(struct drm_encoder *drm_enc,
}
/* enable all the irq */
_sde_encoder_irq_control(drm_enc, true);
sde_encoder_irq_control(drm_enc, true);
_sde_encoder_pm_qos_add_request(drm_enc);
@@ -1460,7 +1460,7 @@ static int _sde_encoder_resource_control_helper(struct drm_encoder *drm_enc,
_sde_encoder_pm_qos_remove_request(drm_enc);
/* disable all the irq */
_sde_encoder_irq_control(drm_enc, false);
sde_encoder_irq_control(drm_enc, false);
/* disable DSI clks */
sde_connector_clk_ctrl(sde_enc->cur_master->connector, false);
@@ -1627,7 +1627,7 @@ static int _sde_encoder_rc_kickoff(struct drm_encoder *drm_enc,
}
if (is_vid_mode && sde_enc->rc_state == SDE_ENC_RC_STATE_IDLE) {
_sde_encoder_irq_control(drm_enc, true);
sde_encoder_irq_control(drm_enc, true);
} else {
/* enable all the clks and resources */
ret = _sde_encoder_resource_control_helper(drm_enc,
@@ -1664,7 +1664,7 @@ static int _sde_encoder_rc_pre_stop(struct drm_encoder *drm_enc,
if (is_vid_mode &&
sde_enc->rc_state == SDE_ENC_RC_STATE_IDLE) {
_sde_encoder_irq_control(drm_enc, true);
sde_encoder_irq_control(drm_enc, true);
}
/* skip if is already OFF or IDLE, resources are off already */
else if (sde_enc->rc_state == SDE_ENC_RC_STATE_OFF ||
@@ -1781,7 +1781,7 @@ static int _sde_encoder_rc_pre_modeset(struct drm_encoder *drm_enc,
goto end;
}
_sde_encoder_irq_control(drm_enc, false);
sde_encoder_irq_control(drm_enc, false);
_sde_encoder_modeset_helper_locked(drm_enc, sw_event);
SDE_EVT32(DRMID(drm_enc), sw_event, sde_enc->rc_state,
@@ -1819,7 +1819,7 @@ static int _sde_encoder_rc_post_modeset(struct drm_encoder *drm_enc,
}
_sde_encoder_modeset_helper_locked(drm_enc, sw_event);
_sde_encoder_irq_control(drm_enc, true);
sde_encoder_irq_control(drm_enc, true);
_sde_encoder_update_rsc_client(drm_enc, true);
@@ -1863,7 +1863,7 @@ static int _sde_encoder_rc_idle(struct drm_encoder *drm_enc,
}
if (is_vid_mode) {
_sde_encoder_irq_control(drm_enc, false);
sde_encoder_irq_control(drm_enc, false);
} else {
/* disable all the clks and resources */
_sde_encoder_update_rsc_client(drm_enc, false);

Voir le fichier

@@ -525,6 +525,13 @@ void sde_encoder_needs_hw_reset(struct drm_encoder *enc);
*/
void sde_encoder_uidle_enable(struct drm_encoder *drm_enc, bool enable);
/**
* sde_encoder_irq_control - control enable/disable of IRQ's
* @drm_enc: Pointer to drm encoder structure
* @enable: enable/disable flag
*/
void sde_encoder_irq_control(struct drm_encoder *drm_enc, bool enable);
/**
* sde_encoder_get_kms - retrieve the kms from encoder
* @drm_enc: Pointer to drm encoder structure

Voir le fichier

@@ -202,6 +202,7 @@ enum sde_prop {
SEC_SID_MASK,
BASE_LAYER,
TRUSTED_VM_ENV,
MAX_TRUSTED_VM_DISPLAYS,
SDE_PROP_MAX,
};
@@ -574,6 +575,8 @@ static struct sde_prop_type sde_prop[] = {
{SEC_SID_MASK, "qcom,sde-secure-sid-mask", false, PROP_TYPE_U32_ARRAY},
{BASE_LAYER, "qcom,sde-mixer-stage-base-layer", false, PROP_TYPE_BOOL},
{TRUSTED_VM_ENV, "qcom,sde-trusted-vm-env", false, PROP_TYPE_BOOL},
{MAX_TRUSTED_VM_DISPLAYS, "qcom,sde-max-trusted-vm-displays", false,
PROP_TYPE_U32},
};
static struct sde_prop_type sde_perf_prop[] = {
@@ -3752,6 +3755,8 @@ static void _sde_top_parse_dt_helper(struct sde_mdss_cfg *cfg,
QSEED_HW_VERSION, 0);
cfg->trusted_vm_env = PROP_VALUE_ACCESS(props->values, TRUSTED_VM_ENV,
0);
cfg->max_trusted_vm_displays = PROP_VALUE_ACCESS(props->values,
MAX_TRUSTED_VM_DISPLAYS, 0);
}
static int sde_top_parse_dt(struct device_node *np, struct sde_mdss_cfg *cfg)

Voir le fichier

@@ -1364,6 +1364,8 @@ struct sde_perf_cfg {
*
* @trusted_vm_env set to true, if the driver is executing in
* the trusted VM. false, otherwise.
* @max_trusted_vm_displays maximum number of concurrent trusted
* vm displays supported.
* @max_sspp_linewidth max source pipe line width support.
* @vig_sspp_linewidth max vig source pipe line width support.
* @scaling_linewidth max vig source pipe linewidth for scaling usecases
@@ -1438,6 +1440,7 @@ struct sde_perf_cfg {
struct sde_mdss_cfg {
u32 hwversion;
bool trusted_vm_env;
u32 max_trusted_vm_displays;
u32 max_sspp_linewidth;
u32 vig_sspp_linewidth;

Voir le fichier

@@ -52,6 +52,7 @@
#include <linux/qcom_scm.h>
#include "soc/qcom/secure_buffer.h"
#include <linux/qtee_shmbridge.h>
#include <linux/haven/hh_irq_lend.h>
#define CREATE_TRACE_POINTS
#include "sde_trace.h"
@@ -349,7 +350,7 @@ static int _sde_kms_scm_call(struct sde_kms *sde_kms, int vmid)
set_dma_ops(&dummy, NULL);
dma_handle = dma_map_single(&dummy, sec_sid,
num_sids *sizeof(uint32_t), DMA_TO_DEVICE);
num_sids * sizeof(uint32_t), DMA_TO_DEVICE);
if (dma_mapping_error(&dummy, dma_handle)) {
SDE_ERROR("dma_map_single for dummy dev failed vmid 0x%x\n",
vmid);
@@ -367,7 +368,7 @@ static int _sde_kms_scm_call(struct sde_kms *sde_kms, int vmid)
vmid, qtee_en, num_sids, ret);
dma_unmap_single(&dummy, dma_handle,
num_sids *sizeof(uint32_t), DMA_TO_DEVICE);
num_sids * sizeof(uint32_t), DMA_TO_DEVICE);
map_error:
if (qtee_en)
@@ -3601,6 +3602,26 @@ power_error:
return rc;
}
int sde_kms_get_io_resources(struct sde_kms *sde_kms, struct msm_io_res *io_res)
{
struct platform_device *pdev = to_platform_device(sde_kms->dev->dev);
int rc = 0;
rc = msm_dss_get_io_mem(pdev, &io_res->mem);
if (rc) {
SDE_ERROR("failed to get io mem for KMS, rc = %d\n", rc);
return rc;
}
rc = msm_dss_get_io_irq(pdev, &io_res->irq, HH_IRQ_LABEL_SDE);
if (rc) {
SDE_ERROR("failed to get io irq for KMS");
return rc;
}
return rc;
}
static int sde_kms_hw_init(struct msm_kms *kms)
{
struct sde_kms *sde_kms;

Voir le fichier

@@ -691,4 +691,12 @@ int sde_kms_handle_recovery(struct drm_encoder *encoder);
*/
void sde_kms_irq_enable_notify(struct sde_kms *sde_kms, bool enable);
/**
* sde_kms_get_io_resources() - reads associated register range
* @kms: pointer to sde_kms structure
* @io_res: pointer to msm_io_res struct to populate the ranges
* Return: error code.
*/
int sde_kms_get_io_resources(struct sde_kms *kms, struct msm_io_res *io_res);
#endif /* __sde_kms_H__ */