@@ -1065,125 +1065,6 @@ static void bcm_sf2_mdio_unregister(struct bcm_sf2_priv *priv)
1065
1065
of_node_put (priv -> master_mii_dn );
1066
1066
}
1067
1067
1068
- static int bcm_sf2_sw_setup (struct dsa_switch * ds )
1069
- {
1070
- const char * reg_names [BCM_SF2_REGS_NUM ] = BCM_SF2_REGS_NAME ;
1071
- struct bcm_sf2_priv * priv = ds_to_priv (ds );
1072
- struct device_node * dn ;
1073
- void __iomem * * base ;
1074
- unsigned int port ;
1075
- unsigned int i ;
1076
- u32 reg , rev ;
1077
- int ret ;
1078
-
1079
- spin_lock_init (& priv -> indir_lock );
1080
- mutex_init (& priv -> stats_mutex );
1081
-
1082
- /* All the interesting properties are at the parent device_node
1083
- * level
1084
- */
1085
- dn = ds -> cd -> of_node -> parent ;
1086
- bcm_sf2_identify_ports (priv , ds -> cd -> of_node );
1087
-
1088
- priv -> irq0 = irq_of_parse_and_map (dn , 0 );
1089
- priv -> irq1 = irq_of_parse_and_map (dn , 1 );
1090
-
1091
- base = & priv -> core ;
1092
- for (i = 0 ; i < BCM_SF2_REGS_NUM ; i ++ ) {
1093
- * base = of_iomap (dn , i );
1094
- if (* base == NULL ) {
1095
- pr_err ("unable to find register: %s\n" , reg_names [i ]);
1096
- ret = - ENOMEM ;
1097
- goto out_unmap ;
1098
- }
1099
- base ++ ;
1100
- }
1101
-
1102
- ret = bcm_sf2_sw_rst (priv );
1103
- if (ret ) {
1104
- pr_err ("unable to software reset switch: %d\n" , ret );
1105
- goto out_unmap ;
1106
- }
1107
-
1108
- ret = bcm_sf2_mdio_register (ds );
1109
- if (ret ) {
1110
- pr_err ("failed to register MDIO bus\n" );
1111
- goto out_unmap ;
1112
- }
1113
-
1114
- /* Disable all interrupts and request them */
1115
- bcm_sf2_intr_disable (priv );
1116
-
1117
- ret = request_irq (priv -> irq0 , bcm_sf2_switch_0_isr , 0 ,
1118
- "switch_0" , priv );
1119
- if (ret < 0 ) {
1120
- pr_err ("failed to request switch_0 IRQ\n" );
1121
- goto out_unmap ;
1122
- }
1123
-
1124
- ret = request_irq (priv -> irq1 , bcm_sf2_switch_1_isr , 0 ,
1125
- "switch_1" , priv );
1126
- if (ret < 0 ) {
1127
- pr_err ("failed to request switch_1 IRQ\n" );
1128
- goto out_free_irq0 ;
1129
- }
1130
-
1131
- /* Reset the MIB counters */
1132
- reg = core_readl (priv , CORE_GMNCFGCFG );
1133
- reg |= RST_MIB_CNT ;
1134
- core_writel (priv , reg , CORE_GMNCFGCFG );
1135
- reg &= ~RST_MIB_CNT ;
1136
- core_writel (priv , reg , CORE_GMNCFGCFG );
1137
-
1138
- /* Get the maximum number of ports for this switch */
1139
- priv -> hw_params .num_ports = core_readl (priv , CORE_IMP0_PRT_ID ) + 1 ;
1140
- if (priv -> hw_params .num_ports > DSA_MAX_PORTS )
1141
- priv -> hw_params .num_ports = DSA_MAX_PORTS ;
1142
-
1143
- /* Assume a single GPHY setup if we can't read that property */
1144
- if (of_property_read_u32 (dn , "brcm,num-gphy" ,
1145
- & priv -> hw_params .num_gphy ))
1146
- priv -> hw_params .num_gphy = 1 ;
1147
-
1148
- /* Enable all valid ports and disable those unused */
1149
- for (port = 0 ; port < priv -> hw_params .num_ports ; port ++ ) {
1150
- /* IMP port receives special treatment */
1151
- if ((1 << port ) & ds -> enabled_port_mask )
1152
- bcm_sf2_port_setup (ds , port , NULL );
1153
- else if (dsa_is_cpu_port (ds , port ))
1154
- bcm_sf2_imp_setup (ds , port );
1155
- else
1156
- bcm_sf2_port_disable (ds , port , NULL );
1157
- }
1158
-
1159
- rev = reg_readl (priv , REG_SWITCH_REVISION );
1160
- priv -> hw_params .top_rev = (rev >> SWITCH_TOP_REV_SHIFT ) &
1161
- SWITCH_TOP_REV_MASK ;
1162
- priv -> hw_params .core_rev = (rev & SF2_REV_MASK );
1163
-
1164
- rev = reg_readl (priv , REG_PHY_REVISION );
1165
- priv -> hw_params .gphy_rev = rev & PHY_REVISION_MASK ;
1166
-
1167
- pr_info ("Starfighter 2 top: %x.%02x, core: %x.%02x base: 0x%p, IRQs: %d, %d\n" ,
1168
- priv -> hw_params .top_rev >> 8 , priv -> hw_params .top_rev & 0xff ,
1169
- priv -> hw_params .core_rev >> 8 , priv -> hw_params .core_rev & 0xff ,
1170
- priv -> core , priv -> irq0 , priv -> irq1 );
1171
-
1172
- return 0 ;
1173
-
1174
- out_free_irq0 :
1175
- free_irq (priv -> irq0 , priv );
1176
- out_unmap :
1177
- base = & priv -> core ;
1178
- for (i = 0 ; i < BCM_SF2_REGS_NUM ; i ++ ) {
1179
- if (* base )
1180
- iounmap (* base );
1181
- base ++ ;
1182
- }
1183
- bcm_sf2_mdio_unregister (priv );
1184
- return ret ;
1185
- }
1186
-
1187
1068
static int bcm_sf2_sw_set_addr (struct dsa_switch * ds , u8 * addr )
1188
1069
{
1189
1070
return 0 ;
@@ -1431,6 +1312,125 @@ static int bcm_sf2_sw_set_wol(struct dsa_switch *ds, int port,
1431
1312
return p -> ethtool_ops -> set_wol (p , wol );
1432
1313
}
1433
1314
1315
+ static int bcm_sf2_sw_setup (struct dsa_switch * ds )
1316
+ {
1317
+ const char * reg_names [BCM_SF2_REGS_NUM ] = BCM_SF2_REGS_NAME ;
1318
+ struct bcm_sf2_priv * priv = ds_to_priv (ds );
1319
+ struct device_node * dn ;
1320
+ void __iomem * * base ;
1321
+ unsigned int port ;
1322
+ unsigned int i ;
1323
+ u32 reg , rev ;
1324
+ int ret ;
1325
+
1326
+ spin_lock_init (& priv -> indir_lock );
1327
+ mutex_init (& priv -> stats_mutex );
1328
+
1329
+ /* All the interesting properties are at the parent device_node
1330
+ * level
1331
+ */
1332
+ dn = ds -> cd -> of_node -> parent ;
1333
+ bcm_sf2_identify_ports (priv , ds -> cd -> of_node );
1334
+
1335
+ priv -> irq0 = irq_of_parse_and_map (dn , 0 );
1336
+ priv -> irq1 = irq_of_parse_and_map (dn , 1 );
1337
+
1338
+ base = & priv -> core ;
1339
+ for (i = 0 ; i < BCM_SF2_REGS_NUM ; i ++ ) {
1340
+ * base = of_iomap (dn , i );
1341
+ if (* base == NULL ) {
1342
+ pr_err ("unable to find register: %s\n" , reg_names [i ]);
1343
+ ret = - ENOMEM ;
1344
+ goto out_unmap ;
1345
+ }
1346
+ base ++ ;
1347
+ }
1348
+
1349
+ ret = bcm_sf2_sw_rst (priv );
1350
+ if (ret ) {
1351
+ pr_err ("unable to software reset switch: %d\n" , ret );
1352
+ goto out_unmap ;
1353
+ }
1354
+
1355
+ ret = bcm_sf2_mdio_register (ds );
1356
+ if (ret ) {
1357
+ pr_err ("failed to register MDIO bus\n" );
1358
+ goto out_unmap ;
1359
+ }
1360
+
1361
+ /* Disable all interrupts and request them */
1362
+ bcm_sf2_intr_disable (priv );
1363
+
1364
+ ret = request_irq (priv -> irq0 , bcm_sf2_switch_0_isr , 0 ,
1365
+ "switch_0" , priv );
1366
+ if (ret < 0 ) {
1367
+ pr_err ("failed to request switch_0 IRQ\n" );
1368
+ goto out_unmap ;
1369
+ }
1370
+
1371
+ ret = request_irq (priv -> irq1 , bcm_sf2_switch_1_isr , 0 ,
1372
+ "switch_1" , priv );
1373
+ if (ret < 0 ) {
1374
+ pr_err ("failed to request switch_1 IRQ\n" );
1375
+ goto out_free_irq0 ;
1376
+ }
1377
+
1378
+ /* Reset the MIB counters */
1379
+ reg = core_readl (priv , CORE_GMNCFGCFG );
1380
+ reg |= RST_MIB_CNT ;
1381
+ core_writel (priv , reg , CORE_GMNCFGCFG );
1382
+ reg &= ~RST_MIB_CNT ;
1383
+ core_writel (priv , reg , CORE_GMNCFGCFG );
1384
+
1385
+ /* Get the maximum number of ports for this switch */
1386
+ priv -> hw_params .num_ports = core_readl (priv , CORE_IMP0_PRT_ID ) + 1 ;
1387
+ if (priv -> hw_params .num_ports > DSA_MAX_PORTS )
1388
+ priv -> hw_params .num_ports = DSA_MAX_PORTS ;
1389
+
1390
+ /* Assume a single GPHY setup if we can't read that property */
1391
+ if (of_property_read_u32 (dn , "brcm,num-gphy" ,
1392
+ & priv -> hw_params .num_gphy ))
1393
+ priv -> hw_params .num_gphy = 1 ;
1394
+
1395
+ /* Enable all valid ports and disable those unused */
1396
+ for (port = 0 ; port < priv -> hw_params .num_ports ; port ++ ) {
1397
+ /* IMP port receives special treatment */
1398
+ if ((1 << port ) & ds -> enabled_port_mask )
1399
+ bcm_sf2_port_setup (ds , port , NULL );
1400
+ else if (dsa_is_cpu_port (ds , port ))
1401
+ bcm_sf2_imp_setup (ds , port );
1402
+ else
1403
+ bcm_sf2_port_disable (ds , port , NULL );
1404
+ }
1405
+
1406
+ rev = reg_readl (priv , REG_SWITCH_REVISION );
1407
+ priv -> hw_params .top_rev = (rev >> SWITCH_TOP_REV_SHIFT ) &
1408
+ SWITCH_TOP_REV_MASK ;
1409
+ priv -> hw_params .core_rev = (rev & SF2_REV_MASK );
1410
+
1411
+ rev = reg_readl (priv , REG_PHY_REVISION );
1412
+ priv -> hw_params .gphy_rev = rev & PHY_REVISION_MASK ;
1413
+
1414
+ pr_info ("Starfighter 2 top: %x.%02x, core: %x.%02x base: 0x%p, IRQs: %d, %d\n" ,
1415
+ priv -> hw_params .top_rev >> 8 , priv -> hw_params .top_rev & 0xff ,
1416
+ priv -> hw_params .core_rev >> 8 , priv -> hw_params .core_rev & 0xff ,
1417
+ priv -> core , priv -> irq0 , priv -> irq1 );
1418
+
1419
+ return 0 ;
1420
+
1421
+ out_free_irq0 :
1422
+ free_irq (priv -> irq0 , priv );
1423
+ out_unmap :
1424
+ base = & priv -> core ;
1425
+ for (i = 0 ; i < BCM_SF2_REGS_NUM ; i ++ ) {
1426
+ if (* base )
1427
+ iounmap (* base );
1428
+ base ++ ;
1429
+ }
1430
+ bcm_sf2_mdio_unregister (priv );
1431
+ return ret ;
1432
+ }
1433
+
1434
1434
static struct dsa_switch_driver bcm_sf2_switch_driver = {
1435
1435
.tag_protocol = DSA_TAG_PROTO_BRCM ,
1436
1436
.probe = bcm_sf2_sw_drv_probe ,
0 commit comments