@@ -1058,7 +1058,7 @@ static void mock_companion(struct acpi_device *adev, struct device *dev)
1058
1058
#define SZ_64G (SZ_32G * 2)
1059
1059
#endif
1060
1060
1061
- static __init int cxl_rch_init (void )
1061
+ static __init int cxl_rch_topo_init (void )
1062
1062
{
1063
1063
int rc , i ;
1064
1064
@@ -1086,30 +1086,8 @@ static __init int cxl_rch_init(void)
1086
1086
goto err_bridge ;
1087
1087
}
1088
1088
1089
- for (i = 0 ; i < ARRAY_SIZE (cxl_rcd ); i ++ ) {
1090
- int idx = NR_MEM_MULTI + NR_MEM_SINGLE + i ;
1091
- struct platform_device * rch = cxl_rch [i ];
1092
- struct platform_device * pdev ;
1093
-
1094
- pdev = platform_device_alloc ("cxl_rcd" , idx );
1095
- if (!pdev )
1096
- goto err_mem ;
1097
- pdev -> dev .parent = & rch -> dev ;
1098
- set_dev_node (& pdev -> dev , i % 2 );
1099
-
1100
- rc = platform_device_add (pdev );
1101
- if (rc ) {
1102
- platform_device_put (pdev );
1103
- goto err_mem ;
1104
- }
1105
- cxl_rcd [i ] = pdev ;
1106
- }
1107
-
1108
1089
return 0 ;
1109
1090
1110
- err_mem :
1111
- for (i = ARRAY_SIZE (cxl_rcd ) - 1 ; i >= 0 ; i -- )
1112
- platform_device_unregister (cxl_rcd [i ]);
1113
1091
err_bridge :
1114
1092
for (i = ARRAY_SIZE (cxl_rch ) - 1 ; i >= 0 ; i -- ) {
1115
1093
struct platform_device * pdev = cxl_rch [i ];
@@ -1123,12 +1101,10 @@ static __init int cxl_rch_init(void)
1123
1101
return rc ;
1124
1102
}
1125
1103
1126
- static void cxl_rch_exit (void )
1104
+ static void cxl_rch_topo_exit (void )
1127
1105
{
1128
1106
int i ;
1129
1107
1130
- for (i = ARRAY_SIZE (cxl_rcd ) - 1 ; i >= 0 ; i -- )
1131
- platform_device_unregister (cxl_rcd [i ]);
1132
1108
for (i = ARRAY_SIZE (cxl_rch ) - 1 ; i >= 0 ; i -- ) {
1133
1109
struct platform_device * pdev = cxl_rch [i ];
1134
1110
@@ -1139,7 +1115,7 @@ static void cxl_rch_exit(void)
1139
1115
}
1140
1116
}
1141
1117
1142
- static __init int cxl_single_init (void )
1118
+ static __init int cxl_single_topo_init (void )
1143
1119
{
1144
1120
int i , rc ;
1145
1121
@@ -1224,29 +1200,8 @@ static __init int cxl_single_init(void)
1224
1200
cxl_swd_single [i ] = pdev ;
1225
1201
}
1226
1202
1227
- for (i = 0 ; i < ARRAY_SIZE (cxl_mem_single ); i ++ ) {
1228
- struct platform_device * dport = cxl_swd_single [i ];
1229
- struct platform_device * pdev ;
1230
-
1231
- pdev = platform_device_alloc ("cxl_mem" , NR_MEM_MULTI + i );
1232
- if (!pdev )
1233
- goto err_mem ;
1234
- pdev -> dev .parent = & dport -> dev ;
1235
- set_dev_node (& pdev -> dev , i % 2 );
1236
-
1237
- rc = platform_device_add (pdev );
1238
- if (rc ) {
1239
- platform_device_put (pdev );
1240
- goto err_mem ;
1241
- }
1242
- cxl_mem_single [i ] = pdev ;
1243
- }
1244
-
1245
1203
return 0 ;
1246
1204
1247
- err_mem :
1248
- for (i = ARRAY_SIZE (cxl_mem_single ) - 1 ; i >= 0 ; i -- )
1249
- platform_device_unregister (cxl_mem_single [i ]);
1250
1205
err_dport :
1251
1206
for (i = ARRAY_SIZE (cxl_swd_single ) - 1 ; i >= 0 ; i -- )
1252
1207
platform_device_unregister (cxl_swd_single [i ]);
@@ -1269,12 +1224,10 @@ static __init int cxl_single_init(void)
1269
1224
return rc ;
1270
1225
}
1271
1226
1272
- static void cxl_single_exit (void )
1227
+ static void cxl_single_topo_exit (void )
1273
1228
{
1274
1229
int i ;
1275
1230
1276
- for (i = ARRAY_SIZE (cxl_mem_single ) - 1 ; i >= 0 ; i -- )
1277
- platform_device_unregister (cxl_mem_single [i ]);
1278
1231
for (i = ARRAY_SIZE (cxl_swd_single ) - 1 ; i >= 0 ; i -- )
1279
1232
platform_device_unregister (cxl_swd_single [i ]);
1280
1233
for (i = ARRAY_SIZE (cxl_swu_single ) - 1 ; i >= 0 ; i -- )
@@ -1291,6 +1244,91 @@ static void cxl_single_exit(void)
1291
1244
}
1292
1245
}
1293
1246
1247
+ static void cxl_mem_exit (void )
1248
+ {
1249
+ int i ;
1250
+
1251
+ for (i = ARRAY_SIZE (cxl_rcd ) - 1 ; i >= 0 ; i -- )
1252
+ platform_device_unregister (cxl_rcd [i ]);
1253
+ for (i = ARRAY_SIZE (cxl_mem_single ) - 1 ; i >= 0 ; i -- )
1254
+ platform_device_unregister (cxl_mem_single [i ]);
1255
+ for (i = ARRAY_SIZE (cxl_mem ) - 1 ; i >= 0 ; i -- )
1256
+ platform_device_unregister (cxl_mem [i ]);
1257
+ }
1258
+
1259
+ static int cxl_mem_init (void )
1260
+ {
1261
+ int i , rc ;
1262
+
1263
+ for (i = 0 ; i < ARRAY_SIZE (cxl_mem ); i ++ ) {
1264
+ struct platform_device * dport = cxl_switch_dport [i ];
1265
+ struct platform_device * pdev ;
1266
+
1267
+ pdev = platform_device_alloc ("cxl_mem" , i );
1268
+ if (!pdev )
1269
+ goto err_mem ;
1270
+ pdev -> dev .parent = & dport -> dev ;
1271
+ set_dev_node (& pdev -> dev , i % 2 );
1272
+
1273
+ rc = platform_device_add (pdev );
1274
+ if (rc ) {
1275
+ platform_device_put (pdev );
1276
+ goto err_mem ;
1277
+ }
1278
+ cxl_mem [i ] = pdev ;
1279
+ }
1280
+
1281
+ for (i = 0 ; i < ARRAY_SIZE (cxl_mem_single ); i ++ ) {
1282
+ struct platform_device * dport = cxl_swd_single [i ];
1283
+ struct platform_device * pdev ;
1284
+
1285
+ pdev = platform_device_alloc ("cxl_mem" , NR_MEM_MULTI + i );
1286
+ if (!pdev )
1287
+ goto err_single ;
1288
+ pdev -> dev .parent = & dport -> dev ;
1289
+ set_dev_node (& pdev -> dev , i % 2 );
1290
+
1291
+ rc = platform_device_add (pdev );
1292
+ if (rc ) {
1293
+ platform_device_put (pdev );
1294
+ goto err_single ;
1295
+ }
1296
+ cxl_mem_single [i ] = pdev ;
1297
+ }
1298
+
1299
+ for (i = 0 ; i < ARRAY_SIZE (cxl_rcd ); i ++ ) {
1300
+ int idx = NR_MEM_MULTI + NR_MEM_SINGLE + i ;
1301
+ struct platform_device * rch = cxl_rch [i ];
1302
+ struct platform_device * pdev ;
1303
+
1304
+ pdev = platform_device_alloc ("cxl_rcd" , idx );
1305
+ if (!pdev )
1306
+ goto err_rcd ;
1307
+ pdev -> dev .parent = & rch -> dev ;
1308
+ set_dev_node (& pdev -> dev , i % 2 );
1309
+
1310
+ rc = platform_device_add (pdev );
1311
+ if (rc ) {
1312
+ platform_device_put (pdev );
1313
+ goto err_rcd ;
1314
+ }
1315
+ cxl_rcd [i ] = pdev ;
1316
+ }
1317
+
1318
+ return 0 ;
1319
+
1320
+ err_rcd :
1321
+ for (i = ARRAY_SIZE (cxl_rcd ) - 1 ; i >= 0 ; i -- )
1322
+ platform_device_unregister (cxl_rcd [i ]);
1323
+ err_single :
1324
+ for (i = ARRAY_SIZE (cxl_mem_single ) - 1 ; i >= 0 ; i -- )
1325
+ platform_device_unregister (cxl_mem_single [i ]);
1326
+ err_mem :
1327
+ for (i = ARRAY_SIZE (cxl_mem ) - 1 ; i >= 0 ; i -- )
1328
+ platform_device_unregister (cxl_mem [i ]);
1329
+ return rc ;
1330
+ }
1331
+
1294
1332
static __init int cxl_test_init (void )
1295
1333
{
1296
1334
int rc , i ;
@@ -1403,29 +1441,11 @@ static __init int cxl_test_init(void)
1403
1441
cxl_switch_dport [i ] = pdev ;
1404
1442
}
1405
1443
1406
- for (i = 0 ; i < ARRAY_SIZE (cxl_mem ); i ++ ) {
1407
- struct platform_device * dport = cxl_switch_dport [i ];
1408
- struct platform_device * pdev ;
1409
-
1410
- pdev = platform_device_alloc ("cxl_mem" , i );
1411
- if (!pdev )
1412
- goto err_mem ;
1413
- pdev -> dev .parent = & dport -> dev ;
1414
- set_dev_node (& pdev -> dev , i % 2 );
1415
-
1416
- rc = platform_device_add (pdev );
1417
- if (rc ) {
1418
- platform_device_put (pdev );
1419
- goto err_mem ;
1420
- }
1421
- cxl_mem [i ] = pdev ;
1422
- }
1423
-
1424
- rc = cxl_single_init ();
1444
+ rc = cxl_single_topo_init ();
1425
1445
if (rc )
1426
- goto err_mem ;
1446
+ goto err_dport ;
1427
1447
1428
- rc = cxl_rch_init ();
1448
+ rc = cxl_rch_topo_init ();
1429
1449
if (rc )
1430
1450
goto err_single ;
1431
1451
@@ -1438,19 +1458,20 @@ static __init int cxl_test_init(void)
1438
1458
1439
1459
rc = platform_device_add (cxl_acpi );
1440
1460
if (rc )
1441
- goto err_add ;
1461
+ goto err_root ;
1462
+
1463
+ rc = cxl_mem_init ();
1464
+ if (rc )
1465
+ goto err_root ;
1442
1466
1443
1467
return 0 ;
1444
1468
1445
- err_add :
1469
+ err_root :
1446
1470
platform_device_put (cxl_acpi );
1447
1471
err_rch :
1448
- cxl_rch_exit ();
1472
+ cxl_rch_topo_exit ();
1449
1473
err_single :
1450
- cxl_single_exit ();
1451
- err_mem :
1452
- for (i = ARRAY_SIZE (cxl_mem ) - 1 ; i >= 0 ; i -- )
1453
- platform_device_unregister (cxl_mem [i ]);
1474
+ cxl_single_topo_exit ();
1454
1475
err_dport :
1455
1476
for (i = ARRAY_SIZE (cxl_switch_dport ) - 1 ; i >= 0 ; i -- )
1456
1477
platform_device_unregister (cxl_switch_dport [i ]);
@@ -1482,11 +1503,10 @@ static __exit void cxl_test_exit(void)
1482
1503
{
1483
1504
int i ;
1484
1505
1506
+ cxl_mem_exit ();
1485
1507
platform_device_unregister (cxl_acpi );
1486
- cxl_rch_exit ();
1487
- cxl_single_exit ();
1488
- for (i = ARRAY_SIZE (cxl_mem ) - 1 ; i >= 0 ; i -- )
1489
- platform_device_unregister (cxl_mem [i ]);
1508
+ cxl_rch_topo_exit ();
1509
+ cxl_single_topo_exit ();
1490
1510
for (i = ARRAY_SIZE (cxl_switch_dport ) - 1 ; i >= 0 ; i -- )
1491
1511
platform_device_unregister (cxl_switch_dport [i ]);
1492
1512
for (i = ARRAY_SIZE (cxl_switch_uport ) - 1 ; i >= 0 ; i -- )
0 commit comments