Commit f6de3d39 authored by Dean Luick's avatar Dean Luick Committed by Doug Ledford

IB/hfi1: Correct 8051 link parameter settings

Two 8051 link settings, external device config and tuning method,
were written in the wrong location and the previous settings were
not cleared.  For both, clear the old value and write the new
value.

Fixes: 8ebd4cf1 ("staging/rdma/hfi1: Add active and optical cable support")
Reviewed-by: default avatarDennis Dalessandro <dennis.dalessandro@intel.com>
Signed-off-by: default avatarDean Luick <dean.luick@intel.com>
Signed-off-by: default avatarDoug Ledford <dledford@redhat.com>
parent ce8b2fd0
...@@ -398,6 +398,12 @@ ...@@ -398,6 +398,12 @@
/* Lane ID for general configuration registers */ /* Lane ID for general configuration registers */
#define GENERAL_CONFIG 4 #define GENERAL_CONFIG 4
/* LINK_TUNING_PARAMETERS fields */
#define TUNING_METHOD_SHIFT 24
/* LINK_OPTIMIZATION_SETTINGS fields */
#define ENABLE_EXT_DEV_CONFIG_SHIFT 24
/* LOAD_DATA 8051 command shifts and fields */ /* LOAD_DATA 8051 command shifts and fields */
#define LOAD_DATA_FIELD_ID_SHIFT 40 #define LOAD_DATA_FIELD_ID_SHIFT 40
#define LOAD_DATA_FIELD_ID_MASK 0xfull #define LOAD_DATA_FIELD_ID_MASK 0xfull
......
...@@ -540,7 +540,8 @@ static void apply_tunings( ...@@ -540,7 +540,8 @@ static void apply_tunings(
/* Enable external device config if channel is limiting active */ /* Enable external device config if channel is limiting active */
read_8051_config(ppd->dd, LINK_OPTIMIZATION_SETTINGS, read_8051_config(ppd->dd, LINK_OPTIMIZATION_SETTINGS,
GENERAL_CONFIG, &config_data); GENERAL_CONFIG, &config_data);
config_data |= limiting_active; config_data &= ~(0xff << ENABLE_EXT_DEV_CONFIG_SHIFT);
config_data |= ((u32)limiting_active << ENABLE_EXT_DEV_CONFIG_SHIFT);
ret = load_8051_config(ppd->dd, LINK_OPTIMIZATION_SETTINGS, ret = load_8051_config(ppd->dd, LINK_OPTIMIZATION_SETTINGS,
GENERAL_CONFIG, config_data); GENERAL_CONFIG, config_data);
if (ret != HCMD_SUCCESS) if (ret != HCMD_SUCCESS)
...@@ -553,7 +554,8 @@ static void apply_tunings( ...@@ -553,7 +554,8 @@ static void apply_tunings(
/* Pass tuning method to 8051 */ /* Pass tuning method to 8051 */
read_8051_config(ppd->dd, LINK_TUNING_PARAMETERS, GENERAL_CONFIG, read_8051_config(ppd->dd, LINK_TUNING_PARAMETERS, GENERAL_CONFIG,
&config_data); &config_data);
config_data |= tuning_method; config_data &= ~(0xff << TUNING_METHOD_SHIFT);
config_data |= ((u32)tuning_method << TUNING_METHOD_SHIFT);
ret = load_8051_config(ppd->dd, LINK_TUNING_PARAMETERS, GENERAL_CONFIG, ret = load_8051_config(ppd->dd, LINK_TUNING_PARAMETERS, GENERAL_CONFIG,
config_data); config_data);
if (ret != HCMD_SUCCESS) if (ret != HCMD_SUCCESS)
......
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