Commit 9650de73 authored by Mika Westerberg's avatar Mika Westerberg

thunderbolt: Check for first depth router in tb.c

Currently tb_switch_clx_enable() enables CL states only for the first
depth router. This is something we may want to change in the future and
in addition it is not visible from the calling path at all. For this
reason do the check in the tb.c so it is immediately visible that we
only do this for the first depth router. Fix the kernel-docs
accordingly.
Signed-off-by: default avatarMika Westerberg <mika.westerberg@linux.intel.com>
parent 35627353
...@@ -257,14 +257,12 @@ static const char *clx_name(unsigned int clx) ...@@ -257,14 +257,12 @@ static const char *clx_name(unsigned int clx)
* @sw: Router to enable CLx for * @sw: Router to enable CLx for
* @clx: The CLx state to enable * @clx: The CLx state to enable
* *
* Enable CLx state only for first hop router. That is the most common * CLx is enabled only if both sides of the link support CLx, and if both sides
* use-case, that is intended for better thermal management, and so helps * of the link are not configured as two single lane links and only if the link
* to improve performance. CLx is enabled only if both sides of the link * is not inter-domain link. The complete set of conditions is described in CM
* support CLx, and if both sides of the link are not configured as two * Guide 1.0 section 8.1.
* single lane links and only if the link is not inter-domain link. The
* complete set of conditions is described in CM Guide 1.0 section 8.1.
* *
* Return: Returns 0 on success or an error code on failure. * Returns %0 on success or an error code on failure.
*/ */
int tb_switch_clx_enable(struct tb_switch *sw, unsigned int clx) int tb_switch_clx_enable(struct tb_switch *sw, unsigned int clx)
{ {
...@@ -284,10 +282,6 @@ int tb_switch_clx_enable(struct tb_switch *sw, unsigned int clx) ...@@ -284,10 +282,6 @@ int tb_switch_clx_enable(struct tb_switch *sw, unsigned int clx)
!tb_switch_clx_is_supported(sw)) !tb_switch_clx_is_supported(sw))
return 0; return 0;
/* Enable CLx only for first hop router (depth = 1) */
if (tb_route(tb_switch_parent(sw)))
return 0;
/* CL2 is not yet supported */ /* CL2 is not yet supported */
if (clx & TB_CL2) if (clx & TB_CL2)
return -EOPNOTSUPP; return -EOPNOTSUPP;
...@@ -340,7 +334,7 @@ int tb_switch_clx_enable(struct tb_switch *sw, unsigned int clx) ...@@ -340,7 +334,7 @@ int tb_switch_clx_enable(struct tb_switch *sw, unsigned int clx)
* Disables all CL states of the given router. Can be called on any * Disables all CL states of the given router. Can be called on any
* router and if the states were not enabled already does nothing. * router and if the states were not enabled already does nothing.
* *
* Return: Returns 0 on success or an error code on failure. * Returns %0 on success or an error code on failure.
*/ */
int tb_switch_clx_disable(struct tb_switch *sw) int tb_switch_clx_disable(struct tb_switch *sw)
{ {
...@@ -351,10 +345,6 @@ int tb_switch_clx_disable(struct tb_switch *sw) ...@@ -351,10 +345,6 @@ int tb_switch_clx_disable(struct tb_switch *sw)
if (!tb_switch_clx_is_supported(sw)) if (!tb_switch_clx_is_supported(sw))
return 0; return 0;
/* Disable CLx only for first hop router (depth = 1) */
if (tb_route(tb_switch_parent(sw)))
return 0;
if (!clx) if (!clx)
return 0; return 0;
......
...@@ -244,6 +244,16 @@ static int tb_enable_clx(struct tb_switch *sw) ...@@ -244,6 +244,16 @@ static int tb_enable_clx(struct tb_switch *sw)
{ {
int ret; int ret;
/*
* Currently only enable CLx for the first link. This is enough
* to allow the CPU to save energy at least on Intel hardware
* and makes it slightly simpler to implement. We may change
* this in the future to cover the whole topology if it turns
* out to be beneficial.
*/
if (sw->config.depth != 1)
return 0;
/* /*
* CL0s and CL1 are enabled and supported together. * CL0s and CL1 are enabled and supported together.
* Silently ignore CLx enabling in case CLx is not supported. * Silently ignore CLx enabling in case CLx is not supported.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment