|
@@ -226,6 +226,9 @@ static void pcie_pme_work_fn(struct work_struct *work)
|
|
break;
|
|
break;
|
|
|
|
|
|
pcie_capability_read_dword(port, PCI_EXP_RTSTA, &rtsta);
|
|
pcie_capability_read_dword(port, PCI_EXP_RTSTA, &rtsta);
|
|
|
|
+ if (rtsta == (u32) ~0)
|
|
|
|
+ break;
|
|
|
|
+
|
|
if (rtsta & PCI_EXP_RTSTA_PME) {
|
|
if (rtsta & PCI_EXP_RTSTA_PME) {
|
|
/*
|
|
/*
|
|
* Clear PME status of the port. If there are other
|
|
* Clear PME status of the port. If there are other
|
|
@@ -273,7 +276,7 @@ static irqreturn_t pcie_pme_irq(int irq, void *context)
|
|
spin_lock_irqsave(&data->lock, flags);
|
|
spin_lock_irqsave(&data->lock, flags);
|
|
pcie_capability_read_dword(port, PCI_EXP_RTSTA, &rtsta);
|
|
pcie_capability_read_dword(port, PCI_EXP_RTSTA, &rtsta);
|
|
|
|
|
|
- if (!(rtsta & PCI_EXP_RTSTA_PME)) {
|
|
|
|
|
|
+ if (rtsta == (u32) ~0 || !(rtsta & PCI_EXP_RTSTA_PME)) {
|
|
spin_unlock_irqrestore(&data->lock, flags);
|
|
spin_unlock_irqrestore(&data->lock, flags);
|
|
return IRQ_NONE;
|
|
return IRQ_NONE;
|
|
}
|
|
}
|