|
|
@@ -425,6 +425,11 @@ static int cdns_pcie_ep_send_msi_irq(struct cdns_pcie_ep *ep, u8 fn, u8 vfn,
|
|
|
if (!interrupt_num || interrupt_num > msi_count)
|
|
|
return -EINVAL;
|
|
|
|
|
|
+ /* Check whether MSI is masked */
|
|
|
+ data = cdns_pcie_ep_fn_readw(pcie, fn, cap + PCI_MSI_MASK_64);
|
|
|
+ if (data & (1 << (interrupt_num - 1)))
|
|
|
+ return -EINVAL;
|
|
|
+
|
|
|
/* Compute the data value to be written. */
|
|
|
data_mask = msi_count - 1;
|
|
|
data = cdns_pcie_ep_fn_readw(pcie, fn, cap + PCI_MSI_DATA_64);
|