Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 09759042 authored by Joerg Roedel's avatar Joerg Roedel
Browse files

amd-iommu: disable IOMMU hardware on shutdown



When the IOMMU stays enabled the BIOS may not be able to finish the
machine shutdown properly. So disable the hardware on shutdown.

Signed-off-by: default avatarJoerg Roedel <joerg.roedel@amd.com>
parent 92db1e6a
Loading
Loading
Loading
Loading
+2 −0
Original line number Original line Diff line number Diff line
@@ -29,9 +29,11 @@ extern void amd_iommu_detect(void);
extern irqreturn_t amd_iommu_int_handler(int irq, void *data);
extern irqreturn_t amd_iommu_int_handler(int irq, void *data);
extern void amd_iommu_flush_all_domains(void);
extern void amd_iommu_flush_all_domains(void);
extern void amd_iommu_flush_all_devices(void);
extern void amd_iommu_flush_all_devices(void);
extern void amd_iommu_shutdown(void);
#else
#else
static inline int amd_iommu_init(void) { return -ENODEV; }
static inline int amd_iommu_init(void) { return -ENODEV; }
static inline void amd_iommu_detect(void) { }
static inline void amd_iommu_detect(void) { }
static inline void amd_iommu_shutdown(void) { }
#endif
#endif


#endif /* _ASM_X86_AMD_IOMMU_H */
#endif /* _ASM_X86_AMD_IOMMU_H */
+5 −0
Original line number Original line Diff line number Diff line
@@ -1273,6 +1273,11 @@ int __init amd_iommu_init(void)
	goto out;
	goto out;
}
}


void amd_iommu_shutdown(void)
{
	disable_iommus();
}

/****************************************************************************
/****************************************************************************
 *
 *
 * Early detect code. This code runs at IOMMU detection time in the DMA
 * Early detect code. This code runs at IOMMU detection time in the DMA
+2 −0
Original line number Original line Diff line number Diff line
@@ -290,6 +290,8 @@ static int __init pci_iommu_init(void)
void pci_iommu_shutdown(void)
void pci_iommu_shutdown(void)
{
{
	gart_iommu_shutdown();
	gart_iommu_shutdown();

	amd_iommu_shutdown();
}
}
/* Must execute after PCI subsystem */
/* Must execute after PCI subsystem */
fs_initcall(pci_iommu_init);
fs_initcall(pci_iommu_init);