30
30
#define ROOT_ENTRY_LOWER_CTP_POS (12U)
31
31
#define ROOT_ENTRY_LOWER_CTP_MASK (0xFFFFFFFFFFFFFUL)
32
32
33
+ /* 4 iommu fault register state */
34
+ #define IOMMU_FAULT_REGISTER_STATE_NUM 4U
35
+ #define IOMMU_FAULT_REGISTER_SIZE 4U
36
+
33
37
#define CTX_ENTRY_UPPER_AW_POS (0U)
34
38
#define CTX_ENTRY_UPPER_AW_MASK \
35
39
(0x7UL << CTX_ENTRY_UPPER_AW_POS)
@@ -118,6 +122,7 @@ struct dmar_drhd_rt {
118
122
uint16_t cap_num_fault_regs ;
119
123
uint16_t cap_fault_reg_offset ;
120
124
uint16_t ecap_iotlb_offset ;
125
+ uint32_t fault_state [IOMMU_FAULT_REGISTER_STATE_NUM ]; /* 32bit registers */
121
126
};
122
127
123
128
struct dmar_root_entry {
@@ -1205,16 +1210,11 @@ void disable_iommu(void)
1205
1210
}
1206
1211
}
1207
1212
1208
- /* 4 iommu fault register state */
1209
- #define IOMMU_FAULT_REGISTER_STATE_NUM 4U
1210
- static uint32_t
1211
- iommu_fault_state [CONFIG_MAX_IOMMU_NUM ][IOMMU_FAULT_REGISTER_STATE_NUM ];
1212
-
1213
1213
void suspend_iommu (void )
1214
1214
{
1215
1215
struct dmar_drhd_rt * dmar_unit ;
1216
1216
struct list_head * pos ;
1217
- uint32_t i , iommu_idx = 0U ;
1217
+ uint32_t i ;
1218
1218
1219
1219
list_for_each (pos , & dmar_drhd_units ) {
1220
1220
dmar_unit = list_entry (pos , struct dmar_drhd_rt , list );
@@ -1230,29 +1230,20 @@ void suspend_iommu(void)
1230
1230
1231
1231
/* save IOMMU fault register state */
1232
1232
for (i = 0U ; i < IOMMU_FAULT_REGISTER_STATE_NUM ; i ++ ) {
1233
- iommu_fault_state [ iommu_idx ][ i ] =
1234
- iommu_read32 ( dmar_unit , DMAR_FECTL_REG +
1235
- ( i * IOMMU_FAULT_REGISTER_STATE_NUM ));
1233
+ dmar_unit -> fault_state [ i ] = iommu_read32 ( dmar_unit ,
1234
+ DMAR_FECTL_REG + ( i * IOMMU_FAULT_REGISTER_SIZE ));
1235
+
1236
1236
}
1237
1237
/* disable translation */
1238
1238
dmar_disable_translation (dmar_unit );
1239
-
1240
- /* If the number of real iommu devices is larger than we
1241
- * defined in kconfig.
1242
- */
1243
- if (iommu_idx > CONFIG_MAX_IOMMU_NUM ) {
1244
- pr_err ("iommu dev number is larger than pre-defined" );
1245
- break ;
1246
- }
1247
- iommu_idx ++ ;
1248
1239
}
1249
1240
}
1250
1241
1251
1242
void resume_iommu (void )
1252
1243
{
1253
1244
struct dmar_drhd_rt * dmar_unit ;
1254
1245
struct list_head * pos ;
1255
- uint32_t i , iommu_idx = 0U ;
1246
+ uint32_t i ;
1256
1247
1257
1248
/* restore IOMMU fault register state */
1258
1249
list_for_each (pos , & dmar_drhd_units ) {
@@ -1273,20 +1264,11 @@ void resume_iommu(void)
1273
1264
/* restore IOMMU fault register state */
1274
1265
for (i = 0U ; i < IOMMU_FAULT_REGISTER_STATE_NUM ; i ++ ) {
1275
1266
iommu_write32 (dmar_unit , DMAR_FECTL_REG +
1276
- (i * IOMMU_FAULT_REGISTER_STATE_NUM ),
1277
- iommu_fault_state [ iommu_idx ] [i ]);
1267
+ (i * IOMMU_FAULT_REGISTER_SIZE ),
1268
+ dmar_unit -> fault_state [i ]);
1278
1269
}
1279
1270
/* enable translation */
1280
1271
dmar_enable_translation (dmar_unit );
1281
-
1282
- /* If the number of real iommu devices is larger than we
1283
- * defined in kconfig.
1284
- */
1285
- if (iommu_idx > CONFIG_MAX_IOMMU_NUM ) {
1286
- pr_err ("iommu dev number is larger than pre-defined" );
1287
- break ;
1288
- }
1289
- iommu_idx ++ ;
1290
1272
}
1291
1273
}
1292
1274
0 commit comments