|
84 | 84 |
|
85 | 85 |
|
86 | 86 | /* Extended Feature Bits */ |
87 | | -#define FEATURE_PREFETCH (1ULL<<0) |
88 | | -#define FEATURE_PPR (1ULL<<1) |
89 | | -#define FEATURE_X2APIC (1ULL<<2) |
90 | | -#define FEATURE_NX (1ULL<<3) |
91 | | -#define FEATURE_GT (1ULL<<4) |
92 | | -#define FEATURE_IA (1ULL<<6) |
93 | | -#define FEATURE_GA (1ULL<<7) |
94 | | -#define FEATURE_HE (1ULL<<8) |
95 | | -#define FEATURE_PC (1ULL<<9) |
| 87 | +#define FEATURE_PREFETCH BIT_ULL(0) |
| 88 | +#define FEATURE_PPR BIT_ULL(1) |
| 89 | +#define FEATURE_X2APIC BIT_ULL(2) |
| 90 | +#define FEATURE_NX BIT_ULL(3) |
| 91 | +#define FEATURE_GT BIT_ULL(4) |
| 92 | +#define FEATURE_IA BIT_ULL(6) |
| 93 | +#define FEATURE_GA BIT_ULL(7) |
| 94 | +#define FEATURE_HE BIT_ULL(8) |
| 95 | +#define FEATURE_PC BIT_ULL(9) |
96 | 96 | #define FEATURE_GATS_SHIFT (12) |
97 | 97 | #define FEATURE_GATS_MASK (3ULL) |
98 | | -#define FEATURE_GAM_VAPIC (1ULL<<21) |
99 | | -#define FEATURE_GIOSUP (1ULL<<48) |
100 | | -#define FEATURE_EPHSUP (1ULL<<50) |
101 | | -#define FEATURE_SNP (1ULL<<63) |
| 98 | +#define FEATURE_GAM_VAPIC BIT_ULL(21) |
| 99 | +#define FEATURE_GIOSUP BIT_ULL(48) |
| 100 | +#define FEATURE_EPHSUP BIT_ULL(50) |
| 101 | +#define FEATURE_SNP BIT_ULL(63) |
102 | 102 |
|
103 | 103 | #define FEATURE_PASID_SHIFT 32 |
104 | 104 | #define FEATURE_PASID_MASK (0x1fULL << FEATURE_PASID_SHIFT) |
|
120 | 120 | #define PASID_MASK 0x0000ffff |
121 | 121 |
|
122 | 122 | /* MMIO status bits */ |
123 | | -#define MMIO_STATUS_EVT_OVERFLOW_INT_MASK (1 << 0) |
124 | | -#define MMIO_STATUS_EVT_INT_MASK (1 << 1) |
125 | | -#define MMIO_STATUS_COM_WAIT_INT_MASK (1 << 2) |
126 | | -#define MMIO_STATUS_PPR_INT_MASK (1 << 6) |
127 | | -#define MMIO_STATUS_GALOG_RUN_MASK (1 << 8) |
128 | | -#define MMIO_STATUS_GALOG_OVERFLOW_MASK (1 << 9) |
129 | | -#define MMIO_STATUS_GALOG_INT_MASK (1 << 10) |
| 123 | +#define MMIO_STATUS_EVT_OVERFLOW_INT_MASK BIT(0) |
| 124 | +#define MMIO_STATUS_EVT_INT_MASK BIT(1) |
| 125 | +#define MMIO_STATUS_COM_WAIT_INT_MASK BIT(2) |
| 126 | +#define MMIO_STATUS_PPR_INT_MASK BIT(6) |
| 127 | +#define MMIO_STATUS_GALOG_RUN_MASK BIT(8) |
| 128 | +#define MMIO_STATUS_GALOG_OVERFLOW_MASK BIT(9) |
| 129 | +#define MMIO_STATUS_GALOG_INT_MASK BIT(10) |
130 | 130 |
|
131 | 131 | /* event logging constants */ |
132 | 132 | #define EVENT_ENTRY_SIZE 0x10 |
|
174 | 174 | #define CONTROL_GAINT_EN 29 |
175 | 175 | #define CONTROL_XT_EN 50 |
176 | 176 | #define CONTROL_INTCAPXT_EN 51 |
| 177 | +#define CONTROL_IRTCACHEDIS 59 |
177 | 178 | #define CONTROL_SNPAVIC_EN 61 |
178 | 179 |
|
179 | 180 | #define CTRL_INV_TO_MASK (7 << CONTROL_INV_TIMEOUT) |
|
283 | 284 | #define AMD_IOMMU_PGSIZES_V2 (PAGE_SIZE | (1ULL << 21) | (1ULL << 30)) |
284 | 285 |
|
285 | 286 | /* Bit value definition for dte irq remapping fields*/ |
286 | | -#define DTE_IRQ_PHYS_ADDR_MASK (((1ULL << 45)-1) << 6) |
| 287 | +#define DTE_IRQ_PHYS_ADDR_MASK GENMASK_ULL(51, 6) |
287 | 288 | #define DTE_IRQ_REMAP_INTCTL_MASK (0x3ULL << 60) |
288 | 289 | #define DTE_IRQ_REMAP_INTCTL (2ULL << 60) |
289 | 290 | #define DTE_IRQ_REMAP_ENABLE 1ULL |
|
369 | 370 | /* |
370 | 371 | * Bit value definition for I/O PTE fields |
371 | 372 | */ |
372 | | -#define IOMMU_PTE_PR (1ULL << 0) |
373 | | -#define IOMMU_PTE_U (1ULL << 59) |
374 | | -#define IOMMU_PTE_FC (1ULL << 60) |
375 | | -#define IOMMU_PTE_IR (1ULL << 61) |
376 | | -#define IOMMU_PTE_IW (1ULL << 62) |
| 373 | +#define IOMMU_PTE_PR BIT_ULL(0) |
| 374 | +#define IOMMU_PTE_U BIT_ULL(59) |
| 375 | +#define IOMMU_PTE_FC BIT_ULL(60) |
| 376 | +#define IOMMU_PTE_IR BIT_ULL(61) |
| 377 | +#define IOMMU_PTE_IW BIT_ULL(62) |
377 | 378 |
|
378 | 379 | /* |
379 | 380 | * Bit value definition for DTE fields |
380 | 381 | */ |
381 | | -#define DTE_FLAG_V (1ULL << 0) |
382 | | -#define DTE_FLAG_TV (1ULL << 1) |
383 | | -#define DTE_FLAG_IR (1ULL << 61) |
384 | | -#define DTE_FLAG_IW (1ULL << 62) |
385 | | - |
386 | | -#define DTE_FLAG_IOTLB (1ULL << 32) |
387 | | -#define DTE_FLAG_GIOV (1ULL << 54) |
388 | | -#define DTE_FLAG_GV (1ULL << 55) |
| 382 | +#define DTE_FLAG_V BIT_ULL(0) |
| 383 | +#define DTE_FLAG_TV BIT_ULL(1) |
| 384 | +#define DTE_FLAG_IR BIT_ULL(61) |
| 385 | +#define DTE_FLAG_IW BIT_ULL(62) |
| 386 | + |
| 387 | +#define DTE_FLAG_IOTLB BIT_ULL(32) |
| 388 | +#define DTE_FLAG_GIOV BIT_ULL(54) |
| 389 | +#define DTE_FLAG_GV BIT_ULL(55) |
389 | 390 | #define DTE_FLAG_MASK (0x3ffULL << 32) |
390 | 391 | #define DTE_GLX_SHIFT (56) |
391 | 392 | #define DTE_GLX_MASK (3) |
|
439 | 440 | #define MAX_DOMAIN_ID 65536 |
440 | 441 |
|
441 | 442 | /* Protection domain flags */ |
442 | | -#define PD_DMA_OPS_MASK (1UL << 0) /* domain used for dma_ops */ |
443 | | -#define PD_DEFAULT_MASK (1UL << 1) /* domain is a default dma_ops |
| 443 | +#define PD_DMA_OPS_MASK BIT(0) /* domain used for dma_ops */ |
| 444 | +#define PD_DEFAULT_MASK BIT(1) /* domain is a default dma_ops |
444 | 445 | domain for an IOMMU */ |
445 | | -#define PD_PASSTHROUGH_MASK (1UL << 2) /* domain has no page |
| 446 | +#define PD_PASSTHROUGH_MASK BIT(2) /* domain has no page |
446 | 447 | translation */ |
447 | | -#define PD_IOMMUV2_MASK (1UL << 3) /* domain has gcr3 table */ |
448 | | -#define PD_GIOV_MASK (1UL << 4) /* domain enable GIOV support */ |
| 448 | +#define PD_IOMMUV2_MASK BIT(3) /* domain has gcr3 table */ |
| 449 | +#define PD_GIOV_MASK BIT(4) /* domain enable GIOV support */ |
449 | 450 |
|
450 | 451 | extern bool amd_iommu_dump; |
451 | 452 | #define DUMP_printk(format, arg...) \ |
@@ -716,6 +717,9 @@ struct amd_iommu { |
716 | 717 | /* if one, we need to send a completion wait command */ |
717 | 718 | bool need_sync; |
718 | 719 |
|
| 720 | + /* true if disable irte caching */ |
| 721 | + bool irtcachedis_enabled; |
| 722 | + |
719 | 723 | /* Handle for IOMMU core code */ |
720 | 724 | struct iommu_device iommu; |
721 | 725 |
|
@@ -748,7 +752,7 @@ struct amd_iommu { |
748 | 752 |
|
749 | 753 | u32 flags; |
750 | 754 | volatile u64 *cmd_sem; |
751 | | - u64 cmd_sem_val; |
| 755 | + atomic64_t cmd_sem_val; |
752 | 756 |
|
753 | 757 | #ifdef CONFIG_AMD_IOMMU_DEBUGFS |
754 | 758 | /* DebugFS Info */ |
@@ -882,7 +886,7 @@ extern int amd_iommu_max_glx_val; |
882 | 886 | * This function flushes all internal caches of |
883 | 887 | * the IOMMU used by this driver. |
884 | 888 | */ |
885 | | -extern void iommu_flush_all_caches(struct amd_iommu *iommu); |
| 889 | +void iommu_flush_all_caches(struct amd_iommu *iommu); |
886 | 890 |
|
887 | 891 | static inline int get_ioapic_devid(int id) |
888 | 892 | { |
@@ -1006,7 +1010,6 @@ struct amd_ir_data { |
1006 | 1010 | struct irq_2_irte irq_2_irte; |
1007 | 1011 | struct msi_msg msi_entry; |
1008 | 1012 | void *entry; /* Pointer to union irte or struct irte_ga */ |
1009 | | - void *ref; /* Pointer to the actual irte */ |
1010 | 1013 |
|
1011 | 1014 | /** |
1012 | 1015 | * Store information for activate/de-activate |
|
0 commit comments