amd-iommu: disable cmd buffer and evt logging before reprogramming iommu
The IOMMU spec states that IOMMU behavior may be undefined when the IOMMU registers are rewritten while command or event buffer is enabled. Disable them in IOMMU disable path. Signed-off-by: Chris Wright <chrisw@sous-sol.org> Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
This commit is contained in:
parent
42a49f965a
commit
a8c485bb68
1 changed files with 9 additions and 0 deletions
|
@ -260,6 +260,14 @@ static void iommu_enable(struct amd_iommu *iommu)
|
|||
|
||||
static void iommu_disable(struct amd_iommu *iommu)
|
||||
{
|
||||
/* Disable command buffer */
|
||||
iommu_feature_disable(iommu, CONTROL_CMDBUF_EN);
|
||||
|
||||
/* Disable event logging and event interrupts */
|
||||
iommu_feature_disable(iommu, CONTROL_EVT_INT_EN);
|
||||
iommu_feature_disable(iommu, CONTROL_EVT_LOG_EN);
|
||||
|
||||
/* Disable IOMMU hardware itself */
|
||||
iommu_feature_disable(iommu, CONTROL_IOMMU_EN);
|
||||
}
|
||||
|
||||
|
@ -1042,6 +1050,7 @@ static void enable_iommus(void)
|
|||
struct amd_iommu *iommu;
|
||||
|
||||
for_each_iommu(iommu) {
|
||||
iommu_disable(iommu);
|
||||
iommu_set_device_table(iommu);
|
||||
iommu_enable_command_buffer(iommu);
|
||||
iommu_enable_event_buffer(iommu);
|
||||
|
|
Loading…
Add table
Reference in a new issue