Merge "disp: msm: sde: parse property for max concurrent TUI displays"
Cette révision appartient à :

révisé par
Gerrit - the friendly Code Review server

révision
0ea5003877
@@ -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);
|
||||
|
@@ -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
|
||||
|
@@ -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)
|
||||
|
@@ -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;
|
||||
|
@@ -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;
|
||||
|
@@ -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__ */
|
||||
|
Référencer dans un nouveau ticket
Bloquer un utilisateur