mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-01 06:33:07 +00:00
thunderbolt: Use tb_dp_read_cap() to read DP_COMMON_CAP as well
There is no point doing this separately as the register layout is the same. For this reason rename tb_dp_read_dprx() to tb_dp_wait_dprx() and call tb_dp_read_cap() instead. While there add debug log if the DPRX capability read times out. Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
This commit is contained in:
parent
09dc766bd6
commit
97e0a21ce8
1 changed files with 7 additions and 6 deletions
|
@ -1067,8 +1067,7 @@ static int tb_dp_alloc_bandwidth(struct tb_tunnel *tunnel, int *alloc_up,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int tb_dp_read_dprx(struct tb_tunnel *tunnel, u32 *rate, u32 *lanes,
|
static int tb_dp_wait_dprx(struct tb_tunnel *tunnel, int timeout_msec)
|
||||||
int timeout_msec)
|
|
||||||
{
|
{
|
||||||
ktime_t timeout = ktime_add_ms(ktime_get(), timeout_msec);
|
ktime_t timeout = ktime_add_ms(ktime_get(), timeout_msec);
|
||||||
struct tb_port *in = tunnel->src_port;
|
struct tb_port *in = tunnel->src_port;
|
||||||
|
@ -1087,15 +1086,13 @@ static int tb_dp_read_dprx(struct tb_tunnel *tunnel, u32 *rate, u32 *lanes,
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
if (val & DP_COMMON_CAP_DPRX_DONE) {
|
if (val & DP_COMMON_CAP_DPRX_DONE) {
|
||||||
*rate = tb_dp_cap_get_rate(val);
|
|
||||||
*lanes = tb_dp_cap_get_lanes(val);
|
|
||||||
|
|
||||||
tb_tunnel_dbg(tunnel, "DPRX read done\n");
|
tb_tunnel_dbg(tunnel, "DPRX read done\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
usleep_range(100, 150);
|
usleep_range(100, 150);
|
||||||
} while (ktime_before(ktime_get(), timeout));
|
} while (ktime_before(ktime_get(), timeout));
|
||||||
|
|
||||||
|
tb_tunnel_dbg(tunnel, "DPRX read timeout\n");
|
||||||
return -ETIMEDOUT;
|
return -ETIMEDOUT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1110,6 +1107,7 @@ static int tb_dp_read_cap(struct tb_tunnel *tunnel, unsigned int cap, u32 *rate,
|
||||||
switch (cap) {
|
switch (cap) {
|
||||||
case DP_LOCAL_CAP:
|
case DP_LOCAL_CAP:
|
||||||
case DP_REMOTE_CAP:
|
case DP_REMOTE_CAP:
|
||||||
|
case DP_COMMON_CAP:
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
@ -1182,7 +1180,7 @@ static int tb_dp_consumed_bandwidth(struct tb_tunnel *tunnel, int *consumed_up,
|
||||||
* reduced one). Otherwise return the remote (possibly
|
* reduced one). Otherwise return the remote (possibly
|
||||||
* reduced) caps.
|
* reduced) caps.
|
||||||
*/
|
*/
|
||||||
ret = tb_dp_read_dprx(tunnel, &rate, &lanes, 150);
|
ret = tb_dp_wait_dprx(tunnel, 150);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
if (ret == -ETIMEDOUT)
|
if (ret == -ETIMEDOUT)
|
||||||
ret = tb_dp_read_cap(tunnel, DP_REMOTE_CAP,
|
ret = tb_dp_read_cap(tunnel, DP_REMOTE_CAP,
|
||||||
|
@ -1190,6 +1188,9 @@ static int tb_dp_consumed_bandwidth(struct tb_tunnel *tunnel, int *consumed_up,
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
ret = tb_dp_read_cap(tunnel, DP_COMMON_CAP, &rate, &lanes);
|
||||||
|
if (ret)
|
||||||
|
return ret;
|
||||||
} else if (sw->generation >= 2) {
|
} else if (sw->generation >= 2) {
|
||||||
ret = tb_dp_read_cap(tunnel, DP_REMOTE_CAP, &rate, &lanes);
|
ret = tb_dp_read_cap(tunnel, DP_REMOTE_CAP, &rate, &lanes);
|
||||||
if (ret)
|
if (ret)
|
||||||
|
|
Loading…
Reference in a new issue