[PATCH 5/8] drm/msm/dp: Add support for lane mapping configuration
Dmitry Baryshkov
dmitry.baryshkov at linaro.org
Mon Dec 2 02:46:12 PST 2024
On Mon, Dec 02, 2024 at 04:40:05PM +0800, Xiangxu Yin wrote:
>
>
> On 11/29/2024 9:50 PM, Dmitry Baryshkov wrote:
> > On Fri, 29 Nov 2024 at 09:59, Xiangxu Yin <quic_xiangxuy at quicinc.com> wrote:
> >>
> >> Add the ability to configure lane mapping for the DP controller. This is
> >> required when the platform's lane mapping does not follow the default
> >> order (0, 1, 2, 3). The mapping rules are now configurable via the
> >> `data-lane` property in the devicetree. This property defines the
> >> logical-to-physical lane mapping sequence, ensuring correct lane
> >> assignment for non-default configurations.
> >>
> >> Signed-off-by: Xiangxu Yin <quic_xiangxuy at quicinc.com>
> >> ---
> >> drivers/gpu/drm/msm/dp/dp_catalog.c | 11 +++++------
> >> drivers/gpu/drm/msm/dp/dp_catalog.h | 2 +-
> >> drivers/gpu/drm/msm/dp/dp_ctrl.c | 2 +-
> >> drivers/gpu/drm/msm/dp/dp_panel.c | 13 ++++++++++---
> >> drivers/gpu/drm/msm/dp/dp_panel.h | 3 +++
> >> 5 files changed, 20 insertions(+), 11 deletions(-)
> >>
> >> @@ -461,6 +460,7 @@ static int msm_dp_panel_parse_dt(struct msm_dp_panel *msm_dp_panel)
> >> struct msm_dp_panel_private *panel;
> >> struct device_node *of_node;
> >> int cnt;
> >> + u32 lane_map[DP_MAX_NUM_DP_LANES] = {0, 1, 2, 3};
> >>
> >> panel = container_of(msm_dp_panel, struct msm_dp_panel_private, msm_dp_panel);
> >> of_node = panel->dev->of_node;
> >> @@ -474,10 +474,17 @@ static int msm_dp_panel_parse_dt(struct msm_dp_panel *msm_dp_panel)
> >> cnt = drm_of_get_data_lanes_count(of_node, 1, DP_MAX_NUM_DP_LANES);
> >> }
> >>
> >> - if (cnt > 0)
> >> + if (cnt > 0) {
> >> + struct device_node *endpoint;
> >> +
> >> msm_dp_panel->max_dp_lanes = cnt;
> >> - else
> >> + endpoint = of_graph_get_endpoint_by_regs(of_node, 1, -1);
> >> + of_property_read_u32_array(endpoint, "data-lanes", lane_map, cnt);
> >> + } else {
> >> msm_dp_panel->max_dp_lanes = DP_MAX_NUM_DP_LANES; /* 4 lanes */
> >> + }
> >
> > Why? This sounds more like dp_catalog or (after the refactoring at
> > [1]) dp_ctrl. But not the dp_panel.
> >
> > [1] https://patchwork.freedesktop.org/project/freedreno/series/?ordering=-last_updated
> >
> We are used the same prop 'data-lanes = <3 2 0 1>' in mdss_dp_out to keep similar behaviour with dsi_host_parse_lane_data.
> From the modules used, catalog seems more appropriate, but since the max_dp_lanes is parsed at dp_panel, it has been placed here.
> Should lane_map parsing in msm_dp_catalog_get, and keep max_dp_lanes parsing at the dp_panel?
msm_dp_catalog_get() is going to be removed. Since the functions that
are going to use it are in dp_ctrl module, I thought that dp_ctrl.c is
the best place. A better option might be to move max_dp_lanes and
max_dp_link_rate to dp_link.c as those are link params. Then
lane_mapping also logically becomes a part of dp_link module.
But now I have a more important question (triggered by Krishna's email
about SAR2130P's USB): if the lanes are swapped, does USB 3 work on that
platform? Or is it being demoted to USB 2 with nobody noticing that?
If lanes 0/1 and 2/3 are swapped, shouldn't it be handled in the QMP
PHY, where we handle lanes and orientation switching?
> >> +
> >> + memcpy(msm_dp_panel->lane_map, lane_map, msm_dp_panel->max_dp_lanes * sizeof(u32));
> >>
> >> msm_dp_panel->max_dp_link_rate = msm_dp_panel_link_frequencies(of_node);
> >> if (!msm_dp_panel->max_dp_link_rate)
> >> diff --git a/drivers/gpu/drm/msm/dp/dp_panel.h b/drivers/gpu/drm/msm/dp/dp_panel.h
> >> index 0e944db3adf2f187f313664fe80cf540ec7a19f2..7603b92c32902bd3d4485539bd6308537ff75a2c 100644
> >> --- a/drivers/gpu/drm/msm/dp/dp_panel.h
> >> +++ b/drivers/gpu/drm/msm/dp/dp_panel.h
> >> @@ -11,6 +11,8 @@
> >> #include "dp_aux.h"
> >> #include "dp_link.h"
> >>
> >> +#define DP_MAX_NUM_DP_LANES 4
> >> +
> >> struct edid;
> >>
> >> struct msm_dp_display_mode {
> >> @@ -46,6 +48,7 @@ struct msm_dp_panel {
> >> bool video_test;
> >> bool vsc_sdp_supported;
> >>
> >> + u32 lane_map[DP_MAX_NUM_DP_LANES];
> >> u32 max_dp_lanes;
> >> u32 max_dp_link_rate;
> >>
> >>
> >> --
> >> 2.25.1
> >>
> >
> >
>
>
> --
> linux-phy mailing list
> linux-phy at lists.infradead.org
> https://lists.infradead.org/mailman/listinfo/linux-phy
--
With best wishes
Dmitry
More information about the linux-phy
mailing list