| From 985cfe501b74f214905ab4817acee0df24627268 Mon Sep 17 00:00:00 2001 |
| From: Aapo Vienamo <aapo.vienamo@linux.intel.com> |
| Date: Fri, 24 May 2024 18:53:17 +0300 |
| Subject: thunderbolt: debugfs: Fix margin debugfs node creation condition |
| |
| From: Aapo Vienamo <aapo.vienamo@linux.intel.com> |
| |
| commit 985cfe501b74f214905ab4817acee0df24627268 upstream. |
| |
| The margin debugfs node controls the "Enable Margin Test" field of the |
| lane margining operations. This field selects between either low or high |
| voltage margin values for voltage margin test or left or right timing |
| margin values for timing margin test. |
| |
| According to the USB4 specification, whether or not the "Enable Margin |
| Test" control applies, depends on the values of the "Independent |
| High/Low Voltage Margin" or "Independent Left/Right Timing Margin" |
| capability fields for voltage and timing margin tests respectively. The |
| pre-existing condition enabled the debugfs node also in the case where |
| both low/high or left/right margins are returned, which is incorrect. |
| This change only enables the debugfs node in question, if the specific |
| required capability values are met. |
| |
| Signed-off-by: Aapo Vienamo <aapo.vienamo@linux.intel.com> |
| Fixes: d0f1e0c2a699 ("thunderbolt: Add support for receiver lane margining") |
| Cc: stable@vger.kernel.org |
| Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| drivers/thunderbolt/debugfs.c | 5 +++-- |
| 1 file changed, 3 insertions(+), 2 deletions(-) |
| |
| --- a/drivers/thunderbolt/debugfs.c |
| +++ b/drivers/thunderbolt/debugfs.c |
| @@ -927,8 +927,9 @@ static void margining_port_init(struct t |
| debugfs_create_file("run", 0600, dir, port, &margining_run_fops); |
| debugfs_create_file("results", 0600, dir, port, &margining_results_fops); |
| debugfs_create_file("test", 0600, dir, port, &margining_test_fops); |
| - if (independent_voltage_margins(usb4) || |
| - (supports_time(usb4) && independent_time_margins(usb4))) |
| + if (independent_voltage_margins(usb4) == USB4_MARGIN_CAP_0_VOLTAGE_HL || |
| + (supports_time(usb4) && |
| + independent_time_margins(usb4) == USB4_MARGIN_CAP_1_TIME_LR)) |
| debugfs_create_file("margin", 0600, dir, port, &margining_margin_fops); |
| } |
| |