* @sw: Router to enable CLx for
* @clx: The CLx state to enable
*
- * Enable CLx state only for first hop router. That is the most common
- * use-case, that is intended for better thermal management, and so helps
- * to improve performance. CLx is enabled only if both sides of the link
- * support CLx, and if both sides of the link are not configured as two
- * 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.
+ * CLx is enabled only if both sides of the link support CLx, and if both sides
+ * of the link are not configured as two 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)
{
!tb_switch_clx_is_supported(sw))
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 */
if (clx & TB_CL2)
return -EOPNOTSUPP;
* Disables all CL states of the given router. Can be called on any
* 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)
{
if (!tb_switch_clx_is_supported(sw))
return 0;
- /* Disable CLx only for first hop router (depth = 1) */
- if (tb_route(tb_switch_parent(sw)))
- return 0;
-
if (!clx)
return 0;
{
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.
* Silently ignore CLx enabling in case CLx is not supported.