AMD-vi: Mixed format IVHD block should replace fixed format IVHD block
This fixes double IVHD_SETUP_INTR calls on the same IOMMU device.
Sponsored by: The FreeBSD Foundation
MFC with: 74ada297e8
Reported by: Oleg Ginzburg <olevole@olevole.ru>
Reviewed by: grehan
Approved by: philip (mentor)
Differential Revision: https://reviews.freebsd.org/D29521
This commit is contained in:
parent
5a18515b31
commit
03efa462b2
@ -312,14 +312,22 @@ ivhd_dev_parse(ACPI_IVRS_HARDWARE1 *ivhd, struct amdvi_softc *softc)
|
|||||||
static bool
|
static bool
|
||||||
ivhd_is_newer(ACPI_IVRS_HEADER *old, ACPI_IVRS_HEADER *new)
|
ivhd_is_newer(ACPI_IVRS_HEADER *old, ACPI_IVRS_HEADER *new)
|
||||||
{
|
{
|
||||||
/*
|
if (old->DeviceId == new->DeviceId) {
|
||||||
* Newer IVRS header type take precedence.
|
/*
|
||||||
*/
|
* Newer IVRS header type take precedence.
|
||||||
if ((old->DeviceId == new->DeviceId) &&
|
*/
|
||||||
(old->Type == IVRS_TYPE_HARDWARE_LEGACY) &&
|
if (old->Type == IVRS_TYPE_HARDWARE_LEGACY &&
|
||||||
((new->Type == IVRS_TYPE_HARDWARE_EFR) ||
|
((new->Type == IVRS_TYPE_HARDWARE_EFR) ||
|
||||||
(new->Type == IVRS_TYPE_HARDWARE_MIXED))) {
|
(new->Type == IVRS_TYPE_HARDWARE_MIXED)))
|
||||||
return (true);
|
return (true);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Mixed format IVHD header type take precedence
|
||||||
|
* over fixed format IVHD header types.
|
||||||
|
*/
|
||||||
|
if (old->Type == IVRS_TYPE_HARDWARE_EFR &&
|
||||||
|
new->Type == IVRS_TYPE_HARDWARE_MIXED)
|
||||||
|
return (true);
|
||||||
}
|
}
|
||||||
|
|
||||||
return (false);
|
return (false);
|
||||||
|
Loading…
Reference in New Issue
Block a user