aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/pci/controller/dwc/pci-imx6.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/pci/controller/dwc/pci-imx6.c')
-rw-r--r--drivers/pci/controller/dwc/pci-imx6.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/drivers/pci/controller/dwc/pci-imx6.c b/drivers/pci/controller/dwc/pci-imx6.c
index 2cbef2d7c207..bd02760257e5 100644
--- a/drivers/pci/controller/dwc/pci-imx6.c
+++ b/drivers/pci/controller/dwc/pci-imx6.c
@@ -67,6 +67,7 @@ struct imx6_pcie {
67#define PHY_PLL_LOCK_WAIT_USLEEP_MAX 200 67#define PHY_PLL_LOCK_WAIT_USLEEP_MAX 200
68 68
69/* PCIe Root Complex registers (memory-mapped) */ 69/* PCIe Root Complex registers (memory-mapped) */
70#define PCIE_RC_IMX6_MSI_CAP 0x50
70#define PCIE_RC_LCR 0x7c 71#define PCIE_RC_LCR 0x7c
71#define PCIE_RC_LCR_MAX_LINK_SPEEDS_GEN1 0x1 72#define PCIE_RC_LCR_MAX_LINK_SPEEDS_GEN1 0x1
72#define PCIE_RC_LCR_MAX_LINK_SPEEDS_GEN2 0x2 73#define PCIE_RC_LCR_MAX_LINK_SPEEDS_GEN2 0x2
@@ -848,6 +849,7 @@ static int imx6_pcie_probe(struct platform_device *pdev)
848 struct resource *dbi_base; 849 struct resource *dbi_base;
849 struct device_node *node = dev->of_node; 850 struct device_node *node = dev->of_node;
850 int ret; 851 int ret;
852 u16 val;
851 853
852 imx6_pcie = devm_kzalloc(dev, sizeof(*imx6_pcie), GFP_KERNEL); 854 imx6_pcie = devm_kzalloc(dev, sizeof(*imx6_pcie), GFP_KERNEL);
853 if (!imx6_pcie) 855 if (!imx6_pcie)
@@ -989,6 +991,14 @@ static int imx6_pcie_probe(struct platform_device *pdev)
989 if (ret < 0) 991 if (ret < 0)
990 return ret; 992 return ret;
991 993
994 if (pci_msi_enabled()) {
995 val = dw_pcie_readw_dbi(pci, PCIE_RC_IMX6_MSI_CAP +
996 PCI_MSI_FLAGS);
997 val |= PCI_MSI_FLAGS_ENABLE;
998 dw_pcie_writew_dbi(pci, PCIE_RC_IMX6_MSI_CAP + PCI_MSI_FLAGS,
999 val);
1000 }
1001
992 return 0; 1002 return 0;
993} 1003}
994 1004