Message ID | 20221207220012.16529-6-quic_bjorande@quicinc.com |
---|---|
State | New |
Headers | show |
Series | drm/msm: Add SC8280XP support | expand |
On 12/7/2022 2:00 PM, Bjorn Andersson wrote: > From: Bjorn Andersson <bjorn.andersson@linaro.org> > > In the SC8280XP platform there are two identical MDSS instances, each > with the same set of DisplayPort instances, at different addresses. > > By not relying on the index to define the instance id it's possible to > describe them both in the same table and hence have a single compatible. > > While at it, flatten the cfg/desc structure so that the match data is > just an array of descs. > > Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org> > Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org> > Signed-off-by: Bjorn Andersson <quic_bjorande@quicinc.com> Reviewed-by: Kuogee Hsieh <quic_khsieh@quicinc.com> > --- > > Changes since v4: > - None > > drivers/gpu/drm/msm/dp/dp_display.c | 72 ++++++++++------------------- > 1 file changed, 25 insertions(+), 47 deletions(-) > > diff --git a/drivers/gpu/drm/msm/dp/dp_display.c b/drivers/gpu/drm/msm/dp/dp_display.c > index 7ff60e5ff325..eeb292f1ad1b 100644 > --- a/drivers/gpu/drm/msm/dp/dp_display.c > +++ b/drivers/gpu/drm/msm/dp/dp_display.c > @@ -122,61 +122,41 @@ struct dp_display_private { > > struct msm_dp_desc { > phys_addr_t io_start; > + unsigned int id; > unsigned int connector_type; > bool wide_bus_en; > }; > > -struct msm_dp_config { > - const struct msm_dp_desc *descs; > - size_t num_descs; > -}; > - > static const struct msm_dp_desc sc7180_dp_descs[] = { > - [MSM_DP_CONTROLLER_0] = { .io_start = 0x0ae90000, .connector_type = DRM_MODE_CONNECTOR_DisplayPort }, > -}; > - > -static const struct msm_dp_config sc7180_dp_cfg = { > - .descs = sc7180_dp_descs, > - .num_descs = ARRAY_SIZE(sc7180_dp_descs), > + { .io_start = 0x0ae90000, .id = MSM_DP_CONTROLLER_0, .connector_type = DRM_MODE_CONNECTOR_DisplayPort }, > + {} > }; > > static const struct msm_dp_desc sc7280_dp_descs[] = { > - [MSM_DP_CONTROLLER_0] = { .io_start = 0x0ae90000, .connector_type = DRM_MODE_CONNECTOR_DisplayPort, .wide_bus_en = true }, > - [MSM_DP_CONTROLLER_1] = { .io_start = 0x0aea0000, .connector_type = DRM_MODE_CONNECTOR_eDP, .wide_bus_en = true }, > -}; > - > -static const struct msm_dp_config sc7280_dp_cfg = { > - .descs = sc7280_dp_descs, > - .num_descs = ARRAY_SIZE(sc7280_dp_descs), > + { .io_start = 0x0ae90000, .id = MSM_DP_CONTROLLER_0, .connector_type = DRM_MODE_CONNECTOR_DisplayPort, .wide_bus_en = true }, > + { .io_start = 0x0aea0000, .id = MSM_DP_CONTROLLER_1, .connector_type = DRM_MODE_CONNECTOR_eDP, .wide_bus_en = true }, > + {} > }; > > static const struct msm_dp_desc sc8180x_dp_descs[] = { > - [MSM_DP_CONTROLLER_0] = { .io_start = 0x0ae90000, .connector_type = DRM_MODE_CONNECTOR_DisplayPort }, > - [MSM_DP_CONTROLLER_1] = { .io_start = 0x0ae98000, .connector_type = DRM_MODE_CONNECTOR_DisplayPort }, > - [MSM_DP_CONTROLLER_2] = { .io_start = 0x0ae9a000, .connector_type = DRM_MODE_CONNECTOR_eDP }, > -}; > - > -static const struct msm_dp_config sc8180x_dp_cfg = { > - .descs = sc8180x_dp_descs, > - .num_descs = ARRAY_SIZE(sc8180x_dp_descs), > + { .io_start = 0x0ae90000, .id = MSM_DP_CONTROLLER_0, .connector_type = DRM_MODE_CONNECTOR_DisplayPort }, > + { .io_start = 0x0ae98000, .id = MSM_DP_CONTROLLER_1, .connector_type = DRM_MODE_CONNECTOR_DisplayPort }, > + { .io_start = 0x0ae9a000, .id = MSM_DP_CONTROLLER_2, .connector_type = DRM_MODE_CONNECTOR_eDP }, > + {} > }; > > static const struct msm_dp_desc sm8350_dp_descs[] = { > - [MSM_DP_CONTROLLER_0] = { .io_start = 0x0ae90000, .connector_type = DRM_MODE_CONNECTOR_DisplayPort }, > -}; > - > -static const struct msm_dp_config sm8350_dp_cfg = { > - .descs = sm8350_dp_descs, > - .num_descs = ARRAY_SIZE(sm8350_dp_descs), > + { .io_start = 0x0ae90000, .id = MSM_DP_CONTROLLER_0, .connector_type = DRM_MODE_CONNECTOR_DisplayPort }, > + {} > }; > > static const struct of_device_id dp_dt_match[] = { > - { .compatible = "qcom,sc7180-dp", .data = &sc7180_dp_cfg }, > - { .compatible = "qcom,sc7280-dp", .data = &sc7280_dp_cfg }, > - { .compatible = "qcom,sc7280-edp", .data = &sc7280_dp_cfg }, > - { .compatible = "qcom,sc8180x-dp", .data = &sc8180x_dp_cfg }, > - { .compatible = "qcom,sc8180x-edp", .data = &sc8180x_dp_cfg }, > - { .compatible = "qcom,sm8350-dp", .data = &sm8350_dp_cfg }, > + { .compatible = "qcom,sc7180-dp", .data = &sc7180_dp_descs }, > + { .compatible = "qcom,sc7280-dp", .data = &sc7280_dp_descs }, > + { .compatible = "qcom,sc7280-edp", .data = &sc7280_dp_descs }, > + { .compatible = "qcom,sc8180x-dp", .data = &sc8180x_dp_descs }, > + { .compatible = "qcom,sc8180x-edp", .data = &sc8180x_dp_descs }, > + { .compatible = "qcom,sm8350-dp", .data = &sm8350_dp_descs }, > {} > }; > > @@ -1262,10 +1242,9 @@ int dp_display_request_irq(struct msm_dp *dp_display) > return 0; > } > > -static const struct msm_dp_desc *dp_display_get_desc(struct platform_device *pdev, > - unsigned int *id) > +static const struct msm_dp_desc *dp_display_get_desc(struct platform_device *pdev) > { > - const struct msm_dp_config *cfg = of_device_get_match_data(&pdev->dev); > + const struct msm_dp_desc *descs = of_device_get_match_data(&pdev->dev); > struct resource *res; > int i; > > @@ -1273,11 +1252,9 @@ static const struct msm_dp_desc *dp_display_get_desc(struct platform_device *pde > if (!res) > return NULL; > > - for (i = 0; i < cfg->num_descs; i++) { > - if (cfg->descs[i].io_start == res->start) { > - *id = i; > - return &cfg->descs[i]; > - } > + for (i = 0; i < descs[i].io_start; i++) { > + if (descs[i].io_start == res->start) > + return &descs[i]; > } > > dev_err(&pdev->dev, "unknown displayport instance\n"); > @@ -1299,12 +1276,13 @@ static int dp_display_probe(struct platform_device *pdev) > if (!dp) > return -ENOMEM; > > - desc = dp_display_get_desc(pdev, &dp->id); > + desc = dp_display_get_desc(pdev); > if (!desc) > return -EINVAL; > > dp->pdev = pdev; > dp->name = "drm_dp"; > + dp->id = desc->id; > dp->dp_display.connector_type = desc->connector_type; > dp->wide_bus_en = desc->wide_bus_en; > dp->dp_display.is_edp =
diff --git a/drivers/gpu/drm/msm/dp/dp_display.c b/drivers/gpu/drm/msm/dp/dp_display.c index 7ff60e5ff325..eeb292f1ad1b 100644 --- a/drivers/gpu/drm/msm/dp/dp_display.c +++ b/drivers/gpu/drm/msm/dp/dp_display.c @@ -122,61 +122,41 @@ struct dp_display_private { struct msm_dp_desc { phys_addr_t io_start; + unsigned int id; unsigned int connector_type; bool wide_bus_en; }; -struct msm_dp_config { - const struct msm_dp_desc *descs; - size_t num_descs; -}; - static const struct msm_dp_desc sc7180_dp_descs[] = { - [MSM_DP_CONTROLLER_0] = { .io_start = 0x0ae90000, .connector_type = DRM_MODE_CONNECTOR_DisplayPort }, -}; - -static const struct msm_dp_config sc7180_dp_cfg = { - .descs = sc7180_dp_descs, - .num_descs = ARRAY_SIZE(sc7180_dp_descs), + { .io_start = 0x0ae90000, .id = MSM_DP_CONTROLLER_0, .connector_type = DRM_MODE_CONNECTOR_DisplayPort }, + {} }; static const struct msm_dp_desc sc7280_dp_descs[] = { - [MSM_DP_CONTROLLER_0] = { .io_start = 0x0ae90000, .connector_type = DRM_MODE_CONNECTOR_DisplayPort, .wide_bus_en = true }, - [MSM_DP_CONTROLLER_1] = { .io_start = 0x0aea0000, .connector_type = DRM_MODE_CONNECTOR_eDP, .wide_bus_en = true }, -}; - -static const struct msm_dp_config sc7280_dp_cfg = { - .descs = sc7280_dp_descs, - .num_descs = ARRAY_SIZE(sc7280_dp_descs), + { .io_start = 0x0ae90000, .id = MSM_DP_CONTROLLER_0, .connector_type = DRM_MODE_CONNECTOR_DisplayPort, .wide_bus_en = true }, + { .io_start = 0x0aea0000, .id = MSM_DP_CONTROLLER_1, .connector_type = DRM_MODE_CONNECTOR_eDP, .wide_bus_en = true }, + {} }; static const struct msm_dp_desc sc8180x_dp_descs[] = { - [MSM_DP_CONTROLLER_0] = { .io_start = 0x0ae90000, .connector_type = DRM_MODE_CONNECTOR_DisplayPort }, - [MSM_DP_CONTROLLER_1] = { .io_start = 0x0ae98000, .connector_type = DRM_MODE_CONNECTOR_DisplayPort }, - [MSM_DP_CONTROLLER_2] = { .io_start = 0x0ae9a000, .connector_type = DRM_MODE_CONNECTOR_eDP }, -}; - -static const struct msm_dp_config sc8180x_dp_cfg = { - .descs = sc8180x_dp_descs, - .num_descs = ARRAY_SIZE(sc8180x_dp_descs), + { .io_start = 0x0ae90000, .id = MSM_DP_CONTROLLER_0, .connector_type = DRM_MODE_CONNECTOR_DisplayPort }, + { .io_start = 0x0ae98000, .id = MSM_DP_CONTROLLER_1, .connector_type = DRM_MODE_CONNECTOR_DisplayPort }, + { .io_start = 0x0ae9a000, .id = MSM_DP_CONTROLLER_2, .connector_type = DRM_MODE_CONNECTOR_eDP }, + {} }; static const struct msm_dp_desc sm8350_dp_descs[] = { - [MSM_DP_CONTROLLER_0] = { .io_start = 0x0ae90000, .connector_type = DRM_MODE_CONNECTOR_DisplayPort }, -}; - -static const struct msm_dp_config sm8350_dp_cfg = { - .descs = sm8350_dp_descs, - .num_descs = ARRAY_SIZE(sm8350_dp_descs), + { .io_start = 0x0ae90000, .id = MSM_DP_CONTROLLER_0, .connector_type = DRM_MODE_CONNECTOR_DisplayPort }, + {} }; static const struct of_device_id dp_dt_match[] = { - { .compatible = "qcom,sc7180-dp", .data = &sc7180_dp_cfg }, - { .compatible = "qcom,sc7280-dp", .data = &sc7280_dp_cfg }, - { .compatible = "qcom,sc7280-edp", .data = &sc7280_dp_cfg }, - { .compatible = "qcom,sc8180x-dp", .data = &sc8180x_dp_cfg }, - { .compatible = "qcom,sc8180x-edp", .data = &sc8180x_dp_cfg }, - { .compatible = "qcom,sm8350-dp", .data = &sm8350_dp_cfg }, + { .compatible = "qcom,sc7180-dp", .data = &sc7180_dp_descs }, + { .compatible = "qcom,sc7280-dp", .data = &sc7280_dp_descs }, + { .compatible = "qcom,sc7280-edp", .data = &sc7280_dp_descs }, + { .compatible = "qcom,sc8180x-dp", .data = &sc8180x_dp_descs }, + { .compatible = "qcom,sc8180x-edp", .data = &sc8180x_dp_descs }, + { .compatible = "qcom,sm8350-dp", .data = &sm8350_dp_descs }, {} }; @@ -1262,10 +1242,9 @@ int dp_display_request_irq(struct msm_dp *dp_display) return 0; } -static const struct msm_dp_desc *dp_display_get_desc(struct platform_device *pdev, - unsigned int *id) +static const struct msm_dp_desc *dp_display_get_desc(struct platform_device *pdev) { - const struct msm_dp_config *cfg = of_device_get_match_data(&pdev->dev); + const struct msm_dp_desc *descs = of_device_get_match_data(&pdev->dev); struct resource *res; int i; @@ -1273,11 +1252,9 @@ static const struct msm_dp_desc *dp_display_get_desc(struct platform_device *pde if (!res) return NULL; - for (i = 0; i < cfg->num_descs; i++) { - if (cfg->descs[i].io_start == res->start) { - *id = i; - return &cfg->descs[i]; - } + for (i = 0; i < descs[i].io_start; i++) { + if (descs[i].io_start == res->start) + return &descs[i]; } dev_err(&pdev->dev, "unknown displayport instance\n"); @@ -1299,12 +1276,13 @@ static int dp_display_probe(struct platform_device *pdev) if (!dp) return -ENOMEM; - desc = dp_display_get_desc(pdev, &dp->id); + desc = dp_display_get_desc(pdev); if (!desc) return -EINVAL; dp->pdev = pdev; dp->name = "drm_dp"; + dp->id = desc->id; dp->dp_display.connector_type = desc->connector_type; dp->wide_bus_en = desc->wide_bus_en; dp->dp_display.is_edp =