mirror of
https://github.com/torvalds/linux.git
synced 2026-05-29 17:43:52 +02:00
drm/msm: move KMS driver data to msm_kms
Data for HDMI, DSI and DP blocks only makes sense for the KMS parts of the driver. Move corresponding data pointers from struct msm_drm_private to struct msm_kms. Suggested-by: Abhinav Kumar <quic_abhinavk@quicinc.com> Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com> Patchwork: https://patchwork.freedesktop.org/patch/662580/ Signed-off-by: Rob Clark <robin.clark@oss.qualcomm.com>
This commit is contained in:
parent
0bb2335f06
commit
e10e1a4010
|
|
@ -264,7 +264,7 @@ bool dpu_encoder_needs_periph_flush(struct dpu_encoder_phys *phys_enc)
|
|||
mode = &phys_enc->cached_mode;
|
||||
|
||||
return phys_enc->hw_intf->cap->type == INTF_DP &&
|
||||
msm_dp_needs_periph_flush(priv->dp[disp_info->h_tile_instance[0]], mode);
|
||||
msm_dp_needs_periph_flush(priv->kms->dp[disp_info->h_tile_instance[0]], mode);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -283,9 +283,9 @@ bool dpu_encoder_is_widebus_enabled(const struct drm_encoder *drm_enc)
|
|||
index = disp_info->h_tile_instance[0];
|
||||
|
||||
if (disp_info->intf_type == INTF_DP)
|
||||
return msm_dp_wide_bus_available(priv->dp[index]);
|
||||
return msm_dp_wide_bus_available(priv->kms->dp[index]);
|
||||
else if (disp_info->intf_type == INTF_DSI)
|
||||
return msm_dsi_wide_bus_enabled(priv->dsi[index]);
|
||||
return msm_dsi_wide_bus_enabled(priv->kms->dsi[index]);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
|
@ -647,7 +647,7 @@ struct drm_dsc_config *dpu_encoder_get_dsc_config(struct drm_encoder *drm_enc)
|
|||
int index = dpu_enc->disp_info.h_tile_instance[0];
|
||||
|
||||
if (dpu_enc->disp_info.intf_type == INTF_DSI)
|
||||
return msm_dsi_get_dsc_config(priv->dsi[index]);
|
||||
return msm_dsi_get_dsc_config(priv->kms->dsi[index]);
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
|
@ -709,7 +709,8 @@ void dpu_encoder_update_topology(struct drm_encoder *drm_enc,
|
|||
if (fb && MSM_FORMAT_IS_YUV(msm_framebuffer_format(fb)))
|
||||
topology->num_cdm++;
|
||||
} else if (disp_info->intf_type == INTF_DP) {
|
||||
if (msm_dp_is_yuv_420_enabled(priv->dp[disp_info->h_tile_instance[0]], adj_mode))
|
||||
if (msm_dp_is_yuv_420_enabled(priv->kms->dp[disp_info->h_tile_instance[0]],
|
||||
adj_mode))
|
||||
topology->num_cdm++;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -583,7 +583,7 @@ static int _dpu_kms_initialize_dsi(struct drm_device *dev,
|
|||
struct msm_display_info info;
|
||||
int i, rc = 0;
|
||||
|
||||
if (!(priv->dsi[0] || priv->dsi[1]))
|
||||
if (!(priv->kms->dsi[0] || priv->kms->dsi[1]))
|
||||
return rc;
|
||||
|
||||
/*
|
||||
|
|
@ -594,26 +594,26 @@ static int _dpu_kms_initialize_dsi(struct drm_device *dev,
|
|||
*
|
||||
* TODO: Support swapping DSI0 and DSI1 in the bonded setup.
|
||||
*/
|
||||
for (i = 0; i < ARRAY_SIZE(priv->dsi); i++) {
|
||||
for (i = 0; i < ARRAY_SIZE(priv->kms->dsi); i++) {
|
||||
int other = (i + 1) % 2;
|
||||
|
||||
if (!priv->dsi[i])
|
||||
if (!priv->kms->dsi[i])
|
||||
continue;
|
||||
|
||||
if (msm_dsi_is_bonded_dsi(priv->dsi[i]) &&
|
||||
!msm_dsi_is_master_dsi(priv->dsi[i]))
|
||||
if (msm_dsi_is_bonded_dsi(priv->kms->dsi[i]) &&
|
||||
!msm_dsi_is_master_dsi(priv->kms->dsi[i]))
|
||||
continue;
|
||||
|
||||
memset(&info, 0, sizeof(info));
|
||||
info.intf_type = INTF_DSI;
|
||||
|
||||
info.h_tile_instance[info.num_of_h_tiles++] = i;
|
||||
if (msm_dsi_is_bonded_dsi(priv->dsi[i]))
|
||||
if (msm_dsi_is_bonded_dsi(priv->kms->dsi[i]))
|
||||
info.h_tile_instance[info.num_of_h_tiles++] = other;
|
||||
|
||||
info.is_cmd_mode = msm_dsi_is_cmd_mode(priv->dsi[i]);
|
||||
info.is_cmd_mode = msm_dsi_is_cmd_mode(priv->kms->dsi[i]);
|
||||
|
||||
rc = dpu_kms_dsi_set_te_source(&info, priv->dsi[i]);
|
||||
rc = dpu_kms_dsi_set_te_source(&info, priv->kms->dsi[i]);
|
||||
if (rc) {
|
||||
DPU_ERROR("failed to identify TE source for dsi display\n");
|
||||
return rc;
|
||||
|
|
@ -625,15 +625,15 @@ static int _dpu_kms_initialize_dsi(struct drm_device *dev,
|
|||
return PTR_ERR(encoder);
|
||||
}
|
||||
|
||||
rc = msm_dsi_modeset_init(priv->dsi[i], dev, encoder);
|
||||
rc = msm_dsi_modeset_init(priv->kms->dsi[i], dev, encoder);
|
||||
if (rc) {
|
||||
DPU_ERROR("modeset_init failed for dsi[%d], rc = %d\n",
|
||||
i, rc);
|
||||
break;
|
||||
}
|
||||
|
||||
if (msm_dsi_is_bonded_dsi(priv->dsi[i]) && priv->dsi[other]) {
|
||||
rc = msm_dsi_modeset_init(priv->dsi[other], dev, encoder);
|
||||
if (msm_dsi_is_bonded_dsi(priv->kms->dsi[i]) && priv->kms->dsi[other]) {
|
||||
rc = msm_dsi_modeset_init(priv->kms->dsi[other], dev, encoder);
|
||||
if (rc) {
|
||||
DPU_ERROR("modeset_init failed for dsi[%d], rc = %d\n",
|
||||
other, rc);
|
||||
|
|
@ -655,8 +655,8 @@ static int _dpu_kms_initialize_displayport(struct drm_device *dev,
|
|||
int rc;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(priv->dp); i++) {
|
||||
if (!priv->dp[i])
|
||||
for (i = 0; i < ARRAY_SIZE(priv->kms->dp); i++) {
|
||||
if (!priv->kms->dp[i])
|
||||
continue;
|
||||
|
||||
memset(&info, 0, sizeof(info));
|
||||
|
|
@ -671,7 +671,7 @@ static int _dpu_kms_initialize_displayport(struct drm_device *dev,
|
|||
}
|
||||
|
||||
yuv_supported = !!dpu_kms->catalog->cdm;
|
||||
rc = msm_dp_modeset_init(priv->dp[i], dev, encoder, yuv_supported);
|
||||
rc = msm_dp_modeset_init(priv->kms->dp[i], dev, encoder, yuv_supported);
|
||||
if (rc) {
|
||||
DPU_ERROR("modeset_init failed for DP, rc = %d\n", rc);
|
||||
return rc;
|
||||
|
|
@ -689,7 +689,7 @@ static int _dpu_kms_initialize_hdmi(struct drm_device *dev,
|
|||
struct msm_display_info info;
|
||||
int rc;
|
||||
|
||||
if (!priv->hdmi)
|
||||
if (!priv->kms->hdmi)
|
||||
return 0;
|
||||
|
||||
memset(&info, 0, sizeof(info));
|
||||
|
|
@ -703,7 +703,7 @@ static int _dpu_kms_initialize_hdmi(struct drm_device *dev,
|
|||
return PTR_ERR(encoder);
|
||||
}
|
||||
|
||||
rc = msm_hdmi_modeset_init(priv->hdmi, dev, encoder);
|
||||
rc = msm_hdmi_modeset_init(priv->kms->hdmi, dev, encoder);
|
||||
if (rc) {
|
||||
DPU_ERROR("modeset_init failed for DP, rc = %d\n", rc);
|
||||
return rc;
|
||||
|
|
|
|||
|
|
@ -250,9 +250,9 @@ static int mdp4_modeset_init_intf(struct mdp4_kms *mdp4_kms,
|
|||
/* DTV can be hooked to DMA_E: */
|
||||
encoder->possible_crtcs = 1 << 1;
|
||||
|
||||
if (priv->hdmi) {
|
||||
if (priv->kms->hdmi) {
|
||||
/* Construct bridge/connector for HDMI: */
|
||||
ret = msm_hdmi_modeset_init(priv->hdmi, dev, encoder);
|
||||
ret = msm_hdmi_modeset_init(priv->kms->hdmi, dev, encoder);
|
||||
if (ret) {
|
||||
DRM_DEV_ERROR(dev->dev, "failed to initialize HDMI: %d\n", ret);
|
||||
return ret;
|
||||
|
|
@ -264,7 +264,7 @@ static int mdp4_modeset_init_intf(struct mdp4_kms *mdp4_kms,
|
|||
/* only DSI1 supported for now */
|
||||
dsi_id = 0;
|
||||
|
||||
if (!priv->dsi[dsi_id])
|
||||
if (!priv->kms->dsi[dsi_id])
|
||||
break;
|
||||
|
||||
encoder = mdp4_dsi_encoder_init(dev);
|
||||
|
|
@ -278,7 +278,7 @@ static int mdp4_modeset_init_intf(struct mdp4_kms *mdp4_kms,
|
|||
/* TODO: Add DMA_S later? */
|
||||
encoder->possible_crtcs = 1 << DMA_P;
|
||||
|
||||
ret = msm_dsi_modeset_init(priv->dsi[dsi_id], dev, encoder);
|
||||
ret = msm_dsi_modeset_init(priv->kms->dsi[dsi_id], dev, encoder);
|
||||
if (ret) {
|
||||
DRM_DEV_ERROR(dev->dev, "failed to initialize DSI: %d\n",
|
||||
ret);
|
||||
|
|
|
|||
|
|
@ -312,7 +312,7 @@ static int modeset_init_intf(struct mdp5_kms *mdp5_kms,
|
|||
DRM_DEV_INFO(dev->dev, "Skipping eDP interface %d\n", intf->num);
|
||||
break;
|
||||
case INTF_HDMI:
|
||||
if (!priv->hdmi)
|
||||
if (!priv->kms->hdmi)
|
||||
break;
|
||||
|
||||
ctl = mdp5_ctlm_request(ctlm, intf->num);
|
||||
|
|
@ -327,7 +327,7 @@ static int modeset_init_intf(struct mdp5_kms *mdp5_kms,
|
|||
break;
|
||||
}
|
||||
|
||||
ret = msm_hdmi_modeset_init(priv->hdmi, dev, encoder);
|
||||
ret = msm_hdmi_modeset_init(priv->kms->hdmi, dev, encoder);
|
||||
break;
|
||||
case INTF_DSI:
|
||||
{
|
||||
|
|
@ -335,14 +335,14 @@ static int modeset_init_intf(struct mdp5_kms *mdp5_kms,
|
|||
mdp5_cfg_get_hw_config(mdp5_kms->cfg);
|
||||
int dsi_id = get_dsi_id_from_intf(hw_cfg, intf->num);
|
||||
|
||||
if ((dsi_id >= ARRAY_SIZE(priv->dsi)) || (dsi_id < 0)) {
|
||||
if ((dsi_id >= ARRAY_SIZE(priv->kms->dsi)) || (dsi_id < 0)) {
|
||||
DRM_DEV_ERROR(dev->dev, "failed to find dsi from intf %d\n",
|
||||
intf->num);
|
||||
ret = -EINVAL;
|
||||
break;
|
||||
}
|
||||
|
||||
if (!priv->dsi[dsi_id])
|
||||
if (!priv->kms->dsi[dsi_id])
|
||||
break;
|
||||
|
||||
ctl = mdp5_ctlm_request(ctlm, intf->num);
|
||||
|
|
@ -357,9 +357,10 @@ static int modeset_init_intf(struct mdp5_kms *mdp5_kms,
|
|||
break;
|
||||
}
|
||||
|
||||
ret = msm_dsi_modeset_init(priv->dsi[dsi_id], dev, encoder);
|
||||
ret = msm_dsi_modeset_init(priv->kms->dsi[dsi_id], dev, encoder);
|
||||
if (!ret)
|
||||
mdp5_encoder_set_intf_mode(encoder, msm_dsi_is_cmd_mode(priv->dsi[dsi_id]));
|
||||
mdp5_encoder_set_intf_mode(encoder,
|
||||
msm_dsi_is_cmd_mode(priv->kms->dsi[dsi_id]));
|
||||
|
||||
break;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -127,18 +127,18 @@ void msm_disp_snapshot_capture_state(struct msm_disp_state *disp_state)
|
|||
priv = drm_dev->dev_private;
|
||||
kms = priv->kms;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(priv->dp); i++) {
|
||||
if (!priv->dp[i])
|
||||
for (i = 0; i < ARRAY_SIZE(kms->dp); i++) {
|
||||
if (!kms->dp[i])
|
||||
continue;
|
||||
|
||||
msm_dp_snapshot(disp_state, priv->dp[i]);
|
||||
msm_dp_snapshot(disp_state, kms->dp[i]);
|
||||
}
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(priv->dsi); i++) {
|
||||
if (!priv->dsi[i])
|
||||
for (i = 0; i < ARRAY_SIZE(kms->dsi); i++) {
|
||||
if (!kms->dsi[i])
|
||||
continue;
|
||||
|
||||
msm_dsi_snapshot(disp_state, priv->dsi[i]);
|
||||
msm_dsi_snapshot(disp_state, kms->dsi[i]);
|
||||
}
|
||||
|
||||
if (kms->funcs->snapshot)
|
||||
|
|
|
|||
|
|
@ -292,9 +292,7 @@ static int msm_dp_display_bind(struct device *dev, struct device *master,
|
|||
struct drm_device *drm = priv->dev;
|
||||
|
||||
dp->msm_dp_display.drm_dev = drm;
|
||||
priv->dp[dp->id] = &dp->msm_dp_display;
|
||||
|
||||
|
||||
priv->kms->dp[dp->id] = &dp->msm_dp_display;
|
||||
|
||||
dp->drm_dev = drm;
|
||||
dp->aux->drm_dev = drm;
|
||||
|
|
@ -328,7 +326,7 @@ static void msm_dp_display_unbind(struct device *dev, struct device *master,
|
|||
msm_dp_aux_unregister(dp->aux);
|
||||
dp->drm_dev = NULL;
|
||||
dp->aux->drm_dev = NULL;
|
||||
priv->dp[dp->id] = NULL;
|
||||
priv->kms->dp[dp->id] = NULL;
|
||||
}
|
||||
|
||||
static const struct component_ops msm_dp_display_comp_ops = {
|
||||
|
|
|
|||
|
|
@ -136,7 +136,7 @@ static int dsi_bind(struct device *dev, struct device *master, void *data)
|
|||
msm_dsi->next_bridge = ext_bridge;
|
||||
}
|
||||
|
||||
priv->dsi[msm_dsi->id] = msm_dsi;
|
||||
priv->kms->dsi[msm_dsi->id] = msm_dsi;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -148,7 +148,7 @@ static void dsi_unbind(struct device *dev, struct device *master,
|
|||
struct msm_dsi *msm_dsi = dev_get_drvdata(dev);
|
||||
|
||||
msm_dsi_tx_buf_free(msm_dsi->host);
|
||||
priv->dsi[msm_dsi->id] = NULL;
|
||||
priv->kms->dsi[msm_dsi->id] = NULL;
|
||||
}
|
||||
|
||||
static const struct component_ops dsi_ops = {
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@
|
|||
#include <drm/drm_of.h>
|
||||
#include <drm/display/drm_hdmi_state_helper.h>
|
||||
|
||||
#include "msm_kms.h"
|
||||
#include "hdmi.h"
|
||||
|
||||
void msm_hdmi_set_mode(struct hdmi *hdmi, bool power_on)
|
||||
|
|
@ -244,7 +245,7 @@ static int msm_hdmi_bind(struct device *dev, struct device *master, void *data)
|
|||
err = msm_hdmi_init(hdmi);
|
||||
if (err)
|
||||
return err;
|
||||
priv->hdmi = hdmi;
|
||||
priv->kms->hdmi = hdmi;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -254,9 +255,9 @@ static void msm_hdmi_unbind(struct device *dev, struct device *master,
|
|||
{
|
||||
struct msm_drm_private *priv = dev_get_drvdata(master);
|
||||
|
||||
if (priv->hdmi) {
|
||||
msm_hdmi_destroy(priv->hdmi);
|
||||
priv->hdmi = NULL;
|
||||
if (priv->kms->hdmi) {
|
||||
msm_hdmi_destroy(priv->kms->hdmi);
|
||||
priv->kms->hdmi = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -86,16 +86,6 @@ struct msm_drm_private {
|
|||
/* subordinate devices, if present: */
|
||||
struct platform_device *gpu_pdev;
|
||||
|
||||
/* possibly this should be in the kms component, but it is
|
||||
* shared by both mdp4 and mdp5..
|
||||
*/
|
||||
struct hdmi *hdmi;
|
||||
|
||||
/* DSI is shared by mdp4 and mdp5 */
|
||||
struct msm_dsi *dsi[MSM_DSI_CONTROLLER_COUNT];
|
||||
|
||||
struct msm_dp *dp[MSM_DP_CONTROLLER_COUNT];
|
||||
|
||||
/* when we have more than one 'msm_gpu' these need to be an array: */
|
||||
struct msm_gpu *gpu;
|
||||
|
||||
|
|
@ -367,6 +357,7 @@ static inline const char *msm_dsi_get_te_source(struct msm_dsi *msm_dsi)
|
|||
}
|
||||
#endif
|
||||
|
||||
struct msm_dp;
|
||||
#ifdef CONFIG_DRM_MSM_DP
|
||||
int __init msm_dp_register(void);
|
||||
void __exit msm_dp_unregister(void);
|
||||
|
|
|
|||
|
|
@ -131,6 +131,12 @@ struct msm_kms {
|
|||
const struct msm_kms_funcs *funcs;
|
||||
struct drm_device *dev;
|
||||
|
||||
struct hdmi *hdmi;
|
||||
|
||||
struct msm_dsi *dsi[MSM_DSI_CONTROLLER_COUNT];
|
||||
|
||||
struct msm_dp *dp[MSM_DP_CONTROLLER_COUNT];
|
||||
|
||||
/* irq number to be passed on to msm_irq_install */
|
||||
int irq;
|
||||
bool irq_requested;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user