thunderbolt: Optimize Force Power logic
authorRajmohan Mani <rajmohan.mani@intel.com>
Mon, 17 Aug 2020 15:55:20 +0000 (08:55 -0700)
committerMika Westerberg <mika.westerberg@linux.intel.com>
Thu, 3 Sep 2020 09:06:40 +0000 (12:06 +0300)
Currently the "Force Power" logic uses 10 retries, each with a delay of
250 ms. Thunderbolt controllers in Ice Lake and Tiger Lake platforms are
found to complete this in the order of 3 ms or so. Since this delay
is in resume path, surplus delay is effectively affecting runtime PM
resume flows.

Decrease the granularity of the delay to 3 ms and increase the number of
retries so we wait maximum of ~1 s which is the recommended timeout.
This should make runtime resume a bit faster.

Reported-by: Dana Alkattan <dana.alkattan@intel.com>
Signed-off-by: Rajmohan Mani <rajmohan.mani@intel.com>
Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
drivers/thunderbolt/nhi_ops.c

index 6795851aac95bcbbdda27b4c1d0416cc189b26c8..c0d5ccbb10f5124d2062b6468f1388e58cbbf354 100644 (file)
@@ -59,7 +59,7 @@ static int icl_nhi_force_power(struct tb_nhi *nhi, bool power)
        pci_write_config_dword(nhi->pdev, VS_CAP_22, vs_cap);
 
        if (power) {
-               unsigned int retries = 10;
+               unsigned int retries = 350;
                u32 val;
 
                /* Wait until the firmware tells it is up and running */
@@ -67,7 +67,7 @@ static int icl_nhi_force_power(struct tb_nhi *nhi, bool power)
                        pci_read_config_dword(nhi->pdev, VS_CAP_9, &val);
                        if (val & VS_CAP_9_FW_READY)
                                return 0;
-                       msleep(250);
+                       usleep_range(3000, 3100);
                } while (--retries);
 
                return -ETIMEDOUT;