Am Donnerstag, den 13.12.2018, 10:43 +0000 schrieb Richard Zhu: > MSI_EN of iMX PCIe RC would be asserted when > PCIEPORTBUS driver is selected. > Thus, the MSI works fine on iMX PCIe before. > Assert it unconditionally when MSI is enabled. > Otherwise, the MSI wouldn't be triggered although > the EP is present and the MSIs are assigned. > > Signed-off-by: Richard Zhu <hongxing.zhu@xxxxxxx> Reviewed-by: Lucas Stach <l.stach@xxxxxxxxxxxxxx> > --- > Changes v1 -> v2: > * Assert the MSI_EN unconditionally when MSI is supported. > Changes v2 -> v3: > * Remove the IS_ENABLED(CONFIG_PCI_MSI) since the driver > depends on PCI_MSI_IRQ_DOMAIN > * Extended with a check for pci_msi_enabled() to see > if the user explicitly want legacy IRQs > --- > drivers/pci/controller/dwc/pci-imx6.c | 8 ++++++++ > 1 file changed, 8 insertions(+) > > diff --git a/drivers/pci/controller/dwc/pci-imx6.c b/drivers/pci/controller/dwc/pci-imx6.c > index 26087b3..1c59a93 100644 > --- a/drivers/pci/controller/dwc/pci-imx6.c > +++ b/drivers/pci/controller/dwc/pci-imx6.c > @@ -74,6 +74,7 @@ struct imx6_pcie { > > #define PHY_PLL_LOCK_WAIT_USLEEP_MAX 200 > > /* PCIe Root Complex registers (memory-mapped) */ > > +#define PCI_MSI_CAP 0x50 > > #define PCIE_RC_LCR 0x7c > > #define PCIE_RC_LCR_MAX_LINK_SPEEDS_GEN1 0x1 > > #define PCIE_RC_LCR_MAX_LINK_SPEEDS_GEN2 0x2 > @@ -926,6 +927,7 @@ static int imx6_pcie_probe(struct platform_device *pdev) > > struct resource *dbi_base; > > struct device_node *node = dev->of_node; > > int ret; > > + u16 val; > > > imx6_pcie = devm_kzalloc(dev, sizeof(*imx6_pcie), GFP_KERNEL); > > if (!imx6_pcie) > @@ -1071,6 +1073,12 @@ static int imx6_pcie_probe(struct platform_device *pdev) > > if (ret < 0) > > return ret; > > > + if (pci_msi_enabled()) { > > + val = dw_pcie_readw_dbi(pci, PCI_MSI_CAP + PCI_MSI_FLAGS); > > + val |= PCI_MSI_FLAGS_ENABLE; > > + dw_pcie_writew_dbi(pci, PCI_MSI_CAP + PCI_MSI_FLAGS, val); > > + } > + > > return 0; > } >