@@ -8832,6 +8832,20 @@ static void read_remote_device_id(struct hfi1_devdata *dd, u16 *device_id,
8832
8832
& REMOTE_DEVICE_REV_MASK ;
8833
8833
}
8834
8834
8835
+ int write_host_interface_version (struct hfi1_devdata * dd , u8 version )
8836
+ {
8837
+ u32 frame ;
8838
+ u32 mask ;
8839
+
8840
+ mask = (HOST_INTERFACE_VERSION_MASK << HOST_INTERFACE_VERSION_SHIFT );
8841
+ read_8051_config (dd , RESERVED_REGISTERS , GENERAL_CONFIG , & frame );
8842
+ /* Clear, then set field */
8843
+ frame &= ~mask ;
8844
+ frame |= ((u32 )version << HOST_INTERFACE_VERSION_SHIFT );
8845
+ return load_8051_config (dd , RESERVED_REGISTERS , GENERAL_CONFIG ,
8846
+ frame );
8847
+ }
8848
+
8835
8849
void read_misc_status (struct hfi1_devdata * dd , u8 * ver_major , u8 * ver_minor ,
8836
8850
u8 * ver_patch )
8837
8851
{
@@ -10262,49 +10276,35 @@ static void force_logical_link_state_down(struct hfi1_pportdata *ppd)
10262
10276
static int goto_offline (struct hfi1_pportdata * ppd , u8 rem_reason )
10263
10277
{
10264
10278
struct hfi1_devdata * dd = ppd -> dd ;
10265
- u32 pstate , previous_state ;
10279
+ u32 previous_state ;
10266
10280
int ret ;
10267
- int do_transition ;
10268
- int do_wait ;
10269
10281
10270
10282
update_lcb_cache (dd );
10271
10283
10272
10284
previous_state = ppd -> host_link_state ;
10273
10285
ppd -> host_link_state = HLS_GOING_OFFLINE ;
10274
- pstate = read_physical_state (dd );
10275
- if (pstate == PLS_OFFLINE ) {
10276
- do_transition = 0 ; /* in right state */
10277
- do_wait = 0 ; /* ...no need to wait */
10278
- } else if ((pstate & 0xf0 ) == PLS_OFFLINE ) {
10279
- do_transition = 0 ; /* in an offline transient state */
10280
- do_wait = 1 ; /* ...wait for it to settle */
10281
- } else {
10282
- do_transition = 1 ; /* need to move to offline */
10283
- do_wait = 1 ; /* ...will need to wait */
10284
- }
10285
10286
10286
- if (do_transition ) {
10287
- ret = set_physical_link_state (dd ,
10288
- (rem_reason << 8 ) | PLS_OFFLINE );
10287
+ /* start offline transition */
10288
+ ret = set_physical_link_state (dd , (rem_reason << 8 ) | PLS_OFFLINE );
10289
10289
10290
- if (ret != HCMD_SUCCESS ) {
10291
- dd_dev_err (dd ,
10292
- "Failed to transition to Offline link state, return %d\n" ,
10293
- ret );
10294
- return - EINVAL ;
10295
- }
10296
- if (ppd -> offline_disabled_reason ==
10297
- HFI1_ODR_MASK (OPA_LINKDOWN_REASON_NONE ))
10298
- ppd -> offline_disabled_reason =
10299
- HFI1_ODR_MASK (OPA_LINKDOWN_REASON_TRANSIENT );
10290
+ if (ret != HCMD_SUCCESS ) {
10291
+ dd_dev_err (dd ,
10292
+ "Failed to transition to Offline link state, return %d\n" ,
10293
+ ret );
10294
+ return - EINVAL ;
10300
10295
}
10296
+ if (ppd -> offline_disabled_reason ==
10297
+ HFI1_ODR_MASK (OPA_LINKDOWN_REASON_NONE ))
10298
+ ppd -> offline_disabled_reason =
10299
+ HFI1_ODR_MASK (OPA_LINKDOWN_REASON_TRANSIENT );
10301
10300
10302
- if (do_wait ) {
10303
- /* it can take a while for the link to go down */
10304
- ret = wait_physical_linkstate (ppd , PLS_OFFLINE , 10000 );
10305
- if (ret < 0 )
10306
- return ret ;
10307
- }
10301
+ /*
10302
+ * Wait for offline transition. It can take a while for
10303
+ * the link to go down.
10304
+ */
10305
+ ret = wait_physical_linkstate (ppd , PLS_OFFLINE , 10000 );
10306
+ if (ret < 0 )
10307
+ return ret ;
10308
10308
10309
10309
/*
10310
10310
* Now in charge of LCB - must be after the physical state is
0 commit comments