Skip to content

Commit 17f12a4

Browse files
Sean Andersontomba
authored andcommitted
drm: zynqmp_dp: Split off several helper functions
In preparation for supporting compliance testing, split off several helper functions. No functional change intended. Signed-off-by: Sean Anderson <[email protected]> Reviewed-by: Laurent Pinchart <[email protected]> Reviewed-by: Tomi Valkeinen <[email protected]> Signed-off-by: Tomi Valkeinen <[email protected]> Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
1 parent 2425dee commit 17f12a4

File tree

1 file changed

+33
-15
lines changed

1 file changed

+33
-15
lines changed

drivers/gpu/drm/xlnx/zynqmp_dp.c

Lines changed: 33 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -636,27 +636,28 @@ static void zynqmp_dp_adjust_train(struct zynqmp_dp *dp,
636636
/**
637637
* zynqmp_dp_update_vs_emph - Update the training values
638638
* @dp: DisplayPort IP core structure
639+
* @train_set: A set of training values
639640
*
640641
* Update the training values based on the request from sink. The mapped values
641642
* are predefined, and values(vs, pe, pc) are from the device manual.
642643
*
643644
* Return: 0 if vs and emph are updated successfully, or the error code returned
644645
* by drm_dp_dpcd_write().
645646
*/
646-
static int zynqmp_dp_update_vs_emph(struct zynqmp_dp *dp)
647+
static int zynqmp_dp_update_vs_emph(struct zynqmp_dp *dp, u8 *train_set)
647648
{
648649
unsigned int i;
649650
int ret;
650651

651-
ret = drm_dp_dpcd_write(&dp->aux, DP_TRAINING_LANE0_SET, dp->train_set,
652+
ret = drm_dp_dpcd_write(&dp->aux, DP_TRAINING_LANE0_SET, train_set,
652653
dp->mode.lane_cnt);
653654
if (ret < 0)
654655
return ret;
655656

656657
for (i = 0; i < dp->mode.lane_cnt; i++) {
657658
u32 reg = ZYNQMP_DP_SUB_TX_PHY_PRECURSOR_LANE_0 + i * 4;
658659
union phy_configure_opts opts = { 0 };
659-
u8 train = dp->train_set[i];
660+
u8 train = train_set[i];
660661

661662
opts.dp.voltage[0] = (train & DP_TRAIN_VOLTAGE_SWING_MASK)
662663
>> DP_TRAIN_VOLTAGE_SWING_SHIFT;
@@ -700,7 +701,7 @@ static int zynqmp_dp_link_train_cr(struct zynqmp_dp *dp)
700701
* So, This loop should exit before 512 iterations
701702
*/
702703
for (max_tries = 0; max_tries < 512; max_tries++) {
703-
ret = zynqmp_dp_update_vs_emph(dp);
704+
ret = zynqmp_dp_update_vs_emph(dp, dp->train_set);
704705
if (ret)
705706
return ret;
706707

@@ -765,7 +766,7 @@ static int zynqmp_dp_link_train_ce(struct zynqmp_dp *dp)
765766
return ret;
766767

767768
for (tries = 0; tries < DP_MAX_TRAINING_TRIES; tries++) {
768-
ret = zynqmp_dp_update_vs_emph(dp);
769+
ret = zynqmp_dp_update_vs_emph(dp, dp->train_set);
769770
if (ret)
770771
return ret;
771772

@@ -788,28 +789,29 @@ static int zynqmp_dp_link_train_ce(struct zynqmp_dp *dp)
788789
}
789790

790791
/**
791-
* zynqmp_dp_train - Train the link
792+
* zynqmp_dp_setup() - Set up major link parameters
792793
* @dp: DisplayPort IP core structure
794+
* @bw_code: The link bandwidth as a multiple of 270 MHz
795+
* @lane_cnt: The number of lanes to use
796+
* @enhanced: Use enhanced framing
797+
* @downspread: Enable spread-spectrum clocking
793798
*
794-
* Return: 0 if all trains are done successfully, or corresponding error code.
799+
* Return: 0 on success, or -errno on failure
795800
*/
796-
static int zynqmp_dp_train(struct zynqmp_dp *dp)
801+
static int zynqmp_dp_setup(struct zynqmp_dp *dp, u8 bw_code, u8 lane_cnt,
802+
bool enhanced, bool downspread)
797803
{
798804
u32 reg;
799-
u8 bw_code = dp->mode.bw_code;
800-
u8 lane_cnt = dp->mode.lane_cnt;
801805
u8 aux_lane_cnt = lane_cnt;
802-
bool enhanced;
803806
int ret;
804807

805808
zynqmp_dp_write(dp, ZYNQMP_DP_LANE_COUNT_SET, lane_cnt);
806-
enhanced = drm_dp_enhanced_frame_cap(dp->dpcd);
807809
if (enhanced) {
808810
zynqmp_dp_write(dp, ZYNQMP_DP_ENHANCED_FRAME_EN, 1);
809811
aux_lane_cnt |= DP_LANE_COUNT_ENHANCED_FRAME_EN;
810812
}
811813

812-
if (dp->dpcd[3] & 0x1) {
814+
if (downspread) {
813815
zynqmp_dp_write(dp, ZYNQMP_DP_DOWNSPREAD_CTL, 1);
814816
drm_dp_dpcd_writeb(&dp->aux, DP_DOWNSPREAD_CTRL,
815817
DP_SPREAD_AMP_0_5);
@@ -852,8 +854,24 @@ static int zynqmp_dp_train(struct zynqmp_dp *dp)
852854
}
853855

854856
zynqmp_dp_write(dp, ZYNQMP_DP_PHY_CLOCK_SELECT, reg);
855-
ret = zynqmp_dp_phy_ready(dp);
856-
if (ret < 0)
857+
return zynqmp_dp_phy_ready(dp);
858+
}
859+
860+
/**
861+
* zynqmp_dp_train - Train the link
862+
* @dp: DisplayPort IP core structure
863+
*
864+
* Return: 0 if all trains are done successfully, or corresponding error code.
865+
*/
866+
static int zynqmp_dp_train(struct zynqmp_dp *dp)
867+
{
868+
int ret;
869+
870+
ret = zynqmp_dp_setup(dp, dp->mode.bw_code, dp->mode.lane_cnt,
871+
drm_dp_enhanced_frame_cap(dp->dpcd),
872+
dp->dpcd[DP_MAX_DOWNSPREAD] &
873+
DP_MAX_DOWNSPREAD_0_5);
874+
if (ret)
857875
return ret;
858876

859877
zynqmp_dp_write(dp, ZYNQMP_DP_SCRAMBLING_DISABLE, 1);

0 commit comments

Comments
 (0)