Use the correct location of the SRIOV capability when enabling ARI.
While here, check if ARI was enabled by re-reading the config register after writing it and return an error if the write fails. Reviewed by: rstone, vangyzen
This commit is contained in:
parent
b8721c1643
commit
b83c5d07c1
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=299000
@ -442,6 +442,7 @@ pci_iov_set_ari(device_t bus)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
free(devlist, M_TEMP);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* If we called this function some device must have the SR-IOV
|
* If we called this function some device must have the SR-IOV
|
||||||
@ -451,10 +452,14 @@ pci_iov_set_ari(device_t bus)
|
|||||||
("Could not find child of %s with SR-IOV capability",
|
("Could not find child of %s with SR-IOV capability",
|
||||||
device_get_nameunit(bus)));
|
device_get_nameunit(bus)));
|
||||||
|
|
||||||
iov_ctl = pci_read_config(lowest, iov_pos + PCIR_SRIOV_CTL, 2);
|
iov_ctl = pci_read_config(lowest, lowest_pos + PCIR_SRIOV_CTL, 2);
|
||||||
iov_ctl |= PCIM_SRIOV_ARI_EN;
|
iov_ctl |= PCIM_SRIOV_ARI_EN;
|
||||||
pci_write_config(lowest, iov_pos + PCIR_SRIOV_CTL, iov_ctl, 2);
|
pci_write_config(lowest, lowest_pos + PCIR_SRIOV_CTL, iov_ctl, 2);
|
||||||
free(devlist, M_TEMP);
|
if ((pci_read_config(lowest, lowest_pos + PCIR_SRIOV_CTL, 2) &
|
||||||
|
PCIM_SRIOV_ARI_EN) == 0) {
|
||||||
|
device_printf(lowest, "failed to enable ARI\n");
|
||||||
|
return (ENXIO);
|
||||||
|
}
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user