aboutsummaryrefslogtreecommitdiff
path: root/src/soc/nvidia/tegra124/sor.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/soc/nvidia/tegra124/sor.c')
-rw-r--r--src/soc/nvidia/tegra124/sor.c48
1 files changed, 25 insertions, 23 deletions
diff --git a/src/soc/nvidia/tegra124/sor.c b/src/soc/nvidia/tegra124/sor.c
index 1f9df6ce06..3eaae0e8f9 100644
--- a/src/soc/nvidia/tegra124/sor.c
+++ b/src/soc/nvidia/tegra124/sor.c
@@ -832,11 +832,34 @@ void tegra_dc_sor_set_lane_parm(struct tegra_dc_sor_data *sor,
0xf0, 0x0);
}
-void tegra_dc_sor_power_down_unused_lanes(struct tegra_dc_sor_data *sor)
+void tegra_dc_sor_set_voltage_swing(struct tegra_dc_sor_data *sor)
{
- u32 pad_ctrl = 0;
u32 drive_current = 0;
u32 pre_emphasis = 0;
+
+ /* Set to a known-good pre-calibrated setting */
+ switch (sor->link_cfg->link_bw) {
+ case SOR_LINK_SPEED_G1_62:
+ case SOR_LINK_SPEED_G2_7:
+ drive_current = 0x13131313;
+ pre_emphasis = 0;
+ break;
+ case SOR_LINK_SPEED_G5_4:
+ printk(BIOS_WARNING, "T124 does not support 5.4G link clock.\n");
+ default:
+ printk(BIOS_WARNING, "Invalid sor link bandwidth: %d\n",
+ sor->link_cfg->link_bw);
+ return;
+ }
+
+ tegra_sor_writel(sor, NV_SOR_LANE_DRIVE_CURRENT(sor->portnum),
+ drive_current);
+ tegra_sor_writel(sor, NV_SOR_PR(sor->portnum), pre_emphasis);
+}
+
+void tegra_dc_sor_power_down_unused_lanes(struct tegra_dc_sor_data *sor)
+{
+ u32 pad_ctrl = 0;
int err = 0;
switch (sor->link_cfg->lane_count) {
@@ -873,27 +896,6 @@ void tegra_dc_sor_power_down_unused_lanes(struct tegra_dc_sor_data *sor)
"Wait for lane power down failed: %d\n", err);
return;
}
-
- /* Set to a known-good pre-calibrated setting */
- switch (sor->link_cfg->link_bw) {
- case SOR_LINK_SPEED_G1_62:
- case SOR_LINK_SPEED_G2_7:
- drive_current = 0x13131313;
- pre_emphasis = 0;
- break;
- case SOR_LINK_SPEED_G5_4:
- drive_current = 0x19191919;
- pre_emphasis = 0x09090909;
- break;
- default:
- printk(BIOS_ERR, "Invalid sor link bandwidth: %d\n",
- sor->link_cfg->link_bw);
- return;
- }
-
- tegra_sor_writel(sor, NV_SOR_LANE_DRIVE_CURRENT(sor->portnum),
- drive_current);
- tegra_sor_writel(sor, NV_SOR_PR(sor->portnum), pre_emphasis);
}
void tegra_sor_precharge_lanes(struct tegra_dc_sor_data *sor)