|
@@ -76,11 +76,13 @@ static struct msi_domain_info dw_pcie_msi_domain_info = {
|
|
|
/* MSI int handler */
|
|
|
irqreturn_t dw_handle_msi_irq(struct pcie_port *pp)
|
|
|
{
|
|
|
- u32 val;
|
|
|
int i, pos, irq;
|
|
|
+ u32 val, num_ctrls;
|
|
|
irqreturn_t ret = IRQ_NONE;
|
|
|
|
|
|
- for (i = 0; i < MAX_MSI_CTRLS; i++) {
|
|
|
+ num_ctrls = pp->num_vectors / MAX_MSI_IRQS_PER_CTRL;
|
|
|
+
|
|
|
+ for (i = 0; i < num_ctrls; i++) {
|
|
|
dw_pcie_rd_own_conf(pp, PCIE_MSI_INTR0_STATUS + i * 12, 4,
|
|
|
&val);
|
|
|
if (!val)
|
|
@@ -639,13 +641,15 @@ static u8 dw_pcie_iatu_unroll_enabled(struct dw_pcie *pci)
|
|
|
|
|
|
void dw_pcie_setup_rc(struct pcie_port *pp)
|
|
|
{
|
|
|
- u32 val, ctrl;
|
|
|
+ u32 val, ctrl, num_ctrls;
|
|
|
struct dw_pcie *pci = to_dw_pcie_from_pp(pp);
|
|
|
|
|
|
dw_pcie_setup(pci);
|
|
|
|
|
|
+ num_ctrls = pp->num_vectors / MAX_MSI_IRQS_PER_CTRL;
|
|
|
+
|
|
|
/* Initialize IRQ Status array */
|
|
|
- for (ctrl = 0; ctrl < MAX_MSI_CTRLS; ctrl++)
|
|
|
+ for (ctrl = 0; ctrl < num_ctrls; ctrl++)
|
|
|
dw_pcie_rd_own_conf(pp, PCIE_MSI_INTR0_ENABLE + (ctrl * 12), 4,
|
|
|
&pp->irq_status[ctrl]);
|
|
|
/* setup RC BARs */
|