diff options
| author | Warner Losh <imp@FreeBSD.org> | 2019-07-08 19:38:49 +0000 |
|---|---|---|
| committer | Warner Losh <imp@FreeBSD.org> | 2019-07-08 19:38:49 +0000 |
| commit | e64f3dee49fac728bc39e2e39e5fbe9e07e4efcb (patch) | |
| tree | 5c4762d6038c52fc244d729db3ea645a2a51e9f8 /sys/dev/pci | |
| parent | 74d565fd961435d1d8e87f3e6a8b80d7f8960870 (diff) | |
Notes
Diffstat (limited to 'sys/dev/pci')
| -rw-r--r-- | sys/dev/pci/pci.c | 22 |
1 files changed, 14 insertions, 8 deletions
diff --git a/sys/dev/pci/pci.c b/sys/dev/pci/pci.c index 6b54b3db2d10b..0297808e4ac92 100644 --- a/sys/dev/pci/pci.c +++ b/sys/dev/pci/pci.c @@ -1671,10 +1671,13 @@ pci_mask_msix(device_t dev, u_int index) KASSERT(msix->msix_msgnum > index, ("bogus index")); offset = msix->msix_table_offset + index * 16 + 12; val = bus_read_4(msix->msix_table_res, offset); - if (!(val & PCIM_MSIX_VCTRL_MASK)) { - val |= PCIM_MSIX_VCTRL_MASK; - bus_write_4(msix->msix_table_res, offset, val); - } + val |= PCIM_MSIX_VCTRL_MASK; + + /* + * Some devices (e.g. Samsung PM961) do not support reads of this + * register, so always write the new value. + */ + bus_write_4(msix->msix_table_res, offset, val); } void @@ -1687,10 +1690,13 @@ pci_unmask_msix(device_t dev, u_int index) KASSERT(msix->msix_table_len > index, ("bogus index")); offset = msix->msix_table_offset + index * 16 + 12; val = bus_read_4(msix->msix_table_res, offset); - if (val & PCIM_MSIX_VCTRL_MASK) { - val &= ~PCIM_MSIX_VCTRL_MASK; - bus_write_4(msix->msix_table_res, offset, val); - } + val &= ~PCIM_MSIX_VCTRL_MASK; + + /* + * Some devices (e.g. Samsung PM961) do not support reads of this + * register, so always write the new value. + */ + bus_write_4(msix->msix_table_res, offset, val); } int |
