@@ -124,12 +124,13 @@ struct nfit_test_dcr {
124
124
(((node & 0xfff) << 16) | ((socket & 0xf) << 12) \
125
125
| ((imc & 0xf) << 8) | ((chan & 0xf) << 4) | (dimm & 0xf))
126
126
127
- static u32 handle [NUM_DCR ] = {
127
+ static u32 handle [] = {
128
128
[0 ] = NFIT_DIMM_HANDLE (0 , 0 , 0 , 0 , 0 ),
129
129
[1 ] = NFIT_DIMM_HANDLE (0 , 0 , 0 , 0 , 1 ),
130
130
[2 ] = NFIT_DIMM_HANDLE (0 , 0 , 1 , 0 , 0 ),
131
131
[3 ] = NFIT_DIMM_HANDLE (0 , 0 , 1 , 0 , 1 ),
132
132
[4 ] = NFIT_DIMM_HANDLE (0 , 1 , 0 , 0 , 0 ),
133
+ [5 ] = NFIT_DIMM_HANDLE (1 , 0 , 0 , 0 , 0 ),
133
134
};
134
135
135
136
static unsigned long dimm_fail_cmd_flags [NUM_DCR ];
@@ -141,6 +142,7 @@ struct nfit_test {
141
142
void * nfit_buf ;
142
143
dma_addr_t nfit_dma ;
143
144
size_t nfit_size ;
145
+ int dcr_idx ;
144
146
int num_dcr ;
145
147
int num_pm ;
146
148
void * * dimm ;
@@ -425,11 +427,11 @@ static int nfit_test_ctl(struct nvdimm_bus_descriptor *nd_desc,
425
427
break ;
426
428
case ND_CMD_GET_CONFIG_DATA :
427
429
rc = nfit_test_cmd_get_config_data (buf , buf_len ,
428
- t -> label [i ]);
430
+ t -> label [i - t -> dcr_idx ]);
429
431
break ;
430
432
case ND_CMD_SET_CONFIG_DATA :
431
433
rc = nfit_test_cmd_set_config_data (buf , buf_len ,
432
- t -> label [i ]);
434
+ t -> label [i - t -> dcr_idx ]);
433
435
break ;
434
436
case ND_CMD_SMART :
435
437
rc = nfit_test_cmd_smart (buf , buf_len );
@@ -681,7 +683,7 @@ static int nfit_test0_alloc(struct nfit_test *t)
681
683
if (!t -> spa_set [2 ])
682
684
return - ENOMEM ;
683
685
684
- for (i = 0 ; i < NUM_DCR ; i ++ ) {
686
+ for (i = 0 ; i < t -> num_dcr ; i ++ ) {
685
687
t -> dimm [i ] = test_alloc (t , DIMM_SIZE , & t -> dimm_dma [i ]);
686
688
if (!t -> dimm [i ])
687
689
return - ENOMEM ;
@@ -698,7 +700,7 @@ static int nfit_test0_alloc(struct nfit_test *t)
698
700
return - ENOMEM ;
699
701
}
700
702
701
- for (i = 0 ; i < NUM_DCR ; i ++ ) {
703
+ for (i = 0 ; i < t -> num_dcr ; i ++ ) {
702
704
t -> dcr [i ] = test_alloc (t , LABEL_SIZE , & t -> dcr_dma [i ]);
703
705
if (!t -> dcr [i ])
704
706
return - ENOMEM ;
@@ -727,6 +729,7 @@ static int nfit_test1_alloc(struct nfit_test *t)
727
729
size_t nfit_size = sizeof (struct acpi_nfit_system_address ) * 2
728
730
+ sizeof (struct acpi_nfit_memory_map )
729
731
+ offsetof(struct acpi_nfit_control_region , window_size );
732
+ int i ;
730
733
731
734
t -> nfit_buf = test_alloc (t , nfit_size , & t -> nfit_dma );
732
735
if (!t -> nfit_buf )
@@ -737,6 +740,13 @@ static int nfit_test1_alloc(struct nfit_test *t)
737
740
if (!t -> spa_set [0 ])
738
741
return - ENOMEM ;
739
742
743
+ for (i = 0 ; i < t -> num_dcr ; i ++ ) {
744
+ t -> label [i ] = test_alloc (t , LABEL_SIZE , & t -> label_dma [i ]);
745
+ if (!t -> label [i ])
746
+ return - ENOMEM ;
747
+ sprintf (t -> label [i ], "label%d" , i );
748
+ }
749
+
740
750
t -> spa_set [1 ] = test_alloc (t , SPA_VCD_SIZE , & t -> spa_set_dma [1 ]);
741
751
if (!t -> spa_set [1 ])
742
752
return - ENOMEM ;
@@ -1449,7 +1459,7 @@ static void nfit_test1_setup(struct nfit_test *t)
1449
1459
memdev = nfit_buf + offset ;
1450
1460
memdev -> header .type = ACPI_NFIT_TYPE_MEMORY_MAP ;
1451
1461
memdev -> header .length = sizeof (* memdev );
1452
- memdev -> device_handle = 0 ;
1462
+ memdev -> device_handle = handle [ 5 ] ;
1453
1463
memdev -> physical_id = 0 ;
1454
1464
memdev -> region_id = 0 ;
1455
1465
memdev -> range_index = 0 + 1 ;
@@ -1471,7 +1481,7 @@ static void nfit_test1_setup(struct nfit_test *t)
1471
1481
window_size );
1472
1482
dcr -> region_index = 0 + 1 ;
1473
1483
dcr_common_init (dcr );
1474
- dcr -> serial_number = ~0 ;
1484
+ dcr -> serial_number = ~handle [ 5 ] ;
1475
1485
dcr -> code = NFIT_FIC_BYTE ;
1476
1486
dcr -> windows = 0 ;
1477
1487
@@ -1482,6 +1492,9 @@ static void nfit_test1_setup(struct nfit_test *t)
1482
1492
set_bit (ND_CMD_ARS_START , & acpi_desc -> bus_cmd_force_en );
1483
1493
set_bit (ND_CMD_ARS_STATUS , & acpi_desc -> bus_cmd_force_en );
1484
1494
set_bit (ND_CMD_CLEAR_ERROR , & acpi_desc -> bus_cmd_force_en );
1495
+ set_bit (ND_CMD_GET_CONFIG_SIZE , & acpi_desc -> dimm_cmd_force_en );
1496
+ set_bit (ND_CMD_GET_CONFIG_DATA , & acpi_desc -> dimm_cmd_force_en );
1497
+ set_bit (ND_CMD_SET_CONFIG_DATA , & acpi_desc -> dimm_cmd_force_en );
1485
1498
}
1486
1499
1487
1500
static int nfit_test_blk_do_io (struct nd_blk_region * ndbr , resource_size_t dpa ,
@@ -1658,12 +1671,15 @@ static __init int nfit_test_init(void)
1658
1671
switch (i ) {
1659
1672
case 0 :
1660
1673
nfit_test -> num_pm = NUM_PM ;
1674
+ nfit_test -> dcr_idx = 0 ;
1661
1675
nfit_test -> num_dcr = NUM_DCR ;
1662
1676
nfit_test -> alloc = nfit_test0_alloc ;
1663
1677
nfit_test -> setup = nfit_test0_setup ;
1664
1678
break ;
1665
1679
case 1 :
1666
1680
nfit_test -> num_pm = 1 ;
1681
+ nfit_test -> dcr_idx = NUM_DCR ;
1682
+ nfit_test -> num_dcr = 1 ;
1667
1683
nfit_test -> alloc = nfit_test1_alloc ;
1668
1684
nfit_test -> setup = nfit_test1_setup ;
1669
1685
break ;
0 commit comments