@@ -918,6 +918,13 @@ static int mlx5_function_setup(struct mlx5_core_dev *dev, bool boot)
918918 struct pci_dev * pdev = dev -> pdev ;
919919 int err ;
920920
921+ dev_info (& pdev -> dev , "firmware version: %d.%d.%d\n" , fw_rev_maj (dev ),
922+ fw_rev_min (dev ), fw_rev_sub (dev ));
923+
924+ /* Only PFs hold the relevant PCIe information for this query */
925+ if (mlx5_core_is_pf (dev ))
926+ pcie_print_link_status (dev -> pdev );
927+
921928 /* wait for firmware to accept initialization segments configurations
922929 */
923930 err = wait_fw_init (dev , FW_PRE_INIT_TIMEOUT_MILI );
@@ -1023,48 +1030,16 @@ static int mlx5_function_teardown(struct mlx5_core_dev *dev, bool boot)
10231030 return 0 ;
10241031}
10251032
1026- static int mlx5_load_one (struct mlx5_core_dev * dev , bool boot )
1033+ static int mlx5_load (struct mlx5_core_dev * dev )
10271034{
10281035 struct pci_dev * pdev = dev -> pdev ;
10291036 int err ;
10301037
1031- dev -> caps .embedded_cpu = mlx5_read_embedded_cpu (dev );
1032- mutex_lock (& dev -> intf_state_mutex );
1033- if (test_bit (MLX5_INTERFACE_STATE_UP , & dev -> intf_state )) {
1034- dev_warn (& dev -> pdev -> dev , "%s: interface is up, NOP\n" ,
1035- __func__ );
1036- goto out ;
1037- }
1038-
1039- dev_info (& pdev -> dev , "firmware version: %d.%d.%d\n" , fw_rev_maj (dev ),
1040- fw_rev_min (dev ), fw_rev_sub (dev ));
1041-
1042- /* Only PFs hold the relevant PCIe information for this query */
1043- if (mlx5_core_is_pf (dev ))
1044- pcie_print_link_status (dev -> pdev );
1045-
1046- /* on load removing any previous indication of internal error, device is
1047- * up
1048- */
1049- dev -> state = MLX5_DEVICE_STATE_UP ;
1050-
1051- err = mlx5_function_setup (dev , boot );
1052- if (err )
1053- goto out ;
1054-
1055- if (boot ) {
1056- err = mlx5_init_once (dev );
1057- if (err ) {
1058- dev_err (& pdev -> dev , "sw objs init failed\n" );
1059- goto function_teardown ;
1060- }
1061- }
1062-
10631038 dev -> priv .uar = mlx5_get_uars_page (dev );
10641039 if (IS_ERR (dev -> priv .uar )) {
10651040 dev_err (& pdev -> dev , "Failed allocating uar, aborting\n" );
10661041 err = PTR_ERR (dev -> priv .uar );
1067- goto err_get_uars ;
1042+ return err ;
10681043 }
10691044
10701045 mlx5_events_start (dev );
@@ -1124,55 +1099,95 @@ static int mlx5_load_one(struct mlx5_core_dev *dev, bool boot)
11241099 goto err_ec ;
11251100 }
11261101
1127- if (mlx5_device_registered (dev )) {
1128- mlx5_attach_device (dev );
1129- } else {
1130- err = mlx5_register_device (dev );
1131- if (err ) {
1132- dev_err (& pdev -> dev , "mlx5_register_device failed %d\n" , err );
1133- goto err_reg_dev ;
1134- }
1135- }
1136-
1137- set_bit (MLX5_INTERFACE_STATE_UP , & dev -> intf_state );
1138- out :
1139- mutex_unlock (& dev -> intf_state_mutex );
1140-
11411102 return 0 ;
11421103
1143- err_reg_dev :
1144- mlx5_ec_cleanup (dev );
1145-
11461104err_ec :
11471105 mlx5_sriov_detach (dev );
1148-
11491106err_sriov :
11501107 mlx5_cleanup_fs (dev );
1151-
11521108err_fs :
11531109 mlx5_accel_tls_cleanup (dev );
1154-
11551110err_tls_start :
11561111 mlx5_accel_ipsec_cleanup (dev );
1157-
11581112err_ipsec_start :
11591113 mlx5_fpga_device_stop (dev );
1160-
11611114err_fpga_start :
11621115 mlx5_fw_tracer_cleanup (dev -> tracer );
1163-
11641116err_fw_tracer :
11651117 mlx5_eq_table_destroy (dev );
1166-
11671118err_eq_table :
11681119 mlx5_pagealloc_stop (dev );
11691120 mlx5_events_stop (dev );
11701121 mlx5_put_uars_page (dev , dev -> priv .uar );
1122+ return err ;
1123+ }
1124+
1125+ static void mlx5_unload (struct mlx5_core_dev * dev )
1126+ {
1127+ mlx5_ec_cleanup (dev );
1128+ mlx5_sriov_detach (dev );
1129+ mlx5_cleanup_fs (dev );
1130+ mlx5_accel_ipsec_cleanup (dev );
1131+ mlx5_accel_tls_cleanup (dev );
1132+ mlx5_fpga_device_stop (dev );
1133+ mlx5_fw_tracer_cleanup (dev -> tracer );
1134+ mlx5_eq_table_destroy (dev );
1135+ mlx5_pagealloc_stop (dev );
1136+ mlx5_events_stop (dev );
1137+ mlx5_put_uars_page (dev , dev -> priv .uar );
1138+ }
1139+
1140+ static int mlx5_load_one (struct mlx5_core_dev * dev , bool boot )
1141+ {
1142+ struct pci_dev * pdev = dev -> pdev ;
1143+ int err = 0 ;
1144+
1145+ dev -> caps .embedded_cpu = mlx5_read_embedded_cpu (dev );
1146+ mutex_lock (& dev -> intf_state_mutex );
1147+ if (test_bit (MLX5_INTERFACE_STATE_UP , & dev -> intf_state )) {
1148+ mlx5_core_warn (dev , "interface is up, NOP\n" );
1149+ goto out ;
1150+ }
1151+ /* remove any previous indication of internal error */
1152+ dev -> state = MLX5_DEVICE_STATE_UP ;
1153+
1154+ err = mlx5_function_setup (dev , boot );
1155+ if (err )
1156+ goto out ;
1157+
1158+ if (boot ) {
1159+ err = mlx5_init_once (dev );
1160+ if (err ) {
1161+ dev_err (& pdev -> dev , "sw objs init failed\n" );
1162+ goto function_teardown ;
1163+ }
1164+ }
1165+
1166+ err = mlx5_load (dev );
1167+ if (err )
1168+ goto err_load ;
1169+
1170+ if (mlx5_device_registered (dev )) {
1171+ mlx5_attach_device (dev );
1172+ } else {
1173+ err = mlx5_register_device (dev );
1174+ if (err ) {
1175+ dev_err (& pdev -> dev , "register device failed %d\n" , err );
1176+ goto err_reg_dev ;
1177+ }
1178+ }
1179+
1180+ set_bit (MLX5_INTERFACE_STATE_UP , & dev -> intf_state );
1181+ out :
1182+ mutex_unlock (& dev -> intf_state_mutex );
11711183
1172- err_get_uars :
1184+ return err ;
1185+
1186+ err_reg_dev :
1187+ mlx5_unload (dev );
1188+ err_load :
11731189 if (boot )
11741190 mlx5_cleanup_once (dev );
1175-
11761191function_teardown :
11771192 mlx5_function_teardown (dev , boot );
11781193 dev -> state = MLX5_DEVICE_STATE_INTERNAL_ERROR ;
@@ -1202,17 +1217,8 @@ static int mlx5_unload_one(struct mlx5_core_dev *dev, bool cleanup)
12021217 if (mlx5_device_registered (dev ))
12031218 mlx5_detach_device (dev );
12041219
1205- mlx5_ec_cleanup (dev );
1206- mlx5_sriov_detach (dev );
1207- mlx5_cleanup_fs (dev );
1208- mlx5_accel_ipsec_cleanup (dev );
1209- mlx5_accel_tls_cleanup (dev );
1210- mlx5_fpga_device_stop (dev );
1211- mlx5_fw_tracer_cleanup (dev -> tracer );
1212- mlx5_eq_table_destroy (dev );
1213- mlx5_pagealloc_stop (dev );
1214- mlx5_events_stop (dev );
1215- mlx5_put_uars_page (dev , dev -> priv .uar );
1220+ mlx5_unload (dev );
1221+
12161222 if (cleanup )
12171223 mlx5_cleanup_once (dev );
12181224
0 commit comments