disp: msm: sde: add SID setup function for pipes and lutdma
Add SID setup function to help programming the SIDs for all the pipes and lutdma xin clients based on the VM. Change-Id: Iea598303b480b33de8750e0988129dd5cdfe7572 Signed-off-by: Veera Sundaram Sankaran <veeras@codeaurora.org>
This commit is contained in:

committed by
Gerrit - the friendly Code Review server

parent
7245366343
commit
bfec52ae7b
@@ -62,8 +62,19 @@
|
|||||||
|
|
||||||
#define DCE_SEL 0x450
|
#define DCE_SEL 0x450
|
||||||
|
|
||||||
#define ROT_SID_RD 0x20
|
#define MDP_SID_VIG0 0x0
|
||||||
#define ROT_SID_WR 0x24
|
#define MDP_SID_VIG1 0x4
|
||||||
|
#define MDP_SID_VIG2 0x8
|
||||||
|
#define MDP_SID_VIG3 0xC
|
||||||
|
#define MDP_SID_DMA0 0x10
|
||||||
|
#define MDP_SID_DMA1 0x14
|
||||||
|
#define MDP_SID_DMA2 0x18
|
||||||
|
#define MDP_SID_DMA3 0x1C
|
||||||
|
#define MDP_SID_ROT_RD 0x20
|
||||||
|
#define MDP_SID_ROT_WR 0x24
|
||||||
|
#define MDP_SID_WB2 0x28
|
||||||
|
#define MDP_SID_XIN7 0x2C
|
||||||
|
|
||||||
#define ROT_SID_ID_VAL 0x1c
|
#define ROT_SID_ID_VAL 0x1c
|
||||||
|
|
||||||
static void sde_hw_setup_split_pipe(struct sde_hw_mdp *mdp,
|
static void sde_hw_setup_split_pipe(struct sde_hw_mdp *mdp,
|
||||||
@@ -470,10 +481,38 @@ struct sde_hw_sid *sde_hw_sid_init(void __iomem *addr,
|
|||||||
return c;
|
return c;
|
||||||
}
|
}
|
||||||
|
|
||||||
void sde_hw_sid_rotator_set(struct sde_hw_sid *sid)
|
void sde_hw_set_rotator_sid(struct sde_hw_sid *sid)
|
||||||
{
|
{
|
||||||
SDE_REG_WRITE(&sid->hw, ROT_SID_RD, ROT_SID_ID_VAL);
|
if (!sid)
|
||||||
SDE_REG_WRITE(&sid->hw, ROT_SID_WR, ROT_SID_ID_VAL);
|
return;
|
||||||
|
|
||||||
|
SDE_REG_WRITE(&sid->hw, MDP_SID_ROT_RD, ROT_SID_ID_VAL);
|
||||||
|
SDE_REG_WRITE(&sid->hw, MDP_SID_ROT_WR, ROT_SID_ID_VAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
void sde_hw_set_sspp_sid(struct sde_hw_sid *sid, u32 pipe, u32 vm)
|
||||||
|
{
|
||||||
|
u32 offset = 0;
|
||||||
|
|
||||||
|
if (!sid)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if ((pipe >= SSPP_VIG0) && (pipe <= SSPP_VIG3))
|
||||||
|
offset = MDP_SID_VIG0 + ((pipe - SSPP_VIG0) * 4);
|
||||||
|
else if ((pipe >= SSPP_DMA0) && (pipe <= SSPP_DMA3))
|
||||||
|
offset = MDP_SID_DMA0 + ((pipe - SSPP_DMA0) * 4);
|
||||||
|
else
|
||||||
|
return;
|
||||||
|
|
||||||
|
SDE_REG_WRITE(&sid->hw, offset, vm << 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
void sde_hw_set_lutdma_sid(struct sde_hw_sid *sid, u32 vm)
|
||||||
|
{
|
||||||
|
if (!sid)
|
||||||
|
return;
|
||||||
|
|
||||||
|
SDE_REG_WRITE(&sid->hw, MDP_SID_XIN7, vm << 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void sde_hw_program_cwb_ppb_ctrl(struct sde_hw_mdp *mdp,
|
static void sde_hw_program_cwb_ppb_ctrl(struct sde_hw_mdp *mdp,
|
||||||
|
@@ -243,7 +243,7 @@ struct sde_hw_sid {
|
|||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* sde_hw_sid_rotator_set - initialize the sid blk reg map
|
* sde_hw_sid_init - initialize the sid blk reg map
|
||||||
* @addr: Mapped register io address
|
* @addr: Mapped register io address
|
||||||
* @sid_len: Length of block
|
* @sid_len: Length of block
|
||||||
* @m: Pointer to mdss catalog data
|
* @m: Pointer to mdss catalog data
|
||||||
@@ -252,10 +252,25 @@ struct sde_hw_sid *sde_hw_sid_init(void __iomem *addr,
|
|||||||
u32 sid_len, const struct sde_mdss_cfg *m);
|
u32 sid_len, const struct sde_mdss_cfg *m);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* sde_hw_sid_rotator_set - set sid values for rotator
|
* sde_hw_set_rotator_sid - set sid values for rotator
|
||||||
* sid: sde_hw_sid passed from kms
|
* sid: sde_hw_sid passed from kms
|
||||||
*/
|
*/
|
||||||
void sde_hw_sid_rotator_set(struct sde_hw_sid *sid);
|
void sde_hw_set_rotator_sid(struct sde_hw_sid *sid);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* sde_hw_set_sspp_sid - set sid values for the pipes
|
||||||
|
* sid: sde_hw_sid passed from kms
|
||||||
|
* pipe: sspp id
|
||||||
|
* vm: vm id to set for SIDs
|
||||||
|
*/
|
||||||
|
void sde_hw_set_sspp_sid(struct sde_hw_sid *sid, u32 pipe, u32 vm);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* sde_hw_set_lutdma_sid - set sid values for the pipes
|
||||||
|
* sid: sde_hw_sid passed from kms
|
||||||
|
* vm: vm id to set for SIDs
|
||||||
|
*/
|
||||||
|
void sde_hw_set_lutdma_sid(struct sde_hw_sid *sid, u32 vm);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* to_sde_hw_mdp - convert base object sde_hw_base to container
|
* to_sde_hw_mdp - convert base object sde_hw_base to container
|
||||||
|
@@ -2928,7 +2928,7 @@ static void sde_kms_init_shared_hw(struct sde_kms *sde_kms)
|
|||||||
sde_kms->catalog);
|
sde_kms->catalog);
|
||||||
|
|
||||||
if (sde_kms->sid)
|
if (sde_kms->sid)
|
||||||
sde_hw_sid_rotator_set(sde_kms->hw_sid);
|
sde_hw_set_rotator_sid(sde_kms->hw_sid);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void _sde_kms_set_lutdma_vbif_remap(struct sde_kms *sde_kms)
|
static void _sde_kms_set_lutdma_vbif_remap(struct sde_kms *sde_kms)
|
||||||
|
@@ -233,6 +233,29 @@ void sde_plane_setup_src_split_order(struct drm_plane *plane,
|
|||||||
rect_mode, enable);
|
rect_mode, enable);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void sde_plane_set_sid(struct drm_plane *plane, u32 vm)
|
||||||
|
{
|
||||||
|
struct sde_plane *psde;
|
||||||
|
struct sde_kms *sde_kms;
|
||||||
|
struct msm_drm_private *priv;
|
||||||
|
|
||||||
|
if (!plane || !plane->dev) {
|
||||||
|
SDE_ERROR("invalid plane %d\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
priv = plane->dev->dev_private;
|
||||||
|
if (!priv || !priv->kms) {
|
||||||
|
SDE_ERROR("invalid KMS reference\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
sde_kms = to_sde_kms(priv->kms);
|
||||||
|
|
||||||
|
psde = to_sde_plane(plane);
|
||||||
|
sde_hw_set_sspp_sid(sde_kms->hw_sid, psde->pipe, vm);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* _sde_plane_set_qos_lut - set danger, safe and creq LUT of the given plane
|
* _sde_plane_set_qos_lut - set danger, safe and creq LUT of the given plane
|
||||||
* @plane: Pointer to drm plane
|
* @plane: Pointer to drm plane
|
||||||
|
@@ -327,6 +327,13 @@ void sde_plane_clear_ubwc_error(struct drm_plane *plane);
|
|||||||
void sde_plane_setup_src_split_order(struct drm_plane *plane,
|
void sde_plane_setup_src_split_order(struct drm_plane *plane,
|
||||||
enum sde_sspp_multirect_index rect_mode, bool enable);
|
enum sde_sspp_multirect_index rect_mode, bool enable);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* sde_plane_set_sid - set VM SID for the plane
|
||||||
|
* @plane: Pointer to DRM plane object
|
||||||
|
* @vm: VM id
|
||||||
|
*/
|
||||||
|
void sde_plane_set_sid(struct drm_plane *plane, u32 vm);
|
||||||
|
|
||||||
/* sde_plane_is_cache_required - indicates if the system cache is
|
/* sde_plane_is_cache_required - indicates if the system cache is
|
||||||
* required for the plane.
|
* required for the plane.
|
||||||
* @plane: Pointer to DRM plane object
|
* @plane: Pointer to DRM plane object
|
||||||
|
Reference in New Issue
Block a user