diff options
Diffstat (limited to 'drivers/pci/controller/dwc')
-rw-r--r-- | drivers/pci/controller/dwc/pcie-designware-host.c | 12 | ||||
-rw-r--r-- | drivers/pci/controller/dwc/pcie-designware.h | 2 |
2 files changed, 7 insertions, 7 deletions
diff --git a/drivers/pci/controller/dwc/pcie-designware-host.c b/drivers/pci/controller/dwc/pcie-designware-host.c index 768e16aad68e..c550c4a7ef89 100644 --- a/drivers/pci/controller/dwc/pcie-designware-host.c +++ b/drivers/pci/controller/dwc/pcie-designware-host.c | |||
@@ -164,9 +164,9 @@ static void dw_pci_bottom_mask(struct irq_data *d) | |||
164 | res = ctrl * MSI_REG_CTRL_BLOCK_SIZE; | 164 | res = ctrl * MSI_REG_CTRL_BLOCK_SIZE; |
165 | bit = d->hwirq % MAX_MSI_IRQS_PER_CTRL; | 165 | bit = d->hwirq % MAX_MSI_IRQS_PER_CTRL; |
166 | 166 | ||
167 | pp->irq_status[ctrl] &= ~(1 << bit); | 167 | pp->irq_mask[ctrl] |= (1 << bit); |
168 | dw_pcie_wr_own_conf(pp, PCIE_MSI_INTR0_MASK + res, 4, | 168 | dw_pcie_wr_own_conf(pp, PCIE_MSI_INTR0_MASK + res, 4, |
169 | ~pp->irq_status[ctrl]); | 169 | pp->irq_mask[ctrl]); |
170 | } | 170 | } |
171 | 171 | ||
172 | raw_spin_unlock_irqrestore(&pp->lock, flags); | 172 | raw_spin_unlock_irqrestore(&pp->lock, flags); |
@@ -187,9 +187,9 @@ static void dw_pci_bottom_unmask(struct irq_data *d) | |||
187 | res = ctrl * MSI_REG_CTRL_BLOCK_SIZE; | 187 | res = ctrl * MSI_REG_CTRL_BLOCK_SIZE; |
188 | bit = d->hwirq % MAX_MSI_IRQS_PER_CTRL; | 188 | bit = d->hwirq % MAX_MSI_IRQS_PER_CTRL; |
189 | 189 | ||
190 | pp->irq_status[ctrl] |= 1 << bit; | 190 | pp->irq_mask[ctrl] &= ~(1 << bit); |
191 | dw_pcie_wr_own_conf(pp, PCIE_MSI_INTR0_MASK + res, 4, | 191 | dw_pcie_wr_own_conf(pp, PCIE_MSI_INTR0_MASK + res, 4, |
192 | ~pp->irq_status[ctrl]); | 192 | pp->irq_mask[ctrl]); |
193 | } | 193 | } |
194 | 194 | ||
195 | raw_spin_unlock_irqrestore(&pp->lock, flags); | 195 | raw_spin_unlock_irqrestore(&pp->lock, flags); |
@@ -665,13 +665,13 @@ void dw_pcie_setup_rc(struct pcie_port *pp) | |||
665 | 665 | ||
666 | /* Initialize IRQ Status array */ | 666 | /* Initialize IRQ Status array */ |
667 | for (ctrl = 0; ctrl < num_ctrls; ctrl++) { | 667 | for (ctrl = 0; ctrl < num_ctrls; ctrl++) { |
668 | pp->irq_mask[ctrl] = ~0; | ||
668 | dw_pcie_wr_own_conf(pp, PCIE_MSI_INTR0_MASK + | 669 | dw_pcie_wr_own_conf(pp, PCIE_MSI_INTR0_MASK + |
669 | (ctrl * MSI_REG_CTRL_BLOCK_SIZE), | 670 | (ctrl * MSI_REG_CTRL_BLOCK_SIZE), |
670 | 4, ~0); | 671 | 4, pp->irq_mask[ctrl]); |
671 | dw_pcie_wr_own_conf(pp, PCIE_MSI_INTR0_ENABLE + | 672 | dw_pcie_wr_own_conf(pp, PCIE_MSI_INTR0_ENABLE + |
672 | (ctrl * MSI_REG_CTRL_BLOCK_SIZE), | 673 | (ctrl * MSI_REG_CTRL_BLOCK_SIZE), |
673 | 4, ~0); | 674 | 4, ~0); |
674 | pp->irq_status[ctrl] = 0; | ||
675 | } | 675 | } |
676 | 676 | ||
677 | /* Setup RC BARs */ | 677 | /* Setup RC BARs */ |
diff --git a/drivers/pci/controller/dwc/pcie-designware.h b/drivers/pci/controller/dwc/pcie-designware.h index 9943d8c68335..279000255ad1 100644 --- a/drivers/pci/controller/dwc/pcie-designware.h +++ b/drivers/pci/controller/dwc/pcie-designware.h | |||
@@ -177,7 +177,7 @@ struct pcie_port { | |||
177 | struct irq_domain *msi_domain; | 177 | struct irq_domain *msi_domain; |
178 | dma_addr_t msi_data; | 178 | dma_addr_t msi_data; |
179 | u32 num_vectors; | 179 | u32 num_vectors; |
180 | u32 irq_status[MAX_MSI_CTRLS]; | 180 | u32 irq_mask[MAX_MSI_CTRLS]; |
181 | raw_spinlock_t lock; | 181 | raw_spinlock_t lock; |
182 | DECLARE_BITMAP(msi_irq_in_use, MAX_MSI_IRQS); | 182 | DECLARE_BITMAP(msi_irq_in_use, MAX_MSI_IRQS); |
183 | }; | 183 | }; |